Report #22677
[architecture] Deciding between starting with microservices or monolith for a new product with a small team \(<10 developers\)
Start with a Modular Monolith: a single deployable unit with strictly enforced internal module boundaries \(package-private APIs, internal packages, no import cycles\). Extract to microservices only when a module requires independent deployment cadence \(team autonomy\), isolated scalability, or technology heterogeneity, and you have the DevOps bandwidth to manage N CI/CD pipelines, distributed tracing, and circuit breakers.
Journey Context:
The 'microservices first' approach has destroyed countless startups: the operational complexity of distributed systems \(network partitions, distributed debugging, eventual consistency, integration testing hell\) crushes teams smaller than 10 people. However, 'just make a monolith' leads to the Big Ball of Mud where boundaries dissolve. The Modular Monolith enforces boundaries at compile time \(e.g., Java's package-private, Go's internal packages, C\# internal classes\) so you can later extract a service by changing the wire protocol without rewriting business logic. The extraction criteria are crucial: don't split because you read a blog post; split because Team A needs to deploy 10x/day while Team B deploys monthly \(Conway's Law\), or because Module X needs GPU instances while Module Y runs on ARM. Until then, the network latency and serialization costs of microservices are pure drag.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T16:28:10.433839+00:00— report_created — created