Назад в блог

Почему я не начинаю legacy-проект с переписывания

Когда мне показывают старый Bitrix, Laravel или самописный PHP-проект, первый импульс у бизнеса часто понятен: переписать на нормальный стек и забыть.

Я обычно начинаю не с этого. Старый код может раздражать команду, но он часто уже держит каталог, заказы, SEO, интеграции, роли, привычки менеджеров и деньги. Если сразу назвать rewrite главным решением, легко переписать не проблему, а симптом.

Сначала карта риска

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

Обычно быстро всплывают разные типы риска:

  • catalog/search: фильтры, фасеты, остатки, скорость, релевантность;
  • integrations: 1C, CRM, оплаты, доставка, внешние API;
  • release process: нет staging, rollback, понятной проверки после деплоя;
  • ownership: один человек знает критический кусок, документации нет;
  • SEO/content: исторические URL, редиректы, метаданные, редакторские сценарии.

После такой карты становится видно, что именно надо лечить. Иногда это действительно Next.js-фронт и отдельный search-контур. Иногда достаточно изолировать один API adapter, почистить кеш-слой, стабилизировать деплой и перестать трогать ядро без тестов.

Rewrite редко бывает одной задачей

Фраза "переписать сайт" звучит как один проект. Внутри это пачка разных решений.

Что остается в старой системе? Что переносится? Кто владеет API-контрактом? Где граница между базовым запуском и optional-функциями? Какие потоки должны пройти приемку без ручной магии?

Если эти вопросы не заданы, fixed price на custom rewrite превращается в гадание. Либо подрядчик закладывает огромный буфер, либо клиент получает конфликт по каждому нормальному уточнению scope.

Я предпочитаю другой порядок: короткая диагностика, компактная структура требований, разделение base/optional, затем оценка по milestone или рабочему slice.

Тестовый slice честнее большой презентации

Для legacy e-commerce хороший первый slice часто выглядит очень приземленно:

  1. Одна категория с тяжелыми фильтрами.
  2. Один search-flow с понятной метрикой качества.
  3. Один API adapter между Bitrix/Laravel и новым фронтом.
  4. Один участок Core Web Vitals с замером до/после.
  5. Один релиз через staging, review, rollback-plan и production check.

Такой slice показывает больше, чем презентация на 40 слайдов. Видно, как команда получает доступы, читает старый код, документирует решения, объясняет компромиссы и проверяет результат.

После этого крупный проект обсуждается спокойнее. Уже понятно, где реальный риск, где можно ускориться, а где лучше не трогать работающий контур без причины.

Где здесь роль senior-инженера

В legacy-проектах ценность senior-инженера не в том, чтобы первым сказать "надо переписать". Это может сказать кто угодно.

Ценность в другом: отделить технический долг от бизнес-риска, увидеть скрытые зависимости, не сломать то, что приносит деньги, и предложить такой шаг, который можно проверить.

В моем опыте headless, Next.js и Elasticsearch работают хорошо, когда у них есть причина. Например, когда catalog/search реально тормозит продажи, маркетинг не может выпускать страницы без разработчиков, или старый frontend мешает релизам. Но если главная проблема в процессе, данных или ownership, новый стек сам по себе не спасает.

С чего начать

Если вы смотрите на legacy-проект и думаете о rewrite, я бы начал с трех документов:

  • карта рисков: что нельзя сломать и где уже больно;
  • короткий functional scope: base, optional, integrations, acceptance criteria;
  • первый test slice: один ограниченный участок, который проверяет не только код, но и workflow.

Для коммерческого проекта WGP может оформить это как technical audit / Catalog Probe. Если нужен прямой разговор со мной как с инженером, лучше написать в Telegram или LinkedIn.

Похожие разборы: пять вопросов перед headless, аудит рисков перед headless Bitrix и почему rewrite на Next.js не должен быть саморазрушением.