Skip to content
LPR Studio
FREN
Contact us

Business softwareMethodCustom softwareSMEsMaintenance

Legacy application modernization: rewrite it all or replace it step by step

10 min read

Legacy application modernization works best for a small or mid-sized company when it does not try to replace everything at once. The safer route is to build the new system next to the old one, move features across one at a time in an order set by value and risk, and switch the legacy application off once it no longer does anything. A full rewrite only makes sense for a small application whose rules are well understood.

Most guides on this topic are written for enterprises with hundreds of applications, a cloud migration programme and an architecture team. This one is for the owner or operations lead of a 10 to 200 person company that runs on one piece of software built a decade ago: an in-house tool, a Microsoft Access database that grew too big, a desktop application whose original developer has moved on. It covers how to choose a strategy, how to split the work, and how to keep invoicing customers throughout.

First, decide whether to rebuild at all

The AWS migration guide groups the options into seven strategies, known as the 7 Rs (checked on 6 November 2026). For a single business application in a smaller company, they boil down to five.

OptionWhat you doWhen it fits
RetainSecure and document it, no rebuildIt works, changes rarely, and someone can still maintain it
RetireSwitch the feature or the tool offNobody uses it, or another tool already does the job
RehostMove it to a new server or version, code unchangedThe problem is the infrastructure, not the software
RepurchaseBuy an off-the-shelf product or SaaSThe need is standard and your rules fit the product
RebuildRewrite it, in one go or in stagesThe software carries know-how of its own and holds you back

These options mix well. You can retire dead screens, move accounting to a standard package, and rebuild only the part that makes your business different. That sorting exercise often halves the scope before any code is written. Our article on build vs buy goes through that reasoning in detail.

Big bang rewrite or step-by-step replacement

Once you have decided to rebuild, the next decision shapes the whole project.

CriterionBig bang rewriteStep-by-step replacement
First use in productionAt the end of the projectWith the first module
Cutover riskConcentrated on one daySpread over several small switches
When gaps are discoveredLate, often during acceptance testingContinuously, module by module
Integration workLowReal: two systems share the data
Option to stop halfwayPoor: nothing usable before the endGood: each delivered module is kept
Best forSmall tool, known rules, clean dataCentral, old, poorly documented system

A full rewrite looks easier to manage: one specification, one project, one go-live date. Its weakness is built in. For months, the business pays for software it cannot use, while the old one keeps changing and the gap widens. Step-by-step replacement asks more of the technical team, but it turns one large bet into a series of small ones you can check.

The strangler fig approach, without the jargon

The name comes from Martin Fowler's article Strangler Fig Application (2024 edition): the strangler fig grows around a host tree until it can stand on its own. Microsoft documents it as an architecture pattern, the Strangler Fig pattern (updated 29 May 2026). For a smaller company, it comes down to three pieces.

A front door that routes requests

Users go through a single entry point: a menu, a portal, a web address. Behind it, each feature is served by either the old or the new system. For users, a migration step looks like one screen changing. With an old desktop application, the front door can be simpler: the new web app takes over one menu at a time while the old program stays installed for the rest.

One owner for each piece of data

This is the technical heart of the approach. During the transition, each piece of data must have exactly one system of record. Three setups are possible:

  • the new system reads and writes the legacy database for a while: simple, but it inherits that database's flaws;
  • each migrated module owns its data and passes it back to the legacy system where it is still needed;
  • two-way synchronisation: avoid it whenever you can, it causes most data inconsistencies.

Microsoft's guidance is explicit on one limit: the pattern may not suit a legacy system whose requests cannot be intercepted, or that has no other integration point you can change, such as its database.

Actually switching off what has moved

A rebuilt feature must be removed from the legacy application, or at least hidden. Otherwise part of the team keeps using the old version, the data drifts apart, and the project never ends. The end goal is explicit: retiring the legacy system on a date that gets closer with each step.

Split by business task, then order by value and risk

Split the application by what people do, not by technical layer. "Order entry", "job scheduling" and "invoicing" are good modules. "The database" or "the user interface" are not: rebuilding one without the other delivers nothing anyone can use.

Then score each module on two axes:

  • value: hours saved, errors avoided, a pain point removed, a regulation to meet (e-invoicing mandates are a common trigger in Europe);
  • risk: number of business rules, links to other modules, volume and quality of the data involved.
Value / riskLow riskHigh risk
High valueDo it firstPrepare early, switch once integration works
Low valueBundle it with a neighbouring moduleRetire it or replace it with a product

The ideal first module is useful, clearly bounded and loosely connected: a customer portal, a mobile screen for field staff, a dashboard that replaces a weekly spreadsheet export. It proves the method, tests the data plumbing, and builds the team's confidence. The core of the system follows once you know that two systems can run side by side.

Keeping the business running during the transition

