Gable Innovation
Back to Insights
Custom Software

How to Replace Legacy Software Without Breaking Operations

Most legacy system replacements fail because companies treat them as a single event rather than a controlled transition. The standard approach - pick new software, set a cutover date, migrate everything at once - produces chaos: data conflicts, broken workflows, and users who can't function. Companies then face an impossible choice between operating in disarray or reverting to the old system.

The alternative is methodical. Start with a detailed audit of what the current system actually does and why those functions matter. Then design a phased migration that moves one component at a time while the business continues running normally. This approach to replacing legacy software takes longer, but it works. The breakdown below covers four high-impact processes that benefit most from incremental replacement rather than big-bang cutover.

When replacing beats patching or modernizing

There are probably many applications that would benefit from a modernization project instead of a full replacement project. In a modernization project, organizations can refactor code, move an application to a cloud platform, add APIs to support integration with other systems, etc. Depending on the age of the application and the business processes that it supports, a modernization project could buy years of useful life from a current application. Ideally, there would be someone on staff with some knowledge of the current application, preferably someone who can separate out the data layer from the UI. With a well-designed data layer and UI, teams can then replatform to something like AWS or containerize the application with minimal disruption to the core application functionality.

However, for a number of reasons, it may be more cost effective to replace rather than modernize legacy applications.

1) No vendor support or security patches. If a system runs on outdated platforms or database versions that no longer receive vendor support, security vulnerabilities become unmanageable over time.

2) Integrations become impossible. Because the system does not have an API or webhooks then it is not possible to integrate this system with other tools. Screen scraping or importing and exporting data in CSV may be possible for some systems but this is not sustainable in the long term. Every new system will require a custom integration that can be built for a low cost using duct tape and cron jobs to keep costs down - an integration tax that will eat into the budget.

3) Test coverage does not exist, and the original developers are long gone. Even if the intent is to modernize a legacy system, without test coverage, teams cannot safely change code. And if no one has worked with the system for years, nobody knows for sure what the code does.

4) The annual maintenance costs of legacy systems exceed the ROI of replacing them with a new, greenfield solution. According to ServiceNow (2025), legacy systems cost IT workers on average nearly $40,000 annually to maintain. These maintenance expenses often justify replacement projects when weighed against the total cost of ownership of a modern alternative.

5) Business logic is so deeply entrenched in the application that it can no longer be extended. When business logic is so deeply embedded in an application that even simple things like adding a field to a form are difficult to do (think many changes to code and not even knowing about all of them), that code has begun to show architectural rot. The business logic in such applications has become so deeply embedded that the application can no longer be used as a platform to support additional business growth.

Map every integration and data dependency

Legacy systems typically have integrations that were put in place prior to discovery. The 3 AM commission calculation that was set up back in 2019. The webhook that was fired off 5 years ago for when deals close that nobody remembers setting up. The SFTP job that pulls in the accounting data that was set up prior to everyone's time at the company.

According to ServiceNow (2025), 44% of technology professionals rate difficulty integrating with newer technologies as a high cost of legacy systems. The problem is that many of these integrations were built out years ago by people who have long since moved on from the organization, lack proper documentation and as such can be very difficult to understand.

First, get a list of all the API calls that have been made from the legacy system over the last 6 months. This includes RESTful APIs, SOAP APIs, database connections, scheduled jobs, webhooks, file transfers and any other type of API call that the system uses. Look for recurring patterns in the data, such as a huge amount of activity every Tuesday at 2 AM, or a huge spike of activity on the 1st of every month.

Make a list of all the fields in the database and then cross reference that list against the actual data that has been populated into the fields. Fields that are mostly null values are likely abandoned and can be ignored for now. Fields with recent activity are what matter to the organization and therefore should be the focus as they represent the current business logic that has been encoded into the database.

Document actual business logic

Teams actually have to sit down with the departments and watch them work for a day or so. Don't sit down with them and ask the same tired questions that could be answered by reading the documentation for the existing system (e.g. what do you use the CRM for?).

