Anything Requirements that are not Functional Requirements. This is what the system is supposed to be.
Non-functional requirements are important
- If they are not met, the system is useless
- Non-functional requirements may be challenging to state precisely (especially at the beginning), and imprecise requirements may be difficult to verify
- They are sometimes called quality requirements, quality of service, or extra-functional requirements.
Some user experience related NFRs include:
- Usability: How intuitive the UI is.
- Accessibility: The degree to which a product, device, service, or environment is available to as many people as possible. Some NFRs related to performance include:
- Efficiency: Ability to meet performance requirements
- Scalability: Capability of a system to be adapted to meet new requirements Some NFRs related to continuity of service include:
- Availability: The probability the system is available at a particular instant in time
- Reliability: The probability that a system will perform within its design limits without failure over time
- Robustness: Ability to respond gracefully to failures at runtime
- Survivability: Ability to resist, recover, and adapt to threats Some NFRs related to harm production include:
- Security: How well the system protects users from external attacks
- Privacy: How a system protects the private information of the user
- Safety: Ability to avoid failures that will cause loss of life, injury, or loss to property Some NFRs related to ecosystem include:
- Portability: Ability to execute on multiple platforms while retaining their functional and non-functional properties
- Heterogeneity: Ability to be composed of, or execute within disparate parts Some NFRs related to development include:
- Evolvability: Ability to react on change, satisfying new requirements, and add support for new environments
- Readability: How well the system is comprehensible to a new developer
- Complexity: The size of a system, the volume of constituent elements, their internal structure, and their interdependencies
Typical Tradeoffs
- Security vs. Usability
- Functionality vs. Usability
- Lots of features vs. simple flows
- Evolvability vs. Cost
- Reusable components vs. one-off delivery
- Efficiency vs. Portability
- Native optimizations vs. runs everywhere