Michael Dubakov sugere as seguintes razões pelas quais o código deteriora ao longo do tempo:
* Mais e mais funcionalidades. Isso leva ao aumento da complexidade.
* Atalhos e improvisações para suportar coisas do tipo "Precisamos dessa tela de pesquisa até Agosto. E ponto final!"
* Rotatividade. Os novos desenvolvedores não conhecem todas as decisões e ideias fundamentais que estão por trás da arquitetura. Inevitavelmente, o conhecimento se perde na transição.
* Crescimento da Equipe. Mais pessoas, menos comunicação. Menos comunicação, más decisões.
Acompanhem o artigo completo: http://www.infoq.com/br/news/2009/11/refactor-rewrite