Hello! Welcome back to your system design preparation.
In our last lesson, we established a systematic 4-phase framework for navigating system design interviews. This structure—Scoping, High-Level Design, Deep Dive, and Wrap-up—provides a reliable roadmap for tackling any large-scale design problem.
Today, we're diving deep into the most critical part of that first phase: clarifying requirements. Your ability to ask effective questions at the start of the interview sets the stage for everything that follows. The goal of this lesson is to master this skill. For a senior engineer, this isn't about discovering what requirements are; it's about demonstrating a disciplined, structured approach to problem definition under interview constraints.
Why Clarification is Your Most Powerful Tool
Before designing any real-world system, you would spend significant time with product managers and stakeholders to define the scope. The interview is a compressed version of this process. The #1 mistake candidates make, regardless of experience, is jumping into a solution before fully understanding the problem. This can be an instant fail.
Let's start with a video that powerfully explains why clarifying the question is not just a good idea, but an absolute necessity.
Systems Architecture Interview: Clarifying the Question
Jackson Gabbard, a former Facebook engineering manager, makes a compelling case for why clarifying the question is the single most important skill in a system design interview. Pay close attention to his points about the consequences of failing to do this.
Watch the following three segments: The introduction to the topic (02:15 - 03:04). The anti-pattern of what not to do (04:03 - 06:05). The consequences of rushing into a solution (17:25 - 18:01). This will set the stage for why the rest of this lesson is so crucial.
As Gabbard highlights, asking questions isn't a sign of weakness; it's a hallmark of a senior engineer who knows that building the right thing is more important than building a thing right now.
Functional vs. Non-Functional Requirements
All requirements can be sorted into two buckets: functional and non-functional. Getting this distinction right is key to structuring your questions.
- Functional Requirements define what the system must do. These are the features and use cases.
- Non-Functional Requirements (NFRs) define how the system must perform. These are the quality attributes and constraints, often called the "-ilities" (scalability, availability, reliability, etc.).
For a backend engineer, NFRs are often where the real complexity of the interview lies. They dictate your architectural choices.
How to Gather and Prioritize Requirements in System Design...
Let's get precise definitions and examples for both types of requirements. This article from Design Gurus provides a clear breakdown.
Read the section 'Understanding Functional vs. Non-Functional Requirements'. Focus on the examples given for services like Twitter and YouTube to solidify your understanding of each category.
Here is a visual summary of the distinction:

A Systematic Approach to Gathering Requirements
To avoid rambling or asking random questions, you need a structured approach. The goal is to have a mental checklist that ensures you cover all critical areas.
Step 1: Clarify Functional Scope
Start by defining the features. A great way to do this systematically is to identify the core "objects" of the system and their relationships.
A 3-Step Framework to Nail Your System Design Interview
The guide from interviewing.io offers a methodical way to probe for functional requirements. It focuses on identifying business objects, their relations, and access patterns—a thought process that should be very natural given your backend experience.
Read section '1.1 Functional Requirements'. Pay special attention to the framework of identifying objects, their relations, access patterns, and mutability. The Twitter example clearly illustrates this process.
Your Functional Requirements Checklist:
- Restate & Confirm: "So, we're designing a ride-sharing app like Uber. My understanding is we need to match riders with drivers. Is that the core focus?"
- Identify Users/Actors: Who will use this system? (e.g., Riders, Drivers, Admins)
- List Core Features (Use Cases): What can each user do? (e.g., Rider can request a ride; Driver can accept a ride).
- Define Scope (In vs. Out): "Are features like payments, driver ratings, or real-time surge pricing in scope for this discussion, or should we focus on the core ride-matching logic?"
- Consider Mutability: "Can a user edit their profile? Can a tweet be deleted?"
Step 2: Identify Non-Functional Requirements
Once the what is clear, transition to the how. This is your chance to demonstrate senior-level thinking about scale and resilience. Signal the shift clearly: "Great, now that I understand the core features, I'd like to ask some questions about the non-functional requirements to understand the scale and performance constraints."
How to Gather and Prioritize Requirements in System Design...
Let's return to the Design Gurus article for a comprehensive list of questions to ask about non-functional requirements. This is your toolkit for uncovering the constraints that will shape your architecture.
Read the section '2. Identify Non-Functional Requirements (Constraints & Targets)'. Use the bullet points (Scale & Volume, Performance, Data Storage & Consistency, etc.) as a mental checklist for your interviews.
Your Non-Functional Requirements Checklist:
- Scalability:
- "How many daily active users (DAU) should we plan for? 1 million? 100 million?"
- "What's the anticipated read-to-write ratio? (e.g., for Twitter, many more feed reads than tweet writes)."
- "What is the expected request rate (QPS) at peak?"
- Performance:
- "What is the target latency for key operations? For example, should the news feed load in under 200ms?"
- Availability:
- "Is this a critical system that needs high availability, like 99.99%? Is some downtime acceptable?"
- "Do we need to plan for disaster recovery across multiple geographic regions?"
- Consistency:
- "How critical is data consistency? For a banking system, it's paramount. For a social media 'like' count, is eventual consistency acceptable?"
- Durability:
- "Can we afford to lose any data? For example, uploaded user photos must be stored with high durability."
- Security & Privacy:
- "Is there any personally identifiable information (PII) we need to protect? Does this need to comply with regulations like GDPR?"
If the interviewer says "I don't know," propose a reasonable assumption and get their buy-in: "Okay, let's assume we're targeting 10 million DAU to start, with a 10:1 read/write ratio. Does that sound like a reasonable starting point?"
Putting It All Together: A Worked Example
Theory is good, but seeing it in action is better. Let's watch how you can turn this checklist into a natural, effective conversation with the interviewer.
Systems Architecture Interview: Clarifying the Question
Let's go back to Jackson Gabbard's video. He applies these principles to the prompt 'design a competitor to WhatsApp/Signal'. He first catalogs the information given and then systematically identifies the gaps by asking clarifying questions.
Watch the following segments to see the process in action: Cataloging initial details (06:05 - 10:23). Applying this to the sample problem (10:23 - 13:14). Formulating clarifying questions to fill the gaps (13:32 - 17:25). Notice how he moves from functional questions (video calls?) to non-functional ones (what does 'worldwide' mean?).
Common Mistakes to Avoid
Knowing the right steps is half the battle; knowing the pitfalls is the other half.
How to Gather and Prioritize Requirements in System Design...
This final reading summarizes the most common mistakes candidates make during the requirements phase and, more importantly, how to avoid them.
Read the section 'Common Mistakes in Requirement Gathering (and How to Avoid Them)'. Pay particular attention to the advice on time-boxing this phase and making assumptions without validation.
Conclusion
In this lesson, we've broken down the crucial first step of any system design interview: clarifying requirements. You now have a structured methodology and a set of practical tools to transform an ambiguous prompt into a concrete problem statement.
Key Takeaways:
- Don't Jump to Solutions: The single biggest mistake is designing before you've defined the problem. Use the first 5-10 minutes to ask questions.
- Separate Functional from Non-Functional: Ask "what?" (features) before you ask "how?" (performance, scale).
- Be Systematic: Use a mental checklist (Users, Features, Scale, Performance, Availability, Consistency, Security) to guide your questions.
- Think Out Loud and Validate: State your assumptions clearly and get the interviewer's agreement. The requirements gathering phase is a dialogue, not an interrogation.
In our next lesson, we will build directly on this foundation. We'll take the non-functional requirements we've just gathered and learn how to perform back-of-the-envelope calculations for storage, bandwidth, and QPS. This will allow us to put concrete numbers behind our design choices.