Why Requirements Gathering Matters
System design interviews start with vague prompts: Design Uber. Design Yelp. Design LeetCode. Your goal is to ask questions and clarify requirements—not jump straight to solutions.
You'll gather two types: functional requirements (what the system does) and non-functional requirements (how it behaves). Real systems are massive; you can't design the whole thing in an hour. Collaborate with the interviewer to pick the right subset. Skip this step and start drawing databases—you'll fail immediately.
Functional Requirements
What the system needs to do.
For example, when designing a newsfeed:
- Get a newsfeed
- Post to the newsfeed
- etc.
Non-Functional Requirements
System characteristics—how the system behaves:
- Is it scalable?
- Is it reliable?
- Is it consistent?
- Is it low latency?
Scale
One thing you should figure out at the start is the scale of the system. Scale drives the non-functional requirements. Get this clear before diving into design.