⬅ Previous Topic
Types of System Design: High-Level vs Low-LevelNext Topic ⮕
Capacity Estimation in System Design⬅ Previous Topic
Types of System Design: High-Level vs Low-LevelNext Topic ⮕
Capacity Estimation in System DesignWhen designing any software system, understanding the requirements is the very first and most important step. Requirements define what the system should do and how it should behave. These requirements fall into two broad categories: functional and non-functional.
Functional requirements describe what the system should do. They are specific features or behaviors that the system must support to fulfill user needs. Think of them as the 'functions' the system must perform.
Suppose you are designing an e-commerce website. Functional requirements might include:
For a basic messaging application like WhatsApp, functional requirements may be:
Question: If I were to remove this requirement, would the main functionality of the app break?
Answer: If yes, then it's likely a functional requirement. For instance, if users can’t send messages in a messaging app, the core functionality breaks. Hence, it’s a functional requirement.
Non-functional requirements describe how the system should behave. They focus on performance, usability, reliability, security, scalability, and more. These are often called quality attributes of a system.
Let’s say you are designing an online banking application. Some non-functional requirements might include:
For a service like YouTube or Netflix, non-functional requirements might include:
Question: If the requirement is missing, does the core functionality still work, but users may complain?
Answer: Yes? Then it's likely a non-functional requirement. For example, if a video takes 20 seconds to load, it still plays, but users will be unhappy. It’s a performance issue — a non-functional aspect.
Aspect | Functional Requirement | Non-Functional Requirement |
---|---|---|
Definition | Specifies what the system should do | Specifies how the system should behave |
Examples | Login, Search, Payment | Performance, Security, Scalability |
Impact | Directly impacts system’s functionality | Impacts user satisfaction and system quality |
Measurable? | Usually yes (pass/fail tests) | Yes, often via benchmarks or SLAs |
Both types of requirements are critical for building a successful system. Missing out on functional requirements means the system won’t do what users need. Ignoring non-functional requirements leads to a system that might work, but performs poorly, isn’t secure, or doesn’t scale.
1. Requirement: The login page must load within 1 second.
Answer: Non-functional (This relates to performance)
2. Requirement: Users must be able to reset their password.
Answer: Functional (This is a core action a user must be able to perform)
⬅ Previous Topic
Types of System Design: High-Level vs Low-LevelNext Topic ⮕
Capacity Estimation in System DesignYou can support this website with a contribution of your choice.
When making a contribution, mention your name, and programguru.org in the message. Your name shall be displayed in the sponsors list.