← All writing
MLOps · 6 min read · 11 Jul 2026

Feature Stores: Real Problem or Just Ceremony?

Before adopting a feature store, it is worth asking what specific failure mode it fixes, because the answer determines whether it is infrastructure or theatre.

Cover image for the article: Feature Stores: Real Problem or Just Ceremony?

The problem feature stores claim to solve

The pitch for a feature store is usually framed around two failure modes: training-serving skew and duplicated feature logic. Training-serving skew happens when the code that computes a feature during model training differs, even slightly, from the code that computes it in production. A feature defined as 'average order value over the last thirty days' might be computed with a batch job that looks back exactly thirty calendar days in training, but with a streaming job that looks back thirty rolling days including partial data in production. The model was validated on one distribution and serves on another. This is not a hypothetical: it is one of the most common reasons offline accuracy and online accuracy diverge, and it is genuinely hard to debug because both pipelines look correct in isolation.

The second failure mode is organisational rather than technical. In a team with several models, each data scientist often writes their own version of 'customer tenure in days' or 'days since last login'. Six slightly different implementations exist across six model repositories, each with subtly different handling of nulls, time zones, or edge cases like accounts created and cancelled on the same day. A feature store centralises this: one definition, one computation, one place to fix a bug. That is a real, boring, valuable thing, not a research idea but a plumbing idea.

So the underlying problem is real. The question is whether the specific feature store you are about to adopt, with its registry, its online and offline stores, its point-in-time join engine, actually addresses these two failure modes for your situation, or whether it is solving a problem you do not have while introducing several you did not have before.

Where the value is concrete: point-in-time correctness

The clearest, most defensible value of a proper feature store is point-in-time joins done correctly. Imagine you are predicting loan default and one feature is 'number of missed payments in the last six months'. If you build your training set naively, by joining today's aggregated payment history to historical loan applications, you leak future information: a loan application from eighteen months ago gets joined against payment behaviour that includes events which happened well after that application. The model then looks unreasonably accurate offline, because it has effectively seen the future, and it disappoints badly once deployed.

A feature store that supports time-travel joins solves this by construction. You specify the event timestamp for each training row, and the store retrieves the feature value as it would have existed at that exact moment, using an as-of join against the historical feature table. This is not glamorous work, but it is precisely the kind of thing that is easy to get wrong by hand and expensive to get wrong in production. If your team has been burned by leakage of this shape, or if you have multiple models sharing dozens of time-sensitive features across a large history, the infrastructure earns its complexity.

The honest caveat is that you can achieve the same correctness with a disciplined, well-tested batch pipeline and a strict convention for timestamp columns, without touching a dedicated feature store product at all. A small team with three models and a handful of features can implement point-in-time joins in a few hundred lines of well-reviewed SQL or pandas, version it properly, and get the same guarantee. The feature store buys you scale and reuse, not correctness that was otherwise unattainable.

server data pipeline diagram whiteboard

Where the ceremony creeps in

The ceremony shows up when the tooling is adopted before the organisational pain exists. If you have one model, one team, and features that are recomputed fresh for every training run anyway, a feature store adds a registry to maintain, an online store to keep in sync, and a new set of abstractions for engineers to learn, in exchange for solving a duplication problem that does not yet exist. I have seen the pattern where the feature store becomes the second system to keep consistent with the actual data warehouse, and now instead of one source of truth you have two, plus a synchronisation job that itself needs monitoring and can itself drift.

There is also a subtler cost: feature stores encourage premature feature sharing. Once a feature is registered centrally, there is pressure to keep it stable and backward compatible for the sake of other consumers, which makes it harder for the original model owner to iterate on the definition. A feature that made sense as 'transactions in the last 7 days' for fraud detection gets reused, unmodified, for a churn model where a 90 day window would have been more appropriate, simply because the shared definition was convenient. Shared infrastructure without shared understanding of intent is how subtly wrong features spread quietly across several models.

None of this means feature stores are bad; it means the decision should follow the pain, not precede it. A useful diagnostic question is concrete: can you point to an actual incident, in your own pipeline, where a feature differed between training and serving, or where two models silently used different definitions of the same concept and it caused a measurable accuracy gap? If the answer is yes and it has happened more than once, the infrastructure investment is justified. If the answer is a hypothetical 'it could happen', you are probably solving next year's problem with this year's engineering budget, and that budget is rarely free.

A practical way to decide

Start by auditing your current pipeline for the two specific failure modes rather than adopting tooling on faith. Check whether your training feature computation and your serving feature computation are literally the same code path, or two independent implementations that happen to agree today. If they are two implementations, that is a genuine risk worth fixing, and a feature store is one legitimate fix, though not the only one; a shared library imported by both training and serving code achieves much of the same benefit with far less operational overhead.

Second, count how many models in your organisation actually share features today, not how many might in future. If the number is small, invest in disciplined, testable, well-documented feature pipelines instead of centralised infrastructure. If the number is large and growing, and you can already see engineers quietly copying feature logic between repositories with small, undocumented variations, the registry and reuse benefits of a feature store start to outweigh its cost.

Finally, treat the point-in-time correctness guarantee as the one benefit worth adopting even at small scale, because leakage from naive joins is expensive and easy to miss. You do not need a commercial feature store platform to get it: a disciplined as-of join pattern, tested against synthetic data with known future leakage, will catch the same class of bug. The tool matters less than making sure someone has actually verified, with a concrete test case, that your training labels cannot see data from after their own timestamp.

engineer reviewing data warehouse dashboard
← All writing See the project case studies →