| Users | Functional Requirements | Non-Functional Requirements | Impact on Design |
|---|---|---|---|
| 100 users | Basic features, simple workflows | Minimal performance, basic security | Simple architecture, monolithic app possible |
| 10,000 users | More features, user roles, error handling | Improved performance, availability, security | Modular design, caching, load balancing |
| 1,000,000 users | Complex workflows, integrations, multi-tenancy | High availability, scalability, strict security | Microservices, distributed systems, CDN |
| 100,000,000 users | Global features, personalization, compliance | Extreme scalability, disaster recovery, compliance | Multi-region deployment, sharding, automation |
Requirements gathering (functional and non-functional) in HLD - Scalability & System Analysis
When requirements are not well gathered, the system design may miss critical features or constraints. This leads to rework, poor scalability, and user dissatisfaction. At small scale, this causes delays. At large scale, it causes costly redesigns and failures.
- Stakeholder Interviews: Engage all users and stakeholders early to capture needs.
- Use Cases & User Stories: Define clear scenarios to understand functional needs.
- Non-Functional Workshops: Discuss performance, security, and compliance early.
- Prototyping: Build simple models to validate assumptions.
- Iterative Refinement: Continuously update requirements as feedback arrives.
- Documentation & Traceability: Keep clear records to track changes and decisions.
Good requirements reduce costly redesigns. For example, a missed security requirement can cause expensive fixes later. Early investment in gathering requirements saves time and money during scaling.
- Time spent interviewing: ~10-20 hours per major stakeholder group
- Prototyping cost: Low compared to rework
- Documentation effort: Ongoing but small compared to development
- Cost of missed requirements: Can be 10x or more in rework and downtime
Start by explaining the difference between functional and non-functional requirements. Then discuss how incomplete requirements cause bottlenecks. Next, describe how improving requirements gathering scales the system design process. Finally, give examples of techniques and their impact on cost and time.
Your project has 1000 users and basic requirements. Now you expect 10x growth and new security needs. What is your first action?
Answer: Revisit and expand the requirements gathering process to include new functional and non-functional needs, especially security. This ensures the design can scale properly without costly rework.
Practice
functional requirement in system design?Solution
Step 1: Understand functional requirements
Functional requirements specify the actions or features the system must perform, such as user login or data processing.Step 2: Differentiate from non-functional requirements
Non-functional requirements describe qualities like speed, security, or usability, not specific features.Final Answer:
A feature that defines what the system should do -> Option DQuick Check:
Functional = What system does [OK]
- Confusing functional with non-functional requirements
- Thinking security is a functional requirement
- Mixing usability with system features
non-functional requirement?Solution
Step 1: Identify non-functional requirements
Non-functional requirements describe system qualities like performance, reliability, or security.Step 2: Match options to definitions
The system shall respond to user requests within 2 seconds specifies response time, a performance metric, which is non-functional. Others describe features (functional).Final Answer:
The system shall respond to user requests within 2 seconds -> Option AQuick Check:
Non-functional = system qualities [OK]
- Choosing features as non-functional requirements
- Ignoring time or performance constraints
- Confusing functional and non-functional examples
- The system must allow users to upload files.
- Uploads must complete within 5 seconds.
- The system must support 1000 concurrent uploads.
Which of these is a functional requirement?
Solution
Step 1: Identify functional requirements
Functional requirements describe what the system does, such as allowing file uploads.Step 2: Analyze each option
A is performance (non-functional). B is capacity/scalability (non-functional). D is availability (non-functional).Final Answer:
The system must allow users to upload files -> Option CQuick Check:
Functional = system features [OK]
- Selecting performance, capacity, or availability as functional
- Confusing capacity constraints as functional
- Ignoring direct feature statements
Solution
Step 1: Identify requirement type
Handling 1000 requests per second is about performance, a non-functional quality.Step 2: Explain why listing as functional is wrong
Functional requirements describe features, not performance metrics. Mislabeling causes confusion in design and testing.Final Answer:
Non-functional; it describes performance, so listing as functional is incorrect -> Option BQuick Check:
Performance = non-functional [OK]
- Calling performance a functional requirement
- Confusing user behavior with system qualities
- Ignoring the impact of mislabeling requirements
Solution
Step 1: Identify functional requirements in options
Functional requirements describe features like sending messages or creating profiles.Step 2: Identify non-functional requirements in options
Non-functional requirements describe qualities like speed, availability, or security.Step 3: Analyze each option pair
Users can send messages; messages must be delivered within 1 second pairs sending messages (functional) with delivery speed (non-functional). Others mix two functional or two non-functional requirements incorrectly.Final Answer:
Users can send messages; messages must be delivered within 1 second -> Option AQuick Check:
Functional + Non-functional = Users can send messages; messages must be delivered within 1 second [OK]
- Mixing two functional or two non-functional requirements
- Confusing UI features with system qualities
- Ignoring delivery time as non-functional
Ready to prove it?
Pass the test and this pattern moves unknown
