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