Departments will reveal workarounds that have become business as usual for the last 3 years. But people will not tell you about them. Sales will export data from the CRM, modify it in Excel and then re-import it in the CRM because the system's validation rules are too strict. Marketing will pull reports from the CRM and then analyze them in Google Sheets because the CRM's built-in dashboards and reports do not contain the right data to analyze for marketing purposes. Support will log tickets in two systems: one system talks to the billing system and the other system talks to the engineering system.

These workarounds ARE the business logic now.

It is also critical when identifying these workarounds as requirements to support future technology selection, to realize that what appears to be simple to document and then enforce as a process, will end up becoming the business rules that enforce and govern how a business operates on a day to day basis. These rules may appear to be of a very primitive nature and certainly will cause frustration as they appear to hinder the efficient use of any future technology however the reality is that these business rules are what currently govern how a business operates and should be developed and mapped to support future technology initiatives. Also, it is critical to realize that the current documented process most likely does not accurately reflect the current process that is actually being used on a day to day basis. Many processes are documented and then never updated as business evolves over time and thus the transfer of this process to a legacy replacement system will most likely result in disaster as the real process has not been identified and thus cannot be accurately mapped to support future technology initiatives.

Build the replacement in parallel

Most organizations attempt to "flip the switch" and migrate to a new system on a particular date. It is not until 3 in the morning when a business stopping failure occurs that the inability of the new system to process an edge case that the old system handled easily is realized.

Running both systems for months is far better. For each phase new workflows are moved to the new system one at a time. A full rollback plan must be in place for each phase as well.

This is commonly known as a "strangler fig" pattern. The strangler fig starts life high up in the canopy of a mature tree. As it grows down towards the roots and down to the ground, it slowly encompasses the host tree, eventually killing it as the strangler fig becomes the dominant tree. For a business application, the process of transitioning from the legacy application to the new application would follow a similar pattern. The new application would be created to handle new workflows and features, and the legacy application would continue to process existing workflows and features until the legacy application is no longer required.

Yes, there is a resource cost to running two systems (i.e. two databases, two sets of integrations with other systems, etc.). But the cost of days (or weeks) of running two systems is a cheap insurance policy against the type of business-stopping failure that occurs at 2am after a few days of warm-up.

Route workflows one at a time

Teams typically start with something low-risk and monitor for a week or so before figuring out the handful of edge cases that cause it to fail. After that, it's on to the next workflow (like an edit form for example). Typical progression is read-only reports, then manually edited forms, then synchronized with other systems, then automating workflows.

Typical workflows to strangle would be: 1) read-only reporting to a dashboard, verify it works, verify it stays up after a week or two of use, fix any issues that crop up, then move on to the next workflow. 2) Allow manual entry of data into forms (i.e. user interface). 3) Integrate with other systems that the organization uses. 4) Automate existing workflows.

As teams move from workflow to workflow, within each workflow, they can validate that the new system is keeping the data in the new system consistent with the data in the old system. For example, validating that the number of active records in the new system equals the number of active records in the old system. Teams can run checksums on the critical fields of the data. They can even spot check random samples of the data in the new system against the same samples in the old system. For example, if the list of active customers in the new system shows 4,982 active customers, and the same list of active customers in the old system shows 5,003 active customers, then there is a problem that needs to be synchronized between the two systems before moving on to the next workflow.

So it's typical for a migration to take time to complete.

Teams find out about all of these edge cases when it actually matters. In the meantime, the old system has probably been fixing things all along - such as auto-correcting a zip code that isn't quite right for example. The new system will fail hard on such data though. There's only so much that can be tested and worked through in mock scenarios before the workflows are running in production. Eventually teams will stumble upon the next bit of undocumented business logic - some buried stored procedure from 2009 perhaps.

Test with real data and users

Staging environments lie.

Testing with sample data is never enough. The example data used for testing new software or web applications looks all nice and clean in test databases. Real data is a vastly different beast from test data, the kind of data that a QA team cannot possibly anticipate and plan for in order to test it for all possible edge cases before the new software is put into production and the users start doing their real jobs with it. But there are steps that can be taken to test with production-like data before committing to a full production roll-out:

