One of my favorite restaurants is in the swankier part of town, surrounded by high-end designer shops and oddly overpriced candy stores. The restaurant serves French cuisine, has a happy hour worth ditching work early for, and the ambience of a California vineyard on a bright, sunny day. If guests aren’t dressing up to come here with their purse-size pooches, they dine in one of the many other “fancy” establishments. For such a prime location, it’s expected that service will be impeccable.
But it’s not. The staff is sometimes rude and you have to wait long periods of time before the waitstaff gets to you to take your order or bring it out to you.
What this restaurant is missing is the fulfillment of what we know in the software testing industry as non-functional requirements. These requirements are represented by the “how”: how the restaurant performs and how the product is delivered. Everything else (the food, atmosphere and location) meets expectations and is enough to keep the restaurant afloat, but how the food and service are being delivered doesn’t match what guests anticipate.
So how do we improve the “how”? In the case of this restaurant, it’s obvious that performance efficiency (time behavior – a primary non-functional requirement) could use improvement. The wait staff might need more thorough training or a lesson on how to manage their tables more efficiently. However, when it comes to software, there are many more non-functional characteristics that are much more difficult to improve. You might have a software product that does everything it’s supposed to, but it is absurdly slow. This lack of speed, regardless of how great the rest of your product is, might be the reason your entire product sinks.
For your software to satisfy non-functional requirements, you have to first look at what’s wrong. Does your software behave in ways that your users expect? In the case of performance, are users waiting too long for things to load and ultimately giving up? If you can figure out what’s gone awry, it’s very easy to understand how to fix the “how.”
The restaurant might be too large of an entity for its managers to see that there is a problem with satisfying non-functional requirements, but as long the food remains delicious, I’ll consider calling my order in for take-out!