IAnswerable

You Probably Don't Need Microservices Yet

10 Jul 2026

Microservices solve an organizational problem, not a technical one: too many engineers stepping on each other in one codebase. If you’re a small team, you don’t have that problem yet, and adopting the solution anyway just hands you a distributed systems problem you didn’t need.

What actually happens when a five-person team splits into services

You don’t get independent deployability, you get a distributed monolith — every service still has to deploy in the right order relative to the others, because they were never really decoupled, just split across a network boundary. Except now:

None of this is hypothetical inefficiency. It’s the actual daily cost, paid by a team too small to have the problem microservices were built to solve.

The costs that hit a small team first

Network calls where function calls used to be. A function call fails in exactly one way: it throws. A network call fails in a dozen ways — timeout, partial response, the other service mid-deploy, a transient DNS hiccup — and your code now has to handle all of them, for every single interaction that used to be free.

Data consistency stops being free. In a monolith, a database transaction makes multi-table updates atomic for nothing. Split across services, you need sagas, compensating transactions, or eventual consistency — real complexity that a small team now has to design and maintain, for a guarantee they used to get from BEGIN; COMMIT;.

Operational surface area multiplies. Each service needs its own deploy pipeline, its own monitoring, its own on-call runbook. A five-person team maintaining twelve services is a five-person team that no longer has time to build the product.

The modular monolith alternative

Get the organizational benefit — clear boundaries, independent development within them — without the network. Structure the codebase into modules with enforced boundaries (no importing another module’s internals, only its public interface), deployed as one process:

src/
  billing/       # only exposes billing/index.ts
  users/         # only exposes users/index.ts
  notifications/

This gives you most of what people actually want from microservices — the ability to reason about one module without reading the whole codebase, and a clear seam if you ever do need to split it out — without paying the network, deployment, and consistency tax on day one.

When microservices actually earn their cost

The honest question to ask

Not “could this be microservices,” almost anything could. Ask: which specific team-coordination problem, that we actually have today, does this solve? If the honest answer is “none yet, but we might grow into needing it,” you’ve just described premature optimization with extra YAML. Build the modular monolith. Split it when the pain of not splitting is real, not anticipated.