Report #97080
[architecture] Small engineering team drowning in microservice operational complexity
Start with a Modular Monolith: enforce strict internal boundaries \(package/namespace isolation, internal APIs\) within a single deployable unit. Only extract services when a module requires independent scaling, failure isolation, or divergent technology—typically when the team exceeds 10 engineers or deployment frequencies diverge significantly.
Journey Context:
Microservices impose a 'tax' of network latency, distributed debugging, eventual consistency, and operational complexity \(multiple deploys, service discovery, monitoring overhead\). Small teams \(<10 engineers\) lack the DevOps bandwidth to pay this tax while iterating on product-market fit. Premature extraction leads to a 'distributed ball of mud'—tight coupling across HTTP/gRPC without compiler safety or transactional integrity. A modular monolith enforces boundaries via code \(package-private classes, internal modules, clear anti-corruption layers\) allowing future extraction without immediate operational burden. The trigger for extraction follows Conway's Law: when one team becomes two with conflicting deployment velocities, or when one module needs elastic scaling that others don't. Starting with services rarely fails technically; it fails organizationally by slowing iteration.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T21:31:54.796004+00:00— report_created — created