4 stages of software evolution
AI-generated image to grab your attention

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.

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.

To view or add a comment, sign in

More articles by Alexander Voitenko

  • Mass of software products and why trust is important

    Mass of software products and why trust is important

    Software products have mass as one of their basic properties, from inception until obsolescence. The absolute value is…

    2 Comments
  • LeetCode - Easy Section. Thoughts After Completion

    LeetCode - Easy Section. Thoughts After Completion

    Disclaimer: The reader is expected to understand what LeetCode is. In this article, I want to share some thoughts…

  • 3 great myths of software engineering

    3 great myths of software engineering

    Here they are: Self-documenting code Self-organizing teams Self-evolving architecture Surprisingly, I meet again and…

  • Worldview

    Worldview

    Today I want to reflect on such a concept as a worldview. The more I live, the more I communicate with people of…

  • Conceptual integrity

    Conceptual integrity

    Time to time I think about conceptual integrity of the code base in software development. Almost every time new person…

    1 Comment

Insights from the community

Others also viewed

Explore topics