We all have studied about soil erosion in our high school and know how harmful it is from an agricultural point of view. Similarly there is a an phenomenon of erosion of value in the software.

Causes for this software erosion are:

  1. Lack of coding guidelines
  2. Poor quality of code review
  3. Developers not trained in a proper fashion with a new code base
  4. Chaotic project schedules without well defined scope for each Engineering Release
  5. Mismanaged changes to requirements
  6. Divergence from software architecture and design
  7. Reckless usage of LLMs meaning copying the whole file as is without a full understanding of the newly generated code.
  8. Improper roles and responsibility definition between engineering manager, software architect and program manager

The above are only a partial list and all of them contribute to exponential build up technical debt which after a point can’t be debited or paid off. The debt is so high that the entropy of the software code base is way too high. This leads to a brittle software which shows symptoms of developer burn-out, many regression issue and overall a run way project.

One way to avoid this is to have a proper software architecture, now what is proper, my definition is to have the documentation using a tool like Enterprise Architect or Visual Paradigm with all views congruent. The class diagram and sequence diagram must all from a common dictionary. Next important step is to generate the header and stubs from the architecture diagram itself. When the code comes in for review if header files are changed with additional public methods added, the reviewer knows something is fishy and architecture is being broken down.

If above is not possible, possibly that boat has sailed, there is an option to reverse engineering the software architecture from code and compare manually and address the major inconsistency step by step with good regression tests to ensure the refactoring does not introduce even more defects.

Do please share your ideas in the comments, thank you.