Case study · 2024 · Insurance
Claims Platform Migration for an Insurance Administrator
A third-party claims administrator was running its core system on a .NET Framework application in a server room the business had outgrown — and the person who understood the nightly batch was retiring. We migrated the platform to Azure and .NET 8 in phases, with a dual-run reconciliation harness proving every step, and rebuilt backup and recovery from a nightly tape ritual into a 15-minute recovery point.
Screens are illustrative recreations — client interfaces stay confidential.
The challenge
Fourteen years of claims history — 2.3 TB across a sprawling SQL schema — powered daily operations and regulatory reporting. A migration that lost or subtly altered a record wasn't a bug; it was a compliance event.
The nightly batch had grown to nearly six hours and was creeping toward the start of the business day, while the disaster-recovery answer was a 24-hour-old backup and a hopeful runbook.
What we built
Strangler phases, not a big bang
The system moved in slices — reporting first, then document handling, then core claims — each phase running dual with the legacy system until reconciliation proved it, so rollback was always one traffic switch away.
Reconciliation as a harness
An automated diffing harness compared record counts, financial totals, and sampled row-level detail between old and new after every sync cycle — discrepancies blocked cutover automatically rather than by meeting.
Modernized where it paid
Code moved to .NET 8 with the batch re-engineered for set-based operations and parallel stages — the six-hour nightly close now finishes in 68 minutes, with headroom measured, not guessed.
Recovery rebuilt as policy
Azure SQL point-in-time restore, geo-redundant backups, and a tested failover runbook took the recovery point from 24 hours to 15 minutes — and the restore drill is now a quarterly habit, not a hope.
The results
- 2.3 TB
- Records migrated cleanly
- −81%
- Nightly batch duration
- 15 min
- Recovery point objective
14 years of claims history, zero reconciliation breaks
355 min → 68 min after re-engineering
down from a 24-hour backup cycle
Median of nightly runs in the final month of each phase.
View the data as a table
| Batch duration | |
|---|---|
| Legacy | 355 min |
| After lift | 210 min |
| Replatformed | 120 min |
| Optimized | 68 min |
- All 14 years of records migrated with zero unresolved reconciliation breaks across every phase gate.
- The nightly batch dropped from 355 minutes to 68, ending the slow-motion collision with the business morning.
- The server room was decommissioned on schedule, and the administrator's clients passed their vendor-continuity reviews on the new platform's recovery evidence.
Client identities stay confidential; figures are rounded from end-of-engagement delivery reporting.
Stack & expertise
- .NET 8
- C#
- Azure App Service
- Azure SQL
- Azure DevOps
- Docker