Run the new system in shadow mode first. Instead of immediately swapping in the new system for the old, run the new system in shadow mode first. The new system processes the same requests as the old system, but the results of those requests are ignored. The old system continues to process all requests as before. Then, by comparing the results of the same set of requests, produced by the new system and the old system respectively, teams can find and fix the differences before they affect users. For APIs and Integrations, this means instead of sending a single webhook event to the target system for processing, send two identical events: one for the old system to process in production, and one for the new system to process in shadow mode. For a CRM, every new lead would be written to both the old system and the new system, and then teams would compare the results with the dirty production data, rather than with a clean test database with example data.

Form a test cohort of 5-10 users on the team: This group of users will be running the new system for their work while the rest of team is running on legacy system of record. As this small group of users encounter issues with the system they can describe problems in great detail. Teams can then fix these issues before they affect the rest of users. A common problem found when testing out new software to replace legacy software is that the search function for records in the new system may not handle partial identifiers (e.g. partial policy numbers) as well as the old system did. The problems are found because Testers are not real users and therefore use the system slightly differently. Also Acceptance Criteria for Tests were written up based upon examples that were created for the test and did not contain complexities and nuances of real world usage. The biggest problems found while testing new software out are how real users actually interact with the system while performing their work. Running tests on new software with real data before releasing to users finds the problems and allows for time to fix the problems before they affect other users.

Plan the cutover with a backout window

Pick a cutover weekend for the final cutover to new system(s) when no one is running Payroll (i.e. sensitive event). Cutover at end of quarter, major holidays or the following Monday morning (when support volume will spike to Tuesday afternoon) is problematic. Picking a cutover time with lower traffic for 48-72 hours before the organization comes back from the event will allow teams to test the new system before it's put into production and everyone breathes down their neck.

Communicate the change to affected users

Notify end users 2 weeks prior to cutover. It's normal for a company to notify end users that the company is upgrading their systems 2 weeks prior to the cutover date. However, providing the end users with specific details of what is going to happen and when it is going to happen is best. An example of such a notification email would be the following: On March 15th at 6pm System X will be removed from production and replaced with System Y. The organization will be holding live training sessions the week prior to cutover where all of the changes will be covered in detail. In the meantime, recordings of the live training will be available for all end users to review. Additionally, a list of all UI changes between System X and System Y will be documented and made available for all end users to review as well. An example of such a list would be the following: the export button has been moved from the top right corner of the screen to the gear menu in the upper right corner of the screen. When searching for account numbers in System Y, users must enter the exact account number as opposed to partial account numbers as was the case with System X. Users will also notice that pending change requests are now labeled as "in review" as opposed to "pending" in System X.

Hold a live training of the new system. Go through all of the main pages of System Y and make a recording of the main functionality. Document out the key differences for users between System X and System Y for those one-off UI tweaks. For example, where do users now export information from accounts in System Y? The button to export the information is now located in the gear menu at the top of the new system (as opposed to a button in the top right corner of the screen in the old system X). How does the new search for account numbers function? As an example, in old system X users were able to search for partial information such as the account name (e.g. 'John' would return 'JohnDoe1' and 'JohnDoe2'). In new system Y the system will only return exact results as the account number was entered in the system (e.g. it will only return 'JohnDoe1' and NOT 'JohnDoe2' as an example). How do users now mark things as 'pending' in new system Y as opposed to old system X? Items that were marked as 'pending' in old system X are now marked as 'in review' in the new system Y. These are trivial differences between two systems and will assuredly result in half of the day one support issues as users trip over the few minor tweaks that were made to increase functionality.

Also establish a channel (Slack channel or email alias) for cutover support and have someone with the greatest knowledge of the old system and the new system answer all of the support questions raised by users, because change is difficult and the new system is going to require adjustment in the short term. The amount of support questions that will be raised in the first 72 hours after the cutover will fill inboxes at 9am Monday after a long weekend of inactivity. All of the questions and complaints will be about how things work in the new system and why no one told them that the new system worked that way.

Define backout criteria before cutover

It's also a good idea to obtain written agreement with leadership to define the circumstances under which teams would revert to the legacy system in the event of certain problems occurring within the first 6 hours after cutover. For example: In the event of X occurring within the first 6 hours after cutover to system X, the organization will revert back to legacy system Y.

