Contents

How to Decide When to Break Up a Monolith: Signals and False Positives

How to Decide When to Break Up a Monolith: Signals and False Positives

/en/quando_decomporre_monolite/img.png

Understanding when the monolith is no longer the right fit for our situation.

Microservices are like candy: you shouldn’t overdo it, or you’ll end up with a bigger problem than the one you started with.


The monolith isn’t always bad: when and how to use it

The monolith is often portrayed as a monster to be defeated, but the truth is that in the early stage of a product, it remains the most solid, economical, and fast way to evolve software.
A monolith:

  • is simple to understand: one codebase, one pipeline, one deploy;
  • is efficient for small teams that cannot sustain the complexity of microservices;
  • reduces initial costs of infrastructure, observability, and orchestration;
  • supports fast decision-making because system knowledge is centralized.

The monolith is the right choice when:

  • the business model is not yet clear;
  • features change rapidly;
  • team velocity needs to be maximized;
  • there are no real technical bottlenecks, only future concerns.

Many CTOs start talking about microservices too early. If complexity doesn’t exist yet, introducing it is a waste.


When the monolith starts to feel tight

The best signal isn’t technical: it’s organizational.
A monolith becomes a constraint when it introduces friction between teams, slowdowns, and interdependencies.

Reliable signals (“true positives”)

  • Teams blocking each other because they work on the same module.
  • Risky or slow releases, where every deploy feels like a gamble.
  • Stabilized areas of the codebase mixed with fast-evolving ones that influence each other too much.
  • Localized performance bottlenecks, not solvable by vertical scaling alone.
  • Distinct business domains, with autonomous roadmaps that are hard to support within a single codebase.

Common false positives

  • “Microservices are modern, we need to do them.”
  • “We’re hiring more people, so we need microservices.”
  • “We need to scale each feature independently” (often not true: the whole monolith can be scaled without drama).

Microservices do not solve cultural issues, lack of ownership, slow processes, or accumulated debt.
If the problem is human or organizational, breaking the monolith will make it worse.


How to plan the decomposition

Decomposition is not a big bang: it is an evolutionary strategy.
Here enters one of the most effective patterns: Strangler Fig.

Why the Strangler Fig pattern works

  • It allows you to replace parts of the monolith gradually, without blocking development.
  • It lets you move features to external services only when they are “mature”.
  • It ensures easy rollbacks because the monolith stays active until the “new root” is solid.

What to extract first

  • Features with clear boundaries and low risk;
  • Modules that are already nearly isolated;
  • Parts of the code the team knows well and can migrate without surprises;
  • Components stabilized in the business (e.g., billing, authentication, reporting).

What NOT to extract at the beginning

  • “Core” components that are still turbulent;
  • Highly coupled areas with unclear dependencies;
  • Features under rapid evolution (changing business domains).

At this stage, the key question is:
“Am I migrating to solve a real problem, or to follow an architectural trend?”


How to ensure uptime during shotgun surgery

Every migration risks introducing regressions, downtime, and inconsistency.
The keyword is layering, not explosive surgery.

Here are the pillars for maintaining uptime:

🔹 Edge adaptors

They mirror the monolith’s calls to the new service and allow implementation changes without affecting clients.

🔹 Contract-first

Define APIs first, then implement them.
This prevents microservices from becoming “dishwasher copies” of the old monolith.

🔹 Feature flags

Gradual activation, instant rollbacks.

🔹 Minimum necessary observability

  • structured logs
  • distributed tracing
  • business-driven metrics
    You don’t need a spaceship: you need visibility.

🔹 Frequent, small deploys

Decomposition is a marathon made of many safe sprints.


How to know when to stop

Not everything should become a microservice.
One of the biggest mistakes is endless decomposition, driven by the idea that more fragmentation equals more modernity.

You’ll know it’s time to stop when:

  • each domain has an autonomous, responsible owning team;
  • services are few, stable, and well-bounded;
  • TTM (time-to-market) becomes competitive again;
  • the marginal complexity of each new service exceeds the benefit;
  • the remaining monolith is small, stable, and does its job well.

The optimal result is not an all-microservice system, but a balanced ecosystem, where each part has a sensible size and responsibility.


Conclusion

The right question is not “When should I move to microservices?”, but:
“Is my monolith still the best tool to keep growing?”

Decomposition is a journey, not a goal.
It requires discipline, awareness, and the ability to distinguish necessity from fashion.
And above all, it requires remembering that architecture must serve the business — not the other way around.