Skip to content

Products & architecture

Modernising a business application without rebuilding everything

Modernising a business application does not necessarily mean rewriting it. A progressive approach can protect the useful parts, isolate constraints and replace components when value or risk justifies the work. The first decision is to understand what needs to change and what must remain stable.

Binov · 5 min ·

In this guide

1. Start with observable problems

Avoid diagnosing the product only by the age of its technology. Connect each problem to a user journey, incident, delivery delay, operating cost or security constraint.

Consider a fictional management application that works well for viewing records, while every new rule requires changes across several modules. The initial goal is not to “move to a modern architecture”. It is to reduce the risk and lead time of changing rules without interrupting record access.

Signal Evidence to collect Business consequence
Slow delivery Steps and waiting time from a recent change Rule applied too late
Repeated incidents History, component and conditions Work interrupted or repeated
Critical dependency Skills, supplier or unsupported version Difficult change or support
Poor journey Observation and qualified feedback Workarounds and duplicate entry
Opaque cost Infrastructure, licences and operating time Decisions cannot be compared

Rank problems by impact and frequency. A visible but rare inconvenience should not automatically take priority over a weakness that threatens every release.

2. Map before dividing

Map user journeys, data, interfaces, scheduled processing and ownership. Identify components that change together and those with an already stable boundary.

Look for invisible dependencies as well: an export used by another team, a manual script, a rule copied into a spreadsheet or a shared service account. Confirm these uses with their owners; reading the code alone may not reveal them.

The map does not need to be exhaustive before work begins. It should be precise enough to select a first change and prepare its rollback.

3. Choose a strategy for each area

Different parts of the application call for different responses.

Strategy Use Example
Retain Stable component that fulfils its role Verified calculation engine that rarely changes
Encapsulate Useful function with a difficult interface API facade in front of an older module
Renovate Serviceable code that is tightly coupled or poorly tested Separate a rule and add tests
Replace Risk or limit that incremental change cannot solve Exposed unsupported component
Retire Function with no confirmed use Remove an export after observation

This prevents modernisation from becoming one indivisible programme. The first stage should deliver a verifiable benefit while reducing uncertainty for the next one.

4. Add control points

Before changing a critical area, create ways to compare behaviour: tests, performance measurements, error traces and business indicators. When code cannot be tested directly, begin with tests at the application’s visible boundaries.

Define how old and new parts will coexist: which source is authoritative, how data flows and how inconsistent double writes are prevented. Any temporary synchronisation needs an owner, monitoring and a removal condition.

Prepare a proportionate rollback. It might use traffic switching, a feature flag or temporary access to the previous journey. Test that rollback before launch.

5. Deliver a path, not a tunnel

Divide modernisation into usable outcomes: expose a stable interface, move one rule, replace a screen, automate deployment or remove a dependency. After each stage, measure the intended effect and reassess what comes next.

Stage Verifiable outcome Condition to continue
Observe Critical dependencies and journeys identified Owners and risks confirmed
Stabilise Tests and measures around the selected area Baseline behaviour known
Extract New boundary used within a limited scope Equivalent results and tested recovery
Expand More users or data Acceptable incidents and performance
Retire Previous component has no traffic or dependency Backup and ownership confirmed

A dedicated team can prepare foundations, but product and business owners should remain involved in priorities and acceptance. The guide to organising product teams with AI agents describes a decision model that also applies to this kind of change.

6. Add AI as a capability, not a pretext

If modernisation includes an AI feature, isolate it behind an interface and preserve a non-AI journey when the main task must remain available. Do not couple the overall migration to an experimental hypothesis.

The guide to integrating AI into an existing application covers access, monitoring and progressive rollout. If the solution directly assists users, also review how to design a business AI copilot.

Frequently asked questions

When is a complete rewrite justified?

When fundamental constraints cannot be isolated or corrected in stages, and a funded replacement, migration and rollback path exists. It should address specific risks, not only a technology preference.

Where should a tightly coupled application start?

Choose an observable boundary with clear business value. First add tests and measurements around current behaviour, then introduce an interface that enables progressive substitution.

How should modernisation be measured?

Track the problems that motivated the work: change lead time, incidents, recovery time, release frequency, operating cost or journey completion. Avoid counting only migrated components.

Build and evolve your software products.

Support your applications with engineering expertise, quality practices and suitable AI tools.