Skip to content

Engineering · 6 min read

Insurance Legacy System Modernization: Strangler Fig, Data Migration and Parallel Running

How to modernise a mainframe or old .NET or Java insurance system: strangler fig slices, data migration and reconciliation, parallel running and costs.

Zain Khalid MalikZain Khalid MalikCTO & Co-founder, Innovation InsightPublished
Close-up of colour-highlighted source code on a dark screen

Short answer

Modernise an insurance legacy system in slices, not in one cut-over. Put an API in front of the old policy or claims system, move one product, process or channel at a time behind it, migrate and reconcile data per slice, and run old and new in parallel until the numbers match. Innovation Insight starts with a $5k to $15k assessment; staged modernisation programmes run $40k to $150k+. Most failures come from big-bang cut-overs and unreconciled data.

What "legacy" means in insurance

Insurers keep systems longer than most industries because a life policy or a long-tail liability claim can stay open for decades, and the system that issued it has to keep servicing it. The usual estate looks like this:

System typeTypical age and stackMain risk
Mainframe policy or billingCOBOL, CICS, DB2 or VSAM, batch overnight cyclesShrinking pool of people who understand it; changes take months
Client-server PAS from the 2000s.NET Framework or Java EE, stored-procedure heavy SQL Server or OracleOut-of-support runtimes, business rules hidden in stored procedures
Vendor core on an old versionA licensed suite several major versions behind, heavily customisedUpgrades cost as much as replacement because of the customisations
Spreadsheet and Access estatesRating workbooks, bordereaux, claims logsNo audit trail, key-person dependency

Each needs a different first move, which is why we always start with an assessment rather than a rewrite proposal. Our legacy modernization services page covers the general method; this post is the insurance-specific version.

Why big-bang replacements fail

  • In-force business cannot pause. Endorsements, renewals and claims on existing policies continue every day of the project.
  • Business rules are undocumented. Twenty years of rating exceptions, state-specific notices and manual workarounds live in code and people's heads; nobody can list them all up front.
  • Data is effective-dated and messy. Policies have many versions, some backdated, and historic data often breaks rules the new system enforces.
  • One cut-over date concentrates every risk. If anything is wrong, the whole book is affected and rollback is rarely real.

The strangler fig approach

The strangler fig pattern (named by Martin Fowler) replaces a system gradually: put a facade in front of the old system, route one piece of functionality at a time to new code, and retire the old parts as they stop receiving traffic. In insurance the slices are usually chosen along one of three axes:

Slice byExampleGood when
ChannelNew agent portal and customer self-service first, still calling the old core for quotes and policy dataDistribution is the pain and the core is stable
Product or lineNew business for one product written on the new platform; the old book stays on the old system until renewalA new product launch or a simple line can go first
ProcessClaims intake, document generation or billing moved one at a timeOne process is clearly the bottleneck

Renewal is a natural migration point: as each policy renews, it is rewritten on the new system, and after one policy term most of a personal lines book has moved without a bulk conversion. Long-tail lines and life business need a conversion instead, because policies may not renew for years.

The facade matters. We usually put an API layer in front of the legacy system first, even before any new functionality, so every new channel talks to one stable interface and the legacy system can be swapped out behind it later. Our API development and integration team builds these layers, including wrappers around batch files and database replicas when the old system has no API.

Data migration and reconciliation

Migration is where insurance modernisations actually slip. The work is less about moving rows and more about proving the numbers match.

  1. Profile the source: count policies, versions, transactions and claims by status and year; find nulls, orphans and values outside the expected codes.
  2. Map to the target model with every transformation written down, including the decisions about history (all versions, or current term only plus a read-only archive).
  3. Build the migration as repeatable code, not a one-off script, so it can be run dozens of times against fresh extracts.
  4. Reconcile on business totals: written premium by month and state, in-force counts, outstanding reserves, paid losses, unearned premium. Row counts are not enough.
  5. Sample-check documents: regenerate declarations pages for a random sample on the new system and compare them with what was issued.
  6. Rehearse the cut-over for each slice at least twice with timing, then run it for real.
Rule of thumb from our migrations outside insurance: the reconciliation reports take longer to build than the migration scripts, and they are what lets finance and actuarial sign off.

Running old and new in parallel

For each slice there is a period where both systems run. Two patterns work:

