Mark Richards Unpacks the 'Microservice All The Things' Pitfall, Advocates for Strategic Architecture First
In a recent installment of Software Architecture Monday, renowned expert Mark Richards addressed a critical anti-pattern he terms the “Microservice All The Things” pitfall. Richards defines this pitfall as the ill-advised practice of commencing new system development or migrating legacy systems directly to a microservice architecture without discerning actual need. While acknowledging microservices’ inherent “superpowers”—including high ratings for maintainability, testability, deployability, agility, scalability, elasticity, fault tolerance, and evolvability—he emphasized their significant “kryptonite”: extreme cost, complexity, and potential for low responsiveness due to inter-service latency. The core issue, Richards states, is that adopting microservices universally leads to every function, even non-critical administrative tasks or warehouse logistics, becoming a microservice, thereby incurring all the negatives without leveraging any benefits for those specific functionalities. This often results in a complex, expensive system where only a fraction, like customer-facing components, genuinely requires microservice capabilities.
To circumvent this pervasive pitfall, Richards advocates for a strategic intermediate step: beginning with a Service-Based Architecture. This approach involves creating coarse-grained “domain services,” which encapsulate independent domains of functionality and crucially, do not necessitate breaking apart data, allowing for shared databases. By establishing these domain services first, development teams gain the ability to critically assess which specific domains—such as customer-facing features requiring high agility and fault tolerance—would genuinely benefit from further decomposition into microservices. Non-essential domains, like administrative or back-end fulfillment functions, can remain as simpler domain services, avoiding unnecessary complexity, cost, and latency. This hybrid architecture, as presented by Richards, ensures that microservices are deployed purposefully where their superpowers are essential, rather than becoming a default, leading to more robust, cost-effective, and maintainable systems. Richards will further elaborate on these architectural patterns in his forthcoming book, “Software Architecture: Patterns, Anti-patterns, and Pitfalls.”