ML Systems Lab Open interactive version →
Intermediate 29 min read feature storecold startstalenessversioning

Feature Store API Traps

Stale features, cold-start, versioning, deprecation

A new user signs up. Your feature "average spend in last 30 days" has no history for them, so the feature store returns null. The model — which only ever saw users with 30+ days of history — gets a null where its main spend signal should be. It still produces a score. The score looks plausible. It is garbage. This is the cold start problem, and it fires on the very first request for every new user, item, or account, across every feature built on history.

And nothing warns you. The null gets quietly turned into zero (shoving the model toward its most extreme low-spend prediction) or passed straight through the network (behaving however that architecture happens to behave). Either way the model was never trained for this input, and a real user gets a confidently wrong answer.

Cold start is one of four silent failure modes in production feature stores. Here are the other three.


Stale features. A materialization job dies overnight, the online store stops updating, and the model starts serving yesterday's — or last week's — numbers. The API call succeeds. No exception, no alert, unless you built one. The only real defense is to ship a `feature_last_updated_timestamp` in every serving response and monitor it against the freshness SLA.


Version deprecation in place. A team redefines "user_purchase_count" from a 7-day window to a 30-day window *under the same name.* A model trained on 7-day counts now silently receives 30-day counts — for a steady user, roughly 4× larger — and its predictions drift upward with no error anywhere. The fix is a rule: never change a feature's meaning in place. Give the new definition a new name and sunset the old one with notice to its consumers.


Backfill that leaks the future. To train on a brand-new feature you need historical values, so you backfill them. Those values must use only data that existed at each past timestamp. The classic bug: backfilling a "7-day rolling average" using everything up to the *backfill run date* instead of the true window at each point. Now the training set contains future information, offline metrics look great, and production disappoints.


The theme: don't expect the store to handle these for you. Cold-start defaults, freshness SLAs, and deprecation workflows are decisions you make *per feature.* The infrastructure computes and serves values; it has no idea what a sensible default is for a new user, what "fresh enough" means for your use case, or which models break when a pipeline is turned off. Those calls are yours.

Key points

Takeaway

Feature store failures are silent — no exception fires when a feature is stale, null, or semantically different from what the model expects, and the only mechanism that finds them before users do is explicit monitoring that you built specifically for that purpose.

Recap

Check your understanding

Q1. A materialization job dies overnight. The online feature store keeps serving requests successfully — no exception, no alert — but every value it returns is now a day (or a week) old. What is the module's recommended defense against this?

Q2. A new product launches with 10,000 new items and the recommendation model ranks them very low. Select the two true statements about why, and how to fix it.

Q3. Explain how a feature version change from "purchase_count_7d" to "purchase_count_30d" with the same feature name would manifest in model performance over time.

Q4. How do you implement a testing strategy for a feature pipeline to catch backfill inconsistencies before they reach training data?

Try it interactively

ML Systems Lab is a free interview-prep platform for ML engineers — work through the full interactive module, quizzes, and drills.

Open ML Systems Lab →