system-design

Requirements Gathering: The Questions to Always Ask

The phase where interviews are won and lost. Ten minutes of the right questions turns a vague prompt into a scoped, designable problem — and demonstrates the judgment interviewers are actually grading.

Prerequisites: The Framework Time to read: ~16 minutes


Why this phase decides the outcome

🚨 “Design Instagram” is deliberately vague, and that’s the test. The interviewer wants to see whether you’ll scope the problem before solving it, or charge ahead building the wrong thing. A candidate who spends 30 seconds and starts drawing has already signaled inexperience; one who asks sharp clarifying questions has signaled the opposite.

The goal of this phase: turn an unbounded prompt into a specific, bounded, designable problem, and extract the non-functional requirements that will drive every subsequent decision.

🎙️ “Before I design anything, I have some clarifying questions — the scale and consistency needs will shape the whole approach.”


Functional requirements: what does it do?

Establish the core features and — crucially — cut the scope.

The questions:

🚨 Aggressively narrow, and state what’s out of scope explicitly:

“I’ll focus on the core: posting photos and viewing a home feed. I’ll treat stories, DMs, search, and ads as out of scope — I’ll note where they’d plug in, but I want to design the core well rather than sketch everything shallowly. Does that work?”

Why cutting scope is a strength, not a weakness: it shows judgment (you know what matters), it buys time to go deep (which is what’s graded), and it prevents the “designed everything shallowly, nothing well” failure. Interviewers respect a candidate who scopes.


Non-functional requirements: the ones that drive the architecture

🚨 These matter more than the features, because they determine the whole design. Ask about each:

Scale

Read/write ratio

Latency

Availability

Consistency

Durability


The universal question checklist

🚨 A checklist you can apply to almost any design prompt:

