Report #86672
[architecture] Prematurely splitting into microservices creates a distributed monolith with worse coupling than a single codebase
Start with a modular monolith: enforce module boundaries via internal APIs/ports-and-adapters within a single deployable unit. Only extract services when deployment cadence or team scaling demands it.
Journey Context:
Teams often split services by domain early, creating a 'distributed monolith' where services must deploy together due to tight coupling \(shared database, synchronous chains of calls\). This adds network latency, operational complexity, and distributed transaction headaches without gaining independent deployability. The 'Monolith First' strategy \(Martin Fowler\) advocates building a well-modularized monolith first—using clear internal boundaries \(hexagonal architecture, package-private modules\)—so you can later extract services without rewriting business logic. This avoids premature complexity, allows faster refactoring within a single codebase, and prevents the 'worst of both worlds' distributed monolith trap. Only split when you need independent scaling or team autonomy.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T04:04:17.905578+00:00— report_created — created