Статья · Масштабирование

Рефакторинг или переписать с нуля: как принять правильное решение

Рефакторинг дешевле в 2-4 раза, но не всегда возможен. Фреймворк из 5 критериев для выбора: когда рефакторить, когда переписывать, и сколько это стоит.

Объём
15 500знаков
Чтение
9мин
Опубликовано
11.12.2025
Автор
Prime IT
↗ часть руководства От MVP к продукту: масштабирование

Рефакторинг vs переписать с нуля — тема, которая определяет успех IT-проекта. Компания потратила 8 месяцев на переписывание продукта с нуля. Старый код казался безнадёжным: монолит без тестов, связанные модули, каждый релиз — рулетка. Руководство приняло «решительное» решение: выбросить всё и начать заново. Наняли новую команду, выбрали модный стек, написали красивую архитектуру на доске.

Через 8 месяцев и 4.2 млн рублей запустили новую версию. А через полгода обнаружили в ней те же архитектурные проблемы — потому что корень был не в коде, а в процессах и требованиях. Рефакторинг старой системы решил бы задачу за 3 месяца и вдвое дешевле.

Эта история — не исключение. Дилемма рефакторинг vs переписать с нуля — одно из самых дорогих решений в жизни IT-продукта. Давайте разберёмся, как принять его правильно.

Рефакторинг и переписывание: в чём разница

ПараметрРефакторингПереписывание с нуля
Что меняетсяВнутренняя структура кода без смены поведенияСоздаётся новая система с нуля
Что с продуктомПродолжает работать и развиватьсяЗамораживается на 6-18 месяцев
РискНизкий — можно откатить любой шагВысокий — потеря рынка (как Netscape)
СтоимостьМеньше скорость новых фич на 20-30%Полный бюджет воссоздания + потеря клиентов
Когда выбиратьКод понятен, есть тесты, есть архитектураТехнология устарела радикально (Flash, COBOL)

Рефакторинг — это изменение внутренней структуры кода без изменения его внешнего поведения. Термин ввёл Martin Fowler в одноимённой книге 1999 года, и с тех пор подход стал фундаментом профессиональной разработки. Вы улучшаете архитектуру, убираете дублирование, повышаете читаемость — но продукт продолжает работать и развиваться.

Переписывание с нуля — это создание новой системы, которая заменит существующую. Старый код выбрасывается, пишется новый с «правильной» архитектурой. Звучит привлекательно, однако на практике это самый рискованный путь модернизации.

Ключевое отличие: при рефакторинге продукт продолжает жить и приносить деньги. При переписывании — замораживается на месяцы, пока новая команда воссоздаёт то, что уже работало.

Joel Spolsky, сооснователь Stack Overflow, назвал решение Netscape переписать браузер с нуля «самой грубой стратегической ошибкой, которую может совершить софтверная компания». Вследствие этого решения Netscape потерял рынок и в итоге прекратил существование. С тех пор прошло 25 лет, но паттерн повторяется.

Рефакторинг vs переписать с нуля: сравнение по 8 параметрам

Конкретика вместо абстрактных рассуждений. Вот как два подхода выглядят по ключевым параметрам, которые определяют судьбу продукта.

ПараметрРефакторингПереписать с нуля
Стоимость500K — 1.2M руб.1.5M — 3M+ руб.
Сроки2-4 месяца4-8 месяцев
РискНизкий (система работает)Высокий (новый код, новые баги)
Развитие продуктаПродолжается (80/20)Заморожено на 4-6 месяцев
Потеря пользователейМинимальная15-30% за время миграции
Перенос знанийСохраняется в кодеТеряется (старый код = документация)
Архитектурные ошибкиИсправляются точечно60% воспроизводятся в новой версии
КомандаТа же (знает контекст)Часто новая (без контекста)

Обратите внимание на строку «Архитектурные ошибки». По данным исследований и нашему опыту, при переписывании с нуля 60% архитектурных проблем воспроизводятся в новой версии. Поскольку проблема чаще в процессах, требованиях и коммуникациях — новый код наследует те же паттерны. Более того, теряется ценный контекст: старый код — это, по сути, документация того, как система действительно работает, включая все edge cases, которые были найдены и обработаны за годы эксплуатации.

Подробнее о стоимости разных подходов к разработке мы разбирали в статье стоимость разработки приложения — там есть калькуляция по этапам.

5 критериев: как принять решение

Вместо эмоционального «давайте всё перепишем» — фреймворк из 5 объективных критериев. Оцените каждый по шкале от 1 до 5 баллов. Если сумма больше 20 — переписывание может быть оправдано. Если меньше 15 — однозначно рефакторинг.

1. Тестовое покрытие и изоляция модулей

