Software scalability

Scalability is the characteristic of the system to adapt for handling more load.

Classical real life example is a help line

Imagine you run a small business and need to handle customer calls and emails. There are not much of them, so you hire an inexperienced student on a part time basis. The business is growing and there are more customers so more calls and emails. At some point you would start receiving more calls that could be handled. Possible solution could be the replacement the part-time student with a full-time professional support operator. This approach is called vertical scaling. And we're good util single operator can handle all the load. After the business grow even bigger and more customers make more calls that overwhelm this one person, and we need to scale again. Since we already hired best support operator in the world and we cannot find anyone better, this means we cannot scale vertically anymore. So now we have to hire another operator and make them work as a team. This approach is called horizontal scaling.

In context of software engineering these types of scaling looks like following:

  • vertical - improve the hardware running your code on the scale of one single machine. The biggest pitfall is that there is a limit on which you can improve your hardware.
  • horizontal - increase the number of machines running your code. This type of scaling does require the architecture of the program to be available to run on multiple servers.

Most interesting part of the horizontal scaling is to make the independent applications to act as a team. In web development this task is called load balancing.