Yet they’re still discussed that way surprisingly often.
The mistake is comparing them at the same level.
DDD asks:
How do we model a complex business domain correctly?
N-Layer asks:
How do we organise technical responsibilities cleanly?
Microservices ask:
How do we split a distributed system into independently deployable business capabilities?
Those are three very different questions.
And in a real system, you may use all three.
For example, an Order microservice could represent an Ordering bounded context, use DDD to protect invariants around orders and payments, and still structure its internals into application, domain, and infrastructure layers.
The architecture lesson is simple:
Don’t start with the pattern. Start with the problem.
If the problem is domain complexity → think DDD.
If the problem is code separation → think layers.
If the problem is independent deployment, scaling, and ownership → think microservices.
Architecture gets much clearer when we stop asking:
“Which architecture is best?”
and start asking:
“Which architectural problem am I solving?”

Top comments (0)