Non-Functional Requirements (NFRs)
Definition
Non-functional requirement (NFR) is a requirement that specifies criteria that can be used to judge the operation of a system, rather than specific behaviors.
They are contrasted with functional requirements that define specific behavior or functions.Wikipedia: https://en.wikipedia.org/wiki/Non-functional_requirement
Functional vs Non-functional requirements
Functional requirements usually tell what the system should do. For instance, to download a file.
Non-functional requirements are criteria to judge that the system performs its functions the right way. For instance, the max downloaded file size is 1 Gb, it should be downloaded within 12 seconds, etc.
Examples
- Scalability
It tells what amount of data or number of users the system should be able to process. - Performance
How fast a certain system functions should be performed. - Fault tolerance
How fast the system should be restored in case of an unexpected issue.
Use cases
It is important to gather NFRs to:
Design a system the right way
Imagine, there are no NFRs. In this case, an architect and software engineers are either under-design the system or over-design it.
If the system is under-designed, it can’t work the right way: could be too slow, may not be able to support an appropriate number of users.
If the system is over-designed, then the resources are wasted (developer’s time, hosting resources, money, etc.).Validate the system/feature quality, once it is created
Non-functional requirements could be used as metrics that help to validate system quality. For instance, to make sure the performance of a system is good enough, it can be measure and compared with appropriate NFR.
Gathering process
Product owners should collect Non-functional requirements along with Functional requirements and keep them up-to-date.
The NFR gathering is a repetitive process, so if there a bigger client is coming with the new set of NFRs, they should be taken into account during feature design, performance improvements, etc.
Product owners can get NFRs from:
- Customers
For instance, they can provide numbers for Scalability, Performance as well as additional Security requirements. - Hosting providers
For instance, they can provide Fault tolerance and Availability requirements that have already been agreed upon with customers as part of SLA.
They can also help to define Supportability requirements. - Dev teams and Solution architects
They can provide NFRs that help to make the development process more efficient currently and in the future, at the same time helping to improve the overall product quality. For instance, they can provide Maintainability and Testability requirements. POs can also consult with them for Security requirements.
The NFRs could be collected during a meeting with Customer / Hosting providers or by sending the following spreadsheet template:
https://docs.google.com/spreadsheets/d/1vxawUPFKYVf8Ekqr6gGDo_kA8VJlgqBEmLWbntXSgIo/edit?usp=sharing
The template contains major NFRs that should be collected along with questions helping to do this.
Once NFRs are collected, they should be put to the target spreadsheet:
https://docs.google.com/spreadsheets/d/1x7_yoJNtx_S90iVowrJB64oJt87nsBFJIauyYp87MPc/edit?usp=sharing
Alternatively, existing NFRs spreadsheets could be added to the following directory:
https://drive.google.com/drive/folders/1RJZ3fCJBAZYQcbfudXZ0w6D-2MH17W2T
They could be added in as-is format, however, it is recommended to eventually convert them to the proposed format.
It will help to make sure all major NFRs are collected. Also, it is easier to work with spreadsheets if they all have a single format.
It is recommended to make sure:
- All NFRs are gathered for each new feature
- All NFRs are collected for each new customer
- Existing NFRs are up-to-date
Please, update existing NFRs (or make sure there are no changes) at least once a year.
NFRs location
NFRs for all product areas should be added to the following spreadsheet:
https://docs.google.com/spreadsheets/d/1x7_yoJNtx_S90iVowrJB64oJt87nsBFJIauyYp87MPc/edit?usp=sharing
All Folio architects and developers can leverage them then for the product needs.
Questions
If you have any questions regarding NFRs, please reach out to:
- Solution architect designing a feature
He/she can clarify what NFRs are required for the feature. - Khalilah Gambrell
She can help with the overall NFR gathering process.