Если тестовое покрытие выше 40% и модули можно менять изолированно — рефакторинг безопасен. При покрытии ниже 20% и сильной связанности (high coupling) сначала потребуется стабилизация: написание тестов на критические пути, после чего поэтапный рефакторинг.

2. Соответствие стека целевым требованиям

Текущий стек не выдерживает нагрузку, не поддерживает требуемые интеграции или фреймворк больше не поддерживается? Тогда переписывание может быть оправдано. Но, как правило, проблемы с производительностью связаны не со стеком, а с архитектурой — и решаются рефакторингом. Python, Node.js, Java масштабируются до миллионов пользователей при правильном подходе.

3. Доля непригодного кода

Оцените, какой процент кодовой базы нужно переписать. Если более 60% — стоимость поэтапного рефакторинга может приблизиться к стоимости переписывания, и тогда «с нуля» имеет экономический смысл. Если 30-50% — рефакторинг однозначно дешевле.

4. Бизнес-толерантность к простою

Может ли бизнес позволить себе 4-6 месяцев без новых фич? Для стартапа на ранней стадии — возможно. Для продукта с платящими пользователями — скорее всего, нет. Рефакторинг позволяет выпускать фичи параллельно с улучшением кода, следовательно, продукт не стоит на месте.

5. Доступность команды с контекстом

Есть ли разработчики, которые знают текущую систему? Если исходная команда ушла и документации нет — порог входа для рефакторинга выше. Тем не менее даже в этом случае инструменты вроде SonarQube и статический анализ помогают восстановить понимание кодовой базы быстрее, чем кажется.

Правило: если сомневаетесь — начните с рефакторинга. Перейти от рефакторинга к переписыванию можно всегда. Обратный путь — от выброшенного кода к работающей системе — невозможен.

Когда рефакторинг — правильный выбор

По нашему опыту, в 80% случаев рефакторинг — верное решение. Вот конкретные сценарии, где он работает лучше переписывания.

Strangler fig pattern — метод постепенной замены legacy-системы, описанный Martin Fowler. Название отсылает к фикусу-душителю: новая система «обвивает» старую, постепенно забирая её функции, пока старый код не станет ненужным. В результате система работает непрерывно, а модернизация происходит без простоя.

Этот паттерн подходит, когда:

  • Продукт приносит деньги и не может быть остановлен
  • Есть чёткие границы между модулями (или их можно создать)
  • Команда знает систему и понимает бизнес-логику
  • Проблемы сосредоточены в конкретных частях, а не во всём коде

Практически это выглядит так: новый модуль авторизации заменяет старый за 2 недели. Затем переписывается API-слой. Потом — работа с базой данных. Каждый шаг — самостоятельный, протестированный, обратимый. При этом пользователи не замечают перемен, а продукт продолжает развиваться. Именно так устроена профессиональная заказная разработка — поэтапно, с контролем качества на каждом шаге.

Подробнее о переходе от MVP к масштабируемому продукту — в нашем гайде от MVP к полноценному продукту. Там есть полная дорожная карта масштабирования с фазами и метриками.

Когда переписывание с нуля оправдано

Переписывание — не всегда ошибка. Однако оно оправдано только при совпадении всех трёх условий:

  1. Более 60% кодовой базы непригодно — не поддаётся изоляции, не покрыто тестами, каждое изменение ломает непредсказуемые части системы
  2. Стек технологий не поддерживает целевые требования — фреймворк устарел, нет поддержки сообщества, критические уязвимости без патчей
  3. Бизнес готов к 4-6 месяцам без активного развития — есть финансовая подушка, конкурентное окно позволяет паузу, пользователи лояльны

Если хотя бы одно условие не выполняется — рефакторинг безопаснее. К примеру, если код плохой, но стек современный — strangler fig. Если стек устарел, но бизнес не может остановиться — параллельная разработка новой версии с постепенной миграцией.

Важный нюанс: даже при переписывании не выбрасывайте старый код. Он содержит годы накопленных знаний о бизнес-логике, edge cases и интеграциях. Используйте его как спецификацию для новой системы.

Типичные проблемы заказной разработки — сорванные сроки, раздутый бюджет, потеря контекста — при переписывании с нуля проявляются особенно остро, поскольку проект длиннее и сложнее.

Чек-лист перед принятием решения

Прежде чем принимать решение о рефакторинге или переписывании с нуля, проведите технический аудит. Вот что нужно оценить:

  • Метрики качества кода — цикломатическая сложность, дублирование, code smells (SonarQube, CodeClimate)
  • Тестовое покрытие — процент покрытия, наличие интеграционных тестов, CI/CD pipeline
  • Архитектурные зависимости — граф зависимостей модулей, уровень coupling
  • Производительность — p95 latency, throughput, узкие места под нагрузкой
  • Безопасность — известные уязвимости, устаревшие зависимости, соответствие 152-ФЗ
  • Бизнес-метрики — стоимость простоя в час, DAU/MAU, retention, churn

