Нет никогда никаких оправданий переписывания всего кода. Это всегда огромный риск, что подтверждается кучей реальных случаев.
Если уж совсем плохо всё, то переписывать/рефакторить надо частями, оставляя систему в рабочем и тестируемом состоянии.
Разумеется. Кстати самый отличный способ оценить нового сотрудника - если он с порога вопит "надо все переписать", то обычно такой сотрудник живет в команде недолго.
Однако иной раз круто меняются бизнес требования. Или, например, какая-то базовая компонента - от пропускной способности сети, платформы, субд, языка программированя или разрешения мониторов пользователей. Тут же не получится оставлять систему в рабочем состоянии - до она просто не работает в новых условиях!
И приходится брать на себя/проект огромные риски и педалить с огромными овертаймами. И честно сказать, если оглядываться назад только такие вот рисковые моменты работы запоминаются и приносят массу радости, когда все взлетает.
Правда, есть и ситуации когда не взлетает, но оно бы и так не работало.
