Before designing any system, you must understand what you are building and why you are building it. Misunderstood requirements can lead to overengineering, wasted effort, or an unusable product.
If I had an hour to solve a problem, I would spend 55 minutes thinking about the problem and 5 minutes on the solution — Einstein.
Two Types of Requirements
1️⃣ Functional Requirements (FR)
These describe what the system should do – the features and operations.
Examples:
- Users can upload and share photos.
- The system sends email notifications.
- Users can search for other users by username.
2️⃣ Non-Functional Requirements (NFR)
These describe how well the system performs under certain conditions.
Examples:
- System must handle
10,000
concurrent users - API should respond within 200ms
- Availability should be 99.99%
- Data should be encrypted in transit
Steps to Understand Requirements
Step 1: Clarify the Objective
Ask:
- What is the purpose of the system?
- Who are the users?
- What is the main business value?
Step 2: Define the Core Features (Functional Requirements)
List the primary operations your system must support.
What are the must-have user flows?
Step 3: Identify Non-Functional Requirements (Performance, Security, Scale)
Ask:
- How many users will be using this?
- What is the expected request volume?
- Is it real-time or eventual?
- What are the SLAs (Service Level Agreements)?
Step 4: Understand Constraints
These could be:
- Technology limitations (e.g., must use MySQL)
- Compliance rules (e.g., GDPR)
- Budget or timeline