> A system is scalable in the range where the cost of adding incremental work is approximately constant.<p>The part that nobody ever says out loud: and where the cost of removing incremental work is also approximately constant.<p>A solution targeting server or desktop environments doesn’t necessarily scale down to microcontroller scale. One of the things that makes both SQLite and Linux so popular is how they scale well into really small environments.
This is a nice treatment, but I think it omits one other option which is a variation of the first option, if you like: "vertical scaling". When the load exceeds what can be done by the single box that you already bought, just buy a bigger single box that can do more. Yes, often that won't work and it will, as the author says, require a complete rethinking of the architecture of the system, but often it will not.
Scalability is adapting the characteristics of your instances to demand increase or decrease. You can adapt the number of instances (horizontal) or adapt the CPU, RAM, I/O characteristics of every single instance (vertical).<p>A basic rule of thumb I try to follow is: as long as you have at least two instances, don't immediately think about hundreds or thousands of instances for spikes that will never exist. Scaling from 1 to 2 (to remove SPOF) is much harder than scaling from 2 to 3, or 20. You have already removed some implicit "localhost" assumptions.