Replacing a critical legacy system in one move is rarely a viable option. Progressive modernization — encapsulation, targeted refactoring, strangler fig, replatforming — transforms systems without betting the business.
José DA COSTA December 2, 2025 3 min read
Legacy systems absorb a disproportionate share of enterprise IT budgets, yet they persist for a reason: they run the business, and they encode decades of rules nobody fully remembers writing. The question is therefore never simply 'should we modernize?' but 'how do we modernize without putting the business at risk?'. The answer is almost always progressive.
Why big-bang rewrites keep failing
The full rewrite has a seductive logic — start clean, do it right this time — and a dismal track record. The new system must reimplement years of accumulated behavior, including the undocumented rules that only reveal themselves when violated; meanwhile the old system keeps evolving, so the target moves throughout. Value arrives only at the end, if the end arrives. Progressive strategies invert this: value ships continuously, risk is taken in small reversible increments, and learning from each step informs the next.
Assess before you cut
Modernization decisions should rest on a portfolio view: for each component, its business criticality, change frequency, technical health, and the real cost of leaving it alone. This immediately sorts the estate — stable components that change once a year may deserve encapsulation and nothing more, while the volatile heart of the business justifies deep investment. Modernize where change is needed, not where technology is oldest. Age alone is not a business case.
Four strategies, one toolbox
Encapsulation wraps the legacy behind modern APIs without touching its internals — fast, low-risk, and the enabler of everything after, though it reduces no debt by itself. Targeted refactoring rewrites the components where change pressure concentrates while leaving the rest untouched, offering a strong risk-to-value ratio. Strangler fig builds the new system alongside the old, routing traffic capability by capability until the legacy quietly empties out. Replatforming moves to a packaged or SaaS solution where the process is genuinely standard — the discipline being to adapt the process to the product, not to rebuild the legacy inside the new tool through customization.
Real programs combine all four: encapsulate first to stabilize interfaces, strangle the differentiating core, replatform the commodity functions, and refactor where surgical fixes suffice.
The execution disciplines that decide the outcome
Three practices separate controlled migrations from prolonged ones. Characterization tests capture what the legacy actually does — not what its documentation claims — so behavior survives the move. Data gets planned as its own workstream, because synchronization and reconciliation during the coexistence period is where migrations genuinely hurt. And coexistence itself is treated as a designed operating mode with routing rules, fallbacks, and monitoring, not an awkward interlude to rush through. Cutting each step small enough to reverse is what keeps the program boring — and boring is the goal.
The takeaway
Legacy modernization is a marathon run in segments, each of which must deliver value on its own: an API that unblocks a channel, a migrated capability that ships faster, a retired license. Programs built that way sustain funding and momentum for years; programs that promise everything at the end rarely reach it. Accept the temporary coexistence of old and new as the price of transformation without interruption — it is a far better deal than the alternative.
Founder and president of ACCENSEO, software engineer. He works directly with clients on software architecture, cloud infrastructure, and custom development.