Have you ever had the feeling that there are a lot of non-functional requirements with different names but same meaning, so you have to do some google work to recall the differences? Who doesn't. I tried to translate the 12 most common non-functional requirements in boxing terms, because simplicity is always better.
Robustness - how much different kind of punches can I take before I fall down
Fault-tolerance - can I still box in case of bad ring/bad gloves/my pants going down
Resilience - how long does it take for me to stand up once I fell down
Throughput - how much punches can I throw in fixed unit of time
Performance - how quickly do I respond to the punches of my opponent
Scalability - can I handle bigger and better boxer or more of them at the same time
Reliability - the average time of me boxing without any issues (lower power, energy or speed)
Availability - the amount of time I am on my feet and available to box in single fight
Effectiveness - am I punching hard enough
Efficiency - can I punch hard without getting out of fuel quickly
Quality - am I a good boxer compared to the standards
Maintainability - can I fix my boxing performance in the fight easily and quickly with slight modifications
As we can see, the differences between some of the widely used non-functional requirements are tiny, but important. Still, they are the dictionary which we all should understand as a software developers, when speaking non-functional. In some of my next articles I will try to do the same translations to some of the most common functional software design patterns. Have fun.