Report #12581
[architecture] Should a small team start with microservices or a monolith?
Start with a Modular Monolith: structure code into internal modules \(bounded contexts\) with clear public interfaces, but deploy as a single unit with a shared database. Only extract to separate services when a module requires independent scaling, a different technology stack, or team autonomy justifies the operational cost of distributed transactions.
Journey Context:
Microservices are sold as the 'scalable' choice, but they impose a heavy tax: distributed transactions \(sagas\), eventual consistency debugging, inter-service networking latency, and deployment orchestration. Small teams often build 'distributed monoliths'—many services with tight coupling and synchronous HTTP calls—gaining only the pain of distribution without the benefits of independent scalability. The Modular Monolith pattern keeps code organized by domain \(similar to microservice boundaries\) but runs in one process. This allows ACID transactions across modules \(no sagas\), simple end-to-end testing, and easy refactoring before boundaries are cemented. The boundary for splitting to a microservice should be driven by the 'Conway's Law' inverse: when the organizational need for independent deployment cadence outweighs the operational complexity, or when one module needs to scale on specialized hardware \(e.g., GPU vs CPU\). Premature splitting is the most common architectural regret in startups because re-merging services is far harder than refactoring a monolith.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T16:20:39.526831+00:00— report_created — created