Software architectures lay out the foundations for maintainable and sustainable development. In the past, an architecture model’s obsolescence imposed a risk on both the model and the project’s success. With hierarchical reflexion models we can continuously align the models and their implementation, so that we can leverage them at the highest level of significance throughout the system’s lifecycle.
Over the decades software development process models have evolved from waterfall to agile. The more agile approaches promise a more flexible, faster and user-oriented path to success. As the number of iterative cycles in software development has increased, the idea of refactoring software has gained ground. Refactoring facilitates future development by improving the software’s internal quality without changing its functionality for the end user.
With refactoring as a remedy, the thinking goes, we can let software complexity grow and accept an increase in software erosion (also referred to as ‘technical debt’ or ‘software decay’) for a certain amount of time or a certain number of iterations and then explicitly plan a cleanup iteration, typically shortly before or after a release to production. While this idea of ‘software gardening’ (inspired by the idea of ‘grow and prune’) seems intriguing, it doesn’t work out in practice, for reasons of time (‘we don’t have the time to clean up now’), risk (‘we don’t want to introduce new errors’) or budget (‘why should we change things when the end user won’t even notice?’).
