Back to Thoughts

The Ugly Truth About Microservices for Small Teams

Why the majestic monolith is almost always the right choice for startups and small engineering teams, despite the microservices hype.


We've all read the engineering blogs from Netflix, Uber, and Spotify. They talk about their thousands of microservices, completely decoupled deployments, and massive scale.

So naturally, when you start a new project with a team of three developers, you decide to split your app into an auth service, a billing service, and a user service.

This is a terrible mistake.

The Microservice Tax

Microservices solve scaling issues for organizations, not just technical scaling issues. They allow a 500-person engineering department to work without stepping on each other's toes.

For a small team, microservices introduce an immediate, crushing tax on productivity:

  • Network Latency & Failures: Function calls that used to take 1ms in memory now require network boundaries, retries, and error handling.
  • Deployment Complexity: You can no longer just run git push. You need complex CI/CD orchestration to ensure services are deployed in the right order with compatible database schemas.
  • Debugging Nightmares: When a request fails, you find yourself tracing logs across three different services just to figure out what happened.

Embrace the Monolith

A well-structured monolith is beautiful.

You get simple deployments. You get absolute data consistency with single database transactions. If you change a function signature, your compiler immediately tells you everywhere it broke across the entire codebase.

If your code starts getting messy, use modules or logical boundaries within the same repository. Build a "modular monolith."

Don't distribute your system over a network until the pain of a single codebase explicitly outweighs the nightmare of managing distributed microservices. For 95% of apps, that day will never come.


© 2026 Daniel Dallas Okoye

The best code is no code at all.