Design Watch History

Medium40 min
1 / 30
understanding5 min read

Problem Statement & Context

How Problem Statement & Context shapes architecture and interviewer follow-ups for Design Watch History.

Design Watch History — Problem Statement

Watch history is the cross-device memory of what a viewer watched, how far they progressed, and whether a title counts as completed. It powers Continue Watching, Recently Watched, parental controls, and engagement analytics — without storing media bytes.

Interviewers at Netflix, YouTube, and Disney+ use this prompt to test write-heavy progress ingestion, idempotent heartbeats, multi-device sync, denormalized read models, and privacy deletion — not transcoding or CDN edge caching.

Scale anchors

  • Netflix: 200M+ subscribers; progress heartbeats every ~30s during playback; profile-scoped history per household
  • YouTube: Billions of views/day; resume position on every device; history list with pagination
  • Disney+: Kids profiles must not leak watch history to adult profiles

Core journeys

Viewer: start playback → periodic progress PATCH → pause → resume on phone with same offset.

Product: surface Continue Watching row sorted by last_watched_at.

Compliance: user deletes account → purge all progress rows within SLA.

Ops: detect stuck heartbeats, hot user_id shards, and catalog takedown propagation.

Extended interview notes
  • Problem Statement & Context note 1: Heartbeat PATCH with monotonic position guards. Tie decisions to measurable watch-history SLIs (progress write p99 <150ms, continue-watching read p95 <60ms, cross-device sync lag <5s) and name failure isolation boundaries.
  • Problem Statement & Context note 2: Continue-watching is a denormalized read model. Tie decisions to measurable watch-history SLIs (progress write p99 <150ms, continue-watching read p95 <60ms, cross-device sync lag <5s) and name failure isolation boundaries.
  • Problem Statement & Context note 3: Shard by user_id; hot keys on viral household profiles. Tie decisions to measurable watch-history SLIs (progress write p99 <150ms, continue-watching read p95 <60ms, cross-device sync lag <5s) and name failure isolation boundaries.
  • Problem Statement & Context note 4: Eventual consistency across devices is acceptable briefly. Tie decisions to measurable watch-history SLIs (progress write p99 <150ms, continue-watching read p95 <60ms, cross-device sync lag <5s) and name failure isolation boundaries.
  • Problem Statement & Context note 5: GDPR delete and kids-profile isolation are first-class. Tie decisions to measurable watch-history SLIs (progress write p99 <150ms, continue-watching read p95 <60ms, cross-device sync lag <5s) and name failure isolation boundaries.
  • Problem Statement & Context note 6: Watch history stores playback position — not video bytes. Tie decisions to measurable watch-history SLIs (progress write p99 <150ms, continue-watching read p95 <60ms, cross-device sync lag <5s) and name failure isolation boundaries.
  • Problem Statement & Context note 7: Heartbeat PATCH with monotonic position guards. Tie decisions to measurable watch-history SLIs (progress write p99 <150ms, continue-watching read p95 <60ms, cross-device sync lag <5s) and name failure isolation boundaries.
  • Problem Statement & Context note 8: Continue-watching is a denormalized read model. Tie decisions to measurable watch-history SLIs (progress write p99 <150ms, continue-watching read p95 <60ms, cross-device sync lag <5s) and name failure isolation boundaries.
  • Problem Statement & Context note 9: Shard by user_id; hot keys on viral household profiles. Tie decisions to measurable watch-history SLIs (progress write p99 <150ms, continue-watching read p95 <60ms, cross-device sync lag <5s) and name failure isolation boundaries.
  • Problem Statement & Context note 10: Eventual consistency across devices is acceptable briefly. Tie decisions to measurable watch-history SLIs (progress write p99 <150ms, continue-watching read p95 <60ms, cross-device sync lag <5s) and name failure isolation boundaries.
  • Problem Statement & Context note 11: GDPR delete and kids-profile isolation are first-class. Tie decisions to measurable watch-history SLIs (progress write p99 <150ms, continue-watching read p95 <60ms, cross-device sync lag <5s) and name failure isolation boundaries.
  • Problem Statement & Context note 12: Watch history stores playback position — not video bytes. Tie decisions to measurable watch-history SLIs (progress write p99 <150ms, continue-watching read p95 <60ms, cross-device sync lag <5s) and name failure isolation boundaries.
  • Problem Statement & Context note 13: Heartbeat PATCH with monotonic position guards. Tie decisions to measurable watch-history SLIs (progress write p99 <150ms, continue-watching read p95 <60ms, cross-device sync lag <5s) and name failure isolation boundaries.
  • Problem Statement & Context note 14: Continue-watching is a denormalized read model. Tie decisions to measurable watch-history SLIs (progress write p99 <150ms, continue-watching read p95 <60ms, cross-device sync lag <5s) and name failure isolation boundaries.
  • Problem Statement & Context note 15: Shard by user_id; hot keys on viral household profiles. Tie decisions to measurable watch-history SLIs (progress write p99 <150ms, continue-watching read p95 <60ms, cross-device sync lag <5s) and name failure isolation boundaries.
  • Problem Statement & Context note 16: Eventual consistency across devices is acceptable briefly. Tie decisions to measurable watch-history SLIs (progress write p99 <150ms, continue-watching read p95 <60ms, cross-device sync lag <5s) and name failure isolation boundaries.
  • Problem Statement & Context note 17: GDPR delete and kids-profile isolation are first-class. Tie decisions to measurable watch-history SLIs (progress write p99 <150ms, continue-watching read p95 <60ms, cross-device sync lag <5s) and name failure isolation boundaries.
  • Problem Statement & Context note 18: Watch history stores playback position — not video bytes. Tie decisions to measurable watch-history SLIs (progress write p99 <150ms, continue-watching read p95 <60ms, cross-device sync lag <5s) and name failure isolation boundaries.
  • Problem Statement & Context note 19: Heartbeat PATCH with monotonic position guards. Tie decisions to measurable watch-history SLIs (progress write p99 <150ms, continue-watching read p95 <60ms, cross-device sync lag <5s) and name failure isolation boundaries.
  • Problem Statement & Context note 20: Continue-watching is a denormalized read model. Tie decisions to measurable watch-history SLIs (progress write p99 <150ms, continue-watching read p95 <60ms, cross-device sync lag <5s) and name failure isolation boundaries.
  • Problem Statement & Context note 21: Shard by user_id; hot keys on viral household profiles. Tie decisions to measurable watch-history SLIs (progress write p99 <150ms, continue-watching read p95 <60ms, cross-device sync lag <5s) and name failure isolation boundaries.
  • Problem Statement & Context note 22: Eventual consistency across devices is acceptable briefly. Tie decisions to measurable watch-history SLIs (progress write p99 <150ms, continue-watching read p95 <60ms, cross-device sync lag <5s) and name failure isolation boundaries.
  • Problem Statement & Context note 23: GDPR delete and kids-profile isolation are first-class. Tie decisions to measurable watch-history SLIs (progress write p99 <150ms, continue-watching read p95 <60ms, cross-device sync lag <5s) and name failure isolation boundaries.
  • Problem Statement & Context note 24: Watch history stores playback position — not video bytes. Tie decisions to measurable watch-history SLIs (progress write p99 <150ms, continue-watching read p95 <60ms, cross-device sync lag <5s) and name failure isolation boundaries.
  • Problem Statement & Context note 25: Heartbeat PATCH with monotonic position guards. Tie decisions to measurable watch-history SLIs (progress write p99 <150ms, continue-watching read p95 <60ms, cross-device sync lag <5s) and name failure isolation boundaries.
  • Problem Statement & Context note 26: Continue-watching is a denormalized read model. Tie decisions to measurable watch-history SLIs (progress write p99 <150ms, continue-watching read p95 <60ms, cross-device sync lag <5s) and name failure isolation boundaries.
  • Problem Statement & Context note 27: Shard by user_id; hot keys on viral household profiles. Tie decisions to measurable watch-history SLIs (progress write p99 <150ms, continue-watching read p95 <60ms, cross-device sync lag <5s) and name failure isolation boundaries.
  • Problem Statement & Context note 28: Eventual consistency across devices is acceptable briefly. Tie decisions to measurable watch-history SLIs (progress write p99 <150ms, continue-watching read p95 <60ms, cross-device sync lag <5s) and name failure isolation boundaries.

Why interviewers care

Watch History interviews reward crisp scope, explicit trade-offs, and failure stories—not generic microservice diagrams.

Interview checkpoint

Name one failure story for Problem Statement & Context that proves you understand real outages, not happy-path diagrams.

Key Highlights

  • Problem Statement & Context: watch progress control plane
  • Heartbeat ingest with idempotent PATCH
  • Continue Watching projection + cache
Interview anchor
For Problem Statement & Context, cite concrete numbers and name the service boundary you would own.

Section Rescue Kit

Buzzwords to use:

Monotonic mergeContinue Watching projection

Safe statements:

  • "Watch history is a write-heavy metadata plane — playback bytes stay in the CDN path."
  • "I would coalesce heartbeats before durable write to cut WCUs roughly 70% at peak."
Design Watch History - System Design | WinJob | WinJob