Basically, Non-functional requirements describe how the system works, while functional requirements describe what the system should do.
This does not mean the latter are more important, but most requirement gathering techniques focus on functional requirements, so large gaps in non-functional requirements are common.
So what exactly are we looking for here? Well, here are four examples of Non-Functional requirement groups; usability, reliability, performance, and supportability, as well as a few top tips on each one.
Prioritize the important functions of the system based on usage patterns.
Frequently used functions should be tested for usability, as should complex and critical functions. Be sure to create a requirement for this.
Users have to trust the system, even after using it for a long time.
Your goal should be a long MTBF (mean time between failures).
Create a requirement that data created in the system will be retained for a number of years without the data being changed by the system.
It’s a good idea to also include requirements that make it easier to monitor system performance.
What should system response times be, as measured from any point, under what circumstances?
Are there specific peak times when the load on the system will be unusually high?
Think of stress periods, for example, at the end of the month or in conjunction with payroll disbursement.
The system needs to be cost-effective to maintain.
Maintainability requirements may cover diverse levels of documentation, such as system documentation, as well as test documentation, e.g. which test cases and test plans will accompany the system.