Основная задача любого проекта - чтобы дебет с кредитом сходился. Прибыль. Остальное вторично. Никому не нужен ваш идеально выверенный код, если он не будет приносить прибыль.
Да однажды говнокод может утянуть проект в жопу. Но это уже и есть задача разработчиков в нужный момент сказать заказчику, что вот там-то есть бутылочное горлышко. Если еще затянем с рефакторингом, то жопа. Если заказчик адекватный, то он выделит время и деньги на доработку.
Причины говнокода в проектах:
1. Из каждой дыры сейчас про "в айти много денех", "смени профессию", etc.
И в индустрию зашло много случайных людей. С одной стороны бабки делают всевозможные онлайн-школы, которых как грибов после дождя. А с другой стороны компании-наниматели стремятся срезать уровень зп в индустрии, выращивая джунов.
2. Разработчики не умеют человеческим языком без сложных терминов объяснить, что и почему надо делать. Заказчик не понимает, а зачем если все работает же.
3. Разработчики-пофигисты. Хуяк хуяк и в продакшн.
4. Заказчик невменяемый. Сделайте дешево, а как неважно. Текучка кадров, когда 1 и тот же проект делали толпы левых фрилансеров совместно со штатными прогерами.
Ну еще есть прогеры любители пострелять из пушки по воробьям. А давайте внедрим вот эту фичу, она клевая (часто переводится, как я хочу изучить новые технологии за счет заказчика). Хотя на таком-то проекте такая-то технология явно избыточна на таком-то этапе развития продукта.
Касаемо переписывания по новой уже работающего и приносящего бабки продукта. Это жопа. Потеря прибыли, огромные риски, расходы. Безопаснее латать, что есть по мере возникновения необходимости.