Done well, modernization is almost invisible to day-to-day operations. Five habits make the difference.

  1. Switch by scope, not by calendar. One module, then one team, then one site. A small group of willing users goes first.
  2. Plan the rollback. Before every switch, know how to return to the old way of working within minutes, and which records to reconcile if you do.
  3. Run parallel checks briefly. For a few days, compare results on sensitive operations: invoice totals, stock levels, schedules. Beyond that, double entry wears people out and must stop.
  4. Freeze the legacy system, mostly. Bug fixes and legal changes only. New requests go on the list for the new system.
  5. Train just before, not months before. A short demo the day before the switch beats a general training session nobody remembers.

Data migration follows the same rhythm: module by module, on copies first, with someone from the business checking the results. Our guide to legacy data migration covers it in depth.

Recover the business rules before writing code

A ten-year-old application holds rules nobody remembers and features nobody uses. The two traps mirror each other: dropping a rule that matters, or faithfully rebuilding a feature that is dead.

Three sources help:

  • the users, watched while they work, not only interviewed in a meeting room;
  • the data: a field left empty for five years points to a dead feature, a free-text field used for something else points to a need the software never served;
  • the code, where you have it, for calculations: pricing, discounts, rounding, due dates. An audit of the existing application produces that inventory.

Then validate the target on a clickable prototype: the screens of the future module, shown to the people who will use them, before development starts. A missing field costs minutes to fix on a prototype and days once the module is built.

Mistakes that sink modernization projects

  • Copying the old system screen for screen. You rebuild the workarounds it forced on people instead of the actual work.
  • Improving everything at once. Ten years of wish lists added to the scope turn a modernization into an endless project.
  • Starting with the hardest module "to get it out of the way". Without proven data plumbing, that is where projects stall.
  • Neglecting the legacy system meanwhile. It still runs for months: backups, security patches and monitoring still matter.
  • Never setting a retirement date. Running two systems in parallel costs more than one, forever.
  • No business owner on the project. Someone from your team, with a few hours a week, settles questions about rules. Without them, the developers guess.

Budget, contracts and who owns what

Step-by-step modernization splits naturally into lots, each with its own scope, price and go-live date. That makes it a good fit for fixed-price work: you commit to one module at a time on a validated scope, rather than to one large budget for a year-long project. Our comparison of fixed price and time and materials explains why: on a time-and-materials contract, every week of coexistence is billed by the hour.

For an order of magnitude, Clutch's software development pricing page (updated 21 September 2026) reports, from verified client reviews, a most common project budget of 10,000 to 49,999 US dollars and an average duration of about 13 months. Those are global figures across all kinds of projects, not modernization quotes, and they leave out running costs. Our article on the cost of a custom business application explains what moves a price up or down.

Before signing, check what you get at the end: code, data and documentation, with rights defined case by case in the contract. Our vendor lock-in exit plan lists what to ask for.

Pre-launch checklist

  • A list of the legacy application's features, who uses each and how often.
  • The sorting: retain, retire, rehost, repurchase, rebuild.
  • Modules scored on value and risk, and the first one chosen.
  • The system of record for each piece of data during coexistence.
  • A prototype of the first module, approved by its users.
  • A named business owner with protected time.
  • A target retirement date for the legacy system, even a provisional one.
  • A maintenance plan for the new system, so you do not end up here again in ten years (see technical debt for business owners).

Where to start

Gather three things: the list of screens or menus your team really uses, an export of the database, and the module that causes the most pain today. That is enough for a first conversation.

At LPR Studio, that conversation leads to a free visual prototype of the first module, presented in a video call within 5 working days, wherever you are based. You see the future screen before committing to anything, and the modernization plan is built from there, one module at a time, on a fixed price or a monthly subscription.

Frequently asked questions

What is the strangler fig approach to legacy modernization?

It is a way to replace an old application gradually instead of in one go. A front door routes each task either to the legacy system or to the new one. Features are rebuilt one at a time, put into production, then switched off in the old system. When nothing is left running there, the legacy application is retired.

Should a small business rewrite its legacy software from scratch?

Only if the application is small, its business rules are well understood and its data can be moved cleanly in one go. For a central system that has grown over ten years or more, a single cutover concentrates too much risk on one day. Replacing it module by module is usually safer and delivers value sooner.

Which part of a legacy application should be modernized first?

Start with a module that is useful, clearly bounded and loosely connected to the rest: a customer portal, a field data entry screen, a report that someone rebuilds by hand every week. It proves the approach and relieves the team quickly. Core functions such as invoicing or scheduling come later, once data sharing is proven.

How long does legacy application modernization take?

It depends on the number of modules, the state of the data and how many systems connect to the application. Step-by-step modernization changes the question: the first module can be in production within weeks, and the legacy system is retired once every module has moved. Ask for a date per module, not one distant date.

Can a legacy application be modernized without its source code?

Yes, in most cases. The running application, its screens, exports and database, plus the people who use it every day, are enough to describe what it must keep doing. The database matters most: if the new system can read it during the transition, step-by-step replacement remains possible even when the code is lost or unreadable.