use-case
Legacy System Modernization
Strangler-fig migration of legacy ERP — gradual replacement, zero downtime.
Instead of a single big-bang rewrite, we wrap the legacy system with modern services and migrate functionality piece by piece. Vendor lock-in can be exited within 18 months.
Why this matters
Most established companies carry a 10 to 20-year-old ERP or core business system. It still works — but every small change comes with a vendor invoice, every new feature takes six months, and modern integrations (real-time APIs, mobile, event streams) become impossible. Big-bang replacement projects fail or double their budget about 70% of the time. The strangler-fig pattern leaves the legacy system in place and grows modern services around it, taking over functionality piece by piece. Risk is low, return is early.
Inaction has a cost, and it compounds every quarter. The real price of an aging core system is not the license invoice; the hidden line items are usually worse. Modules that only one developer understands, and that nobody else dares touch, raise your bus-factor risk — when that person leaves, institutional memory leaves with them. A system without a modern API forces every new integration into manual data transfers or fragile nightly batch jobs. Vendor dependence erases your leverage at the negotiating table. And most of all: when competitors ship features in weeks while you measure the same work in months, the gap stops being technical and becomes commercial. The longer you defer, the larger the surface to migrate grows. Work that takes 18 months today can take 30 months three years from now.
What we deliver
Our deliverables are not a software package; they are a transition guarantee. Each item exists to free you from the legacy system without ever stopping operations.
- Scope map and migration sequence. We score every module on two axes: business criticality and technical complexity. This matrix turns the migration order from a subjective debate into a data-backed plan. We start with low-risk, high-frequency work so the team learns the pattern while continuity stays safe.
- Anti-corruption layer. We build a translation and synchronization layer between the legacy system and the modern services. The legacy system’s quirky data model never leaks into the new services; both sides read the same data correctly at the same time. This layer is the technical heart of incremental migration.
- Modern service build. Microservices or a modular monolith on Node.js, Python, or .NET — we decide based on your team size and operational maturity, not on fashion. A PostgreSQL warehouse, an event bus, and contract-based APIs are our defaults.
- User transition management. A software change is also a habit change. For teams moving to the new interface we define training, a parallel-running period, a feedback loop, and a clear “legacy module retires” criterion for each step.
Our approach
We treat modernization as a maturity journey; “delete everything and rewrite from scratch” is rarely a decision and often an escape. To decide what happens to each module, we use the 6R framework: every module is consciously assigned one of six options.
- Retain. Modules that work, rarely change, and carry low risk stay as they are. Modernizing everything is not a goal.
- Rehost. The code stays the same; the infrastructure moves to a modern environment (containers, cloud). A fast win with low risk.
- Replatform. The core logic is kept while its surroundings modernize — for example, the database moves to PostgreSQL and the interface is refreshed.
- Refactor. The code is cleaned and made modular from the inside; behavior stays identical, but maintenance gets easier.
- Rebuild. The module is rewritten from scratch as a modern service — only where business value is high and rescuing the old code makes no sense.
- Replace. The module is swapped for a standard off-the-shelf solution (for example, a managed SaaS for billing) — the most sensible path for functions that create no competitive advantage.
This framework matches the right tool to the right job instead of splitting every module into “renew” or “keep”. On top of it we apply a maturity model: Level 0 (undocumented, single-person dependency, manual deploys) → Level 1 (source control, basic CI) → Level 2 (automated tests, observability) → Level 3 (independently deployable services, contract-based APIs). The goal is not to push every module to Level 3; it is to move each module to the level its business value requires.
Process
- Weeks 1–4 — Inventory and decision matrix. Module map, integration surface, user journeys, and business-criticality analysis of the current system. Output: a migration-sequence document with 6R decisions applied and a risk register.
- Weeks 5–8 — Foundation and first module. The anti-corruption layer is built and the first module (usually a low-risk, high-frequency workflow) goes live. Old and new run in parallel in live A/B mode. Output: a working migration pattern and a rollback procedure.
- Months 3–9 — Incremental migration. Three to five further modules are migrated one at a time. Each ships standalone; rollback stays available at every stage. Output: a deploy, test, and training package per module.
- Months 10–18 — Shutdown. Remaining modules are migrated and the legacy shutdown plan is executed. The vendor contract is terminated only after the final module is safely moved. Output: an independent modern stack and a maintenance handover.
A sample scenario
An omnichannel retail brand was boxed in by the 16-year-old custom ERP at its core: there was no real-time data between the e-commerce site and store stock, and every promotion rule became a development order placed with the vendor. Using the strangler-fig approach, we moved stock synchronization first, then the pricing engine, onto modern services. Six modules were modernized in 14 months. Time to publish a new campaign rule dropped from weeks to a single day, the annual vendor development budget fell noticeably, and operations ran without interruption throughout. Results vary by organization; these figures show the scale of one scenario, not a guarantee.
FAQ
Can this transition really happen with zero downtime? That is the entire point of the strangler-fig pattern. The legacy system keeps running until each module is migrated; new services come online beside it. There is no single “big migration night”, so there is no night on which everything can go wrong.
Why do you avoid a big-bang rewrite? Because the industry data is clear: a significant share of large one-shot rewrites blow their budget or stall halfway. Incremental migration leaves a working system and a reversible decision at every step. Risk becomes manageable once it is split into small pieces.
Can we start while our contract with the current vendor is still active? Yes. We begin most projects while the vendor contract is still running. The anti-corruption layer keeps both systems in sync; you wind the contract down gradually, only after the relevant modules are safely migrated.
Which module should we migrate first? Usually a non-critical but frequently used workflow. This lets the team learn the pattern at low risk and delivers the first concrete win early, which in turn strengthens internal support for the program.
To plan a piece-by-piece modernization of your legacy system inside the enterprise systems pillar, talk to us.