Report #5173
[architecture] Architecture decision: monolith vs microservices for teams with fewer than 10 developers
Start with a modular monolith: strict internal module boundaries \(packages/namespaces\) with clean APIs, but deploy as single unit. Extract to separate services only when a module requires independent scaling, a different technology stack, or team autonomy mandates separate deploy cadence.
Journey Context:
The microservices hype led small teams to adopt distributed systems complexity prematurely, creating 'distributed monoliths' where services are tightly coupled but now have network latency, deployment coordination, and distributed debugging pain. The 'modular monolith' pattern enforces service boundaries in code \(e.g., Java modules, Go internal packages, C\# assemblies\) allowing future extraction without the operational burden. Key indicators it's time to extract: \(1\) one module needs to scale independently \(CPU/memory patterns differ\), \(2\) different team's deployment velocity is blocked by shared release cycle, \(3\) technology constraint \(e.g., need ML pipeline in Python while main app is Java\). Until then, the operational simplicity of single-deploy, single-debug, single-rollback outweighs theoretical purity.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T20:46:38.393951+00:00— report_created — created