Feature Freshness and Staleness SLAs
A service-level agreement that specifies how old a feature value is allowed to get before a model is fed stale data without knowing it.
Prerequisites: Feature Stores
A model in production doesn't just need the right feature computed once — it needs a fresh value of that feature every time it scores. A feature freshness SLA states, for each feature, the maximum acceptable age of the value the serving system hands the model: an intraday volatility feature might promise an update within 5 minutes, while a quarterly-earnings-based feature might only promise freshness within a day, matching how often the underlying data actually changes. If the pipeline that computes a feature falls behind — a data source goes down, a batch job fails silently, a stream backs up — the serving layer keeps returning the last value it has, and the model keeps scoring on data that's quietly out of date, with no error thrown anywhere.
This is why staleness needs to be monitored as its own metric, separate from whether the feature pipeline is "up": a system can report healthy while serving a feature that's six hours past its SLA. Typical monitoring attaches a timestamp to every feature value at write time and alerts when the age of the value being served exceeds the SLA threshold, rather than relying on the absence of errors as proof that data is current.
A staleness SLA sets a maximum allowed age for each served feature value, and because a stale feature usually fails silently rather than throwing an error, the age of served data has to be monitored directly — pipeline uptime alone doesn't guarantee freshness.
Further reading
- Uber Michelangelo team, Feature Store Design Patterns