Non Functional Requirements - The prerequisite severely misunderstood and ignored by the software industry

This article tries to highlight the importance of non functional requirements to success of systems and how this critical aspect of systems is ignored by the software development industry.

The importance of non functional requirements to the success of any system can be understood from the example mentioned in the following link.

Lets say you want to purchase a mobile phone for which you visit a mobile phone store and you ask the salesmen that you want to purchase a hand set between 10,000 rs and 12,000 rs. Given this the salesmen shows you 10 different handsets from 10 different companies[ like Nokia, Motorola, LG, Panasonic, Reliance, Samsung, Blackberry etc]. Given the fact that these handsets lie in a particular product category/line … they will have similar set of features and nearly the same cost. Now ask yourself "What makes you choose one product over other although they have similar set of features and nearly the same cost ?". As you are a very prudent buyer … if you closely monitor your thoughts you will realize the following parameters make you choose one of the products

  • The ease of use - Usability
  • The brand name
  • How quickly the phone allows you to operate various features ie performance or the responsiveness of the phone.
  • Flexibility/Extensibility of the phone.
  • The availability or the battery life of the phone.
  • The serviceability/maintainability of the phone.

In general people call it as the quality of the system.

All the parameters mentioned above are the Non-functional characteristics of a system and they are ones that influence our decision of going with a particular product.

So, today when we buy any product from any vendor, it is the Non-Functional characteristics of that product that influence our decision.

A Product that satisfies all the functional features need not necessarily be a success in the market. It is only a prerequisite. It is a necessity.

In other words "The success or failure of a product today is determined by the fact as to how closely the product meets the non- functional expectations or requirements of the user".

The example shows that non functional characteristics of the system plays a very critical role in making the buyer choose one product over the other product although most of the products in a particular product segment will mostly have similar cost and similar set of features. Or in other words the success of any system today is single handedly defined by the fact how closely the target system matches the non functional expectations of the end user. Or Today the non functional requirements will single handedly define whether the product will succeed or not irrespective of the functional requirements.

Although the importance of non functional requirements can be understood from all the systems belonging to different streams of engineering , but unfortunately these non functional requirements are severely ignored by the software development industry.

Let me give you a realistic case of some systems designed by us..

Humanoid cricket bowling machine - In a nutshell this machine is supposed to bowl all the types of deliveries bowled by a human cricket bowler as naturally as possible.

The functional requirements of this machine are

  • It should be able to bowl all the types of spin deliveries without the batsmen being aware of it the delivery is bowled.
  • It should be able to bowl all the types of swing deliveries without the batsmen being aware of it the delivery is bowled.
  • It should allow a person to change the length and line at runtime.
  • It should allow a person to change the speed of the deliveries at runtime.
  • The machine should be adaptable to both Right hand and left hand batsmen.
  • The machine should be programmable.

The non functional requirements of the machine are

  • It should be very silent.
  • It should not weigh more than 50-60 kgs.
  • It should consume minimum amount of energy.
  • It should be portable, ie a single person should be able to transport the same without a need of any vehicle.
  • The time between 2 deliveries fired should not be more than 30 seconds.
  • The time to install/assemble the same should not exceed more than 10 minutes.
  • The manufacturing cost of the machine is less than INR 50,000.
  • The operator should not get hurt by any shot played by the batsmen.
  • The machine is completely safe.
  • etc.

Now let us understand, if any of the above mentioned non functional requirements is not satisfied ….. you can be assured that product will fail in the market even though it satisfies all the functional requirements described above.

The same is true for any of the systems that we design, if we don't satisfy atleast one non functional requirements , the system will fail irrespective of whether the system takes care of the functional requirements or not.

When various reports say that 70% of the software systems fail … It doesn't mean that 70% of them don't function properly or they don't satisfy the functional requirements of the system…. but in most of the cases they fail to satisfy the non functional requirements of the system.

There are numerous examples in this software industry and every software companies will have their own stories wherein they would have developed the complete system and only when the software is deployed they realize that the system is very slow or the customer realize that the system works fine if one person is accessing the same but fails to function the moment there are multiple clients accessing the same. Performance, Usability and Scalability related issues are some common severity 1 issues that we will usually find within software companies.

Hence software systems not adhering to the non functional requirements is the fundamental cause behind the failure of the system.

Although it might sound unbelievable to accept this fact that the so called technologically sound software companies who boast of their technological prowess fail to understand the importance of non functional characteristics… but it is a sad fact.

The fact that the time and cost estimates in the software industry varies by more than 100% or more .. proves that the software system fails to meet the very important strategic and monetary requirements [non functional] of the customer [Strategic and monetary requirements are two of the very important non functional constraints that a system has to satisfy to ensure its success].

This can also be understood from the fact .. that most of the professionals in the software industry doesn't understand the difference between analysis and design. In one of my other articles I have highlighted how most of the software professionals consider drawing UML diagrams as designing although it is not … We have also discussed that designing of systems/software systems is all about managing the different non functional constraints/requirements of the system.

The fact that most of the software professionals doesn't understand "Designing" in the right spirit also fails to understand the importance of non functional requirements to systems and is mostly considered as an afterthought

Most of the software industry works on the thought process …. lets first take care of functional requirements …. issues like performance , scalability , availability , reliability etc can be added on latter by throwing extra hardware or extra money. They forget a very basic point most of these non functional constraints have to be incorporated at a design level rather then garnishing the same after the whole dish has been cooked.

Lack of knowledge of about Non Functional requirements complicates the matter further.

I have seen software engineers getting horribly confused between terms "Performance" , "Efficiency" and "Throughput" … Same is the case with numerous other non functional parameters. While if the professionals are not sure about the definitions of these parameters , it will be an uphill task to expect them to know the best practices needed to manage these attributes. I can say if any one wants to be a good designer or an architect … he should be a master of non functional requirements.

While managing of non functional requirements was difficult , capturing of non functional requirements from the customer in a quantifiable and a qualifable manner is a completely different ball game. If our engineers are not able understand these non functional parameters and its differences… then it is unfair for us to expect the customer to know about these non functional parameters.

In a nutshell till the software industry (and their top executives) is not willing to accept they don't know this critical aspect of the system and are not willing to take conscious and sincere steps to address this critical parameters, the success rate of software systems continue to be abysmally low.

Non functional requirements can be studied in detail in the topic "Non Functional Requirements" in section "Study Center".

Hemant Jha
Founder - VPlanSolutions
Researcher, Trainer