Non-functional requirement (NFR)

A non-functional requirement (NFR) is a requirement that specifies criteria that can be used to judge the operation of a system, rather than specific behaviours. 

They are contrasted with functional requirements that define specific behaviour or functions

What is NFR?

Non-functional requirements are the qualities or characteristics of a software system that define its overall behavior, but do not relate to specific functions or features. These requirements describe how the system performs, rather than what it does. Non-functional requirements can be grouped into various categories such as:
  • Performance: This category deals with the response time, throughput, and resource utilization of the system. Examples include system availability, response time, scalability, and reliability.
  • Usability: This category deals with how easy and intuitive the system is to use. Examples include accessibility, user interface design, and user experience.
  • Security: This category deals with the protection of the system and its data from unauthorized access, modification, or destruction. Examples include data privacy, authentication, and authorization.
  • Maintainability: This category deals with how easy it is to maintain and modify the system over time. Examples include code maintainability, extensibility, and testability.
  • Compatibility: This category deals with how well the system can integrate with other systems, software, and hardware. Examples include platform compatibility and data format compatibility.
  • Legal and Regulatory: This category deals with the legal and regulatory requirements that the system must comply with. Examples include data protection regulations and software licensing requirements.

Non-functional requirements are essential to ensure that the software system meets the desired level of performance, usability, security, and maintainability, among other factors. They are often overlooked in the requirements gathering process, but neglecting them can lead to significant problems in the functionality and performance of the system.

Snippet from Wikipedia: Non-functional requirement

In systems engineering and requirements engineering, a non-functional requirement (NFR) is a requirement that specifies criteria that can be used to judge the operation of a system, rather than specific behaviours. They are contrasted with functional requirements that define specific behavior or functions. The plan for implementing functional requirements is detailed in the system design. The plan for implementing non-functional requirements is detailed in the system architecture, because they are usually architecturally significant requirements.

In software architecture, non-functional requirements are known as "architectural characteristics". Note that synchronous communication between software architectural components, entangles them and they must share the same architectural characteristics.

Taxonomy of Non-functional requirements (NFRs).txt
Accessibility
Adaptability
Auditability and control
Availability
Backup
Capacity
Certification
Compliance
Cost
Data integrity
Data retention
Dependency 
Deployment
Development environment
Disaster recovery
Documentation
Durability
Effectiveness
Efficiency
Emotional factors
Environmental 
Environmental protection
Escrow
Exploitability
Extensibility 
Failure management
Fault tolerance 
Integrability
Internationalization
Interoperability
Legal 
Licensing
Life-cycle cost
Localization
Maintainability
Manageability 
Management
Modifiability
Network topology
Open source
Operability
Patent-infringement
Performance
Platform compatibility
Portability
Privacy
Quality
Readability
Recoverability
Regulatory 
Reliability
Reporting
Resilience
Resource constraints
Response time
Reusability
Robustness
Safety
Scalability
Security
Serviceability 
Software
Stability
Supportability
Testability
Throughput
Transparency
Usability
Volume