The wise programmer is told about Tao and follows it. The average programmer is told about Tao and searches for it. The foolish programmer is told about Tao and laughs at it. If it were not for laughter, there would be no Tao.
The highest sounds are hardest to hear. Going forward is a way to retreat. Great talent shows itself late in life. Even a perfect program still has bugs.ā Geoffrey James (The Tao of Programming)
At the beginning of any project there are a lot of decisions to be made. What is the best approach to solve the problem? What is the architecture style that fits best? Is the design of the solution accurate? Are we missing something?
Even before starting to code there are a lot of things to think about. Should I create an interface or an abstract class? This design pattern really fits here? How can I approach this corner case?
This usually tends us to fall into the Analysis Paralysis trap. We want to take perfect decisions, to design the most suitable solution for the problem, to write the best maintainable code, ... But there is no a perfect decision, no perfect technology, no perfect code, ... Because from that initial moment, entropy will only increase throughout the whole life of the project. This fact will make you question the decisions made in the past.
Software entropy, the level of chaos in any software system, is not only about the accidental complexity you may add in form of technical debt, lack of understanding or experience, over-engineering or whatever other reason. It is also about the essential complexity of the domain and its requirements which introduces its own level of entropy.
You may write the best code, take the best technological decisions, have 0% of technical debt, ... but the software entropy of your project will get higher and higher any time you implement a new feature, solve a bug or make an "innocent" change in a single line. All of these may increase entropy even being perfectly implemented.
Software entropy is unavoidable. The more changes we introduce the more entropy we create, the faster we introduce changes the faster the entropy grows. It can be reduced, or at least mitigated, by refactoring the code, applying best practices and trying to avoid accidental complexity. But the long-term trend for entropy will be to increase.
Taking time to consider different options is the way to ensure that a solution is a good one, maybe not the best but a good one. Just stop the Analysis Paralysis, take a decision and after that flow with the entropy. :-)

Top comments (3)
Thanks Richard! Software entropy is a fact. I've never seen a project that haven't became hard to maintain. It is something that we have to be aware and accept.