Problem Statement & Context
Why a product catalog is the source of truth
Problem Statement & Context
A product catalog is the authoritative system of record for everything customers see about items: titles, descriptions, variants, attributes, pricing metadata, media, and availability flags. It is the data backbone that powers search, recommendations, merchandising, and checkout.
At scale the catalog is not a single table — it is a distributed system that ingests data from sellers, suppliers, and internal teams, validates it, normalizes attributes, and serves read-optimized views to millions of shoppers at low latency.
The journeys
- Shopper: browse a category → filter by attributes (brand, size, color) → open PDP with variants → consistent pricing + availability.
- Seller: create a listing with attributes → upload media → publish/bulk-edit → track validation errors + approvals.
- Merchandiser: organize taxonomy → define attribute dictionaries + rules → curate collections → monitor catalog quality.
The load-bearing idea: normalize-on-write, denormalize-for-read, normalize attributes as the quality gate
The catalog's central tension is write flexibility versus read performance: sellers submit messy, free-form data (one types "navy", another "Navy Blue", a third "#000080"), but shoppers need fast, consistent faceted browsing. The resolution is two models bridged by an event stream — a normalized relational write model (products, variants, attributes; integrity constraints; strongly-consistent publish) projected into a denormalized read/search model (eventually consistent, flat documents, fast facets). And the gate between them is attribute normalization: free-form values are mapped to canonical ones at ingest, because if "navy" and "Navy Blue" reach the facet index as distinct values, the color filter fragments and search breaks. Normalize-on-write, denormalize-for-read, with attribute normalization as the data-quality gate — that is the whole design.
Scale anchors
50M monthly shoppers; 20M SKUs × ~5 variants; 200M daily reads; 2M seller updates/day. Read-heavy (~10,000:1 read/write), so the design optimizes the read path hard while keeping writes correct.
Key Highlights
- •A product catalog is the AUTHORITATIVE system of record for everything customers see about items (titles, descriptions, variants, attributes, media, availability) — the data backbone powering search, recommendations, merchandising, checkout; not a single table but a distributed system ingesting from sellers/suppliers/internal teams
- •Journeys: shopper (browse category -> filter by attributes -> PDP with variants -> consistent pricing/availability), seller (create listing -> upload media -> publish/bulk-edit -> track validation errors), merchandiser (organize taxonomy -> define attribute dictionaries + rules -> curate collections -> monitor quality)
- •The central tension is WRITE FLEXIBILITY vs READ PERFORMANCE: sellers submit messy free-form data ('navy' / 'Navy Blue' / '#000080') but shoppers need fast CONSISTENT faceted browsing — resolved by two models bridged by an event stream (a normalized relational write model + a denormalized read/search model)
- •The gate between them is ATTRIBUTE NORMALIZATION: free-form values mapped to canonical ones at ingest, because if 'navy' + 'Navy Blue' reach the facet index as distinct values the color filter fragments + search breaks — normalize-on-write, denormalize-for-read, normalization-as-the-quality-gate is the whole design; anchors 50M shoppers, 20M SKUs × 5 variants, 200M reads/day, 2M writes/day (read-heavy ~100:1)
Section Rescue Kit
Buzzwords to use:
Safe statements:
- "The catalog is the authoritative source for product data."
- "We separate product and variant entities to manage complexity."