Requirements analysis identifies and documents what a system must do and the conditions under which it must operate. It provides the foundation for making appropriate system design decisions.
- Functional Requirements: Define the features and operations a system must perform, such as user registration, search, and payments.
- Non-Functional Requirements: Define system quality attributes and constraints, such as performance, scalability, security, and availability.
Example: In an online shopping system, user login, product search, and order placement are functional requirements, while response time, security, availability, and scalability are non-functional requirements.

Functional Requirements
Functional requirements describe the specific features, behaviors, and operations that a system must perform. They define how the system responds to user actions, inputs, and events.
For example, in an e-commerce application, users should be able to search for products, add items to their cart, and place orders.
Examples of Functional Requirements:
- User Authentication: Allow users to register, log in, and log out of their accounts.
- Product Search: Enable users to search for products using keywords, categories, or filters.
- Payment Processing: Allow users to make payments using supported payment methods.
- Order Management: Enable users to place, view, track, and cancel orders.
- Notifications: Send notifications about order confirmations, payments, and delivery updates.
Non-Functional Requirements
Non-functional requirements define how well a system should perform its operations. They specify quality attributes, operational expectations, and technical constraints that influence system architecture.
For example, an e-commerce website should load product pages quickly, protect customer information, and remain available during high-traffic sales.
Types of Non-Functional Requirements:
- Performance: Defines acceptable response times, latency, and throughput under specified workloads.
- Scalability: Specifies how the system should handle increasing users, requests, or data volumes.
- Availability: Defines the expected percentage of time the system should remain operational.
- Reliability: Ensures the system operates correctly and recovers appropriately from failures.
- Security: Establishes requirements for authentication, authorization, encryption, and data protection.
- Maintainability: Defines how easily the system can be updated, tested, debugged, and modified.
- Usability: Specifies expectations for ease of use, accessibility, and user experience.
- Portability: Defines the platforms, environments, and deployment targets the system must support.
Example of Functional and Non-Functional Requirements
Consider an Online Banking System where customers can access their accounts, transfer money, and view transaction details.
1. Functional Requirements
The banking application should support the following operations:
- Users can log in to their accounts.
- Users can view account balances.
- Users can transfer money between supported accounts.
- Users receive notifications for selected transactions.
2. Non-Functional Requirements
The banking system should meet the following quality expectations:
- 95% of balance requests should complete within 2 seconds under the expected workload.
- Sensitive data should be encrypted according to defined security requirements.
- The system should meet its defined availability target.
- The system should support the anticipated peak transaction workload.
Functional Vs Non-Functional Requirements
| Aspect | Functional Requirements | Non-Functional Requirements |
|---|---|---|
| Main Question | What should the system do? | How well should the system operate? |
| Focus | Features and behavior | Quality attributes and constraints |
| Examples | Login, search, payment, order placement | Performance, security, availability, scalability |
| Validation | Verify expected behavior and outputs | Measure against defined targets or criteria |
| Design Impact | Defines required functionality | Strongly influences architecture and technology decisions |
| Documentation | Use cases, user stories, workflows, specifications | SLOs, quality targets, constraints, technical requirements |
Common Challenges in Requirements Analysis
Defining clear functional and non-functional requirements can be challenging because business priorities, technical constraints, and user expectations may differ.
- Ambiguous Requirements: Vague statements can lead to misunderstandings and incorrect implementations.
- Changing Requirements: Business needs and user expectations may evolve throughout development.
- Conflicting Requirements: Improving security, performance, or consistency may involve trade-offs.
- Unclear Performance Targets: Terms such as "fast" or "highly scalable" lack measurable acceptance criteria.
- Missing Requirements: Overlooking critical functionality or quality expectations can create problems during development.
- Unrealistic Expectations: Requirements may exceed available budgets, infrastructure capabilities, or development timelines.