System design is the process of defining the architecture, components, and data flow of a system to meet specific requirements like scalability, reliability, and performance. It sits at the intersection of software engineering and infrastructure planning, requiring trade-offs between consistency, availability, and partition tolerance (CAP theorem). Understanding system design fundamentals is essential for building distributed systems that can handle millions of users while maintaining acceptable performance, cost efficiency, and operational simplicity. The key insight: premature optimization is expensive, but ignoring scalability patterns until crisis time is catastrophic—the goal is to design systems that start simple but have clear paths for growth when traffic demands it.
What This Cheat Sheet Covers
This topic spans 29 focused tables and 167 indexed concepts. Below is a complete table-by-table outline of this topic, spanning foundational concepts through advanced details.
Table 1: Scalability Types
Before you can scale anything you have to decide how to grow—bigger machines or more of them—and the answer shapes every other choice in your architecture. These are the fundamental levers for handling more load, from the simplicity of throwing more RAM at one box to the complexity of splitting writes across shards, each trading ease of implementation against how far it can actually take you.
| Type | Example | Description |
|---|---|---|
16GB RAM → 64GB RAM4 CPU cores → 16 cores | • Adding more power to a single machine • simple to implement but has physical limits and creates single point of failure. | |
1 server → 10 serversLoad balancer distributes | • Adding more machines to distribute load • enables near-unlimited growth but requires stateless design and complex coordination. | |
CPU > 70% → add 2 serversCPU < 30% → remove 1 | • Dynamically adjusts capacity based on metrics • optimizes cost but requires tuned thresholds and warm-up time awareness. |