На основании аудита становится очевидно: точечные проблемы решает рефакторинг, системные — переписывание. По нашему опыту, в большинстве случаев проблемы оказываются точечными. Рефакторинг — важный этап цифровой трансформации бизнеса.

Если ваш проект изначально построен правильно — как при разработке MVP с архитектурой под масштабирование — вопрос переписывания вообще не возникает. Код, написанный сеньорами с тестами и CI/CD, рефакторится легко и дёшево.

Ключевые выводы

  • Рефакторинг и переписывание: в чём разница. Рефакторинг— это изменение внутренней структуры кода без изменения его внешнего поведения. При выборе рефакторинг vs переписать с нуля это особенно важно.
  • Рефакторинг vs переписать с нуля: сравнение по 8 параметрам. Конкретика вместо абстрактных рассуждений.
  • 5 критериев: как принять решение. Вместо эмоционального «давайте всё перепишем» — фреймворк из 5 объективных критериев. При выборе рефакторинг vs переписать с нуля это особенно важно.
  • Когда рефакторинг — правильный выбор. По нашему опыту, в80% случаеврефакторинг — верное решение.
  • Когда переписывание с нуля оправдано. Переписывание — не всегда ошибка. При выборе рефакторинг vs переписать с нуля это особенно важно.

FAQ о рефакторинге

Сколько стоит рефакторинг по сравнению с переписыванием?

Рефакторинг обходится в 2-4 раза дешевле переписывания с нуля. Для типичного проекта на 50-100 тысяч строк кода рефакторинг стоит 500 000 — 1 200 000 рублей и занимает 2-3 месяца. Переписывание того же проекта — 1 500 000 — 3 000 000 рублей и 4-8 месяцев. Плюс риск потери пользователей за время простоя.

Как понять, что код уже нельзя рефакторить и нужно переписывать?

Три красных флага: более 60% кодовой базы не покрыто тестами и не поддаётся изоляции, текущий стек технологий не поддерживает целевые требования по нагрузке, и стоимость поэтапного рефакторинга превышает стоимость переписывания. Если все три условия совпали — переписывание оправдано. Если хотя бы одно не выполняется — начните с рефакторинга.

Что такое strangler fig pattern и когда его применять?

Strangler fig pattern — метод постепенной замены legacy-системы, описанный Martin Fowler. Новые модули строятся вокруг старой системы и постепенно забирают её функции, пока старый код не станет ненужным. Подходит, когда система работает, приносит деньги и не может быть остановлена на время переписывания. По опыту Prime IT, это оптимальная стратегия в 70-80% случаев.

Можно ли рефакторить и выпускать новые фичи одновременно?

Да, и это главное преимущество рефакторинга перед переписыванием. Правило 80/20: 80% спринта — бизнес-функциональность, 20% — погашение техдолга. Продукт продолжает развиваться, а кодовая база улучшается постепенно. При переписывании с нуля разработка новых фич обычно замораживается на 4-6 месяцев.

Как Prime IT подходит к рефакторингу клиентских проектов?

Начинаем с аудита: оцениваем тестовое покрытие, архитектуру, зависимости и метрики качества кода. На основе аудита составляем план — рефакторинг, strangler fig или переписывание. В 80% случаев рекомендуем рефакторинг с постепенной модернизацией. Запишитесь на бесплатный Zoom-колл — проведём экспресс-аудит вашего проекта за 30 минут.

Итого

Рефакторинг vs переписать с нуля — решение, которое определяет судьбу продукта на месяцы вперёд. В 80% случаев рефакторинг — правильный выбор: он дешевле в 2-4 раза, не замораживает развитие и снижает риск повторения тех же ошибок. Переписывание оправдано только при совпадении трёх условий: более 60% кода непригодно, стек устарел, бизнес готов к паузе.

Главное правило: если сомневаетесь — начните с рефакторинга. Выбросить код можно всегда, а вот вернуть выброшенный — нельзя.

Не уверены, что выбрать для вашего проекта? Запишитесь на бесплатный 30-минутный Zoom-колл — проведём экспресс-аудит кодовой базы, оценим метрики качества и дадим конкретную рекомендацию: рефакторинг, strangler fig или переписывание. С цифрами, сроками и бюджетом.

§ 09 — Запись

Обсудите проект
с техническим директором.

Бесплатная 30-минутная консультация. Оценка идеи, рекомендации по стеку, ориентировочные сроки и стоимость. Без обязательств.

  • Оценка идеи и сложности проекта
  • Рекомендации по стеку и архитектуре
  • Ориентировочные сроки и стоимость
  • Перезвоним в течение 2 часов
Москва · Сколково
Большой бульвар, 42 / 1
● свободно на этой неделе / заявка
тема
когда удобно
перезвоним в течение 2-х часов в рабочее время