Most people think system design is about building the “best” architecture. It’s not—instead, it’s about making the right tradeoffs for a given workload.

1. Performance, Latency & Throughput

// TRADE-OFF

Latency vs Throughput

Click to expand →
Batching many requests together can reduce network, serialization & processing overhead and increase throughput. Yet the downside is individual requests wait longer while a batch forms. Use batching when throughput matters and individual requests when low latency matters.
// TRADE-OFF

Latency vs Tail Latency

Click to expand →
A system can have excellent median latency while a tiny number of slow requests create poor p95 and/or p99 latency. Redundant/hedged requests can reduce these long tails, but they consume extra infrastructure capacity.
// TRADE-OFF

Compression vs CPU Usage

Click to expand →
Compressing data reduces network bandwidth & storage requirements. Yet compression and decompression require CPU and add processing latency. Use compression when bandwidth/storage matters, and uncompressed data when low CPU usage matters.