Report #8843
[architecture] Monolith vs microservices for a small team under 10 developers
Start with a modular monolith enforcing strict internal boundaries \(packages/ports-adapters\); extract to services only when deployment cadence or scaling requirements diverge significantly between modules.
Journey Context:
Microservices impose a non-linear distributed systems tax: network latency, partial failures, distributed transactions, and operational load \(monitoring, runbooks, on-call rotations\). Teams under 10 lack the bandwidth to own multiple services properly, leading to 'distributed big ball of mud' where services are tightly coupled via sync HTTP calls. The modular monolith approach keeps code co-located for refactoring ease but enforces module boundaries via internal APIs or event buses. This allows 'evolutionary architecture'—delay the split decision until the last responsible moment. Extract a service only when a module needs to scale independently \(e.g., image processing\) or deploy 10x faster than the rest. Premature extraction is the most expensive mistake.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T06:39:15.509003+00:00— report_created — created