In the Software industry, it seems like one of these metaphors is particularly strong, the one that tries to explain software as building houses. We even use it at our universities to introduce the topic to newcomers.
In my opinion, this metaphor is not only wrong but also very dangerous. Thinking about our profession as construction engineering makes us think that:
- There is a clear construction phase separated from a maintenance phase.
- Maintenance is cheaper and has a longer duration than the construction phase.
- Once we have enough documentation and schemas, we can just follow the plan.
- There is no incremental value. The construction goes from "not done" to "done".
In Software, features are done when the last customer stops using it. Maintenance is way more expensive than bootstrapping the project. There is no separation between construction and maintenance.
Software is Agile, Lean, it does change and evolve continuously. Software requires constant adaptation. Agile becoming mainstream in software projects is not a coincidence but the revelation on how Software works nowadays.
Software is not delivered in in CDs anymore. Systems are developed, grown and run as biological organisms evolving all the time.
It is true there are different phases within the roadmap of digital products and that there are different trade-offs to consider, but each of these phases are determined by evolutionary steps. Change is the only constant.
We can do better, we should strive for a better metaphor to help us being more effective explaining what do we do and how Software works.
Perhaps, a comparison with medicine might be more accurate
- It is a knowledge-based profession
- No one wants medicine or surgery if it can be avoided
- Clean code is like eating healthy or making exercise
- Pairing and code review is the second opinion
- Making changes to the system running is like making surgery with the patient alive
Medicine might not be a great alternative but it's better than the original construction engineering proposition. Construction engineering will make us think the construction phase requires heavy investment when in reality the cost will always be in evolving the system.
Software is never done, it is always evolving. Software is not done until the last customer logs out and the servers are shut down.
- Some projects have very well defined phases, and that's okey. Hopefully, we'll have less and less of these projects each year. Many thanks to @keyvanakbary for his help with the English writing.