Understanding Requirements

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