ArchitectureBackend

When to Actually Use Microservices

Spoiler: probably not as early as you think. A practical guide to making the right architecture decisions.

GT

Gaurav Talesara

AI Systems Engineer · Agentic Systems Architect

Jan 10, 20269 min read
When to Actually Use Microservices
Architecture decision recordService boundaries should emerge from operational pressure, not architectural fashion.

The Microservices Trap

Microservices are sexy. They're also expensive. Every new service is a new deployment pipeline, a new place for bugs to hide, and a new boundary across which things can fail.

So when should you actually use them?

Start With a Monolith (Really)

For most products, a well-structured monolith is the right choice for years. You can: - Deploy one thing - Debug in one place - Refactor across "modules" without network boundaries - Move fast with a small team

The key is structure: clear modules, explicit dependencies, and the discipline to not turn it into a big ball of mud.

When to Consider Splitting

Split out a service when you have a concrete reason, not a vague "we might scale someday." Good reasons include: - Different scaling needs: One part of the system needs to scale independently (e.g. image processing vs API). - Different teams: Multiple teams need to own and deploy their part without stepping on each other. - Different failure domains: You want one component to fail without taking down the rest (e.g. a background job processor). - Different tech or runtime: One piece genuinely benefits from a different language, framework, or resource profile.

What I've Seen Work

The best migrations from monolith to services I've seen: 1. Extract one high-value, well-bounded capability first (e.g. "notifications" or "billing"). 2. Run it in production alongside the monolith. Learn. Iterate. 3. Extract the next one only when there's a clear need.

The worst: "We're going microservices" as a big-bang rewrite. Don't.

The Bottom Line

Use a monolith until it hurts. Then extract services for specific, well-understood reasons. You'll save yourself a lot of distributed systems pain — and ship faster.