We often hear words such as "performance", "efficiency" and "scalability" being thrown around as if they mean the same thing. Although a well-designed software product tend to hit all these characteristics, it is nevertheless important to point out their exact meanings.
Here we define what exactly we mean by these words in the context of developing a web-based system, in layman's terms.
High Performing, or "Performant" - the said system runs fast. The exact definition of fast depends on the context, but there are two common narratives:
1. Users do not wait. Any interaction with the product such as pushing a button or clicking a link is responded within a fraction of a second;
2. For known time-consuming tasks, the execution of the said system is noticeably speedier. For example, if replicating a 1TB hard disk takes 30 minutes, doing so in 5 minutes is considered high performance, even though the wait is still a test of patience.
Efficiency - scientifically this word is defined by some ratio, but what does it mean when some product is said to be efficient? There are, again, two sides to this. One is that the product "doesn't need much", which is being resource-efficient. For example, running a word processor in 8K of RAM is efficient - it has to be!
The other side is that the making of this product is so streamlined that the alignment of components reflects such crafty design. This kind of efficiency is often cited as code reuse, which is a highly misunderstood concept on its own, and there will be a separate article on this.
Scalability - next time you hear this word, challenge the speaker to define what it means. Too often the quasi techies use scalability as some sort of magic cape to look smart in front of a less technical audience. An over-simplified definition is that the system can handle large numbers. Scalability is about "growth": how does the product behave with 10 times the traffic? 100 times? 10,000 times? Many web systems seem to function with a single user but comes to a grinding halt with just 10 concurrent users. Such systems "do not scale".
A quick way to detect whether the word is misused is to see what it is used on. For example, many people in the NoSQL camp claim that MongoDB is more scalable than MySQL. That's like saying a pencil is more artistic than a paint brush. Scalability is a characteristic of a system, not its building blocks. If a MySQL powered website can handle exponentially growing transactions then it is scalable.