1.What system design actually is
System design is the process of turning a stated requirement into an architecture: which components exist, how data moves between them, what APIs and storage they use, and how the whole thing behaves when something goes wrong.
Key features
- Input: a requirement. Output: architecture, components, data flow
- Covers APIs, storage choices, and operational behavior too
- Failure handling is part of the design, not an afterthought
- The same requirement can translate into several valid designs
- Requirement — one sentence
- leads to Architecture (translated into)
- Architecture — components + boundaries
- leads to Data flow (wired together by)
- Data flow — who calls whom, with what
- leads to Operational behavior (must survive)
- Operational behavior — failure handling, scaling
Command
Requirement:
"Users can upload a profile photo."
Translates into:
- API: POST /users/{id}/photo, multipart upload
- Storage: object storage for the file, a DB row for its URL
- Data flow: client -> API -> object storage -> DB write
- Failure handling: what happens if the upload succeeds but the DB write fails?System design translates a requirement into architecture, data flow, APIs, storage and failure handling — a box diagram alone is not a design.