Skip to content

ADR-0007 — The streaming side is poll-fed, and we say so

  • Status: superseded by ADR-0015
  • Date: 2026-07-02
  • Domain: ingestion architecture · honesty

Kept for history, per the ADR immutability convention: this record's own Alternatives-considered section (below) explicitly named and rejected Wikipedia's EventStreams as "drifting off the media-analytics narrative." ADR-0015 is a direct, documented reversal of that call — Twitch's developer registration turned out to be permanently blocked, and the honest answer was a genuine push source, not a simulated one. The considered → rejected → reversed sequence is itself worth keeping visible.

Context

Comparison 1 needs a streaming ingestion path for Twitch viewer counts. Twitch Helix exposes no push API for this metricGET /helix/streams is poll-only. EventSub covers other event types, not viewer-count ticks. So a "true" event-source architecture is impossible with this feed, and any portfolio claiming otherwise would be lying with a diagram.

Decision

Build the streaming side as poll-fed streaming: a tight-loop poll (~5 s) whose results are published as events into Redis Streams and consumed through a consumer group. The architecture downstream of the broker is genuinely streaming — event-shaped records, consumer lag, backlog semantics. The origin is a poll, and every place the exhibit is described states this explicitly, including the public page ("streaming in architecture, not at the origin").

Consequences

  • The freshness-vs-cost comparison stays valid: the tradeoff being measured (low lag / constant draw vs high lag / near-zero idle cost) is a property of the pipeline, not of the origin.
  • Minimum achievable freshness is bounded by the poll interval (~5 s), not milliseconds. The exhibit shows real numbers, so this is visible, not hidden.
  • The honesty clause is itself portfolio signal: recognizing where an architecture diagram overstates reality is precisely the architect's job.

Alternatives considered

  • Pretend it's a native event stream — rejected: dishonest, and easily caught by anyone who knows the Twitch API.
  • Switch to a real event source (e.g. Wikipedia's EventStreams SSE) — rejected: drifts off the media-analytics narrative that matches the author's domain background (ADR-0006 context).