Welcome to one of my NonTech Posts. This type of post is targeting a non-developer audience and tries to explain specific Topics on a high-flier level.
As a developer who is writing custom software I am aware that under normal circumstances not many people at my company even know what I am doing. Even less know what I worked or am working on. Most applications just run. They are those little workers inside an organization, which keep a lot of things running.
But sometimes developers like myself get their 5 minutes of fame, when the little workers we build do not behave. For example they produce weird results or are just running slowly without an announcement.
But what causes this behavior? Why can an application have a random and sudden performance breakdown? After all, the instructions have not changed.
Software at it’s core is a complex web of algorithms which work with data structures. Every algorithm has a critical runtime path. The more complex the software is, the more different critical paths you have.
If we boil it down to the essentials you have 2 possible general causes for something in a critical path to experience or cause a performance meltdown:
- It breaks – Every component can either have a hidden bug or a physical defect. Sometimes they just malfunction and your shiny performance tuning efforts get flushed down the toilet.
- The algorithm stops scaling – This is pretty common. Algorithms have a scaling attribute, which describes how the workload of that algorithm develops with a rising amount of data to process. Some scale quite well, having a constant or linear runtime development. Some do not, their runtime development looks more like an exponential curve. If you go beyond the magical point here, you get a performance meltdown.
The first cause can be solved by replacing the malfunctioning hardware or shipping a fix for the bug.
If the second cause was not a result of a bug, it usually means that a partial redesign of the software is required. Please do not try to solve it with temporary assigning more hardware to the application, an exponential runtime curve rises faster than you can even think about new hardware…