Chaturmind
LearnDSASystem DesignDevOpsEngineering GrowthBlog
Start learning
Chaturmind

Structured learning paths for engineers who want to go deep. Written by practitioners.

Learn

  • Java
  • DSA
  • System Design
  • Spring Boot
  • AI / ML
  • DevOps
  • Engineering Growth

Company

  • Blog
  • Contact

Legal

  • Privacy Policy
  • Terms of Service

Β© 2026 Chaturmind. All rights reserved.

Built for engineers who want to go deep.


← System Design Interview Playbook

Interview Framework

  • The 6-Step Design Framework
  • HLD Fundamentals Refresher
  • Requirement Gathering Practice
  • Domain Decomposition
  • API Contract Design
  • Data Ownership Model
  • Failure Scenario Walkthroughs
  • Architecture Diagramming
  • Back-of-Envelope Estimation

10 Case Studies

  • Design a URL Shortener
  • Design Twitter / X
  • Design WhatsApp
  • Design Netflix
  • Design a Rate Limiter
  • Design a Search Autocomplete
  • Design a Distributed Cache
  • Design a Notification Service
  • Design Uber / Ride Sharing
  • Design a Distributed File Storage System
  • Design a Distributed Task Scheduler
  • Design a Message Queue System
  • Design an Authentication System at Scale
  • Design a Distributed Logging & Metrics Pipeline
  • Design a Food Delivery Platform
  • Design a Real-Time Analytics Dashboard
  • Design a Monitoring & Alerting System
  • Design Container Orchestration Basics
  • Design a CI/CD Pipeline System
  • Design Service Mesh Basics
  • Design a Centralized Configuration & Secrets System
  • Design a Batch Processing System
  • Design a Data Warehouse / Analytics Storage Layer
  • Design Global Content Delivery
  • Case studies

    πŸ—οΈDesign a URL Shortener
  • πŸ—οΈDesign a Rate Limiter
  • πŸ—οΈDesign Twitter / X
  • πŸ—οΈDesign WhatsApp
  • πŸ—οΈDesign Netflix
  • πŸ—οΈDesign a Distributed Cache
  • πŸ—οΈDesign a Notification Service
  • πŸ—οΈDesign a Search Autocomplete System
  • πŸ—οΈDesign Uber / Ride Sharing
  • πŸ—οΈDesign a Web Crawler
  • πŸ—οΈDesign a Payment System
  • πŸ—οΈDesign a Distributed Lock Service
  • πŸ—οΈDesign a Video Streaming Platform
  • πŸ—οΈDesign a Search Engine
  • πŸ—οΈDesign E-Commerce Checkout & Inventory at Scale
Chaturmind
← System Design Interview Playbook

Interview Framework

  • The 6-Step Design Framework
  • HLD Fundamentals Refresher
  • Requirement Gathering Practice
  • Domain Decomposition
  • API Contract Design
  • Data Ownership Model
  • Failure Scenario Walkthroughs
  • Architecture Diagramming
  • Back-of-Envelope Estimation

10 Case Studies

  • Design a URL Shortener
  • Design Twitter / X
  • Design WhatsApp
  • Design Netflix
  • Design a Rate Limiter
  • Design a Search Autocomplete
  • Design a Distributed Cache
  • Design a Notification Service
  • Design Uber / Ride Sharing
  • Design a Distributed File Storage System
  • Design a Distributed Task Scheduler
  • Design a Message Queue System
  • Design an Authentication System at Scale
  • Design a Distributed Logging & Metrics Pipeline
  • Design a Food Delivery Platform
  • Design a Real-Time Analytics Dashboard
  • Design a Monitoring & Alerting System
  • Design Container Orchestration Basics
  • Design a CI/CD Pipeline System
  • Design Service Mesh Basics
  • Design a Centralized Configuration & Secrets System
  • Design a Batch Processing System
  • Design a Data Warehouse / Analytics Storage Layer
  • Design Global Content Delivery
  • Case studies

    πŸ—οΈDesign a URL Shortener
  • πŸ—οΈDesign a Rate Limiter
  • πŸ—οΈDesign Twitter / X
  • πŸ—οΈDesign WhatsApp
  • πŸ—οΈDesign Netflix
  • πŸ—οΈDesign a Distributed Cache
  • πŸ—οΈDesign a Notification Service
  • πŸ—οΈDesign a Search Autocomplete System
  • πŸ—οΈDesign Uber / Ride Sharing
  • πŸ—οΈDesign a Web Crawler
  • πŸ—οΈDesign a Payment System
  • πŸ—οΈDesign a Distributed Lock Service
  • πŸ—οΈDesign a Video Streaming Platform
  • πŸ—οΈDesign a Search Engine
  • πŸ—οΈDesign E-Commerce Checkout & Inventory at Scale
