Feature schema compatibility rollouts
Stage producer and consumer versions together, preserving units, defaults, key identity, transformation artifacts, and rollback data.
On this page
The question for today
What you’ll understand
- Distinguish decoding compatibility from semantic model compatibility.
- Design a side-by-side feature and consumer migration.
- Test version resolution and rollback against actual backend support.
Feature changes affect two programs at once: the producer that defines and writes values, and the model consumer that interprets them. A wire-compatible field can still be semantically incompatible with an old model. Rollouts must therefore bind schemas, transformations, preprocessing artifacts, and consumer expectations together. The goal is to make every served version combination intentional and testable throughout the transition.
Compatibility is about decoded meaning
A storage type widening or added optional field may be decodable by an older reader under some formats, but format compatibility does not prove feature compatibility. Changing units, category IDs, vector ordering, missingness, time windows, or entity normalization can invalidate a model while leaving a numeric payload readable. A default must have the meaning the model was trained to interpret; treating an absent risk score as zero can be materially different from a dedicated missing indicator. Check field presence and ordering at the actual model-input assembly point.
A feature bundle should resolve a declared set of schema, transformation, source, key, and preprocessing versions. A model deployment may support only some combinations. Avoid mutable active-definition lookups where a model requires a fixed revision. Registry caching and long-lived workers can create a mixed fleet even after a control-plane update succeeds. Log the resolved identities in validation requests and test old/new combinations explicitly. An application must reject an unsupported pairing instead of hoping a shared field name will cause the consumer to adapt automatically.
Stage data and consumers before changing the route
For an incompatible change, create a separate supported feature generation or namespace, backfill it, and keep both producer paths current while validating. Deploy a consumer that explicitly expects the candidate representation, compare its inputs and predictions on controlled traffic, then change routing according to a rollout policy. Retain the old representation and its compatible consumer for a defined rollback horizon. Reverting a schema pointer alone cannot recreate an old feature population if writers stopped maintaining it or a destructive migration erased its source interpretation.
Feast’s current versioning documentation labels the feature as alpha and describes backend limitations: version-qualified online reads currently require the supported SQLite path and configuration, rather than working automatically on every online store. Pin Feast v0.66.0 APIs and inspect deployed backend support before designing a migration around version syntax. Separate names or an application-managed generation can be necessary where built-in support is absent. A feature service groups model inputs, but registering it does not itself validate every consumer, prewarm every entity, or provide cross-store atomicity.
Use pairing tests and observe the real migration
Build a compatibility matrix containing old producer with old consumer, candidate with candidate, and any mixed combinations that can occur during deployment. Test missing, null, boundary values, unknown categories, key aliases, stale registry caches, partial backfill, and fallback behavior. A shadow comparison should preserve each model’s intended input contract instead of feeding both models whichever representation is easiest to fetch. Monitor distributions, missingness, age, and resolved versions by deployment cohort, and make rollback prerequisites observable rather than a promise in release notes.
The sigmoid instrument illustrates a representation-and-consumer pairing. Reset, set both x=1 and w=1, predict σ(0.5)≈0.62246, then Play or Step. Separately Reset, set both x=2 and w=0.5, predict the same output, then Play or Step. For a third run Reset, set both x=2 and w=1, predict σ(1.5)≈0.81757, then Play or Step. The adapted coefficient preserves this toy computation while the mixed pairing changes it. This single fixed-bias unit does not migrate schemas or establish model equivalence beyond its stated arithmetic.
Work it through
Readable numbers can have incompatible units
An old feature stores dollars. Its consumer standardizes with (d−10)/5. A candidate producer writes cents into the same readable floating-point field. Consider a purchase of 12.50 dollars under the exact unit convention.
The old representation is d=12.5 and the expected standardized value is (12.5−10)/5=0.5.
The candidate representation is c=1,250 cents. Feeding that unchanged to the old formula gives (1,250−10)/5=248, even though the field parses successfully.
A compatible candidate consumer converts c/100 to dollars before applying the intended rule, recovering 0.5. Alternatively the definition can change deliberately with retraining and validation; silently mixing the old model and new unit is not a safe rollout.
Version producer and consumer meaning together. Parsing success cannot certify that a deployed model receives the representation it expects.
The living notebook
Explore the model
Interactive lab · network
A representation change needs the matching consumer
Reset, set both x=1 and w=1, predict ≈0.62246, then Play or Step. Separately Reset, set both x=2 and w=0.5, predict ≈0.62246, then Play or Step. Third Reset, set both x=2 and w=1, predict ≈0.81757, then Play or Step. This fixed σ(wx−0.5) unit illustrates pairing only, not schema migration or general model equivalence.
- Product · wx
- 1.2
- Logit · wx − 0.5
- 0.7
- Sigmoid output
- 0.6682
One inspectable sigmoid unit, σ(wx − 0.5). Playback traces the computation graph. There is no training, attention mechanism or hidden deep network. Parameter changes pause playback and recompute the model at the current elapsed time. Reset restores both parameters and returns time to zero. Playback starts paused. Adjust either parameter, then choose Play or Step.
Look forTest every producer-consumer pairing that a staged rollout can actually serve.
Pause & reason
Check your understanding
Your turn
Try it yourself
An old consumer expects meters and receives a value of 2.5. A new producer sends centimeters for the same distance. What value is sent, and what conversion must a compatible consumer apply?
Take a moment to make a prediction or work it out on paper. Open a hint when you need one.
Give me a hint
A hundred centimeters represent one meter under the declared unit convention.
Compare with the solution
The producer sends 250 centimeters. A compatible consumer divides by 100 to recover 2.5 meters before any old meter-based preprocessing. Treating 250 as meters changes the input by a factor of one hundred despite a valid numeric type; deployment must preserve or deliberately replace the semantic contract.
Keep the idea
Take it with you
- Test semantic meaning in addition to wire and storage compatibility.
- Stage feature generations with explicitly compatible model consumers.
- Verify actual backend version support, data readiness, and rollback population.
Read further
Original sources and deeper explanations to follow at your own pace.
Optional progress, saved in this browser when available. Revisit any lesson at any time.
Lesson not marked complete.