Антон Суминов | Tony pro IT
Антон Суминов, Руководитель студии Adinadin · 26.02 · ред.
3 признака, когда ваш проект нужно переписать с нуля
«Этот код — просто ужас, его надо выкинуть и переписать заново» — слышали такое?
Разработчики любят говорить, что «проще переписать всё с нуля», чем разбираться в чужом коде.
На словах звучит логично: 👉 Новый код будет чистым и понятным. 👉 Мы избавимся от технического долга. 👉 Всё будет быстрее, гибче, красивее.
Но на практике такой подход часто убивает проекты. Вместо ускорения разработки вы получаете долгий цикл переработки, упущенную выгоду и потерю фокуса на продукте.
📌 Когда действительно стоит переписывать код? Есть три случая, когда переписывать – единственный правильный выход.
1️⃣ Когда исправлять дороже, чем начать с чистого листа Если код настолько сломан, что любое изменение – это боль, его дешевле переписать. Признаки: 🔴 Изменение одной функции ломает систему. Код настолько связан, что даже небольшая правка вызывает каскад багов. 🔴 Каждый баг фиксится новыми костылями. Разработчики не могут починить систему без добавления нового костыля. 🔴 Больше времени уходит на отладку, чем на реальную разработку. Тестирование превращается в бесконечный процесс, и никто уже не уверен, что код стабилен. Условно 2 часа на разработку, 8 на отладку далеко не норма.
✅ Решение: Если код мешает развитию продукта, не даёт внедрять новые функции и требует в 2-3 раза больше времени на доработки, чем если бы вы написали его заново – значит, пора с ним попрощаться.
2️⃣ Когда изначально выбрана неправильная архитектура Если продукт вырос, но архитектура осталась на уровне стартапа, рано или поздно он сломается под нагрузкой.
Признаки: 🔴 Монолит, который невозможно масштабировать. Если бизнес растёт, а система не выдерживает новых нагрузок – вы упираетесь в потолок. Ничего не имею против монолитов, но чаще видел такие примеры именно на монолитах. 🔴 Архитектурные решения, сделанные «на коленке». Временные решения работают на старте, но могут стать тормозом для роста. 🔴 Невозможность внедрять новые технологии. Например, вы хотите подключить новый микросервис, внедрить асинхронную обработку данных, но архитектура настолько устарела, что любое обновление требует переписывания половины системы.
✅ Решение: Если архитектура не позволяет масштабироваться и каждый новый блок превращается в ад – нужно переделывать.
3️⃣ Когда технология безнадёжно устарела Если ваш код работает на старом фреймворке, который больше не обновляется, это бомба замедленного действия.
Признаки: 🔴 Разработчики не хотят поддерживать этот стек. Если команда бежит от проекта из-за технологий, это тревожный сигнал. 🔴 Безопасность под угрозой. Нет обновлений – значит, появляются уязвимости. 🔴 Любая новая фича превращается в боль. Поддержка и доработка занимают в 3-5 раз больше времени, чем на современном стеке.
✅ Решение: Если технология мёртвая, проще перейти на новый стек, чем продолжать её тащить.
📌 Когда переписывать – ошибка?
❌ Когда код кажется «некрасивым», но работает Разработчики любят чистый код, но если он выполняет свою задачу, переделка – пустая трата ресурсов.
❌ Когда «старый код плох, потому что старый»То, что код писался несколько лет назад, не значит, что он нерабочий. Если он справляется, его не нужно переписывать.
❌ Когда есть время на рефакторинг, но нет времени на полное переписывание Рефакторинг даёт результат быстрее, чем снос и полное переписывание.
📌 Как понять, что делать – рефакторить или переписывать? ✅ Если проблема локальная – рефакторинг. ✅ Если проблема системная – переписывание. ✅ Если код просто неудобный, но рабочий – живём с этим, пока не будет критично. ✅ Если код мешает развитию продукта – выкидываем.
Вывод: ❌ Бездумное переписывание – это потеря времени и денег. ✅ Осознанное решение – это экономия ресурсов и будущее продукта.
Николай Иванцов
· 27.02
Я конечно не большой эксперт, но мне кажется здесь светлые мысли перемешаны с какой-то ерундой. Мне сложно представить хоть сколько-нибудь нетривиальную систему которую действительно "проще переписать с нуля".
1. Никто не гарантирует что не получится такая-же ерунда, но сделанная по-другому. 2. можно полностью переписать проект в процессе итеративного рефакторинга на основе модели бизнес-процессов. в таком случае есть бОльшая вероятность учесть предыдущие ошибки. 3. если система разрабатывалась по модели - переписав всё с чистого листа мы теряем знания накопленные в модели, и напротив - проблемы при написании кода могут дать пищу для размышлений в сторону улучшения модели и архитектуры.
Ну и хочется подкрепить своё мнение цитатами дядюшки Боба из книги "Чистая архитектура". Это всё-таки общепризнанная классика, что называется - "база".
"Самая большая ложь, в которую верят многие разработчики, - что грязный код поможет им быстро выйти на рынок, но в действительности он затормозит их движение в долгосрочной перспективе. Разработчики, уверовавшие в эту ложь, проявляют самонадеянность Зайца, полагая, что в будущем смогут перейти от создания беспорядка к наведению порядка, но они допускают простую ошибку. Дело в том, что создание беспорядка всегда оказывается медленнее, чем неуклонное соблюдение чистоты, независимо от выбранного масштаба времени. ... Единственный способ обратить вспять снижение продуктивности и увеличение стоимости - заставить разработчиков перестать думать как самонадеянный Заяц и начать нести ответственность за беспорядок, который они учинили. Разработчики могут подумать, что проблему можно исправить, только начав все с самого начала и перепроектировав всю систему целиком, - но это в них говорит все тот же Заяц. Та же самонадеянность, которая прежде уже привела к беспорядку, теперь снова говорит им, что они смогут построить лучшую систему, если только вновь вступят в гонку. Однако в действительности все не так радужно: Самонадеянность, управляющая перепроектированием, приведет к тому же беспорядку, что и прежде." (страницы 32-33)
ответить
Антон Суминов
27.02
Спасибо за такой большой комментарий! Есть хорошие мысли) Давай разберёмся :)
Ты пишешь, что «сложно представить хоть сколько-нибудь нетривиальную систему, которую проще переписать с нуля» – но это ведь зависит от состояния системы. Если кодовая база настолько перегружена костылями, что любое изменение превращается в пытку, а поддержка стоит дороже, чем разработка нового решения – не проще ли написать с нуля?
1. Ты пишешь, что «Никто не гарантирует, что не получится та же ерунда, но по-другому» Тут ключевое – не «писать по-другому», а «писать осознанно». Если команда повторяет старые ошибки – да, новый код ничем не лучше. Но если ошибки зафиксированы, архитектура переосмыслена, бизнес-логика уточнена – шанс получить что-то рабочее гораздо выше.
2. Ты пишешь, что «Можно полностью переписать проект в процессе итеративного рефакторинга» Можно. Иногда это лучший путь. Но если изначальная архитектура не позволяет двигаться маленькими шагами (например, монолит, где каждое изменение ведёт к каскадному падению), то рефакторинг превращается в латание дыр. В таких случаях бывает выгоднее выстраивать новую структуру параллельно, а потом мигрировать.
3. Ты пишешь, что «Если система разрабатывалась по модели, то при переписывании мы теряем накопленные знания» Полностью согласен! Переписывать без ретроспективы – это тупик. Но если система уже не масштабируется, то накопленные знания можно использовать не для поддержания старого кода, а для построения нового решения, учитывающего все прошлые грабли.
Теперь про цитату:) Она крутая, но давай смотреть контекст. Он говорит о том, что «создание беспорядка всегда оказывается медленнее» – и это факт. Но если код уже в таком состоянии, что любое новое изменение – это боль и тормоз, разве не лучше рассмотреть вариант старта с чистого листа?
ответить
еще контент автора
еще контент автора
Антон Суминов | Tony pro IT
Антон Суминов, Руководитель студии Adinadin · 26.02 · ред.
войдите, чтобы увидеть
и подписаться на интересных профи