A functional requirement describes what a software system should do, while non-functional requirements place constraints on how the system will do so.
An example of a functional requirement would be:
- A system must send an email whenever a certain condition is met (e.g. an order is placed, a customer signs up, etc).
A related non-functional requirement for the system may be:
- Emails should be sent with a latency of no greater than 12 hours from such an activity.
The functional requirement is describing the behavior of the system as it relates to the system’s functionality. The non-functional requirement elaborates a performance characteristic of the system.
Typically non-functional requirements fall into areas such as:
- Accessibility
- Capacity, current and forecast
- Compliance
- Documentation
- Disaster recovery
- Efficiency
- Effectiveness
- Extensibility
AND MORE..
Non-functional requirements are sometimes defined in terms of metrics (something that can be measured about the system) to make them more tangible. Non-functional requirements may also describe aspects of the system that don’t relate to it’s execution, but rather to it’s evolution over time