skip to content

Under what circumstances would you advise against using a strangler-fig migration to break up a monolith, and what would you recommend instead?

level: principalimportance: should knowfreq 35%

answer

  1. modular monolith as alternative
  2. platform maturity precondition
  3. cargo-culting microservices anti-pattern
  4. small/short-lived system = just rewrite
  5. Segment monolith-back-merge case

basics

~20 s

If the system is small, short-lived, or nobody actually needs it running while being rewritten, a slow incremental split can cost more than it saves — sometimes a full rewrite or just improving the monolith is smarter.

solid answer

~40 s

Strangler-fig migrations pay off when a system must keep running and evolving throughout a multi-year effort and the team can sustain the discipline required. It's a poor fit when: the codebase/team is small enough that a bounded rewrite is genuinely faster and lower-risk than years of incremental extraction overhead; the monolith's actual problem is bad code organization rather than a genuine need for independent deployability/scaling (a modular monolith refactor solves this without the operational cost of distributed systems); the organization lacks the platform maturity to run N services reliably, meaning microservices would multiply operational risk; or the system is being sunset/replaced, making investment in its internal architecture wasted effort. Alternatives: a modular monolith, a time-boxed rewrite for genuinely small systems, or simply not migrating and investing in the existing architecture's weak points directly.

go deeper

for a junior

Should sense that migrating is a lot of extra work and isn't automatically the right answer for every system.

for a middle

Should name at least one alternative (modular monolith, straight rewrite for small systems) to reaching for strangler-fig by default.

for a senior

Should articulate the operational-maturity precondition and the 'wrong problem' trap — using microservices to fix code organization issues that a modular monolith would solve more cheaply.

for a principal

Should make this a portfolio-level judgment call — weighing multi-year migration cost/opportunity cost against actual business need for independent scaling/deployability, citing real-world reversals, and being willing to recommend not migrating or reversing a partial migration.

## Two decisions, easy to conflate Strangler-fig migrations are a technique for executing a decomposition safely and incrementally — they are not, by themselves, a justification for why a decomposition should happen at all. A senior engineer's judgment on this question has to separate two decisions that are easy to conflate: 1. **whether** to break a monolith into more independently deployed services in the first place; 2. and, if so, **how** to do it safely. The pattern only helps with the second question; getting the first one wrong and then executing it flawlessly still leaves the organization worse off. ## When it is the right call The strongest case for strangler-fig migration is a large, long-lived system that must keep running and evolving throughout a multi-year effort, where teams genuinely need independent deployment cadence or independent scaling, and where the organization has the **platform maturity** to support running many independently deployed services reliably: - mature CI/CD; - centralized cross-service observability; - and an on-call and incident-response process that scales with the number of deployable units. Absent that maturity, each newly extracted service adds real operational risk (new deployment pipeline, new on-call surface, new class of network-partition and partial-failure bugs) faster than it removes complexity from the monolith, and the migration makes the system objectively harder to operate for a period that can stretch to years before any net benefit is realized. ## When to advise against it There are several concrete circumstances where recommending against a strangler-fig migration is the right call. 1. **First, scale mismatch:** a small system maintained by a small team — say, tens of thousands of lines of code and a handful of engineers — with no actual scaling bottleneck and no organizational need for independent team-level deployment simply doesn't need the operational multiplication that a dozen microservices bring; the multi-year cost of routing infrastructure, dual-write handling, and N times the deployment and monitoring surface is disproportionate to any benefit gained, and a bounded, time-boxed rewrite or targeted refactoring is cheaper. 2. **Second, misdiagnosis:** teams frequently reach for microservices because their monolith's code is badly organized — tangled dependencies, unclear ownership, hard-to-test modules — but that is a problem of internal structure, not of deployment topology, and is directly solved by refactoring toward a **modular monolith**: the same discipline of clear module boundaries, explicit interfaces, and enforced ownership, but still deployed as a single artifact, avoiding network calls, distributed transactions, and per-service operational overhead entirely. 3. **Third, product lifecycle:** if a system is actively being sunset, replaced by a different product, or is otherwise near end-of-life, investing years of engineering effort restructuring its internals is close to pure waste regardless of how architecturally sound the restructuring would be. ## The reverse case A related and equally important failure mode to recognize is the reverse case: organizations that already went through a strangler-fig migration to microservices and later found the decomposition itself, not the migration technique, was the wrong call, and merged services back together. **Segment** published a widely cited engineering post in 2020 describing exactly this: they had decomposed a data-pipeline product into per-integration microservices, and after operating them at real scale found that the cross-service debugging difficulty, on-call burden, and coordination overhead of dozens of small services outweighed the isolation benefits they'd hoped for, so they consolidated most of them back into a single service. It's frequently cited precisely because it demonstrates that a technically well-executed decomposition can still be a net-negative decision if the underlying need for it wasn't strong enough to justify the ongoing operational cost — a distinction between "did we migrate correctly" and "should we have migrated at all." ## The practical recommendation The practical recommendation, then, is to treat "should we decompose this monolith" as a **distinct, earlier decision** from "how do we decompose it," gated on concrete evidence of need — actual scaling limits that a single deployable can't meet, actual organizational friction from multiple teams sharing one release train, or actual reliability requirements that benefit from independent failure isolation — and on the organization's actual platform maturity to run the result reliably. Where that evidence is present, strangler-fig is the right execution technique. Where it isn't, a modular monolith, a smaller bounded rewrite, or simply leaving the system alone are usually the better-value paths, and it takes real discipline for an engineer or an outside consultant not to default to microservices as though it were a self-evidently superior architecture in every case.

  • What's the difference between extracting microservices via strangler fig and simply refactoring a monolith into a 'modular monolith'?
    A modular monolith enforces the same kind of clear module boundaries, ownership, and APIs internally, but everything still deploys as one process/artifact, avoiding network calls, distributed data consistency problems, and per-service operational overhead. Many teams get most of the benefit they actually wanted — clearer ownership, independent development, reduced coupling — from a modular monolith, and only need true microservice extraction if they specifically need independent deployment cadence or independent scaling per component.
  • What operational prerequisites should be in place before a team commits to a multi-year strangler-fig migration to microservices?
    Mature CI/CD pipelines, centralized observability (logging, tracing, metrics) that works across service boundaries, an on-call/incident process that scales to more deployable units, and infrastructure automation — without these, each extracted service adds operational risk faster than it delivers architectural benefit. Teams lacking this maturity are usually better served investing in that platform foundation first, or choosing a modular monolith path instead.
  • Can you give an example of a real organization publicly reversing a microservices decomposition?
    Segment published a widely cited 2020 engineering blog post describing how they merged a set of per-customer-source microservices back into a single monolithic service after finding the operational overhead outweighed the isolation benefits at their actual scale. It's commonly cited as a cautionary example that microservices decomposition is a trade-off decision, not an automatic upgrade.

Like deciding whether to renovate a house room-by-room while living in it versus just moving out for a month and gutting it, or not renovating at all: if the house is a small studio you're demolishing next year anyway, phased renovation is pure overhead — you either do a quick full redo or don't bother.

saying these in an interview costs you the question

  • Treats microservices/strangler-fig as always the correct end state regardless of system size or team maturity
  • Doesn't mention modular monolith as a lower-cost alternative that solves organizational coupling without network overhead
  • Ignores platform/operational maturity (CI/CD, observability, on-call) as a precondition
  • Can't name any real-world case of a team reversing or avoiding microservices decomposition
  • Assumes 'the monolith is bad' automatically implies 'the fix is microservices'

context