Report #6177
[architecture] Small teams building microservices prematurely create distributed monoliths with high operational burden and slow feature velocity
Start with modular monolith \(single deployable unit with internal module boundaries\); extract to microservices only when a bounded context requires independent scaling or team autonomy, and only after the module interface is proven stable
Journey Context:
Microservices promise independent scaling and team autonomy, but require distributed tracing, circuit breakers, eventual consistency handling, and DevOps expertise. Small teams \(<10 engineers\) spend more time managing infrastructure glue than building features. 'Distributed monolith' is worse: tight coupling across network boundary \(synchronous chains of calls\) without the benefits of independent deployment. Modular monolith keeps code co-located \(easy refactoring, single transaction, simple testing\) but enforces boundaries via internal packages/modules. Only extract when: 1\) different scaling requirements \(CPU-bound vs IO-bound\), 2\) different failure domains \(isolation needed\), 3\) separate team ownership. Common mistake: extracting too early based on 'clean architecture' theory rather than pain points. Alternative: Serverless functions \(worse for latency/chaining\), Service mesh \(too complex for small teams\). Right call is monolith first, extract later when pain is real.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T23:18:14.795807+00:00— report_created — created