Turning requirements into components that work together.
The idea
System design is deciding what pieces (servers, databases, caches, queues) you need, how they connect, and what trade-offs you accept so the product works at the scale you expect.
Functional vs non-functional
• Functional: what the system does (post a tweet, send a message).
• Non-functional: how well it does it (latency, availability, durability, consistency, cost).
Most design decisions come from non-functional requirements.
A repeatable approach
1. Clarify requirements and scope.
2. Estimate scale (users, requests/sec, storage).
3. Sketch a high-level design.
4. Deep-dive the riskiest parts.
5. Identify bottlenecks and trade-offs.