As time goes on in the life of a software project, the codebase grows and complexity increases. This along with hacky bug fixes, tacked on functionality and quick improvements can turn a project into a large multi-functional, inter-meshed mess.
Needles to say this makes feature tracking, versioning, bug isolation and maintenance difficult and limits code reuse potential. While it is best if planning and good design practices protect a project from growing into such a state, the need for rapid development is sometimes more pressing than the need to get design details perfect. Continue reading