Users & Traffic
Turn DAU into requests per second.
ƒ QPS_avg = DAU × req/user/day ÷ 86,400     QPS_peak = QPS_avg × peak_ratio
Inputs
users
Type "10m" or "1.5b"
req
×
Web: 2–3×. Spiky: 5–10×.
: 1
Social 100:1. Logging 1:100.
Results
Total requests / day
Average QPS
Peak QPS
Peak read QPS
Peak write QPS

Storage
Disk needed for records over a retention window.
ƒ total = records/day × size × 365 × years × (1 + index) × replicas
Inputs
rec
Tweet ≈ 300 B. Image ≈ 1 MB.
×
yr
frac
0.30 = +30%
Results
Per day
Per month
Per year

Raw over retention
Total provisioned
with replication + overhead

Bandwidth
Network traffic in and out of your service.
ƒ bandwidth = QPS × payload_size     (per direction)
Inputs
req/s
JSON API ~1 KB. Photo ~1 MB.
Webpage ~100 KB. Video chunk ~256 KB.
Results
Ingress (in)
Egress (out)

Total (in + out)
Per month
Per year

Throughput & Concurrency
How many in-flight requests does this load create?
ƒ Little's Law: L = λ × W     (concurrency = QPS × latency)
Inputs
req/s
ms
srv
Results
Total in-flight requests
across the whole fleet

Per-server QPS
Per-server concurrency
threads/connections per box
CPU cores hint
rough: concurrency/2 (I/O-bound)

Cache Sizing
Size a Redis / Memcached tier for the hot working set.
ƒ cache = items × hot_fraction × bytes_per_item × (1 + overhead)
Inputs
items
frac
0.20 = 80/20 rule
frac
0.20 = +20% for keys / metadata
Results
Hot items
Working set

Recommended cache size
with overhead

RAM per Server
Memory for in-memory session / connection state.
ƒ per_server = users × bytes/user ÷ servers × (1 + headroom)
Inputs
users
srv
frac
0.30 = +30% safety
Results
Total session memory
Per server (steady)
Per server (with headroom)
size boxes to at least this
ƒ QPS_avg = DAU × req/user/day ÷ 86,400     QPS_peak = QPS_avg × peak_ratio
Inputs
users
e.g. 10,000,000 = 10M DAU. Type "10m".
req
Avg API calls each active user makes daily
×
Typical web: 2–3×. Spiky workloads (events): 5–10×.
: 1
Typical social: 100:1. Logging: 1:100.
Results
Total requests / day
Average QPS
Peak QPS
(avg × peak ratio)

Peak read QPS
Peak write QPS
ƒ total = records/day × size × 365 × years × (1 + index) × replicas
Inputs
rec
New rows/events per day
Tweet ≈ 300 B. Image metadata ≈ 1 KB. Image ≈ 1 MB.
×
Cassandra/HDFS: 3. S3: 3+ (internally).
yr
How long you keep the data
frac
0.30 = +30%. B-tree indexes typically add 10–40%.
Results
Per day
Per month
Per year

Raw over retention
before replication & overhead
Total provisioned
with replication + overhead
ƒ bandwidth = QPS × payload_size     (per direction)
Inputs
req/s
Use the peak QPS from the Users tab
JSON API: ~1 KB. Photo upload: ~1 MB.
Webpage: ~100 KB. Video chunk: ~256 KB.
Results
Ingress (in)
Egress (out)

Total (in + out)
Per month
Per year
ƒ Little's Law: L = λ × W     (concurrency = QPS × latency)
Inputs
req/s
Peak load you want to serve
ms
Wall-clock time per request, including I/O waits
srv
Horizontal fleet behind the load balancer
Results
Total in-flight requests
across the whole fleet

Per-server QPS
Per-server concurrency
threads/connections needed per box
CPU cores hint
rough: concurrency/2 (I/O-bound, async)
ƒ cache = items × hot_fraction × bytes_per_item × (1 + overhead)
Inputs
items
All cacheable keys (users, posts, sessions…)
frac
0.20 = top 20% serves most traffic (80/20 rule)
Avg serialized value size (incl. JSON overhead)
frac
0.20 = +20% for keys, pointers, eviction metadata
Results
Hot items
Working set
hot items × bytes/item

Recommended cache size
with overhead
ƒ per_server = users × bytes/user ÷ servers × (1 + headroom)
Inputs
users
Active sessions held in memory at peak
Session token + user context + connection buffer
srv
Sessions spread evenly across the fleet
frac
0.30 = +30% safety. Aim for ~60–70% steady-state util.
Results
Total session memory
Per server (steady)
Per server (with headroom)
size your boxes to at least this
Latency Numbers (Jeff Dean, updated for modern hardware)
OperationTimeNotes
L1 cache reference1 ns
Branch mispredict3 ns
L2 cache reference4 ns≈ 4× L1
Mutex lock/unlock17 ns
Main memory reference100 ns≈ 20× L2, 200× L1
Compress 1 KB w/ Snappy2 µs
Read 1 MB sequentially from memory3 µs
Send 1 KB over 1 Gbps network10 µs
Read 4 KB random from SSD16 µs
Read 1 MB sequentially from SSD49 µs
Round trip within same datacenter500 µs0.5 ms
Read 1 MB sequentially from disk825 µs
Disk seek2 ms
Packet CA → Netherlands → CA150 ms
Powers of 2 — quick lookup
PowerValueMeaning
2101,024≈ 1 thousand (Kilo)
21665,536max value of UInt16
2201,048,576≈ 1 million (Mega)
2301,073,741,824≈ 1 billion (Giga)
2324,294,967,296max UInt32, ~4.3 B
2401,099,511,627,776≈ 1 trillion (Tera)
2501.13 × 1015≈ 1 quadrillion (Peta)
2639.22 × 1018max Int64 (signed)
Common Assumptions
Day length86,400 sec ≈ 10⁵ — useful for QPS math
Month≈ 30 days for napkin math
Year≈ 3.15 × 10⁷ sec ≈ π × 10⁷
Replication factor3 (Cassandra, HDFS, Kafka default)
Read:Write ratioSocial 100:1, Read-heavy CMS 10:1, Logging 1:100
Peak-to-average2–3× typical; 5–10× for spiky / event-driven
Cache hit rate target80–95% (80/20 rule on hot keys)
Disk speed (SSD)500 MB/s sequential, 100k IOPS random
Network1 Gbps ≈ 125 MB/s; 10 Gbps ≈ 1.25 GB/s
CompressionText: 5–10× (gzip); binary: 1–3×
Throughput & Bandwidth Ballparks
Single MySQL/Postgres node~1k–10k QPS reads, ~1k QPS writes
Redis (single node)~100k QPS
Kafka broker~1 GB/s ingest, ~100k msg/s
Nginx (single box)~50k req/s static content
App server (single box)~1k–10k QPS depending on workload
S3 / object storeEffectively unlimited; ~100 ms p50 GET
DNS lookup~20–120 ms cold; ~1 ms cached
TCP handshake (RTT)~1 ms LAN, ~30–100 ms WAN
TLS handshake1–2 extra RTTs
Mobile 4G RTT~50–100 ms