FUNCTIONAL
□ What are the core use cases? (and what's OUT of scope?)
□ Who are the users and what's the primary action?

SCALE
□ How many users / DAU?
□ Requests per second (read and write)?
□ Read/write ratio?
□ Data volume and growth?

QUALITY
□ Latency target?
□ Availability target (nines)?
□ Consistency needs (per feature)?
□ Durability needs?

CONTEXT
□ Any specific constraints? (mobile, offline, real-time, global, regulated)
□ Existing systems to integrate with?

You won’t ask all of these — pick the ones that matter for the specific problem — but having the checklist means you never miss the architecture-defining ones (scale, read/write ratio, consistency).


Reading between the lines

🚨 Some requirements are implied and worth surfacing:

Naming these implications when you hear the keyword shows you connect requirements to architecture.


Turning requirements into design constraints

🚨 The payoff: each requirement becomes a design decision. Don’t just collect requirements — use them:

🎙️ “So: read-heavy, eventual consistency is fine for the feed, hundreds of millions of users, and photos. That tells me to design for reads with heavy caching and precomputation, store media in object storage behind a CDN, and shard the metadata. Let me estimate to confirm the scale.”

This transition — from requirements to a design strategy — is the whole point of the phase.


Time management

🚨 Spend ~5-8 minutes here, no more. The failure mode is spending 20 minutes gathering requirements and never reaching a design. Ask the architecture-defining questions (scale, read/write, consistency), scope aggressively, and move on. You can always revisit a requirement during the design.


🚨 Interview traps


🎙️ Soundbites


🛠️ Try it

1. Generate the questions for ten prompts. For ten different “Design X” prompts, write down the clarifying questions you’d ask — functional (scope) and non-functional (scale, read/write, latency, consistency). Do it fast, from the checklist. The goal is to make the questioning automatic.

2. Practice scoping out loud. For each prompt, state the scope decision: “I’ll focus on X and Y, and treat Z as out of scope.” Practice making the cut confidently — hesitant scoping reads as uncertainty.

3. Turn requirements into constraints. For a prompt, gather the requirements, then explicitly state what each one implies for the design (“read-heavy → cache; photos → object storage”). This requirements-to-design transition is the phase’s payoff — practice making it explicit.

4. Time yourself. Do the requirements phase for a case study with a 6-minute timer. If you’re not done in 6-8 minutes, you’re over-gathering — practice hitting the architecture-defining questions and moving on.


Check yourself

1. Why is aggressively cutting scope a strength rather than a weakness in a design interview? Because the prompt is deliberately unbounded ("Design Instagram" encompasses posting, feeds, stories, DMs, search, ads, live video, and more), and you cannot design all of it well in 45 minutes — so attempting to means sketching everything shallowly and demonstrating nothing deeply, which is exactly what fails. Cutting scope to the core (posting and the feed) and *explicitly stating* what you're excluding shows three things the interviewer is grading: **judgment** (you can identify what matters most versus what's peripheral), **communication** (you set clear expectations and get agreement rather than silently narrowing), and **time awareness** (you're allocating the limited time to depth on the core rather than breadth across everything). It also directly enables the deep-dive phase where seniority is demonstrated — you can only go three levels deep on the feed if you're not trying to also design search and ads. Far from looking like you're avoiding work, decisive scoping ("I'll focus on X and Y, treat Z as out of scope and note where it'd plug in") looks like someone who has run real design reviews and knows that a well-designed core beats a shallow sketch of everything. Interviewers consistently reward it.
2. Which non-functional requirements are most important to establish, and why? Scale, read/write ratio, latency, availability, consistency, and durability — with scale, read/write ratio, and consistency being the most architecture-defining. They matter more than the *features* because the same feature is a completely different system depending on them: a photo feed and a trading system might both be "show a stream of items," but one tolerates seconds of staleness and the other needs microseconds and strict correctness. **Scale** (users, QPS, data volume) determines whether you need one database or a sharded distributed system — a huge difference. **Read/write ratio** determines the whole strategy: a 100:1 read-heavy system (most social apps) is designed around caching, replicas, and precomputation, while a write-heavy one needs batching, async, and write-optimized storage — so you *always* ask this. **Consistency** is a per-feature question that decides where you can cache and use eventual consistency (the feed, like counts) versus where you need strong consistency (payments, inventory), and getting it wrong means either an over-engineered system or a correctness bug. Latency, availability, and durability similarly constrain the design (precomputation and geo-distribution, number of nines and redundancy, whether you can ever lose data). Establishing these up front means your design is *derived* from real constraints rather than guessed, which is both correct and a strong signal.
3. How do you turn gathered requirements into design decisions, and why is that the point? By explicitly stating what each requirement *implies* for the architecture, rather than just collecting them and moving on. Each non-functional requirement maps to a concrete design choice: "read/write is 100:1" implies "design for reads — cache aggressively, add read replicas, precompute expensive views"; "the feed can be eventually consistent" implies "we can serve from caches and replicas without worrying about staleness"; "500M users, 100M DAU" implies "this is at distributed/sharding scale, not single-database"; "photos" implies "object storage behind a CDN, not blobs in the database"; "global users" implies "multi-region eventually." That transition — from a list of requirements to a coherent design strategy — is the point of the requirements phase because requirements aren't collected for their own sake; they exist to *constrain and direct* the design. A candidate who gathers requirements and then designs something disconnected from them has wasted the phase; one who says "so, given it's read-heavy, eventually consistent, at hundreds of millions of users, with photos, I'll design for reads with heavy caching, store media in object storage behind a CDN, and shard the metadata" has shown that their design is *derived* from the problem rather than pattern-matched from memory. This makes every subsequent decision justifiable ("I'm caching here *because* we established it's read-heavy"), which is exactly the reasoning-not-reciting behaviour that scores. The requirements phase and the design phase are connected by this act of translation.
4. What does it mean to "read between the lines" of a prompt, and why does it help? It means recognizing that certain words in a prompt carry implicit technical requirements, and surfacing them proactively. When a prompt says "real-time," it implies persistent connections (WebSockets/SSE), stateful servers, and the server-push routing problem; "global users" implies multi-region deployment, geo-latency, and data-residency compliance; "photos/video" implies object storage, CDN, and large bandwidth (not database blobs); "payments" implies strong consistency, idempotency, an audit trail, and no tolerance for data loss; "social feed" implies fan-out, the celebrity/hot-key problem, and a read-heavy profile; "search" implies an inverted index and relevance ranking. Reading between the lines helps because it demonstrates that you connect problem descriptions to architectural consequences — the core skill being tested — and it lets you get ahead of the design ("since this is real-time, I'll need to solve message delivery, so I'll plan for WebSockets and a connection-to-server routing layer"). It also surfaces requirements the interviewer may not have stated explicitly but expects you to identify, and addressing them unprompted (rather than being led to them) signals experience. The candidate who hears "design a payment system" and immediately flags idempotency and strong consistency, or hears "global" and raises multi-region and residency, shows they understand what these categories of system actually require — which is more impressive than waiting to be asked.
5. How much time should requirements take, and what's the failure mode of getting it wrong? About 5-8 minutes of a 45-minute round — enough to scope the problem and extract the architecture- defining non-functional requirements (scale, read/write ratio, consistency, latency, availability), but not more. There are two opposite failure modes. **Under-investing** (30 seconds, then charging into design) means you design the wrong system — you miss that it's write-heavy, or that consistency matters somewhere critical, and your whole architecture is misdirected; it also signals inexperience, since skipping straight to boxes is what junior candidates do. **Over-investing** (spending 20 minutes meticulously gathering every requirement) is the more insidious failure: you run out of clock and never reach an actual design, or reach it with no time for the deep dives where seniority is demonstrated — so you leave the interviewer with a well-scoped problem and no solution, which reads as poor time management and prevents you from showing your technical depth. The discipline is to ask the *few* questions that actually change the architecture (scale, read/write, consistency — not every edge case), scope aggressively and explicitly, translate the requirements into a design direction, and move on, knowing you can revisit a specific requirement later when the design raises it. The clock is the constraint that makes this a skill: gathering requirements is necessary, but it's the setup for the design, not the main event.

Further reading