Working with a migration partner

When Gable starts a legacy migration project, the consultancy first goes through a migration readiness audit, mapping out what's currently going on with the client's current system. The audit reviews database schema, API calls, third-party integrations, cron jobs, and the manual workarounds the client's team does when the current software fails. Most organizations are surprised by the number of unknown dependencies that exist in their current systems. The goal of the readiness audit is not to create a 50-page PDF that gets filed away on a server somewhere, but rather to create a phased roadmap with clear risk scoring for each component of the system.

After that, the team builds the bridges between the new system and the existing production environment. They create a roadmap for the migration to the new system in phases. They develop a plan for cutover to the new system and also a plan for a rollback in case things go wrong. For example, if migrating from an old ERP system to a new system, the team would create an integration layer between the old ERP system and the new system. They also create API connections between systems. They create dual-write between old system and new system to write data to both systems until there's confidence that the new system is working as required. They create data transformation pipelines to change data from the old system to the new system's required schema. They also remove years of accumulated cruft from the old system in the process.

Gable takes implementation further by writing the code to implement the new system for clients.

Migrating a CRM, like a custom built application or even a standard application that has been customized, requires work on custom objects, automating the workflows to replicate the functionality of the old application (or enhance the functionality), and data migration (all data from the old application), which also needs to be scripted so that no records are lost during the migration to the new application. For legacy applications, Gable can also design and implement a new frontend (this application will then be a new web application, developed with for example React.js or Next.js). The consultancy then also takes care of the hosting of this new web application, for example on the hosting platforms that are offered by Amazon Web Services (AWS). And also here, Gable can assist and support organizations to get started with cloud migration of for example on premises systems (their own servers) to cloud systems (servers, databases, etc.) running on for example the EC2 service of Amazon (compute), the RDS service of Amazon (databases), the Lambda service of Amazon (workflows that are driven by events).

And the difficult work that can derail migrations: Developing a testing framework to find all the regressions prior to them hitting users. Developing a rollback plan to fix the inevitable 2am failure. Doing the migration in a controlled manner to minimize impact if it fails.

Frequently Asked Questions

Should legacy software be replaced or modernized?

First, costs to work around current workarounds are already being spent. So, by funding a replacement, organizations are merely redeploying those dollars to solving future problems. The greatest risk is waiting until the legacy system fails and then being forced into an emergency (very costly) transition with no time to plan the upgrade.

How long does it take to replace legacy software?

For simple tools, such as basic invoicing software or small CRM systems, planning and the changeover to a new tool should take 2-3 months. Don't get conned into a full ERP replacement in 90 days.

What are the options for modernization of legacy systems?

There are instances where modernization may be possible, generally where the legacy system has a workable API and sufficient functionality that by putting a modern interface on top, the system can provide added value. Often creating various integrations also can allow a company to get a few more years of life out of a system but generally that can cost thousands of dollars to support dying unsupported technology such as old, unsupported applications and databases long past their end of life for security patches.

What is the biggest mistake companies make when replacing legacy software?

The biggest mistake in a legacy system replacement project is rebuilding all of the features of the legacy system. What the legacy system has is 15 years worth of one-off customizations that nobody actually uses anymore.

Is hiring developers required or is there availability of off-the-shelf packages that can be configured to work around an organization's processes to improve efficiency?

Off-the-shelf platforms (e.g. Salesforce, HubSpot) typically require custom work to map out an organization's specific workflow. That custom work can be done by a contractor/consultant who can help an organization get the most out of a core business function (e.g. sales, customer service, financials).

How do you keep the business running during a legacy system replacement?

Teams run both systems side by side for 1-2 months before cutover. New data is entered into the replacement system and the legacy system is kept up to date with data that has already been entered into the new system.

Gable Innovation is a technology consultancy that helps growing businesses to evaluate their legacy systems, develop a modernization strategy and implement new software to support business growth. Book a free 30 minute discovery call to discuss your legacy system in more detail with one of their expert consultants. Book your free discovery call here: gableinnovation.com.

Ready to put this into practice?

We help growing businesses implement CRM, build custom software, and deploy AI tools that actually work.

Book a Discovery Call