Over the past decade, microservices have been marketed as the default architecture for modern web applications. Big tech organizations (Netflix, Uber, Amazon) publish detailed engineering posts explaining how thousands of microservices power their global platforms.

For early-stage startups and small engineering teams, adopting microservices prematurely is one of the most common causes of engineering velocity collapse.

This article outlines when microservices make sense, the severe operational tax they impose, and why a modular monolith is almost always the right starting point.


1. The Real Cost of Microservices (The Operational Tax)

Moving from a monolith to microservices does not eliminate complexity—it converts code complexity into operational and network complexity.

In a monolith, calling another function is an in-memory method invocation (0.0001ms). In a microservice architecture, calling another service requires:

  • Network serialisation (JSON/gRPC over HTTP/TCP)
  • Network roundtrips (10ms - 100ms)
  • Handling partial network failures, timeouts, and retries
  • Service discovery and load balancing
  • Distributed transactions (Sagas / 2-phase commits) instead of simple database transactions
  • Distributed tracing (Jaeger/Zipkin) and aggregated log collection
  • Independent CI/CD pipelines and deployment orchestrations (Kubernetes, Helm)
[ Monolith ]
Function A() ──(In-Memory Call: <0.1ms)──► Function B()

[ Microservices ]
Service A ──(HTTP/gRPC Network: 25ms + DNS + Retry + TLS + Auth)──► Service B

2. Conway’s Law: The Primary Reason to Adopt Microservices

Conway’s Law states:

“Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations.”

Microservices exist primarily to solve organizational scaling bottlenecks, not code scaling bottlenecks.

When an engineering organization grows to 50+ developers split into multiple independent product teams (e.g. Payments Team, Search Team, Shipping Team), having everyone commit to a single monolith can create deployment bottlenecks and merge conflicts.

The Decision Matrix

DimensionMonolith / Modular MonolithMicroservices Architecture
Team Size1 to 20 engineers30+ engineers across distinct teams
Deployment1 unified artifact / pipeline10–100+ separate pipelines
Data ConsistencyACID Database TransactionsEventual Consistency / Sagas
Operational OverheadLow (Single app server + DB)High (Kubernetes, Service Mesh, Tracing)
Refactoring EaseHigh (IDE refactoring across files)Low (Breaking cross-service API contracts)

3. When Microservices Actually Make Sense for Startups

While microservices are overused for general business logic, there are specific scenarios where extracting a microservice is justified:

  1. Heterogeneous Compute Requirements: Extracting a CPU/GPU intensive workload (e.g. AI model inference, video transcoding, PDF generation) into an isolated worker service so it doesn’t starve the primary API server of resources.
  2. Strict Security Isolation: Isolating PCI-compliant payment handling or sensitive healthcare data processing into a hardened microservice.
  3. Independent Scalability: When a specific background consumer must scale up to 100 instances independently while the rest of the application remains small.

Instead of jumping straight to microservices, build a Modular Monolith.

Structure your codebase into strict, self-contained domain modules inside a single repository:

src/
├── modules/
│   ├── identity/     # Users & Auth
│   ├── billing/      # Payments & Subscriptions
│   ├── catalog/      # Products & Services
│   └── analytics/    # Event tracking
└── main.ts           # Unified HTTP Server Entrypoint

Keep communication between modules restricted to explicit internal service interfaces or events. If a module ever grows to the point where it truly requires independent scaling or a dedicated team, you can extract it into a separate microservice in hours rather than months.


Conclusion

Microservices are a tool to solve organizational scaling problems at scale. For startups aiming for maximum engineering velocity with a team under 20 developers, a well-architected modular monolith will deliver faster feature velocity, simpler deployments, and drastically lower operational costs.