SA-201a · Module 1
Microservices & Monoliths
4 min read
The microservices debate is the most reliably misframed conversation in architecture. It is presented as monolith versus microservices — as if one is legacy and the other is modern. In reality, both are patterns with trade-offs. A monolith that serves its purpose well is not legacy. A microservices architecture deployed for a team of five is not modern — it is expensive. The question is not which pattern is better. The question is which trade-offs the business can afford.
Do This
- Start with a well-structured monolith and extract services only when the evidence justifies the complexity
- Evaluate microservices against the team size, deployment requirements, and scaling needs — not industry trends
- If you adopt microservices, invest in service mesh, distributed tracing, and contract testing before the first deployment
- Use bounded contexts to identify natural service boundaries — organizational structure often mirrors service structure
Avoid This
- Adopt microservices because "that is what modern companies do" — the pattern is a tool, not a status symbol
- Split a monolith into microservices without clear scaling or deployment justification — you are adding complexity without adding value
- Deploy microservices without observability infrastructure — you will spend 40% of your capacity debugging the architecture instead of building features
- Assume microservices solve performance problems — they solve deployment problems and scaling problems, but they add latency from network calls
I call over-engineered architectures "cathedrals" and under-engineered ones "tents." The goal is always the right building for the climate. A microservices architecture for a startup with three developers is a cathedral — beautiful, expensive, and nobody needs that much space. A monolith for a platform serving ten million users with independent scaling requirements is a tent — it will not survive the storm. Match the architecture to the evidence, not the ambition.