Schema drift: the upstream change that quietly starves your model

An upstream team renames a column, changes a type, or drops a field. Your pipeline keeps running and starts delivering nulls. The model gets worse, and everyone spends a month tuning the model.

Schema drift: the upstream change that quietly starves your model

Someone on a team you do not control renamed a column last night. Your pipeline did not notice. Your model did.

That is schema drift, and it is one of the most expensive failures in AI delivery precisely because it fails so politely.

The connector keeps running while the data goes wrong

A product manager at a data-pipeline company put the mechanism plainly. Her product moves data out of fragmented SaaS apps into a warehouse so it can feed AI and analytics. The hardest part of her job is not building connectors. It is that the SaaS APIs underneath them keep changing. A vendor ships an update, a field gets a new name or a new type, and the connector that used to work now pulls the wrong thing, or nothing at all.

Notice what does not happen. The job does not crash. The dashboard stays green. The rows keep landing in the warehouse. They are just full of nulls now, or strings where numbers used to be, or a category that quietly split into two. The pipeline has no opinion about meaning. It moves whatever it finds.

The model inherits the drift and takes the blame

Downstream, the model reads that feed and does what it always does. It produces output. The output is worse, because the input degraded, but nothing labels it as a data problem. The most common response is the wrong one. The team decides the model regressed and starts tuning it. They adjust prompts, swap versions, tighten a threshold. Weeks pass. The whole time, the actual cause is a renamed field two systems upstream that no one on the model team can even see.

There is a triage rule from that same PM worth borrowing here. If a reliability target is being met, small stragglers can wait. But if something “leads to suboptimal customer benefit, you’ve built the ATM and money doesn’t come out, you fix that technical debt ASAP.” Schema drift is the ATM case. The screen looks fine. The money stopped coming out. And because AI features generally need around 85% accuracy before they hold up, a drift that pushes a few fields into nulls can drop you under the line without a single alarm.

Drift is detectable if you decide to watch for it

The good news is that schema drift leaves fingerprints. You do not need the upstream team to warn you, though it helps. You need to watch the shape of what arrives:

  • Null rates per field. A column that was never empty and is suddenly 20% empty changed upstream, whatever the API docs claim.
  • Type and range checks. A number field that starts receiving text, or values outside any historical range, is a retype you were not told about.
  • Cardinality shifts. A category with five stable values that jumps to seven, or collapses to three, drifted.
  • Row-count deltas. A feed that drops 30% overnight lost something, even if the job reports success.

These are cheap to compute and they run on the data itself, not on trust in the source. The point is to move drift from something you discover in production output to something you catch at the boundary, before it ever reaches the model.

Contracts stop the drift you can prevent

Detection catches the drift that already happened. A written data contract with the producing team prevents the drift you could have avoided, because it turns a breaking change into a decision someone has to make on purpose and announce. Detection plus a contract covers both halves: the changes upstream tells you about, and the ones they forget.

The teams that ship treat the arriving schema as something to verify on every load. The teams that stall assume the schema that worked at launch is the schema they will always get, and find out otherwise a month into tuning the wrong thing.

How we approach it at Density Labs

In the AI Opportunity Assessment ($2,500), we trace the feed back to its sources and flag the ones most likely to drift, especially third-party SaaS APIs that change on someone else’s schedule. We check whether anything watches null rates and types at the boundary, or whether a silent retype would sail straight through to the model. Finding the unwatched feed in a two week diagnosis is far cheaper than finding it after a quarter of tuning a model that was never the problem.

A green pipeline and a starving model can be the same pipeline. Whether data arrives tells you nothing about whether it is right, so watch its shape.