HomeLearnSystem DesignSystem Design Interview PlaybookInterview Framework
βœ“ FreeIntermediateΒ· 7 min read

Requirement Gathering Practice

How to turn a vague prompt like 'design a chat application' into a concrete functional and non-functional requirements list, before drawing a single box.

Published September 22, 2026


Requirement Gathering Practice

Every HLD prompt is deliberately vague β€” "design a chat application," "design Twitter." The first few minutes of a strong answer are spent making it precise, not designing anything yet.

Practicing on a vague prompt: "design a chat application"

A weak candidate starts sketching boxes immediately. A strong candidate asks clarifying questions first, because "chat application" alone is compatible with wildly different systems β€” one-on-one messaging (WhatsApp-scale), group channels (Slack-scale), or massive broadcast channels (Discord-scale) β€” each implying a completely different architecture. Questions worth asking out loud:

  • One-on-one only, or group chats too?
  • Is message delivery required to be real-time, or is polling acceptable?
  • Do messages need to persist (chat history), or is this ephemeral?
  • What scale β€” thousands of users, or hundreds of millions?
  • Read receipts / typing indicators / online presence β€” in scope or not?

The interviewer usually has specific answers in mind and will narrow the prompt once you ask β€” the value isn't the questions themselves, it's demonstrating you won't design blind.

Functional requirements checklist

Two things to nail down for any prompt, before anything else:

Who are the actors? β€” e.g. for chat: sender, recipient, (optionally) an admin managing a group. Naming actors explicitly prevents designing a system that silently assumes only one type of user exists.

What are the core use cases? β€” the minimal verb list the system must support. For chat: send a message, receive a message, view chat history, see online status. Deliberately exclude anything not confirmed in scope (e.g. file attachments) rather than silently designing for it β€” scope creep in an interview costs you time you don't have.

Non-functional requirements checklist

This is the list that actually drives architecture decisions, not the functional list:

  • Scale β€” how many users, what's the expected QPS (queries per second)? A chat app for 10K users and one for 500M users are different systems, not the same system running on bigger hardware.
  • Latency expectations β€” is sub-100ms message delivery required (implies persistent connections, e.g. WebSockets), or is a few seconds of delay acceptable (implies polling could work)?
  • Consistency needs β€” must every user see messages in the exact same order (implies more coordination), or is "eventually consistent, mostly ordered" good enough (implies simpler, more available design)?

Stating these three explicitly, out loud, before any high-level design is what justifies every later choice β€” "I'm using WebSockets because we agreed sub-100ms delivery is required" is a design decision with a stated reason; a WebSocket diagram with no stated latency requirement is a guess that happens to be popular.

Why this step is worth the time pressure it costs

The most common HLD interview failure isn't a bad final design β€” it's a good design for the wrong requirements, because none were confirmed. Spending two minutes here is what prevents spending the remaining twenty designing something the interviewer didn't ask for.

Follow-up questions this topic invites β€” and their answers

Q: What if the interviewer doesn't answer your clarifying questions and just says 'you decide'? A: State your assumption explicitly and move on β€” e.g. "I'll assume group chats up to 100 members and sub-second delivery, since that's the common case for this kind of system" β€” this still demonstrates the reasoning, just without waiting on an external answer.

Q: How many clarifying questions is too many? A: Enough to fix the requirements that actually change the architecture (scale, latency, consistency) β€” not an exhaustive interrogation. Two to four sharp questions read as senior; ten generic ones read as stalling.

Q: Should functional or non-functional requirements be gathered first? A: Functional first β€” you need to know what the system does before you can meaningfully ask how well it needs to do it. Asking about latency for a feature that turns out to be out of scope wastes the question.

Q: Does this step change for a well-known system (e.g. 'design Twitter') where the answer seems obvious? A: No β€” even a famous system has scope ambiguity (does 'design Twitter' include the recommendation algorithm? Direct messages? Media uploads?). Stating assumed scope is just as necessary; "obvious" is exactly where unstated assumptions cause the most divergence between what you design and what's expected.

Previous

HLD Fundamentals Refresher

Next

Domain Decomposition

AI Tutor

Lesson: Requirement Gathering Practice

Quick actions

AI responses can be inaccurate. Verify critical information.