← Back

2026-06-14

The Schema Versioning Problem in Long-Lived Financial Contracts

A pension contract signed in 2005 is a promise that outlives every system, every architect, and every data dictionary that touched it. The policy is still on the books in 2026. The schema it was born into is not.

This is the part that data teams underestimate. In e-commerce or SaaS, a schema migration is a Friday afternoon Liquibase script. In pension and life insurance, the schema you used to issue a policy is part of the contractual and regulatory record. When the regulator asks how you computed the technical reserve in 2011, or when a beneficiary disputes a payout calculation from 2014, you do not get to answer with today's model.

Why long-dated contracts break schema discipline

A term life or unit-linked pension product has three structural traits that make schema versioning uniquely painful:

The combined effect is that the data model is not a snapshot. It is a moving target with legal weight at every point in time.

The silent compounding

Most insurers handle schema change the same way:

  1. Add a new column when the regulator asks.
  2. Backfill it with a best-effort default for existing policies.
  3. Document the change in a Confluence page that nobody reads.
  4. Move on.

Each of these steps is individually defensible. The compounding effect is not. After ten years of this, you have a policy table where:

None of this is visible until a FATCA audit asks you to reproduce the reportable population as of December 31, 2017, using the rules and the data model that were in force on that date.

What "reconstruct the model" actually means

In a cross-border audit — FATCA, CRS, or a regulator-driven restatement — you are asked three things:

If your only answer is "we have a backup tape from 2017 somewhere," you have already lost. Restoring a tape gives you data, not a runnable model. You need the DDL, the reference data as of that date, the calculation logic version, and the mapping from then-fields to now-fields.

Most insurers I have seen cannot do this past three years back. Some cannot do it past one.

What actually works

This is not solved by picking a fancier database. It is solved by treating schema as a first-class, versioned, time-bound artifact. Concretely:

The honest part

None of this is greenfield work. If you are running a portfolio with policies from the 1990s on a core system that was modernized twice, you will not retrofit bitemporal storage across the board. You will not reconstruct the 2008 code list from memory.

What you can do is stop the compounding. Pick the next regulatory change — there will be one within twelve months — and treat it as the first entry in a properly versioned schema register. Backfill what you can defend. Mark the rest as unknown. The goal is not a perfect history. The goal is that five years from now, when the audit comes, the period after today is reconstructible.

The period before today is a negotiation. The period after today is a choice.