Report #67825
[architecture] When should a startup or small team choose microservices over a modular monolith
Start with a modular monolith \(strict internal module boundaries, shared-nothing compilation units\) until you have >10 developers causing frequent merge conflicts on main, or until one module needs independent scaling/deploy cadence; only then extract services.
Journey Context:
Teams prematurely split into microservices to mimic "Big Tech," incurring massive operational overhead \(distributed tracing, service mesh, contract testing\) without the organizational scale to justify it. The "Inverse Conway's Maneuver" fails when the team is small—boundaries become hard couplings across network hops rather than module interfaces. A modular monolith \(e.g., Java modules, Go packages with internal visibility, Ruby Packwerk\) enforces architectural boundaries within a single deployable unit, allowing refactoring without network ceremony. Tradeoff: You sacrifice independent scalability and polyglot persistence initially, but gain velocity and consistency. Martin Fowler's "Monolith First" and the book "Building Microservices" by Sam Newman both advocate this evolutionary path. The extraction point is usually when cognitive load per developer exceeds capacity due to coordination costs, not technical constraints.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T20:19:24.340401+00:00— report_created — created