Design a Mobile Live Sports App: Scores, Streaming, Highlights

“Design a live sports app” is a senior mobile-system-design prompt that combines real-time data, video streaming, push at scale, and the unforgiving UX of “the score must be right now.” ESPN, theScore, NBA app, MLB At Bat are the references. The interview tests whether you can reason about latency-critical updates, video pipelines, and the multi-device fan experience.

Clarify scope

  • Free-tier scoreboard or paid streaming included?
  • Single sport (NBA app) or many (ESPN)?
  • Live game, highlight clips, on-demand replays — which?
  • Personalization (favorite teams, alert preferences)?
  • Tablet, watch, TV companion in scope?

The data tiers

  1. Live game state (score, clock, possession) — sub-second propagation expected
  2. Play-by-play stream — events with brief descriptions, real-time
  3. Box score / stats — derived; updated every play
  4. Schedule, standings — slowly-changing
  5. Editorial content (articles, social) — slow

Different freshness, different transport.

Live updates transport

  • Foregrounded game screen: WebSocket or SSE; sub-second updates
  • Tabbed away in-app: WebSocket continues; battery less critical
  • Background: silent push notifications carry score deltas; rate-limited
  • Watch / Live Activity: dedicated push channel for the lock-screen surface

iOS Live Activities and Android Live Updates are first-class UX for live sports — show the score on the lock screen and Dynamic Island without opening the app.

Push at scale

Game-state pushes can fan out to millions of users in seconds at the start of a popular game. Constraints:

  • APNs and FCM can each absorb the volume; fanout architecture is a backend concern
  • Client-side: collapse pushes (latest wins) so a slow phone does not show a backlog of stale scores
  • Throttle marketing pushes during the game so the game-state pushes are not buried

Live video streaming

  • HLS or LL-HLS (low-latency HLS) for compatibility
  • DASH on Android in some setups
  • DRM (FairPlay on iOS, Widevine on Android) for paid content
  • Adaptive bitrate (ABR) — switch quality based on bandwidth
  • 5–8 second latency typical for HLS; LL-HLS can hit 2–4 seconds; WebRTC-based streams reach sub-second but less interoperable

The latency mismatch

The biggest UX trap: a viewer’s push notification (instant) arrives 5 seconds before their video stream catches up to the play. They get spoiled. Mitigations:

  • Detect when the user is watching the live stream and suppress score-spoiler pushes for that game
  • Or delay pushes to roughly match stream latency
  • Or accept the trade-off and document it

Highlights pipeline

  1. Editorial / automated detection of highlight-worthy events
  2. Clip extracted from live broadcast
  3. Encoded into multiple bitrates and stored in CDN
  4. Surfaced in app feed within minutes of the play

Increasingly automated — ML models detect goals, dunks, big plays. Editorial review optional for major events.

Personalization

  • Favorite teams drive notifications, default screen, and feed
  • Per-game notification preferences (close-game-only, end-of-game, every score)
  • Time-zone-aware schedule
  • Locale-aware league preferences

Offline and degraded modes

  • Cached schedule and last-known scores when offline
  • Stream gracefully degrades on poor bandwidth (lower bitrate, drop to audio-only)
  • “You are offline, scores may be stale” banner

Watch and Live Activity

  • Apple Watch glance shows current score; tap opens the app
  • Live Activity / Dynamic Island shows compact game state
  • Watch independence — game data should reach the watch even without the phone foreground

What separates senior from staff

Senior candidates discuss the WebSocket-vs-push split and adaptive streaming. Staff candidates discuss the spoiler problem (latency mismatch between push and stream) and the editorial-vs-automated highlight pipeline. Principal candidates touch on the broadcast-rights complexity (region locking, blackouts, syndication).

Frequently Asked Questions

How do I handle blackouts?

Geographic restrictions are enforced server-side using device IP. Show a clear “Not available in your region” message. VPN bypass is an arms race; do not over-engineer client-side enforcement.

What about betting integration?

Out of scope for the core question, but worth mentioning: real-money betting requires a separate licensed app or partnership; in-app odds widgets are usually content syndication.

How fresh are the box scores?

Update on every play event from the play-by-play stream. The stats team derives stats deterministically from the events; the client renders the latest computed snapshot.

Scroll to Top