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.