Eu já passei por esse dilema, e acabei optando pelo redesign de uma interface gráfica, cujas versões iniciais não tinham sido feitas por mim, e que estava sob minha responsabilidade. O código estava bem mal comentado, bem complexo de entender, e adicionar qualquer funcionalidade era um processo complicado. Após um mês tinha reescrito tudo, com uma arquitetura bem simples, baseada em patterns, que me permitia ser muito mais eficiente nas atualizações.
Leonardo me enviou este texto hoje, que dá um ponto de vista bem claro sobre situações nas quais o redesign é essencial. Curto e objetivo.