Contact Us

Legacy Application Modernization

The Code Is the Specification,
and Nobody Can Read It.

Legacy banking application transformation that begins by recovering the rules the business depends on, and ends with the old system switched off rather than retained alongside the new one.
The expensive part of modernising a legacy banking application is not writing new code. It is establishing what the existing application actually does, because the document that described it is twelve years out of date and the people who wrote it have moved on.
The problem

Six places a business rule can live, and only one of them is cheap

Before an application can be replaced, refactored or retired, what it does has to be established. That is a recovery exercise, and its cost depends entirely on where each rule currently lives.

A runtime or database out of support

Which converts a choice into a dated obligation.

Two people who understand it

And a retirement date is now a programme risk.

No seam to split the application at

So incremental replacement is not actually available.

The data model is six systems’ contract

Changing it is a programme of its own.

A user interface refresh called modernisation

New front end, same logic, same constraints.

Release cycles measured in quarters

Because nothing can be tested except by hand.

No automated tests, so no safety net

Every change is validated by production.

The old system still running afterwards

Because its history has nowhere else to live.
Pick one business rule in a legacy application and ask the business owner to state it. Not the system behaviour, the rule. If they can state it precisely and it matches what the system does, that rule is on the top rung of the ladder. In most cases the answer describes the intent and the system does something slightly different, and the gap between those two is where the cost and the risk of the whole programme sits.
Our approach

Recover the rules, find the seam, then write code

Transformation programmes usually begin with a target architecture, because that is the part everyone can discuss. The target is the easy half. What the existing system does, and where it can be cut, determines whether the target is reachable incrementally or only in one high-risk step.
So the first two phases produce artifacts rather than code, and they are the artifacts that make the estimate real.

Step 1

Assess the application portfolio against business value and risk

Step 2

Discover dependencies, consumers and the data model’s obligations

Step 3

Analyse technical debt and the dated constraints: support, skills

Step 4

Recover the business rules and place each one on the ladder

Step 5

Build the test harness against current behaviour

Step 6

Identify or create a seam, and prove it carries traffic

Step 7

Decide the disposition per component, not per application

Step 8

Design the target for the components that are actually changing

Step 9

Transform incrementally behind the seam, harness running

Step 10

Run in parallel and compare outputs on real inputs

Step 11

Cut over per component, with rollback, per Data & Application Migration

Step 12

Retire the legacy component, including where its history lives
Ask who reads the legacy application’s database directly. The answer from the application team will be incomplete, because direct readers do not need their permission. Database-level access logs give the real list, usually within a day, and it is almost always longer than expected. That list is the actual scope of the modernisation, and producing it before committing to a plan is the cheapest risk reduction available.
What we build

Recovery, transformation, transition and retirement

Grouped by what each part does. The recovery group comes first in every engagement, and the retirement group is what makes the programme finish rather than stop.

Recovery and assessment

Application portfolio assessment and triage, including the applications whose correct disposition is retirement
Business rule recovery, with each rule placed on the ladder in section 2 and confirmed with its owner
Dependency and consumer discovery, including direct database readers
Technical debt and constraint analysis: support dates, skills concentration, licence terms
Test harness construction against current behaviour, which is the prerequisite for everything else

Transformation

Rehosting and replatforming where the platform is the problem and the code is not
Refactoring where the code is salvageable, behind a harness and a seam
Rearchitecting into modular services where the business case supports it, which is less often than it is proposed
Replacement with a product where the function is commodity, including the configuration and integration work that is the real project
API enablement, so a retained application can participate without being rewritten
Database and data model modernisation, with the consumer problem addressed rather than deferred
User interface modernisation, where it is not being used as a substitute for addressing the logic

Transition

Seam creation where none exists, which is frequently the first engineering deliverable
Parallel running and output comparison on real inputs
Incremental cutover with per-component rollback, with the mechanics on our Data & Application Migration page
Compatibility interfaces for consumers who cannot move yet, with expiry dates attached

Retirement

Legacy application retirement, including the decision authority for switching something off
History and records disposition, which is the condition for retirement rather than an afterthought
Verification that nothing still calls the application before it is switched off
Licence, support and infrastructure cost termination, which is where the business case is actually realised
Where this gets used

Seven application types, and where the rules are hiding in each

The transformation pattern differs by application type, and so does the place the undocumented logic tends to accumulate. That second point is the useful one.

Loan processing applications

Origination and processing systems carrying years of product variants, exceptions and pricing adjustments.

Customer servicing applications

The systems staff use to maintain accounts, process requests and resolve issues.

Internal banking operations

Back-office processing: adjustments, exceptions, settlements, reconciliation support.

Legacy reporting applications

Reporting built inside or directly against the application, often predating any data platform.

Workflow and case systems

Systems routing work between teams, with queues, states and escalations.

Branch applications

Teller and branch systems, often with a long tail of local variation.

Core-adjacent applications

Applications sitting directly against the core, holding logic the core does not.
Ask when the application’s configuration was last changed, and by whom. If it changes regularly and is not in version control, the institution is making customer-affecting changes with no review and no history. If it has not changed in years, the flexibility it provides is costing complexity and delivering nothing. Either answer is useful, and both change how the transformation should be scoped.
How it is built

