When Microservices Make Sense (And When They Don't)
#Engineering

When Microservices Make Sense (And When They Don't)

Last updated: Nov 8, 202311 min read
JM

James Mwangi

Cloud Architect

A pragmatic guide to choosing between monoliths, microservices, and the middle ground. Based on real-world architecture decisions at scale.

Unless you have very specific scaling requirements, start with a monolith. Microservices introduce distributed systems complexity, network partitions, eventual consistency, service discovery, distributed tracing, that most early-stage products don't need.

A well-structured monolith can handle significant scale. Many successful companies (Shopify, Stack Overflow, Basecamp) run primarily on monolithic architectures serving millions of users.

Don't solve tomorrow's scaling problems today. Build for the scale you have, with the option to evolve when you need to.

When to Go Micro

Consider microservices when: different parts of your system have fundamentally different scaling requirements, you have multiple teams that need to deploy independently, or specific components need different technology stacks.

The organizational argument is often the strongest: if team coordination costs are significantly slowing down development, service boundaries that align with team boundaries can restore velocity.

The Modular Monolith

The modular monolith is an often-overlooked middle ground. Structure your monolith with clear module boundaries, well-defined interfaces between modules, and strict dependency rules. This gives you most of the organizational benefits of microservices without the operational complexity.

When (and if) you need to extract services, a modular monolith makes the transition straightforward because the boundaries are already defined.

Migration Strategies

If you do need to migrate from a monolith to microservices, use the Strangler Fig pattern: gradually extract functionality into services while keeping the monolith running. Never attempt a big-bang rewrite.

Start with the component that has the clearest boundaries and the strongest reason to be independent (different scaling needs, different team ownership, different deployment cadence).

Common Pitfalls

The most common microservices mistakes: making services too small (nano-services), sharing databases between services, not investing in observability, and underestimating the operational overhead of running dozens of services.

  • Distributed monolith, Services so tightly coupled they must deploy together
  • Shared database, Eliminates the main benefit of service independence
  • Inadequate observability, Debugging distributed systems without tracing is painful
  • Premature decomposition, Splitting before understanding domain boundaries

Choosing the Right Architecture for Your Business

The architecture decision should be driven by business needs, not technical trends. Consider these factors:

  • Team size: Under 10 engineers, a monolith is almost certainly the right choice
  • Deployment frequency: If you deploy multiple times per day, microservices may help
  • System complexity: Simple CRUD applications rarely benefit from microservices
  • Regulatory requirements: Some compliance frameworks benefit from service isolation
  • Budget: Microservices typically cost 2-3x more to operate than equivalent monoliths

Frequently Asked Questions

Should a startup start with microservices?

Almost never. Start with a well-structured monolith. You can always extract services later when you have clear evidence that your architecture is limiting your growth.

What's the biggest mistake companies make with microservices?

Adopting microservices for technical reasons when the real problem is organizational. If your teams can't communicate effectively, splitting them across services won't fix that, it will just make the communication problems more expensive.

How do I know when it's time to move from monolith to microservices?

When you have clear evidence that: (1) different parts of your system have different scaling needs, (2) team coordination is significantly slowing development, or (3) specific components need different technology stacks or deployment cadences.

microservicesarchitecturemonolithsystem designscalabilitysoftware architecturedistributed systems

Written by

JM

James Mwangi

Cloud Architect

Let's build something great together

Book a free consultation to discuss your project requirements and get expert recommendations.

Book a free discovery call