Defining software scalability using requirements

  • 06/12/2019
  • 3 minuten leestijd

Defining software scalability using requirements

Defining scalability has proven to be not-so-easy. In this blog I will attempt to define scalability using functional and non-functional requirements in order to create clear and concise terms for everyone to understand.

“I examined aspects of scalability, but did not find a useful, rigorous definition of it. Without such a definition, I assert that calling a system ‘scalable’ is about as useful as calling it ‘modern’. I encourage the technical community to either rigorously define scalability or stop using it to describe systems.”

Mark D. Hill [1]

Since Hill’s conclusion in 1990, a lot of attempts have been made to define scalability. Most do it in multiple separate definitions [2, 3, 4, 5]. Just to name a few:

  • Structural scalability
  • Load scalability
  • Space scalability
  • Space-time scalability
  • Size scalability
  • Application scalability
  • Generation scalability
  • Heterogeneous scalability
  • Administrative scalability
  • Geographic scalability

Then, when I looked at the wikipedia entry for scalability I saw something that caught my eye. It was called “Functional scalability” and defined as “The ability to enhance the system by adding new functionality without disrupting existing activities”. I quite liked this, as the term itself tells a lot about the definition. I could not however find any reputable source that had this exact definition. That's when I realized that is the exact definition of extensibility [6, 7].

There must be a better, simpler way to define scalability. The above terms have nice definitions but without knowing them, there is no way to guess the actual meaning. That’s what I liked about the term functional scalability, without knowing the exact definition one can already guess that it has to do something with functional requirements. In my opinion even more so compared to extensibility. Now don’t get me wrong; extensibility has its time and place, but when talking about scalability we need something concrete and clear, that also includes extensibility.

I propose the following definitions:

Functional scalability:

To what extent existing components must be modified as soon as a new functional requirement is added to the system, and to what extent it continues to function properly as the amount of use of the system increases.

This definition explicitly includes functional requirements in the context of extensibility, which makes it a more comprehensive and concrete term. Furthermore, it distinguishes itself by including factors like algorithm-complexity and 'hard-coded' limits. An example for the latter could be rate-limits on API's or storage size for the server an application is running on.

Now, you might think “But what about non-functional requirements, Do they get to be scalable?”. Good question; scalability in and of itself is already a non-functional requirement, and you can’t just have — for example — “multiple securities”. This makes the definition slightly less obvious, as you can't just use the same definition as functional scalability. But, with some modifications we can define the following:

Non-functional scalability:

To what extent a non-functional requirement is able to be improved without impeding existing components, and to what extent the quality of that requirement remains acceptable as the use of the system increases.

Here's an example: Let's say you own a company, and have a system in place to keep track of your employees. At first you only have a few employees, which means you can have a clear overview with one click. But as your company grows and more employees are added to the system, this overview can quickly be cluttered with information you don't want to see. In this case your non-functional requirement usability is at stake. Adding a filter and/or search mechanism could improve this situation, but how much does that impede other existing components? And what is the performance cost when your company grows even further?

Instead of adding more of the same requirement, non-functional requirements like security or usability are always able to be improved. Therefore, scaling a non-functional requirement is the same as improving it. Setting clear requirements helps proving your solution is scalable non-functionally.

I highly encourage the community discuss this, even though they might not be everyone’s favorite definitions; I think we can all agree that there needs to be a standard definition for scalability. In my opinion these two definitions include everything needed, but please feel free to leave a comment containing yours, as I am just a student writing his bachelors thesis ;)

Sources

[1] M. D. Hill, “What is scalability?”, vol. 18, pp. 18–21, 4 Dec. 1990. [Online]. Available: dl.acm.org

[2] T. W. Leticia Duboc David S. Rosenblum, “A framework for modelling and analysis of software systems scalability”, May 2006. [Online]. Available: discovery.ucl.ac.uk

[3] A. B. Bondi, “Characteristics of scalability and their impact on performance”, Sep. 2000. [Online]. Available: win.tue.nl

[4] H. El-Rewini, M. A. D. Barr, Advanced computer architecture and parallel processing. 2005

[5] J. B. G. Charles B. Weinstock, “On system scalability”, 2006. [Online]. Available: resources.sei.cmu.edu

[6] Magento. (2019). Extensibility and modularity, [Online]. Available: Magento

[7] A. L. Niklas Johansson, “Designing for extensibility: An action research study of maximizing extensibility by means of design principles”, Jun. 2009. [Online]. Available: hdl.handle.net