Here is an oversimplified view of a computer.
If you've ever owned a personal computer, as part of your purchasing decision you probably considered:
A faster graphics card allows you to orbit and rotate larger models more quickly.
The more memory — the better. Applications run faster whenever everything can fit into available memory. Otherwise the system has to take turns swapping items in and out of memory while temporarily keeping items on disk.
Faster CPUs mean better performance. For a while there were two separate CPUs in the same computer. Now CPUs come with multiple cores so operations can be processed in parallel.
For a while storage was about bigger is better. Now size is basically a commodity, and it's about access speed. Solid State Drives provide drastic performance improvements over the original hard drive.
When we develop desktop applications we always consider:
We have dedicated teams that look at OpenGL, DirectX, and the latest in web-based graphics.
We review our algorithms to make sure they use as little as possible.
From day one, programming has been about efficiency. CPUs were not always as fast as they are now. Even small extraneous calculations add up if they occur millions of times. Now we also focus on multi-threading where we identify parts of programs that can happen in parallel, This is no easy task as the timing of operations varies greatly based on many factors.
Storage typically rears its head during the installation and packaging process. If too much storage is required, it won't fit on a user's machine. If the product includes too much, it doesn't fit on the intended shipping media like DVD or thumb drive. In cases of online delivery, it makes the download bigger which takes longer.
Though we always tried to make the bar as low as possible, if we could not get the bar low enough, we simply elevated the system requirements. This certainly reduced the potential audience for purchasing the application, but at least it ensured that the application would work for those who did purchase.
Cloud application development is a different world. We supply the hardware behind the solution — not the customer. If our development efforts cannot lower the system requirements, we have to buy or rent more powerful servers. Each server we require is referred to as an instance.
- Our cloud-based solutions scale based on demand. As the user traffic ebbs and flows, the number of instances increases and decreases.
- As concurrent customer traffic increases, our applications require lots of instances, which costs us money. Since some computer instances are more expensive than others, we look to find the best instance for the job. In other words, we look for the instance with the lowest cost that still meets the system requirements.
- If a cloud-based solution has high system requirements, it means we have to buy or rent a more expensive instance.
Tables have turned. The onus is on us. So for those who lament cloud-based software potentially replacing desktop applications, at least you can take solace in that the hardware you purchase for cloud-based solutions has minimal requirements, particularly as it relates to running browser software, and that the heavy lifting is now being done by the application provider, in this case, us.
Hardware is alive in the lab.