Numbers to know cold
The dozen figures that let you size a system without hesitating.
What you will be able to do
- Recite the latency of memory, SSD, disk, and network round trips by order of magnitude
- Convert availability targets into allowed downtime per month and per year
- State the throughput of a single typical database, cache, and message broker
- Use a latency budget to decide where a request may call out
- Correct a wrong number in the room without losing the thread
Why memorise anything
Hesitating on "is 5,000 writes a second a lot?" costs you the authority of every decision that follows. A dozen figures, correct to the nearest power of ten, are enough to size almost any design and to reject a bad one on the spot.
Latency: the ladder
| Operation | Latency | What it means for a design |
|---|---|---|
| L1 cache reference | ~1 ns | Free. Ignore it. |
| Main memory read | ~100 ns | Free. In-process caching costs nothing. |
| Compress 1 KB | ~10 µs | Cheap enough to do per request. |
| Read 1 MB sequentially from memory | ~250 µs | Cheap. In-memory joins are fine. |
| Round trip within one datacenter | ~0.5 ms | Service-to-service calls are cheap but not free. |
| Read 1 MB from SSD | ~1 ms | A database page read is on this order. |
| Read 1 MB from disk | ~20 ms | Disk is for cold data only. |
| Disk seek | ~10 ms | Random I/O is the enemy; this is why LSM trees exist. |
| Round trip cross-continent | ~100-150 ms | One user-visible delay. Never in a request loop. |
The ladder is the point: each rung is roughly 1,000x the one below. Memory to SSD is 1,000x, SSD to a cross-region round trip is 100x. That is why caching in memory works at all, and why a synchronous call to another region inside a request is a design smell.
Availability: what each nine buys
| Target | Per year | Per month | What it takes |
|---|---|---|---|
| 99% | 3.65 days | ~7 hours | One server and hope |
| 99.9% | 8.8 hours | ~43 minutes | Redundancy, health checks, a real deploy process |
| 99.95% | 4.4 hours | ~22 minutes | Multi-AZ, automated failover, alerting |
| 99.99% | 53 minutes | ~4.3 minutes | Multi-region or very mature single-region operations |
| 99.999% | 5 minutes | ~26 seconds | Active-active regions and a team that does little else |
Note the shape: each additional nine cuts allowed downtime by 10x and typically multiplies cost by a similar factor. In an interview, question the target before designing for it — "99.99% across regions is expensive; is 99.9% with a stated recovery time acceptable?" is a senior question.
Throughput: one node of each thing
A latency budget, worked
Target: a 300 ms page load with 20 backend calls' worth of data to gather. Spend the budget explicitly:
Budget: 300 ms end to end network to the edge 50 ms gateway + auth 10 ms cache lookups (x3) 3 ms database (on miss) 20 ms fan-out to 5 services 50 ms (in parallel: 10 ms each) serialise 200 KB 10 ms ------------------------------ used 143 ms -> 157 ms of headroom Twelve services called in sequence at 10 ms each would have been 120 ms -- the budget only works because they run in parallel.
That table is a stronger answer than any diagram detail, because it forces two conclusions out loud: parallelise independent reads, and cache to avoid the database path entirely on the common case.
Using the numbers without showing off
Worth remembering
- Memory is 100 ns, SSD read is 100 µs, disk seek is 10 ms, a cross-region round trip is 100 ms. Each step is roughly 1000x the one before.
- Every extra nine of availability costs about 10x the engineering. 99.9% is 43 minutes of downtime a month; 99.99% is 4 minutes.
- One Postgres node handles low thousands of writes per second; one Redis node handles ~100k operations per second. That gap decides where you cache.
- Latency is a budget: a 200 ms page request cannot afford ten sequential 50 ms calls.