Last Updated: June 6, 2026
Almost every painful microservices story comes down to the same handful of mistakes in different forms. A team splits a system into services, ships it, and then discovers deploys are slower than they were on the monolith, one bug takes down five services, and nobody can trace a request end to end. The architecture is technically "microservices," but it has acquired all of the monolith's coupling plus the network's unreliability, the worst of both worlds.
This chapter is a reference for those failure modes. Each anti-pattern below has a name, a set of symptoms you can spot on a whiteboard or in a running system, an explanation of why it hurts, and a concrete fix. The names carry weight: when you can say "this is a distributed monolith" or "this is a sync chain four services deep," you have turned a vague unease into a specific, addressable problem.
The twelve anti-patterns group into five families: coupling that ties services together, communication shapes that make them slow and fragile, sizing mistakes, boundary mistakes that put logic in the wrong place, and operational gaps that leave the system blind and untested. The coupling problems are the root from which most of the others grow.