System Design

Requirements Gathering

February 14, 20261 min read

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.