4 stages of software evolution
In this short article I want to share some thoughts about stages of evolution of any computer program, I've ever seen. It can be an individual algorithm or entire application. Scale does not matter.
Stage 1 - Software exists
In the beginning was the Code. If there is no code, nothing to talk about. It is clear and obvious. No matter how many clever ideas someone has, until they are expressed in some software solution. At this stage it is only enough for software to exists, it might even do something useful. There is no void anymore.
Stage 2 - Software works
When simply having a bunch of code is not sufficient, developers start to build MVP (minimum viable product). At this stage, software might work only in positive scenario, have numerous bugs and lack proper disaster recovery or error handling mechanisms. Some companies choose to halt development at this stage or between stages 2 and 3. Especially when there are no competitors in the market. Because error handling is in rudimentary state, it is impossible to diagnose issues properly and in timed manner, sometimes they exist there for years and nobody knows how to fix them. I've seen some software products stuck here. Usually such situation involves effective manager and developers who do not care anymore.
Recommended by LinkedIn
Stage 3 - Software works properly
Now the computer program works as intended. It satisfies (almost) all user needs and has only a few tolerable bugs. It seems mature and polished enough to expect good profits. Many companies stop here. It is not good, it is not bad.
However, users might not always be happy, as in the case where a user had to wait for 20 seconds for invisible icons to arrange on the Windows Desktop. I see this happen sometimes. Pretty often inefficient algorithms are used, which work well only on a small set of data. Of course, sometimes there might be time pressure. But sometimes developers do not ask themselves one important question: 'What if?' What if a user has 10,000 icons on the Desktop screen?
Stage 4 - Software works fast
Very few reach this stage, and when they do, it's almost always not because they want to, but because they need to. For a company, especially a large enterprise with over 100,000 servers, the speed at which they operate becomes crucial. This is particularly true when faced with the choice of purchasing an additional 20,000 servers to meet user demand or hiring a team of talented developers to optimize existing code. What would you choose? Which solution is more practical long term? An example of such a transition is Facebook's HipHop PHP to C++ transpiler, which significantly increased the performance of their existing code.
Conclusion
There are no shortcuts between these stages. Every software product follows them one by one. Sometimes I've seen attempts to make software fast without first making it work properly. However, as performance improvements almost always increase complexity, they lead to even more bugs and instability, which in turn leads to collapse under its own weight.