← All Posts

Feature Stores at Scale: Uber, Netflix, Airbnb

Why Feature Stores at Scale?

When an organization runs hundreds of ML models in production, feature engineering becomes a bottleneck. Data scientists spend 60–80% of their time wrangling data, and without a centralized feature store, teams duplicate effort, introduce inconsistencies, and struggle with training/serving skew.

At companies like Uber, Netflix, and Airbnb, the scale is staggering:

These constraints forced each company to build custom feature store infrastructure. Their architectures evolved through years of production experience, and the patterns they discovered are now shaping the broader MLOps ecosystem.

Key insight: Feature stores at scale aren't just bigger versions of a feature store. They require fundamentally different architectural decisions—around partitioning, caching, compute isolation, and governance—that only emerge when you hit certain thresholds of features, models, and teams.

Uber's Michelangelo

Uber's Michelangelo platform was one of the earliest large-scale ML platforms, and its feature store component—Palette—set many of the patterns the industry now follows. Built to serve features for ETA prediction, fraud detection, driver matching, and dynamic pricing, Palette had to handle extreme scale and latency requirements from the start.

Architecture

Palette uses a dual-store architecture. The offline store is built on Hive tables stored in HDFS, providing petabyte-scale storage for historical features used in training. The online store uses Cassandra, optimized for high-throughput key-value lookups. A materialization pipeline, running on Spark, moves features from offline to online on a schedule.

Real-Time Features

For features that require sub-minute freshness—like "number of ride requests in the last 5 minutes in this geo-cell"—Uber built a streaming pipeline on Apache Flink. Events from Kafka are aggregated in real-time and written directly to the online store, bypassing the batch path entirely.

Key Innovations

Uber lesson: Invest in a feature DSL early. When you have 10,000+ feature definitions maintained by hundreds of engineers, the DSL becomes the contract between data scientists (who define features) and the platform (which executes them). It enables optimization, validation, and migration that would be impossible with ad-hoc code.

Here's an example of how Uber-style DSL feature definitions translate to platform jobs:

# Uber-style declarative feature definition (DSL)
from platform.features import Feature, Entity, Window

ride_entity = Entity(name="rider", keys=["rider_id"])

# Batch feature — compiled to Spark job
rider_lifetime_trips = Feature(
    name="rider_lifetime_trips",
    entity=ride_entity,
    source="trips_table",
    aggregation="count",
    window=Window(start="entity_creation", end="now")
)

# Streaming feature — compiled to Flink job
recent_requests = Feature(
    name="geo_ride_requests_5m",
    entity=ride_entity,
    source="ride_request_stream",
    aggregation="count",
    window=Window(duration="5m", partition_by="h3_cell"),
    serving="online_only"
)

Netflix's Feature Store

Netflix's approach to feature management is deeply integrated with their broader data platform, Cosmos. Rather than building a standalone feature store, Netflix embedded feature management into their data mesh—a decentralized architecture where domain teams own their data pipelines and feature definitions.

Cosmos Platform

Cosmos is Netflix's compute platform for data and ML workflows. It orchestrates Spark jobs, manages data dependencies, and provides a unified interface for batch and streaming computation. Feature pipelines are just another type of Cosmos workflow.

Data Mesh Philosophy

Netflix treats features as data products. Each team (recommendations, search, content, studio) owns their feature pipelines end-to-end. A central catalog provides discoverability, but there's no single team that "owns the feature store." This decentralized model scales better organizationally but requires strong conventions and tooling.

Feature Management

Netflix's feature store provides:

Netflix lesson: A feature store doesn't have to be a monolithic service. Netflix's data mesh approach proves that strong conventions, shared tooling, and a good catalog can achieve the same benefits—feature reuse, consistency, and discoverability—while letting domain teams move independently.

Netflix's Cosmos-style feature pipeline definition follows a data-product pattern:

# Netflix Cosmos-style feature pipeline (data product)
from cosmos.pipelines import FeaturePipeline, SparkJob
from cosmos.catalog import register_feature

class UserEngagementFeatures(FeaturePipeline):
    owner = "recommendations-team"
    schedule = "@hourly"

    def compute(self, spark):
        viewing = spark.read.table("viewing_history")
        return viewing.groupBy("user_id").agg(
            count("title_id").alias("titles_watched_24h"),
            avg("watch_pct").alias("avg_completion_rate"),
        )

# Register as discoverable data product
register_feature(
    pipeline=UserEngagementFeatures,
    tags=["engagement", "recommendations"],
    sla_freshness="2h"
)

Airbnb's Zipline

Airbnb's feature store, Zipline, was built with a clear north star: make it trivially easy for data scientists to define features and have the platform handle all the complexity of backfill, serving, and consistency. Zipline powers features for search ranking, pricing, fraud detection, and host recommendations.

Feature Framework

Zipline provides a Python-based feature definition framework. Data scientists write feature transformations as simple Python functions annotated with metadata (entity, data source, aggregation window). The framework handles compilation to Spark, scheduling, and materialization.

Backfill

One of Zipline's most celebrated capabilities is automatic backfill. When a new feature is defined, Zipline can automatically compute its values over historical data—months or years of events—so that data scientists can immediately use the feature for training without waiting for data to accumulate.

Time-Travel

Zipline implements rigorous time-travel semantics. For any entity at any point in time, you can retrieve the exact feature values that would have been available at that moment. This eliminates a class of subtle data leakage bugs that plague feature engineering at scale.

Key Design Decisions

