On the Procore blog there's an excellent article covering their thoughts on the evolution of software applications and the different stages they go through during their development.
If you develop software long enough, you notice patterns. One pattern that isn’t talked about enough is how systems evolve over time.
The software industry is so focused on the flavor of the week that we lose perspective. Most of what is “invented” today was created decades ago. Most problems we face today were solved by someone else.
Software developers don’t have a good understanding of our own history. In the spirit of that, I present to you my take on how software tends to evolve and why.
He starts by defining a term that is used through the rest of the article, software gravity, and illustrates how it relates to development time and complexity. He then gets into describing the seven stages of software evolution as he sees them (starting with zero, naturally):
- Stage 0: Humans, Paper, and Spreadsheets
- Stage 1: Simple Script
- Stage 2: Pile Of Files
- Stage 3: The Framework
- Stage 4: Beyond The Framework
- Stage 5: Modularization
- Stage 6: Network System
For each of the points he provides an overview of what the application might be like at this stage and what levels the complexity/gravity are at. The post ends by asking about a "Stage 7" and if it even exists, suggesting that it might be an even further abstraction from previous steps.