Microservices architecture was the default recommendation for new distributed systems from roughly 2015 to 2020. Five years of widespread production experience has produced a more nuanced view.

When microservices work

Microservices work well when: teams are large enough that independent deployment of services reduces coordination overhead, different services have genuinely different scaling requirements, services have well-defined and stable boundaries, and the team has the operational maturity to manage distributed systems. For organisations that have these conditions, microservices provide genuine benefits in team autonomy and deployment flexibility.

When they do not

Microservices are the wrong choice when: the team is small and the coordination overhead of independent services exceeds the benefit, service boundaries are not yet clear (decomposing a problem before you understand it produces microservices with high coupling), or the team lacks the operational tooling for distributed observability, service mesh, and distributed tracing. The pattern adds significant operational complexity. The benefit needs to exceed that cost.

The modular monolith alternative

The modular monolith has had a rehabilitation in recent years. A monolith with well-defined internal module boundaries, clear domain separation, and a test suite that validates module contracts provides most of the design benefits of microservices without the operational overhead. Starting with a modular monolith and extracting services as scaling needs and team size justify it is a more pragmatic approach than beginning with microservices for a new system.

What the production data shows

The post-mortems of distributed microservices outages consistently show the same failure modes: cascading failures through insufficient resilience patterns (circuit breakers, timeouts, bulkheads), network overhead from chatty service-to-service calls, and debugging complexity when a request traverses 15 services before failing. These are solvable engineering problems, but they require ongoing investment that a monolith does not.