Second phase of Arc 5. Where the data tier meets ML.

The single most common ML production bug is train/serve skew: features computed differently at training vs serving time. A feature store solves this by being the source of truth for features in both modes. By phase end basecamp has Feast deployed K8s-native, with Iceberg as the offline store (Phase 31) and Redis as the online store, serving features consistently to training and serving pipelines.

This is where the data tier from Arc 4 actually meets the ML tier from Arc 5. Without a feature store, every model defines its own features and the platform splinters. With one, features are reusable, consistent, and operationally legible.


Prerequisites

  • Phase 39 complete; MLflow lifecycle disciplined
  • Iceberg (Arc 4 Phase 31) + Redis (Arc 3 Phase 20) operational

Why this phase exists

Most ML systems fail at the boundary between training and serving. The model trained on yesterday’s averaging is asked to predict on today’s last-5-minute averaging. Subtle drift. Hidden behind dashboards. Hard to debug. The feature store enforces parity by having one definition that serves both modes.


The pattern-first frame

Same eight steps.


1. PROBLEM

Your model needs features. Some are simple (current user balance). Some are aggregations (7-day rolling average of transactions). Some are joins (user features + product features). At training time you compute them over historical data. At serving time you need them in milliseconds. Train/serve skew is the dominant source of “the model worked in dev but is broken in prod” bugs.


2. PRINCIPLES

2.1 Train/serve parity

Features at training time must equal features at serving time. The feature store enforces this by being the single source of feature definitions and serving both modes from the same code path.

→ Pattern: train-serve-skew: DEEP target this phase

Investigate:

2.2 Online vs offline feature stores

Offline (Iceberg, BigQuery, Snowflake): serves training pipelines with historical features at arbitrary timestamps. Online (Redis, DynamoDB): serves the production model at sub-10ms latency.

→ Pattern: feature-store: DEEP target this phase

Investigate:

2.3 Feature definitions as code

Feature definitions live in code (Feast SDK). Version-controlled, code-reviewed, tested, deployed via GitOps like everything else in basecamp.

→ Pattern: feature-engineering reinforced

Investigate:

2.4 Materialization patterns

Offline → online materialization can be: scheduled batch (hourly), streaming (continuous), on-demand. Each has different freshness + cost trade-offs.

Investigate:

2.5 K8s-native Feast deployment

Feast on K8s: Feast components (registry, online store, materialization workers) deployed via Helm + Flux. Schedule materialization via Argo CronWorkflows.

Investigate:

2.6 Feature monitoring

Features can drift, become stale, or break silently. Monitoring covers: freshness, distribution, completeness.

Investigate:


3. TRADE-OFFS

DecisionOptionsCost
Feature storeFeast; Tecton; AWS Feature Store; Vertex Feature StoreFeast: K8s-native OSS (recommended). Tecton: managed, enterprise. Cloud: vendor lock-in.
Offline storeIceberg (already Arc 4); BigQuery; SnowflakeIceberg: K8s-native, owned (recommended). BQ/Snowflake: managed, paid.
Online storeRedis; DynamoDB; Cassandra; PostgresRedis: fast, ubiquitous (recommended). DynamoDB: AWS-managed. Cassandra: scale, ops-heavy.
MaterializationBatch (Argo CronWorkflow); Streaming (Flink); On-demandBatch: simple, hourly+. Streaming: low-latency, complex. On-demand: smallest writes.

4. TOOLS (as of 2026-06)

Reading


5. MASTERY: Feast operational on basecamp

[ ] Feast deployed via Flux + Helm; Iceberg as offline; Redis as online
[ ] Define 5+ feature views for a real use case
[ ] Materialize features offline → online via Argo CronWorkflow
[ ] Train a model using Feast offline retrieval (point-in-time correct)
[ ] Serve the same model using Feast online retrieval; verify train/serve parity
[ ] Deliberately introduce train/serve skew; observe its effect on prediction quality
[ ] Add streaming materialization via Flink for one high-freshness feature
[ ] Monitor feature freshness; alert on staleness
[ ] Integrate with KServe: InferenceService transformer pulls features from Feast
[ ] Document the feature ownership model (who owns which feature view)

6. COMPARE: Tecton or Vertex AI Feature Store

Read the docs of one managed feature store. Reflect on what’s gained vs what’s lost.

400-word reflection.


7. OPERATE


8. CONTRIBUTE


What ships from this phase


Validation criteria

[ ] Feast deployed K8s-native
[ ] 5+ feature views defined
[ ] Materialization working (batch + streaming)
[ ] Train/serve parity verified
[ ] All 10 operational depth checks
[ ] Compare reflection (400 words)
[ ] 3-4 runbooks
[ ] 1-2 ADRs
[ ] Pattern entries:
    - feature-store → DEEP
    - train-serve-skew → DEEP
    - feature-engineering reinforced
[ ] Exit Test passed

Exit Test

Time: 2.5 hours.

Part 1: Build (90 min)

Add a new feature view to Feast. Materialize it. Verify train/serve parity by sampling 50 predictions and comparing offline + online retrievals.

Part 2: Diagnose (45 min)

A feature scenario (e.g., “predictions degraded 20% after a Feast deployment”). Possible: schema drift; materialization gap; clock skew.

Part 3: Articulate (15 min)

~400 words: “Walk a serving prediction’s feature retrieval path. Cover Feast online store lookup, fallback, and the latency budget.”


Anti-patterns

Anti-patternWhy
Computing features in notebook SQLTrain/serve skew
No point-in-time joinsFuture leakage; model looks great in dev
Hourly materialization for fraud detectionFreshness gap = miss real-time signals
Skipping feature monitoringDrift accumulates silently

Patterns touched this phase


→ Next: Phase 41: ML Evaluation + Monitoring