PatternHow it worksWatch out for
Shadow modeNew system receives the same inputs and calculates premiums or reserves, but the old system's result is used; differences are reported dailyNeeds a comparison report and someone who reviews it
Sync servicesBoth systems are live for different slices; a sync service keeps shared data (customers, policies, payments) aligned in both directionsConflict rules and idempotency; every sync event needs an ID so retries do not duplicate

Shadow mode is ideal for rating: run a quarter of quotes through both engines and investigate every difference above a cent. Sync services are needed when the business uses both systems at once, for example new business on the new platform and endorsements to old policies on the old one.

Testing a system nobody fully understands

Before changing a legacy rating or billing module, capture what it does today. Characterisation tests (sometimes called golden master tests) feed thousands of real historic inputs through the old code, record the outputs and turn them into the test suite for the new code. For a rating engine that means a sample of real quotes by state, product and effective date; for billing, a set of accounts with instalments, endorsements and cancellations replayed month by month. Every difference is either a bug in the new code or an undocumented rule in the old one, and both are worth knowing.

Keep these tests running after go-live. They become the regression suite that protects rate changes and new states, which is where most insurance defects appear. Our QA and testing team builds them as automated jobs in the deployment pipeline so a failed comparison blocks a release.

Governance that keeps a staged programme on track

  • One owner per slice from the business side who signs off the reconciliation, not only the IT steering group.
  • A published slice plan with dates, so underwriting, claims and finance know when their process moves.
  • A decommissioning date for every legacy component that is replaced, or the old system never actually switches off and you pay to run both forever.
  • Monthly cost reporting that shows legacy run cost going down as slices move, which keeps the programme funded.

Our relevant work (adjacent, not insurance)

We have no published insurance modernisation case study yet. The closest first-hand work is Paint Nite, a ticketed events platform in the US and Canada that we rebuilt in NestJS and Next.js beside the live legacy system. Dedicated sync services keep the new platform and the old one aligned so features migrate in slices; search indexes are versioned behind aliases with dual-write during rebuilds, so schema changes that previously needed production downtime now ship with none; and the work is tracked through 53 database migrations. Different industry, same problem: the business could not stop while the system was replaced. Our codebase takeover guide covers the first weeks on an unfamiliar system.

Cost and timeline

StageWhat you getCost with usTimeline
AssessmentCode, data and integration review; slice plan; risk register; estimate per slice$5k to $15k2 to 4 weeks
Facade and first sliceAPI layer over the legacy core plus one channel, product or process livePart of the programme range below3 to 5 months
Staged modernisation programmeSeveral slices with migration, reconciliation and parallel running$40k to $150k+6 to 18 months
Support of old and new during the transitionFixes on both sides, sync monitoring$1.5k to $8k per monthOngoing

For a full custom replacement of a policy system, see our policy administration system cost post, where custom builds sit at $80k to $200k+. If you need people rather than a project, .NET developers and data engineers can join your team on a monthly basis. Start from the insurance industry hub for everything else we do for insurers.

Need a number for your project?

Send a short brief and get a written estimate.

A senior engineer replies within one business day. No sales call required.

Zain Khalid Malik, CTO & Co-founder, Innovation Insight

Zain Khalid Malik

CTO & Co-founder, Innovation Insight

Zain owns architecture, engineering standards and the platform team at Innovation Insight. He sets the bar for code quality, security and the tooling every squad ships with.

LinkedIn
FAQ

Related questions.

How much does insurance legacy modernisation cost?

With us an assessment costs $5k to $15k and a staged modernisation programme $40k to $150k+, depending on the number of slices, the state of the data and how the legacy system can be reached.

Can we modernise a mainframe policy system without replacing it?

Yes. A common first step is an API layer over the mainframe so new portals and services can be built against it, while the mainframe stays the system of record until each slice is moved.

How long should old and new systems run in parallel?

Until the reconciliation reports match for at least one full business cycle for that slice: usually one to three month-end closes, and a full renewal cycle for lines migrated at renewal.

Should we migrate all policy history?

Not always. Many insurers migrate the current term and open claims in full and keep older history in a read-only archive with the original documents. The choice depends on servicing and regulatory retention needs.

What is the biggest risk in insurance modernisation?

Unreconciled data. If written premium, in-force counts and reserves do not match between systems, finance and actuarial cannot sign off, and the cut-over slips.