Skip to main content
VectisFlow
VectisFlow
All case studies

Financial services · Data and platform engineering, 34 weeks

Replatforming a twelve-year-old warehouse without a reporting freeze

A migration run as two platforms in parallel for its whole duration, with a data contract on every source feed and cutover taken one reporting consumer at a time rather than one platform at a time.

Sector
Financial services
Scale
UK building society, ~3,400 staff
Duration
34 weeks
Fine protective netting stretched over a building under renovation, its floors visible behind.

Context

A building society runs its regulatory returns, its product pricing models and its branch performance reporting from a single warehouse, built in 2013 and extended every year since by whoever needed the next table.

By the time we were asked, the platform underneath it was two major versions out of support and the nightly load was finishing after the business day had started. Replacing it was already agreed. Replacing it had also already been attempted twice.

The problem

The warehouse held about 1,400 tables. Tracing readers established that 61% of them had no consumer at all, a proportion nobody had believed before it was measured.

Transformation logic lived in stored procedures, the largest running to just over 3,000 lines and amended by eleven people across a decade. There was no test suite and no specification, so the code was the only surviving statement of what the numbers meant.

The binding constraint was regulatory. Returns go out on a fixed calendar, and a figure in a submitted return has to be reproducible from source records on request. A migration that produced different numbers without being able to explain why would have been a reportable failure rather than a project delay.

Why earlier approaches failed

The 2019 attempt moved the stored procedures to a new engine largely unchanged. Its plan required a four week window in which nothing in the old warehouse could change while the two were reconciled. The business granted eleven days, then withdrew them when a pricing change had to go out, and the reconciliation was never finished.

The 2022 attempt rebuilt from source against a new model, and was the better piece of engineering. It also assumed a freeze, deferred to cutover rather than asked for up front, so the assumption went untested until the work was two years old. It ran for those two years and moved no consumer onto the new platform, because that freeze was never going to be granted either.

The pipeline we built

The third attempt asked for no freeze at all. Both platforms ran together for the whole engagement, and the unit of cutover was one reporting consumer rather than the platform.

  1. 01Consumer census

    An inventory of everything that reads the warehouse rather than everything the warehouse holds: 210 reports, extracts, models and downstream feeds, each with a named owner. Ordering the work by consumer rather than by table is what made a per consumer cutover possible at all.

  2. 02Source contracts

    A contract per source feed covering column types, nullability, allowed value sets, the meaning of each coded field and the freshness the consumers of that feed need. Contracts are enforced on landing, and a breach quarantines the batch rather than loading it and flagging it afterwards.

  3. 03Dimensional model

    Conformed dimensions for party, product, account, branch and calendar, with fact grain agreed with the consumer instead of inferred from the report it currently feeds. Two facts turned out to exist at three different grains in the old warehouse, and reconciling that was the single longest piece of discovery.

  4. 04Transformation rebuild

    Stored procedures reimplemented as version controlled, tested transformations. Behaviour was established from observed output rather than from reading the code, because the code had stopped being a reliable description of itself: the 3,000 line procedure was pinned down by 900 differential tests before a line of it was rewritten.

  5. 05Parallel running

    Both platforms loaded from the same sources every night for the full 34 weeks. A reconciliation job compares every measure for every consumer nightly and files a variance report, so the question of whether the new platform agrees with the old one is answered daily rather than at a cutover weekend.

  6. 06Variance adjudication

    Every variance is triaged into three buckets: the old platform is wrong, the new platform is wrong, or the two definitions genuinely differ. The old platform was wrong more often than anyone expected. Each resolution is written back as a test on the contract or the model, so the same variance cannot reappear silently.

  7. 07Cutover per consumer

    A consumer moves when it has reconciled at zero unexplained variance for 20 consecutive business days, at least one of which is a month end. The move itself is a configuration change and reverts inside an hour, which is what let owners agree to go first.

  8. 08Decommission

    A table is dropped from the old platform only when no consumer reads it and its lineage is reproducible on the new one. Decommissioning is the last step for each consumer rather than a phase at the end, so the estate shrinks continuously instead of all at once.

What shipped

  • A warehouse on the society's Azure tenancy with a conformed dimensional model and enforced contracts on all 31 source feeds.
  • A nightly reconciliation harness comparing every measure per consumer across both platforms, owned and run by the society's data team.
  • A variance ledger recording every difference found during parallel running and how it was adjudicated.
  • A cutover and rollback runbook for a single consumer, exercised twice by the client team before handover.

Outcomes

Each figure below carries the method behind it and the baseline it is measured against, which is the form a result has to take before it means anything.

Consumers migrated with no reporting freeze
Counted against the 210 consumer census taken in week two. The 23 that did not move were retired instead, each having no owner willing to claim it once asked.
187 of 210, 0 days frozen
Nightly load completion
Median completion time of the full nightly load over the final eight weeks of parallel running, against the twelve week median on the old platform immediately before the engagement.
07:42 → 03:05
Unexplained variances at cutover
Every consumer moved only after 20 consecutive business days at zero unexplained variance on the nightly reconciliation. Of the variances adjudicated during parallel running, 41 were errors in the old platform rather than in the new one.
0 at every cutover, 41 old platform errors found
Time to reproduce a submitted return figure
Median time to trace a figure in a submitted regulatory return back to its source records, timed on twelve returns before the engagement and twelve after, using the lineage the contracts and the model carry.
2 to 3 days → 25 min
Both of the earlier attempts died on the same sentence, which was a request for reporting to stop for a month. Nobody here was ever going to sign that, and we should have said so in 2019. Moving one report at a time looked slower on paper, and it is the only version of this that finished.
Head of Regulatory Reporting, UK building society

What next

The reconciliation harness stays in place for the two consumers still reading from both platforms, and the same contract stage is being applied to the pricing feeds, which sat outside this scope.

More engagements

  • Water treatment infrastructure at dusk, concrete channels running into the distance

    Water & utilities

    Making thirty years of asset documentation answerable at a UK water utility

    A retrieval pipeline over 380,000 asset documents: drawings, condition reports, permits and handover packs, with permission inheritance preserved from the source document management system.

    UK regional water utility, ~4,500 staff · 16 weeks

    Read the engagement
  • Repeating stone facade of a government building, shot from below against overcast sky

    Central government

    Assembling regulatory evidence from casework correspondence in central government

    An extraction and evidence-assembly pipeline over eleven years of casework correspondence, built to a standard where every extracted fact traces to a source passage and a pipeline version.

    UK central government agency, ~2,000 staff · 20 weeks

    Read the engagement
  • Glass and steel facade of a City office building reflecting a grey sky

    Financial services

    Putting a measured error rate behind claims-evidence retrieval at a specialist insurer

    An evaluation harness, adversarial suite and assurance pack retrofitted to a retrieval system already in production, so the firm could state its error rate rather than describe its intentions.

    UK specialist insurer, ~1,200 staff · 12 weeks

    Read the engagement

Get in touch

Talk to us.

A first conversation runs about forty-five minutes and covers three things: what your estate actually looks like, whether anyone can define a correct answer or an agreed number, and whether your permission model resolves per user. Any one of them can rule the work out, and we would rather tell you in week one.

Response time
One working day, from a person who has read it.