Old software is holding your business back when ordinary changes have become slow, risky or impossible, when it runs on versions that no longer get security fixes, or when only one person understands it. In most cases the safer answer is to modernise it step by step, replacing one part at a time while the business keeps running. A full rebuild is right only when the foundation cannot be repaired or the software no longer matches how the business works, and in either route the data migration is where the real risk sits.
This article is for owners and managers of small and mid-size businesses that depend on an older custom system: a desktop program, an ageing PHP application, an Access database or a web app nobody has touched in years. It covers the warning signs, the options, how to choose, and how to move data without losing it.
#What legacy software means
Legacy software is any system your business relies on that has become hard to change, hard to secure or hard to find people for. Age alone is not the problem. A ten-year-old system on supported versions, with clear code and a developer who knows it, is an asset. A three-year-old app abandoned by its builder can already be legacy.
Small businesses usually meet legacy software in a few forms:
- A desktop program installed on office PCs, tied to one Windows version or one machine.
- A web application built years ago in an old version of PHP or another language, and never updated.
- An Access or Excel-with-macros "system" that grew from a favour by a former employee.
- A custom tool built by a freelancer or agency that is no longer reachable.
The danger is that these systems keep working. Nothing forces a decision until the day something breaks, and by then the choices are fewer and more expensive.
#Signs old software is holding the business back
The signs fall into three groups: security, people and the daily cost of working around the system. Any one of them is worth a conversation. Several together mean the risk is already real.
| Sign | What it looks like | Why it matters |
|---|---|---|
| Unsupported versions | The language, database or server software no longer receives security updates | Known weaknesses stay open for good |
| One person knows it | A single developer or employee understands the code or the server | Their illness or exit becomes a business risk |
| Changes are slow and scary | A small request takes weeks, or "we do not touch that part" | The software dictates what the business can do |
| It will not connect | No way to link to payment gateways, WhatsApp, accounting or a website | Staff retype data between systems |
| Workarounds everywhere | Spreadsheets and notebooks fill gaps the system cannot cover | The real process lives outside the software |
| Hard on phones | Works only on an office PC or an old browser | Field staff and owners cannot use it |
| No tested backup | Backups exist in theory, and nobody has restored one | One hardware failure could end the data |
| Hosting pressure | The hosting company is forcing an upgrade the app cannot survive | A deadline you did not choose |
#How to check the version risk yourself
You can check the first sign without a developer, because the makers of each technology publish their support dates. PHP's own supported versions page (opens in a new tab) explains that each PHP branch gets two years of active support and two more years of security fixes, then reaches end of life. As of November 2026, PHP 8.2 is in its final weeks of security support and 8.1 and older are no longer supported.
Databases and runtimes follow similar policies. PostgreSQL supports each major version for five years (opens in a new tab), and as of November 2026 versions 13 and older are unsupported. The Node.js project says production applications should only use Active LTS or Maintenance LTS releases (opens in a new tab), and lists version 20 and older as end of life.
Running out-of-date parts is a recognised security risk, not a matter of taste. The OWASP Top 10 for 2025 (opens in a new tab), a widely used list of the most serious web application risks, includes Software Supply Chain Failures in third place, a category that covers the libraries and components an application is built on.
#The four options
There are four realistic ways forward, and they differ in cost, risk and how long the benefit lasts. Most businesses should consider them in this order.
| Option | What it means | Best when | Main risk |
|---|---|---|---|
| Keep and stabilise | Update versions, fix backups, document, add monitoring | The software still fits and the code is sound | Buys time, does not add capability |
| Modernise step by step | Replace or rebuild one module at a time alongside the old system | The system is large and the business cannot stop | Two systems run side by side for a while |
| Full rebuild | Build a new system and switch over | The foundation is beyond repair or the process has changed completely | Long wait, missed behaviour, a risky switch-over day |
| Replace with a product | Move to off-the-shelf software | The process has become standard since the system was built | You adapt to the product, and migration is still needed |
The fourth option deserves an honest look. A process that needed custom software in 2014 may be well served by a ready product today. My comparison of custom CRM vs off-the-shelf CRM helps with that judgement.
#Rebuild or improve step by step
Step-by-step modernisation is the safer default, and a full rebuild needs a specific reason. The instinct to throw everything away and start clean is strong, especially when the old code is unpleasant, but it carries a risk that is easy to underestimate.
Martin Fowler, a well-known software author, describes the problem in his article on the Strangler Fig approach (opens in a new tab). His observation is that complete replacements in one go usually go badly: they take a long time while users wait for new features, and the details of what the old system actually does turn out to be much harder to pin down than expected. The alternative he names after the strangler fig is to grow the new system around the old one in small pieces until the old one can be retired.
For a small business, that looks like this:
- Stabilise and back up
- Pick one module
- Build it new
- Run both and compare
- Switch that module
- Repeat
Each cycle delivers something usable, and if a step goes wrong, only one module is affected. The cost is that old and new must share data for a while, which takes planning.
#When a full rebuild is the right call
A rebuild is justified when repair is not possible or not worth it. These are the conditions I would look for before recommending one:
- The technology is a dead end: no supported upgrade path, or no developers available to work on it.
- There is no source code, only a compiled program.
- The business has changed so much that the old screens and data no longer describe how you work.
- The system is small enough to rebuild in weeks, so the long-wait risk does not apply.
- Security problems are built into the design, not individual bugs.
If you do rebuild, treat the first release like any new product: one core workflow, launched early, and grown from there. My guide on how to plan a web app MVP applies directly. Resist the request to "make it do everything the old one did" on day one, because a good share of what the old system does is no longer used by anyone.
#Data migration risks
Data migration is the riskiest part of any modernisation, because the data is the one thing you cannot rebuild. The code can be rewritten. Ten years of customers, invoices and balances cannot.
The risks are well known, and each has a control:
| Risk | How it shows up | Control |
|---|---|---|
| Dirty data | Duplicates, blanks, the same client spelt four ways | Clean and map before migrating, with the business deciding the rules |
| Hidden meaning | A code in a notes field, a status that means two things | Interview the staff who use it, not only the developer |
| Lost history | Old invoices, audit trails or attachments left behind | Decide in writing what is migrated, archived or dropped |
| Broken links | Payments no longer attached to their invoices | Check relationships, not only row counts |
| Numbers that shift | Totals differ by small amounts after rounding or tax recalculation | Reconcile totals per client and per period, old against new |
| Numbering breaks | Invoice or order numbers restart or collide | Carry the series forward on purpose |
| Bad switch-over | The team starts on the new system with stale data | Freeze the old system, run the final migration, verify, then open |
| No way back | A problem is found after go-live | Keep the old system read-only and a full backup until sign-off |
Three practices matter most. Rehearse the migration at least once on a copy, well before the real day. Agree on checks that must pass, such as the number of customers, the total outstanding and the count of open orders matching between old and new. And keep the old system available in read-only form for a period, so questions about history can be answered.
Invoice numbering is a specific trap for Indian businesses, because a GST series must stay unique and consecutive within the financial year. I explain the rules in GST invoice numbering for custom software.
#What it costs and how to budget
The cost of modernisation depends on the size of the system and the state of the data, so an honest figure needs a look inside first. What I can say reliably is how to structure the spending.
Start with a short paid assessment. In a few days, a developer can list the versions in use, check the backups, read the code for obvious risks and outline the options with rough effort for each. That one step often changes the plan, because the system turns out healthier or weaker than assumed.
After that, budget in phases with a fixed scope for each: stabilise first, then one module at a time. For planning ranges, my guide to custom software development cost in India gives effort estimates by type of build, and a rebuilt module is comparable to a new build of the same size, plus the migration work. Small fixes and upgrades are usually easier on an hourly basis, as set out on the pricing page.
Remember the cost of doing nothing. It is not zero. It is the hours lost to workarounds each month, plus a real chance of a breach, a failed server or a departing developer forcing an emergency rebuild on someone else's timetable.
#Do it yourself or hire help
Some of this you can do yourself today. Find out what versions you run, make sure a backup exists and has been restored at least once, collect the passwords and account details into the company's hands, and write down what the system does and who uses it.
The modernisation itself needs a developer, and the careful parts are where professional experience pays: reading unfamiliar code without breaking it, upgrading versions safely, and migrating data with checks. Ask anyone you consider how they would rehearse the migration and how they would roll back. My article on questions to ask before hiring a web developer has more, and the custom web application development page explains how I approach rebuilds and upgrades.
#Where to start
Start with an inventory on one page: what the system does, who uses it, the versions it runs on, where it is hosted, who has access and when a backup was last restored. Add the three changes the business has wanted for years and could not get.
That page tells you which of the four options to explore. If the versions are current and the wish list is short, stabilise and carry on. If the versions are unsupported or the wish list is long, get an assessment and plan the first module. Either way you will be deciding from facts, on your own timetable.
Frequently asked questions
How do I know if my software is outdated?
Check the versions of its language, framework and database against the official support pages. If any no longer receives security updates, the software is outdated in the way that matters most. Slow changes and heavy use of workarounds are the other strong signs.
Is it cheaper to rebuild or to fix old software?
Fixing is usually cheaper in the short term, and step-by-step modernisation spreads the cost while reducing risk. A full rebuild can be cheaper over several years when the old technology is a dead end, but it carries the highest risk during the switch-over.
How long does legacy modernisation take?
Stabilising a system can take days to a few weeks. Replacing it module by module typically runs over several months, with each module going live separately. The timeline depends more on data quality and how well the current behaviour is understood than on the size of the code.
Can we keep using the old system during modernisation?
Yes, and with a step-by-step approach that is the point. The old system keeps running while new modules take over one at a time, and it stays available in read-only form after the final switch.
Sources
The facts in this article were checked against these pages, last reviewed 27 October 2026.
- Supported versions, PHPphp.net/supported-versions.php
- Versioning policy, PostgreSQLpostgresql.org/support/versioning/
- Node.js releases, Node.jsnodejs.org/en/about/previous-releases
- OWASP Top 10:2025, OWASP Foundationtop10.owasp.org/2025
- Strangler Fig, Martin Fowlermartinfowler.com/bliki/StranglerFigApplication.html




