Numbers to Know
In system design interviews, you'll estimate storage requirements, bandwidth needs, and whether a particular architecture can handle the load. Having the right numbers in your head—and knowing how to use them—separates candidates who can design real systems from those who memorize patterns.
One of the biggest red flags is when candidates propose complex solutions based on outdated assumptions. They worry about database sizes that modern instances handle easily, or suggest sharding for workloads a single server manages comfortably. Many textbooks and courses teach numbers from 2015 or earlier—hardware has improved dramatically since then.
This page covers the essential numbers for 2026 and teaches you how to apply them in back-of-envelope calculations.
Latency Numbers Every Engineer Should Know
These foundational latencies help you reason about where time goes in your system. The key is understanding orders of magnitude—you don't need to memorize exact values.
Memory Hierarchy
| Operation | Latency | Relative Speed |
|---|---|---|
| L1 cache reference | ~1 ns | Baseline |
| L2 cache reference | ~4 ns | 4x slower |
| L3 cache reference | ~12 ns | 12x slower |
| Main memory (RAM) | ~100 ns | 100x slower |
| SSD random read | ~100 μs | 100,000x slower |
| HDD random read | ~10 ms | 10,000,000x slower |
Mental model: Within the cache hierarchy, each level is 3-10x slower than the previous. The big jumps happen between storage tiers: RAM is ~1,000x faster than SSD, and SSD is ~100x faster than HDD. This is why caching works so well—even "slow" cache misses to SSDs are fast.
Network Latency
| Operation | Latency |
|---|---|
| Same datacenter round-trip | 0.5 ms |
| Cross-AZ (same region) | 1-2 ms |
| Cross-region (US East ↔ West) | ~70 ms |
| Cross-continent (US ↔ Europe) | ~100-150 ms |
Key insight: Within a datacenter, network round-trips (~0.5ms) are in the same order of magnitude as SSD access (~0.1ms)—both are sub-millisecond. Cross-region calls at 50-150ms are expensive—minimize cross-region hops in your design.
Data Operations
| Operation | Latency/Throughput |
|---|---|
| Compress 1 KB (Snappy) | ~3 μs |
| Read 1 MB from RAM | ~9 μs |
| Read 1 MB from SSD | ~200 μs |
| Read 1 MB from HDD | ~8 ms |
| Send 1 MB over 1 Gbps network | ~10 ms |
Modern Hardware Limits (2026)
Understanding what a single machine can do prevents premature optimization and over-engineering.
Memory
| Instance Type | Memory | Use Case |
|---|---|---|
| General purpose (m7i.16xlarge) | 256 GB | Typical application servers |
| Memory-optimized (r7i.24xlarge) | 768 GB | In-memory databases, caches |
| High-memory (x2idn.32xlarge) | 2 TB | Large dataset processing |
| Extreme memory (u-24tb1.metal) | 24 TB | Entire database in RAM |
Implication: You can often cache entire datasets in memory. A 100GB cache isn't "large"—it's modest by modern standards.
Storage
| Storage Type | Capacity | Throughput | Latency |
|---|---|---|---|
| Local NVMe SSD | 60 TB/instance | 3-4 GB/s | < 1 ms |
| EBS gp3 | 16 TB/volume | 1 GB/s | 1-2 ms |
| S3 (object storage) | Unlimited | 100+ GB/s aggregate | 50-100 ms first byte |
Implication: A single database instance can store 50+ TB before you need to consider sharding for storage reasons.
Network
| Scenario | Bandwidth |
|---|---|
| Within datacenter | 10-25 Gbps |
| High-performance instances | Up to 100 Gbps |
Implication: A 25 Gbps connection transfers ~3 GB/second. Network bandwidth is rarely the bottleneck within a datacenter.
Cost Numbers (2026)
Interviewers increasingly expect cost-awareness, especially for storage-heavy or compute-heavy designs. You don't need exact prices, but knowing the rough cost of a server-hour, a terabyte of storage, and a terabyte of egress lets you reason about trade-offs out loud.
Compute and Storage (AWS on-demand, us-east-1)
| Resource | Approximate Cost | Note |
|---|---|---|
| General-purpose server (m7i.16xlarge, 64 vCPU / 256 GB) | roughly $0.05 per vCPU-hour | |
| S3 Standard (hot object storage) | ~$23/TB/month | $0.023 per GB |
| S3 Glacier Deep Archive (cold) | ~$1/TB/month | retrieval takes hours |
| EBS gp3 (block storage) | ~$80/TB/month | plus provisioned IOPS/throughput |
| Data transfer out (internet / cross-region) | ~$20-90/TB | the cost people forget |
The expensive line item is usually transfer, not storage. Storing a terabyte in S3 Standard costs ~$23/month, but moving a terabyte out to the internet can cost ~$90. Designs that shuffle data across regions or serve large objects without a CDN rack up egress charges fast.
Mental model: Storage is cheap, compute is moderate, egress is expensive. A petabyte in S3 Standard is ~$23k/month, which sounds like a lot until you weigh it against the engineering cost of building a custom storage tier to avoid it. The same bytes also span a ~23x price range from hot (Standard) to cold (Deep Archive), so tiering by access pattern is a real lever, not a micro-optimization.
GPU and LLM Inference Numbers (2026)
LLM serving questions now show up in system design interviews, especially at AI companies. Two numbers drive most of the design decisions: KV cache size (which is a memory problem) and prefill cost (which is a compute problem).
GPU Reference
| GPU | Memory | Bandwidth | FP16 (dense) |
|---|---|---|---|
| H100 SXM | 80 GB HBM3 | 3.35 TB/s | ~990 TFLOPS (~2 PFLOPS with sparsity) |
| H200 SXM | 141 GB HBM3e | 4.8 TB/s | same compute as H100 |
The H200 uses the same compute die as the H100; the only upgrade is a bigger, faster memory subsystem. That alone tells you most inference bottlenecks are about memory, not raw FLOPS.
Model Weights
Weights must fit in GPU memory before you serve a single token. At fp16 (2 bytes per parameter):
| Model size | Weight memory | Fits on |
|---|---|---|
| 8B | ~16 GB | one H100 |
| 70B | ~140 GB | 2 H100s, or 1 H200 (tight) |
| 400B+ | ~800 GB+ | a multi-GPU node |
KV Cache: the long-context tax
Every token in the context window stores a key and value vector per layer. This KV cache lives in GPU memory alongside the weights and grows linearly with context length.
Formula: KV cache = 2 × layers × kv_heads × head_dim × tokens × bytes
Example (70B-class model: 80 layers, 8 GQA KV heads, head_dim 128, fp16):
Per token: 2 × 80 × 8 × 128 × 2 bytes ≈ 320 KB
1M tokens: 320 KB × 1M ≈ 320 GB
That is ~4 H100s' worth of memory for the KV cache of a single 1M-token request, before counting the ~140 GB of weights. Even an 8B model at 1M context needs ~128 GB of KV cache, which is more than one H100 holds.
This is why grouped-query attention (GQA) exists. With full multi-head attention the KV cache would be ~8x larger (the 70B example jumps from ~320 GB to ~2.5 TB at 1M tokens). GQA and multi-query attention shrink the cache by sharing key/value heads across query heads, which is what makes long context affordable to serve at all.
Prefill: why time-to-first-token grows
Prefill processes the entire prompt before generating the first token, and it is compute-bound. The dense matmul work is roughly:
Formula: Prefill FLOPs ≈ 2 × parameters × tokens
For a 70B model prefilling 1M tokens, that is ~140 PFLOPs, on the order of tens of seconds on an 8×H100 node at realistic utilization. Attention adds a cost that grows with the square of context length, so at 1M tokens it dominates and pushes real prefill into the minutes.
Long prompts are expensive on both axes. A 1M-token context costs hundreds of gigabytes of memory and tens of seconds to minutes of compute just to reach the first output token. That is why time-to-first-token balloons on long prompts, why prompt caching (reusing already-computed KV cache) is such a big lever, and why context length is a first-class capacity-planning input rather than a free parameter.
Component Throughput Limits
These numbers help you understand when to scale specific components.
Databases (PostgreSQL/MySQL)
| Metric | Typical Value | Consider Scaling When |
|---|---|---|
| Storage capacity | Up to 64 TB (Aurora: 128 TB) | > 50 TB |
| Read throughput | 10-50k queries/second | > 30k QPS sustained |
| Write throughput | 5-20k writes/second | > 10k TPS sustained |
| Read latency (indexed) | 1-5 ms (cached), 5-30 ms (disk) | > 10 ms P99 |
| Connections | 5,000-20,000 | > 5,000 active |
Common interview mistake: Proposing sharding for a system with 100GB of data. A well-tuned PostgreSQL instance handles terabytes with ease. Only consider sharding when you have genuine scale requirements: 50+ TB of data, 10k+ write TPS, or geographic distribution needs.
Caching (Redis/Memcached)
| Metric | Typical Value | Consider Scaling When |
|---|---|---|
| Memory | Up to 1 TB | > 800 GB |
| Read latency | < 1 ms | > 1 ms P99 |
| Throughput | 100k-1M ops/second | > 80k ops/second |
Key insight: A single Redis instance with 500GB of memory can often cache your entire hot dataset. Before adding cache sharding complexity, verify you actually need it.
Application Servers
| Metric | Typical Value | Consider Scaling When |
|---|---|---|
| Concurrent connections | 100k+ per instance | Approaching 100k |
| Memory | 64-512 GB | > 80% utilized |
| CPU cores | 8-64 | > 70% sustained |
| Network | Up to 25 Gbps | > 80% utilized |
Key insight: Modern servers have substantial memory. Don't be afraid to use it for local caching or in-memory computations.
Message Queues (Kafka)
| Metric | Typical Value | Consider Scaling When |
|---|---|---|
| Throughput | 1M+ messages/second per broker | > 800k msgs/second |
| Latency | 1-5 ms end-to-end | Growing consumer lag |
| Message size | 1 KB - 10 MB efficiently | > 10 MB requires chunking |
| Storage | 50 TB per broker | Based on retention needs |
Back-of-Envelope Calculations
In interviews, you'll estimate storage, bandwidth, and server requirements. Here's how to approach these calculations systematically.
Useful Approximations
| Value | Approximation |
|---|---|
| Seconds in a day | 86,400 ≈ 100,000 (10^5) |
| Seconds in a month | ~2.5 million (2.5 × 10^6) |
| Seconds in a year | ~30 million (3 × 10^7) |
| 1 million requests/day | ~12 QPS |
| 100 million requests/day | ~1,200 QPS |
| 1 billion requests/day | ~12,000 QPS |
For quick mental math: 1 million requests/day ≈ 10-12 QPS. Use 10 for easy calculation, 12 for more precision. 500M requests/day? That's about 5,000-6,000 QPS.
Data Size Reference
| Data Type | Size | Example |
|---|---|---|
| UUID | 16 bytes (36 as string) | 550e8400-e29b-41d4-a716-446655440000 |
| Timestamp | 8 bytes | Unix epoch in milliseconds |
| Integer ID | 4-8 bytes | Auto-increment or snowflake |
| Short text | 100-500 bytes | Username, email, tweet |
| JSON metadata | 500-2000 bytes | User profile, post with metadata |
| Thumbnail image | 10-50 KB | 100x100 compressed JPEG |
| Profile photo | 100-500 KB | 400x400 compressed JPEG |
| Full-size image | 1-5 MB | High-resolution photo |
| Video (1 min, compressed) | 10-50 MB | Depends on quality |
Storage Estimation
Formula: Storage = Records × Record Size × Retention × Replication
Example: URL Shortener
Requirements: 100M new URLs/month, 5-year retention
Record size:
- Short code: 7 bytes
- Long URL: 200 bytes average
- Metadata: 50 bytes
- Total: ~260 bytes → round to 300 bytes
Monthly: 100M × 300 bytes = 30 GB
5 years: 30 GB × 60 months = 1.8 TB
With 3x replication: ~5.4 TB
Conclusion: Fits easily on a single database—no sharding needed.
Example: Yelp-like Business Directory
10M businesses × 1 KB each = 10 GB
Add reviews (10x): 100 GB
With indexes and overhead: ~200-300 GB
Conclusion: A single PostgreSQL instance handles this comfortably.
Bandwidth Estimation
Formula: Bandwidth = Requests/second × Average Response Size
Example: Image Service
Requirements: 10M image views/day, average image 500 KB
QPS: 10M / 86,400 ≈ 116 requests/second
Bandwidth: 116 × 500 KB = 58 MB/s = ~500 Mbps
Peak (3x average): ~1.5 Gbps
Conclusion: A CDN with multiple edge nodes handles this easily.
Server Estimation
Formula: Servers = Peak QPS / QPS per Server
Server throughput varies dramatically based on workload:
| Request Type | RPS per Server (64 cores) |
|---|---|
| Static/cached responses | 50,000-100,000 |
| Simple API (DB lookup) | 10,000-30,000 |
| Complex API (multiple DB calls, business logic) | 1,000-5,000 |
For back-of-envelope calculations, 10,000 RPS per server is a reasonable default for typical API workloads.
Example: Twitter-like Service
Requirements: 500M DAU, 20 requests/user/day
Daily requests: 500M × 20 = 10B requests
Average QPS: 10B / 86,400 ≈ 116,000 QPS
Peak QPS (3x): ~350,000 QPS
Assuming 10,000 RPS per server (typical API):
Servers needed: 350,000 / 10,000 = 35 servers
Add buffer for redundancy (N+2) and growth: ~50-60 servers for the API tier.
Peak vs Average: Systems must handle peak load, not just average. Peak is typically 2-5x average. Using the 80/20 rule: 80% of traffic occurs in 20% of the time (roughly 5 hours), which means peak can be 4x average.
Quick Reference Cheat Sheet
When to Scale Each Component
| Component | Comfortable Range | Time to Consider Scaling |
|---|---|---|
| PostgreSQL | < 10 TB, < 5k write TPS | > 30 TB or > 10k write TPS |
| Redis cache | < 500 GB, < 50k ops/s | > 800 GB or > 80k ops/s |
| Single server | < 60% CPU, < 70% memory | > 70% CPU or > 80% memory |
| Kafka broker | < 500k msgs/s | > 800k msgs/s or growing lag |
System Scale Reference
| Scale | Users | Data | Typical Architecture |
|---|---|---|---|
| Startup | < 100k | < 50 GB | Single server, managed DB |
| Growing | 100k-1M | 50-500 GB | Multiple servers, read replicas |
| Scale-up | 1M-10M | 500 GB-5 TB | Caching layer, possible sharding |
| Large | 10M-100M | 5-50 TB | Sharded DB, microservices |
| Massive | > 100M | > 50 TB | Full distributed architecture |
Component Throughput Summary
| Component | Typical Throughput |
|---|---|
| MySQL/PostgreSQL (reads) | 10,000-50,000 QPS |
| MySQL/PostgreSQL (writes) | 5,000-20,000 TPS |
| Key-value store (Redis) | 100,000-1,000,000 ops/s |
| Message queue (Kafka) | 1,000,000+ msgs/s per broker |
Common Interview Mistakes
1. Premature Sharding
The most common mistake is proposing sharding for data that fits on a single database.
Bad: "We have 10M businesses at 1 KB each. I'll shard by business_id across 10 nodes."
Good: "10M × 1 KB = 10 GB. Even with 10x for reviews and indexes, we're at 100 GB. A single PostgreSQL instance handles this—no sharding needed."
Same for caches. A LeetCode leaderboard with 100k competitions × 100k users × 40 bytes = 400 GB. This fits on a single large cache instance.
2. Overestimating Latency
SSD random reads are ~100 microseconds, not the 10ms of spinning disks. A simple indexed database lookup takes 1-5ms.
Bad: "Database queries are slow, so we need to cache everything to meet our 100ms latency requirement."
Good: "An indexed lookup takes ~5ms. Our 100ms budget easily accommodates several database calls. We'll cache for throughput, not latency."
3. Unnecessary Message Queues
Adding Kafka for "high write throughput" when a database handles it fine.
Bad: "At 5k writes/second, we need a message queue to buffer the writes."
Good: "5k writes/second is well within PostgreSQL's capabilities (it handles 10-20k TPS). A message queue adds latency and complexity. We'd only add one for guaranteed delivery, async processing, or to decouple producers from consumers."
4. Ignoring Peak vs Average
Bad: "100M requests/day = 1,200 QPS. One server handles that."
Good: "100M requests/day averages 1,200 QPS, but peak might be 5,000+ QPS. We design for peak plus 2x headroom for growth."
5. Using Outdated Numbers
Don't design for 2015 hardware. Modern databases handle terabytes, caches can hold hundreds of gigabytes, and a single server has 256GB+ of RAM. Designing around artificial constraints (sharding at 100GB, worrying about memory limits) signals lack of practical experience.
What Interviewers Look For
When you do capacity estimation in interviews, interviewers evaluate:
-
Grounded estimates — Do your calculations match realistic hardware capabilities?
-
Right-sized solutions — Do you avoid over-engineering while addressing real scale challenges?
-
Clear reasoning — Can you walk through your math and explain your assumptions?
-
Modern knowledge — Are you designing for 2026 hardware, not 2015?
-
Practical trade-offs — Do you understand when to add complexity?
How to Approach Capacity Estimation
Spend 2-3 minutes on estimation early in your design:
- State assumptions clearly — "Assuming 100M DAU with 10 actions per user per day..."
- Show your math — Write out the calculation step by step
- Round generously — Use powers of 10 and round up for safety
- Draw conclusions — "This means we need X servers" or "A single database handles this"
- Use results to justify architecture — "Since we only have 100GB of data, we don't need to shard"
This demonstrates the pragmatic thinking that distinguishes senior engineers from those who just memorize solutions.