Patterns chosen for the component, not for the programme

We work within your existing technology standards and platform decisions. The target architecture matters less than people expect; what matters is that each component gets the pattern that suits it, and that the pattern is chosen after the rules are known rather than before.

Strangler

Incremental replacement behind a seam, with traffic routed and outcomes compared. The right default where a seam exists or can be built.

Branch by abstraction

An interface introduced inside the application, so old and new implementations can coexist in code. Useful where no external seam is available.

Anti-corruption layer

A translation layer between the legacy model and the new one, so the new code is not shaped by the old data model. Essential where the legacy schema is the enterprise contract, per section 3.

Encapsulate and expose

Leave the application in place and put an interface in front of it. Correct for retained applications and frequently the right answer.

Extract a component

Pull one bounded function out into a service, with its data. The hard part is the data, not the code.

Replace with a product

Where the function is commodity. The configuration, data migration and integration are the real project.

Rewrite in place

A last resort, chosen deliberately when no seam can be built, and planned as the high-risk option it is.
Modular architecture, with service boundaries drawn around business capabilities rather than around technical layers
Microservices where the operational cost is justified by independent change, which is a smaller set of cases than usual practice suggests
APIs and internal contracts, per our Data & Application Integration page
Event-driven patterns where consumers need to react to change rather than ask for it
Containers and modern runtimes, with hosting decisions on our Cloud Modernization page
Database modernisation, including the consumer problem in section 3
Automated testing at every level, starting with the harness against legacy behaviour
Governance

Every step reversible, every change evidenced

A transformation programme changes systems that hold customer money and customer records. The control requirement is not unusual, but it has to apply to a sequence of changes rather than to a single release.

Secure development

Threat modelling, code scanning, dependency security, secrets handling.

Data integrity

Nothing lost or altered in a transformation step, verified rather than assumed.

Dependency management

Known components, known versions, known vulnerabilities.

Access control

Who may change what, with segregation your controls require.

Change management

Each step through your process, with the comparison evidence attached.

Rollback

Per component and per step, covering data and downstream effects rather than only the application binary.

Entitlement review

Roles re-derived in the target rather than copied, since copied entitlements carry forward every accumulation.

Business continuity

The service keeps running throughout, which constrains the sequence.

Evidence

What changed, what was compared, who accepted it, retained.
Keeping it honest

Programme measures that cannot be reported favourably by accident

Modernisation programmes report components delivered, which rises steadily whatever else happens. These are the measures that correspond to the institution actually being better off.
Legacy components retired, which is the measure that corresponds to finishing, and the one that stalls when the history question in section 9 is unresolved
Business rules recovered and confirmed with an owner, as a proportion of the rules identified, which is the best early measure of whether the programme understands its own scope
Test coverage of legacy behaviour, since this is what every subsequent step depends on
Change lead time for the application, before and after, which is the outcome the business notices
Compatibility layers live and their expiry dates, so temporary does not become permanent
Direct database consumers remaining, which is the dependency that determines whether the data model can ever change
And the legacy licence, support and infrastructure cost still being paid, which is where the business case is realised or lost
Availability and response time per component against a stated objective
Incident rate and recovery time, trended rather than counted
Deployment reliability: change failure rate alongside deployment frequency, since the second without the first is not an improvement
Regression coverage, and defect escape rate: the proportion of defects found in production rather than before it, which is the honest measure of whether the harness is working
Critical dependencies removed or isolated, which is the structural progress measure
Technical debt as a tracked and owned list rather than a sentiment, with each item carrying a consequence
Ask how many people can safely make a change to each legacy application, by name. When the answer is two, that is a dated risk whether or not anybody has written it down, and it will become urgent on a timeline the institution does not control. It is also the most persuasive item in any modernisation business case, because it is specific, verifiable, and everybody in the room already knows the names.
Outcomes

What changes when the rules are known

Outcomes depend on the portfolio, the state of the documentation and how much of the logic is recoverable. These are the changes the work is aimed at.
The rules the business depends on are written down, confirmed and owned, which is valuable whatever happens to the application
A test harness exists, so a change can be made and checked rather than inspected and hoped for
Each component has a disposition chosen deliberately, including the ones correctly left alone
Transformation happens behind a seam, with each step reversible
Acceptance is evidenced by parallel running on real inputs rather than by a test report
Direct database consumers are identified and on a path, so the data model can eventually change
Change lead time falls, which is the outcome the business actually experiences
Skills concentration reduces, because the logic is documented and the stack is one people know
And legacy components are retired, with their history somewhere accessible, which is the only way the cost comes out

Assess your legacy application portfolio

Bring us one legacy application, and we will recover its rules, identify its consumers, establish whether a seam exists, and tell you honestly whether incremental transformation is available or whether this is a replacement project that should be funded as one.

Why choose CaliberFocus for Legacy Application Modernization?

CaliberFocus transforms legacy banking applications by first recovering the business rules they depend on, then finding a seam before promising incremental delivery. We build characterization tests against current behaviour, choose the transformation pattern per component, prove each step by parallel running on real inputs, and finish by giving the application’s history somewhere to live so it can be switched off.

Security & Compliance

Ready to transform your business? Contact us today.

Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.