Мне не повезло с небольшими инкрементальными изменениями, когда код, который я наследую, действительно плох. Теоретически небольшой пошаговый подход звучит неплохо, но на практике все, что у него получается, - это лучшее, но все же плохо разработанное приложение, которое все думают, это ВАШ дизайн. Когда что-то ломается, люди больше не думают, что это из-за предыдущего кода, теперь он становится ВАШЕЙ ошибкой. Таким образом, я бы не использовал слово redesign, refactor или что-нибудь еще, что подразумевает менеджер типа, что вы меняете вещи на свой путь, если я не собираюсь делать это по-своему. В противном случае, несмотря на то, что у вас могут быть исправлены десятки проблем, все проблемы, которые все еще существуют (но не были обнаружены), теперь будут отнесены на вашу доработку. И будьте уверены, что если код плохой, ваши исправления откроют намного больше ошибок, которые были просто проигнорированы раньше, потому что код был настолько плохим для начала.
Если вы действительно знаете, как разработать программные системы, тогда я бы сделал редизайн всей системы. Если вы НЕ НАСТОЯТЕЛЬНО не знаете, как разработать ПО GOOD, тогда я бы сказал, что придерживаюсь небольших инкрементных изменений, поскольку в противном случае вы можете получить базу кода, которая так же плоха, как и оригинал.
Одна ошибка, которая часто возникает при перепроектировании, заключается в том, что люди игнорируют исходную базу кода. Однако, редизайн не должен означать полностью игнорировать старый код. Старый код по-прежнему должен был делать то, что должен сделать ваш новый код, поэтому во многих случаях требуемые шаги уже находятся в старом коде. Копирование и вставка затем настраивает чудеса при перепроектировании систем. Я обнаружил, что во многих случаях перепроектирование и переписывание приложения и кража фрагментов исходного кода намного быстрее и надежнее, чем небольшие инкрементные изменения.
Фред Брукс сказал, что «построить один, чтобы выбросить» - но он не использовал гибкие методы, и любая добавленная функциональность была задокументирована и понята, и поэтому можно было переписать без потерь. – 13ren
Не говоря уже о том, что ВСЕГДА больше информации, которую вам нужно реализовать, о которой вы не думали, когда вы набросали большой проект. –