Report #52331
[architecture] Why microservices destroy productivity for teams under 10 developers
Start with a modular monolith \(single deployable unit with strict internal package/module boundaries\) until you exceed 10 developers or face specific scaling constraints requiring independent deploy cadence, polyglot persistence, or autoscaling of specific components.
Journey Context:
The 'microservices hype' leads small teams to split applications prematurely, incurring massive overhead: distributed tracing, contract testing, network latency debugging, deployment orchestration, and the 'change coordination tax' where a simple feature requires PRs across 5 repos. For a 3-person team, this is death by DevOps. The alternative is the 'Modular Monolith': strict internal boundaries \(ports/adapters, package-by-feature\) so the code looks like services but deploys as one unit. This gives you: single database transactions \(ACID across modules\), easy refactoring \(no network boundaries to cross\), and simple deployment. You extract a service only when: \(1\) a module needs to scale independently \(CPU/memory\); \(2\) a team owns it and needs separate deploy velocity; \(3\) you need tech divergence \(e.g., ML Python service vs Java API\). This is the 'Monolith First' or 'Evolutionary Architecture' pattern. The mistake is thinking modularity requires physical separation; logical separation is cheaper and safer until the seams prove stable.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T18:19:59.422422+00:00— report_created — created