Requirement: Functional vs Non-functional
Functional requirements
Functional requirements define the expected behavior of the system, and further point out how the system responds to a particular input. A function includes the inputs, its behavior, and outputs. Essentially, after reading the functional requirement, we capture the intended behavior of the system and understand what the system must do or must not do. For example, when we click the Send Email button, the system sends an email to the recipient (it does not send to the recipient we do not want).
Functional requirements purely describe functionality or system services. It is ok to start defining functional requirements with high-level statements of what the system should do, then, we can break it down further into detail such as the type of software, expected users, and the type of system where the software operates, and to the lowest levels describing calculation, data manipulation, business process, user interaction, or any other specific mathematical operation.
For a system, functional system requirements should describe the system services in detail.
Recommended by LinkedIn
Non-functional requirements
Non-functional requirements define the properties and constraints of the system. Examples include the response time and storage requirements. Constraints are I/O device capability, system representations. At the overview level, we can define non-functional requirements as critical criteria for the system to operate its functional requirements normally such as Availability, Scalability, Reliability, Recoverability, and Data Integrity. A non-functional requirement is essential to ensure the usability and effectiveness of the entire software system. Failing to meet non-functional requirements can result in systems becoming useless, for it does not have the environment to acquire the input, perform its behavior and produce the outputs.
For example, to make the Send Email work, there should be storage for the sent email, the storage should be able to store a definite amount of emails and the processing power determine how long does it take to load the sent email (constraint point).