Data & analytics
Uptime monitor and status page - checking from outside
Why uptime is measured from many regions outside your network, and why the status page must not share its fate.
What this board gets wrong on purpose
The tension
The probes can only find failures they were written to look for: a /health endpoint that returns 200 while checkout throws on every order is "up" here, so the board measures reachability and calls it availability. The 2-of-3 quorum that suppresses false alarms also suppresses real single-region outages - if eu-west cannot reach you, every European customer is down and the board stays green. All three probes run in cloud data centres, so an outage at a consumer ISP or one CDN point of presence is invisible to them. And the status page is only as honest as the incident engine allows: it posts "investigating" automatically, but every later update waits on an on-call engineer who is busy fixing the outage, which is why public pages are routinely 20 to 40 minutes behind reality.
Practise this as an interview
Take Uptime monitor and status page - checking from outside as a timed system design interview on a blank board - on your own, with the requirements to check yourself against, or with a candidate you invite.
Start here
Why this design
Every company with customers eventually needs two things: to find out it is down before customers tell it, and somewhere to say so that keeps working while it is down. Both sound trivial - curl the site every minute, host a page - and both fail in instructive ways. The monitor fails by measuring from the wrong place or by crying wolf; the status page fails by sharing infrastructure with the thing it reports on. This board is about where to stand when you measure, how to decide a failure is real, and how to keep the message up when everything else is not.
What you will learn
- Why internal health checks miss the outages customers see, and what an outside-in synthetic check actually exercises: DNS, TLS, edge, application.
- Quorum across regions and consecutive failures: the arithmetic that trades detection time against false pages.
- Fate sharing: why the status page runs on a different provider, CDN, DNS and domain.
- Why the status page is static, and how a 100x read spike during an incident becomes a non-event.
- Who watches the watcher: a dead-man's switch for the monitor itself.
How to read this board
- Press Play and follow the walkthrough: CONTROL PLANE top left, PROBES in the middle, YOUR SERVICE on the right.
- Then DECIDE under the probes, where three opinions become one verdict.
- Then RESPOND on the left and the STATUS PAGE band on the right - note it shares nothing with YOUR SERVICE.
- 1 · Requirements to 6 · Deployment in the written band, then the DATA MODEL.
- Then argue with the tension: the board measures reachability and calls it availability.
1 · Requirements
Ask these before drawing anything
- What does "up" mean for this product? A 200 from the homepage, or a user able to log in and load their data? The answer decides whether checks are pings or scripted journeys.
- How fast must we know? Detection time is roughly interval times consecutive failures needed. Thirty second checks needing two failures is about a minute.
- How much does a false page cost? A team paged at 3am for a probe network blip twice a week will start ignoring pages, which is worse than no monitor.
- Who writes on the status page, and is anything automatic? Auto-posting "investigating" is fast and occasionally wrong in public.
- Is the status page a contract? If an SLA credit depends on it, its history must be accurate and immutable.
Functional
- Define monitors: URL or scripted check, interval, regions, assertions (status code, body contains, TLS expiry over 14 days, latency under a threshold).
- Run every monitor from at least three regions outside our cloud account.
- Open an incident when a quorum of regions fails on consecutive checks; resolve it when they recover.
- Page on-call; post an automatic "investigating" on the affected components; let a human write updates.
- Publish a public status page with components, current incidents and 90 days of history, and email or webhook subscribers.
Non-functional
- Detection: a full outage opens an incident within 90 seconds.
- False pages: fewer than one per month per service from probe-side causes.
- The status page is available at 99.99 percent and is independent of every component it reports on.
- The page serves 5,000 requests a second during an incident with no origin scaling.
- If the monitor itself stops producing results, someone is paged within five minutes.
The rest of this board
Available on Tier Slate
This page publishes the question. The answer — 5 more written pages, an 8-step narrated walkthrough and a 6-table schema — is the board itself, and it opens in Tierslate.
- 5written pages
- 8walkthrough steps
- 6tables41 columns
5 pages behind this one
- Capacity estimation
- Storage estimation
- Availability
- How it works
- Deployment plan
More boards
Pipelines, metrics and the lag between event and answer.
- Ad serving - an auction inside a page load
- Analytics pipeline - the lag between an event and the answer
- Log aggregation - the index is bigger than the data
- Metrics and monitoring - cardinality is the thing that kills you
- Recommendation engine - retrieve a thousand, rank twenty
- Leaderboard - a sorted set and the rank nobody stores
- Search autocomplete - an answer before the word is finished
- View counter - counting a million clicks without a million writes
- A/B testing platform - assignment is the easy half
- ETL and the data warehouse - yesterday, correctly
- Full-text search - the inverted index and the shard that is slow