Interrelationship of non functional requirements

Understanding Technical requirements and its influence on system architecture/design

Performance, Scalability, Flexibility, Usability, Security, Adaptability, Portability, Extensibility, Availability, Reliability, Manageability, Maintainability, Serviceability, Accountability etc are some of the most important technical requirements which are supposed to be considered within a system.

The beauty of these technical non- functional requirements is that most of these technical requirements are directly or indirectly proportional to each other.

In the previous chapter we studied the interrelationship between performance and flexibility and we know that they are inversely proportional to each other.

Similarly performance is inversely proportional to the security of your system.

But in reality the customer always expects a system that is highly flexible and secure and also high in performance.

Is it technically possible?

Now let me give you another set of interrelationship.

If you want to increase the performance, scalability, reliability and availability of the system then they can be increased by increasing the redundancy within the system.

As we know redundancy is about increasing the hardware and software nodes within the system. But the moment we decide to increase the redundancy in the system by increasing the hardware or the software nodes, the cost will increase exponentially.

Interestingly the customer always wants a system which is a high performance system, highly reliable, available and scalable but at a less cost.

We cannot blame customer for his unrealistic expectations as he is a layman and he doesn't understand the technical similarities, differences and the interrelationships between them.

Let's talk about other very interesting interrelationship between Performance and Scalability.

What do you think is the relationship between Performance and Scalability?

Scalability as a parameter defines the concurrent usage of the system by multiple users of a system at a particular point of time. It is also called as the load of the system.

Technically the relationship between performance and scalability is inversely proportional to each other i.e. as the load on the system increases ideally the performance is supposed to reduce linearly, but in reality we see that the performance reduces exponentially.

Again, the customer is one interesting person who expects the system to give him the same response time whether it is used by 10 or 100 users.

Can we think about the interrelationship between Flexibility, Extensibility, Portability and cost and time?

As you can guess they are directly proportional to each other.

For you to design the system to be highly flexible, extensible and portable, the customer should be willing to give you the time to do the same and he should also be willing to pay for these corresponding non- functional features. But the beauty is that the customer never has the time, he always wants everything quickly and he doesn't even have the budgets for the same.

By this time you can understand the complementary and contradicting nature of these non- functional characteristics and how a customer can have unrealistic expectations of the system.

In this chapter I have also given you a many examples to understand how each of these non- functional requirements can single handedly change the design/architecture and the project implementation plan of the system.

One thing I can say with certainty is that if you want to become a good architect or a designer then you should be a master of non- functional requirements.

When I say that one should be a master of non functional requirements means

  • One should know all the different non functional requirements and their interrelationships.
  • One should know the best practices for achieving the same like we have best practices for high performance, flexibility, scalability, reliability, security etc.
  • Apart from knowing the techniques for individually increasing each of these non- functional constraints, one should also know as to how to use a combination of these techniques to support a combination of non- functional constraints needed within systems.
  • Apart from all these aspects, capturing non- functional requirements from the customer in a quantifiable manner is a separate challenge by itself.

If you ask the customer to give you performance based requirements of the system, then what is the guarantee that your customer understands performance the right way?

Out of my experience I can say many times I have seen engineers being confused between Performance, Throughput, Scalability and Efficiency.

And even if your customer understands the same he will say that he wants the best.

Hemant Jha
Founder - VPlanSolutions
Researcher, Trainer