32
Online Indicator
Green dot for contacts. Mind the N² watch problem. Approximate by design — never quote presence more precisely than reality.SavedSaved on this device — Saved on this device
01Clarifications
What would you ask before drawing a single box?
Ambiguity you would resolve with the interviewer: scope, scale, who uses it, what counts as done.
AI staff engineer
Enter to send · Shift+Enter for a new line
About Online Indicator
Green dot for contacts. Mind the N² watch problem. Approximate by design — never quote presence more precisely than reality.
- Difficulty
- intermediate
- Time
- about 45 minutes
- Stages
- 10
- Topic
- Real-Time: Chat, Presence & Live Updates
How this problem is worked
Ten stages, from the questions you would ask an interviewer to the trade-offs you would defend. Each asks one question, and the simulator runs the architecture you draw against the requirements you wrote.
- 01ClarificationsWhat would you ask before drawing a single box?
- 02Functional reqsWhat must this system actually do?
- 03Non-functionalWhat must it promise about speed, uptime and correctness?
- 04Capacity estimationHow much load and data does this have to hold?
- 05API designWhat does the outside world call, and what comes back?
- 06Data modelWhat gets stored, and what is it looked up by?
- 07Use-case breakdownHow does each requirement actually get served?
- 08High-level designWhich components handle a request, and in what order?
- 09Deep divesWhich part breaks first, and what do you do about it?
- 10Trade-offsWhat did this design cost, and what breaks at 10×?
Primary sources for this problem
- How Discord Scaled Elixir to 5,000,000 Concurrent Users (discord.com/blog, 2017)
- How Discord Handles Push Request Bursts with Elixir's GenStage (discord.com/blog)
- How Discord Stores Trillions of Messages (discord.com/blog, 2023)
- Slack's Disasterpiece Theater — Approachable Chaos Engineering (slack.engineering)
- Slack's Outage on January 4th 2021 (slack.engineering)
- Slack's Incident on 2-22-22 (slack.engineering)
- Rick Reed — WhatsApp Scaling, Erlang Factory 2014 (erlang-factory.com)
- WhatsApp — Giving You More Control Over Your Privacy (blog.whatsapp.com, 2012/2018)
- Facebook TAO: A Distributed Data Store for the Social Graph (USENIX ATC 2013)
- Google SRE Workbook — Alerting on SLOs (burn-rate alerts)
- AWS Builders' Library — Timeouts, Retries and Backoff with Jitter
- Cloudflare 2020-07-17 BGP-withdrawal post-mortem (blog.cloudflare.com)
- Datadog 2023-03-08 multi-region connectivity outage retro (datadoghq.com)
More in Real-Time: Chat, Presence & Live Updates
Long-lived connections and the things you push down them — messages, cursors, green dots, scores, prices and bids.
- WhatsApp / MessengerHundreds of millions of long-lived sockets, sub-second 1:1 + group delivery, E2E-encrypted, multi-device, multi-region active-active.
- Slack / DiscordChannels and history. Push or pull — and how a hot-channel fanout doesn't melt the gateway.
- Live Comments / Score UpdatesPub/sub at scale. WebSocket vs SSE vs long polling. Approximate by design — mega-rooms drop comments on purpose.
- Collaborative Editor (Google Docs)OT vs CRDT. Causal ordering. Real conflict-freedom. Server-authoritative single-writer doc-actor with WAL-before-ack — per-doc serialization, persisted before broadcast, pinned to a home region.
- Concurrent Hotel Viewers"X users viewing this right now." Hot keys, HLL.
- Live Viewer Count (YouTube/Twitch)Millions of viewers on one entity. Approximate by design.
Browse the full problem catalog, or see what the simulator does and does not model.