Report #100950
[architecture] Building a monolith for a small team is fine, but extracting services prematurely for 'scalability' adds complexity without benefit
Start with a well-structured monolith \(modular code, clear bounded contexts within the codebase\). Extract into separate services only when you have proven that: \(a\) the monolith's scaling bottleneck is isolated, \(b\) team size justifies independent deployment, or \(c\) a different technology stack is required. Never extract 'because microservices are best practice'.
Journey Context:
Common anti-pattern: teams with 3-5 engineers build 6 microservices, each with its own database, CI/CD, and deployment. This multiplies operational overhead \(network calls, eventual consistency, distributed tracing, debugging\). The monolith gives you simple transactions, easy refactoring, and fast iteration. The key is to enforce modular boundaries within the monolith \(e.g., packages, modules, or folders\) so you can extract later. The tradeoff: a monolith can't scale different components independently, and deployment is all-or-nothing. However, for a small team, the bottleneck is almost always team velocity, not compute. Conway's law: the architecture will mirror the communication structure. A small team with a monolith communicates tightly, which is fine. Only when the team grows and has subgroups with different deployment cadences should you extract.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-07-02T15:50:31.605474+00:00— report_created — created