You need evidence of the current system’s quality, risks or limitations.
Software audit →Legacy software modernisation.
Modernise existing software with a plan that accounts for daily operations.
Discuss your projectAssess, modernise or develop?
You want to improve or replace a selected component, with agreed availability during the transition.
Legacy software modernisation (this service)You need a business function that an existing product or the current environment does not adequately support.
Custom software development →What needs to keep working while existing software changes?
Legacy modernisation starts with a decision for each component: retain and improve it, replace it in stages or retire it. The business function, data and dependencies determine that choice. We define which system may write during each phase, when a new function is accepted and what happens when results differ. A software audit can gather missing evidence; modernisation implements and verifies the selected change.
When it is a good fit
This fits when software remains important to operations but changes become difficult or specific dependencies need replacing. Select a demonstrated constraint and identify the users and processes affected by changing it.
When to take a different approach
A new technical foundation is not automatically a reason to rebuild every function. If current behaviour, data or external integration consumers are unclear, investigate them first. A focused improvement or an existing product feature may be sufficient.
Modernize legacy software while keeping operations in view
For legacy modernization, I first establish which parts actually need replacing. A new function can sometimes run alongside the existing system and take over incrementally. This needs a clear boundary: which version handles a request, and which data source is authoritative during transition? [1]
Migration therefore includes data comparison, fallback and the period of coexistence. We record current behavior for critical business rules before changing the implementation. The plan defines when to switch a component and when the old component can responsibly be retired. [2]
Questions to settle first
- Which existing behavior is business-critical but poorly documented?
- How will data remain consistent while old and new coexist?
Make acceptance measurable
- Comparison of critical scenarios across existing and replacement implementations.
- An exercised cutover and fallback path with retirement criteria.
First replace only the enquiry-status reader
This example moves one read function to a new route. Enquiries and statuses continue to be changed in the existing system. It is a design example; no migration result has been measured.
Define the boundary and source
The new component may only retrieve the current status for an existing enquiry ID. The existing system stays authoritative and handles every business update. Creating an enquiry or changing a status is outside this step.
Compare before cutover
Compare the old and new read routes using the same source version and permitted test records. Check known statuses, changed statuses and a missing enquiry ID. An unknown record is not interpreted as completed or as an empty result.
Switch a limited group
Let the agreed user group use the new reader through a controlled routing choice. Show freshness and make errors recognisable. Keep the old read route available during the agreed evaluation.
Follow the agreed recovery route
When an agreed stopping condition occurs, routing returns to the old reader. This recovers only the read function; it is not a data rollback. If the source itself is unavailable, both readers depend on it and the agreed manual route applies.
What the process delivers
This step can establish whether the bounded read function is ready to take over. Expanding to writes or data migration requires a new decision with its own recovery tests.
How to test this example
- Old and new show the same agreed status for the same source version; a missing enquiry has a recognisable outcome.
- The new reader cannot change business records and applies the agreed access boundaries.
- Fallback restores the old read route while retaining source changes made during the trial. A source outage is handled separately.
Compare your options
Choose based on the task, the people involved and what you can maintain.
| Approach | Useful when | What to consider |
|---|---|---|
| Retain and improve | The business function remains useful and the constraint can be bounded. | Address the specific problem and test existing behaviour; the remaining dependencies still need maintaining. |
| Replace in stages | A function can be separated from the existing environment behind a clear boundary. | Temporary coexistence needs explicit data ownership, cutover criteria and a recovery route. |
| Retire | A function is no longer needed or is demonstrably supported elsewhere. | Check users, integrations, scheduled jobs and required history before ending access or processing. |
What I need to start
- An inventory of the selected component, users, scheduled jobs, integrations and business rules, including known exceptions and current behaviour.
- A data owner, stable record IDs and agreements on the authoritative source and write permissions in each phase. Concurrent writes need separate conflict rules.
- An agreed boundary between old and new. Software architecture can define dependencies; an API integration can support temporary exchange.
- Representative tests, acceptance and stopping criteria, a cutover point and a responsible decision-maker. Define which work continues, waits or is handled manually during an outage.
- A recovery plan that also covers data changes. Test required exports, recovery copies and any correction or replay steps before cutover.
How to assess the result
- The selected function produces the agreed outcome for the same source version; missing records and differing statuses are reviewed visibly.
- During the transition, each field has a defined place for updates. Repeated processing does not cause unintended duplicate business actions.
- Cutover and fallback are rehearsed for the selected scope. New write operations also have a defined and tested route for recovering changed data.
- A component is retired only after checking remaining users, integrations and jobs. Operations receive documentation for both new and temporarily retained components.
What determines the cost?
A useful estimate starts with the scope. I distinguish development work from recurring usage and operating costs. These are the main drivers:
- A focused first change: investigating and replacing or improving one function, with known dependencies and representative comparison tests.
- Production introduction: temporary coexistence, any data migration, cutover, monitoring, recovery and operational handover.
- Unknown business rules, missing tests and data correction are made explicit in the scope before agreeing expansion.
- Temporary dual operation, hosting, provider licences and maintaining retained components also determine recurring costs.
Your challenge.
A practical application.
Older software is essential to the organisation but difficult to change.
Before modernisation, a software audit helps separate risks and dependencies from assumptions. A software architect can then determine which parts remain, are replaced or need an intermediate layer. Also plan how information and daily work stay available during the transition.
Which components create risk, and which must remain operational during migration?
Agree the first step
Use the prerequisites, acceptance checks and cost factors above to define your assignment. Agree who can approve the outcome and who will maintain the solution. The project approach explains discovery, delivery and handover.
Read the project approachYour questions.
Clear answers.
Does our existing application need a complete rebuild?
Not automatically. We assess the constraint, dependencies and required business function. Improving, replacing or retiring one component may be enough. Full replacement needs its own justification and a plan for data, users and continuity.
Can employees keep using the software during modernisation?
That is a design requirement to agree in advance, not a guarantee without investigation. We establish what needs to remain available, the required transition points and manual fallback. Old and new can coexist temporarily when their responsibilities are clear.
Can we always return to the old version after cutover?
Not without qualification. For a read-only function, fallback may be limited to the read route. If the new version changed data, reverting code does not resolve that. Data recovery, correction or a controlled forward recovery need designing and testing beforehand.
What happens to data and functions we retire?
We identify remaining users and data needed elsewhere. The data owner decides on transfer, archiving or termination. A component can close only after integrations and scheduled jobs are checked; required history and operating agreements remain explicit.
Sources and technical basis
These primary sources explain the technical principles behind this guide. The project recommendations are OXIAE’s interpretation; they do not imply endorsement by the publishers. Product documentation applies to the named platform.
- Strangler Fig patternMicrosoft Azure Architecture Center
Pattern for incremental replacement and temporary coexistence.
Link and relevance checked: - Secure Software Development Framework, SP 800-218NIST
Security practices when developing and changing software.
Link and relevance checked:
Prepare your project conversation.
Exploring Legacy software modernisation? Use the project checklist to describe your task, systems and intended outcome. Collect open questions and download a brief for your conversation.
Create your project brief