Airbnb lesson: Backfill is the killer feature of a feature store. If data scientists have to wait weeks for a new feature to accumulate enough data for training, adoption will be low. Automatic backfill over historical data makes the feature store immediately useful and dramatically accelerates experimentation.

Airbnb's Zipline-style feature definition with automatic backfill:

# Airbnb Zipline-style feature definition
from zipline.features import Feature, WindowAgg, Source

class HostResponseFeatures:
    entity = "host_id"
    source = Source(table="messages", event_ts="sent_at")

    # Auto-backfilled over 2 years of history
    avg_response_time_7d = Feature(
        agg=WindowAgg.AVG("response_seconds"),
        window="7d",
        backfill=True,
        backfill_start="2022-01-01"
    )

    response_rate_30d = Feature(
        agg=WindowAgg.RATIO("responded", "received"),
        window="30d",
        backfill=True,
        backfill_start="2022-01-01"
    )

# Time-travel: get features as of a specific timestamp
from zipline.retrieval import get_features_at
features = get_features_at(
    entity_key={"host_id": "H12345"},
    feature_class=HostResponseFeatures,
    as_of="2024-03-15T10:00:00Z"
)

Common Architectural Patterns

Despite different technology choices, Uber, Netflix, and Airbnb converged on remarkably similar architectural patterns. These shared patterns represent hard-won wisdom from years of operating feature stores in production.

Uber (Michelangelo / Palette)

  • Offline: Hive / HDFS
  • Online: Cassandra
  • Compute: Spark (batch), Flink (stream)
  • Governance: Centralized platform team
  • Unique: Custom DSL, geo-partitioned features

Netflix (Cosmos)

  • Offline: S3 / Iceberg
  • Online: EVCache (Memcached)
  • Compute: Spark (via Cosmos)
  • Governance: Decentralized data mesh
  • Unique: Data products, domain ownership

Airbnb (Zipline)

  • Offline: Hive / S3
  • Online: Key-value store (custom)
  • Compute: Spark
  • Governance: Centralized with self-serve
  • Unique: Auto-backfill, time-travel

Shared Patterns

  • Dual store: All three separate offline (bulk) and online (low-latency) stores
  • Feature registry: Central catalog for discovery and governance
  • Materialization: Batch pipeline moves data from offline to online
  • Point-in-time: All enforce temporal correctness in training joins

Unique Approaches

The differences are as instructive as the similarities:

Don't copy blindly: These companies built custom solutions because off-the-shelf options didn't exist at the time. Today, open-source tools like Feast and managed services like Tecton, Databricks Feature Store, and SageMaker Feature Store offer much of this functionality out of the box. Evaluate build vs. buy based on your actual scale and constraints.

Key Lessons Learned

Across all three companies, several lessons emerge repeatedly. These aren't theoretical—they're battle-tested insights from operating feature stores that serve billions of predictions daily.

1. Start Simple, Then Evolve

Every company started with batch features and a simple offline store. Streaming, real-time computation, and sophisticated governance were added incrementally as needs arose. Don't over-engineer your first feature store—get features flowing and iterate.

Lesson #1: Ship a feature store with batch features and a basic registry in weeks, not months. You'll learn more from real usage than from design documents. The features your team actually needs will surprise you.

2. Invest Heavily in Metadata

All three companies emphasize that the metadata layer—feature definitions, lineage, ownership, quality metrics—delivers more long-term value than the storage or compute layers. Features are only useful if people can find them, trust them, and understand their provenance.

Lesson #2: Treat your feature registry as a first-class product. Invest in search, documentation, and data quality dashboards. The registry is the user interface of your feature store—if it's hard to use, adoption will stall regardless of how fast your online store is.

3. Automate Backfill from Day One

Airbnb's experience shows that backfill capability is the single biggest driver of adoption. If a data scientist defines a new feature and has to wait 30 days for data to accumulate, they'll bypass the feature store entirely.

Lesson #3: Build backfill infrastructure early—it's the feature that makes all other features useful. Store raw event data in an immutable log so you can always recompute features from scratch when definitions change.

4. Monitoring Is Not Optional

Feature quality degrades silently. A schema change in an upstream table, a bug in a transformation, or a shift in data distribution can corrupt features without triggering any errors. All three companies learned (often painfully) that feature monitoring must be built into the platform from the start.

Lesson #4: Monitor feature freshness (is the pipeline running?), completeness (are values missing?), and distribution (has the mean shifted?). Alert on all three. A stale or corrupted feature is worse than a missing feature—at least a missing feature will throw an error.

5. Organizational Design Matters

The success of a feature store depends as much on organizational decisions as technical ones. Uber chose a centralized platform team, Netflix chose a decentralized data mesh, and Airbnb chose a hybrid. The right choice depends on your org's size, culture, and data maturity.

Centralized Model (Uber)

  • Pros: Consistent quality, unified tooling, clear ownership
  • Cons: Platform team becomes bottleneck, slower to respond to domain needs
  • Best for: Orgs with fewer than ~20 ML teams

Decentralized Model (Netflix)

  • Pros: Teams move independently, domain expertise preserved
  • Cons: Risk of fragmentation, harder to enforce standards
  • Best for: Large orgs with mature data engineering culture
Final takeaway: The best feature store is the one your team actually uses. Optimize for developer experience, invest in documentation and onboarding, and measure success by feature reuse rate—the percentage of features consumed by more than one model. At scale, Uber, Netflix, and Airbnb all report that feature reuse rates above 60% are the clearest indicator of a healthy feature store ecosystem.