Написать нам в Telegram

Legacy-код: что это и когда поддерживать, рефакторить или переписать

Разработка
19 сентября 2026 г.
Фото Максим Козлов
Максим КозловРуководитель отдела разработки

Legacy-код (легаси, от англ. legacy — «наследие») — это программный код, который достался команде по наследству: его писали другие люди, в другое время и по другим правилам, а теперь на нём работает бизнес. Речь именно о коде сайтов и информационных систем, а не об одноимённых играх. Легаси-проект — это сайт, интернет-магазин или внутренняя система, где такого кода большинство и любое изменение даётся тяжелее, чем должно.

Статья для владельцев и руководителей, у которых «всё работает, но страшно трогать»: как понять, что у вас легаси, какие риски это несёт и как выбрать между поддержкой, постепенным рефакторингом и переписыванием с нуля.

Легаси: что это такое простыми словами

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

Типичные признаки:

  • Нет тестов. Проверить, что правка ничего не сломала, можно только руками — и то не всё.
  • Нет документации и автора. Знания о том, почему сделано именно так, ушли вместе с разработчиком.
  • Устаревший стек. Язык, фреймворк или CMS больше не получают обновлений безопасности.
  • Нет нормального процесса. Правки заливаются по FTP прямо на рабочий сервер, git отсутствует или не совпадает с тем, что крутится в продакшене.
  • Правленое ядро. Изменения внесены прямо в файлы CMS или сторонних библиотек, поэтому обновить их без потерь нельзя.
Легаси — не ругательство и не приговор. Это состояние проекта: код работает и приносит деньги, но цена каждого изменения выросла. Задача владельца — не «избавиться от легаси», а управлять этой ценой.

Устаревший стек: даты окончания поддержки

Самый объективный признак легаси — платформа, которую разработчики уже не поддерживают. После даты EOL (end of life) новые уязвимости в ней никто не закрывает. Сверьтесь с таблицей:

ТехнологияОкончание поддержкиЧто это значит на практике
PHP 5.631.12.2018Уязвимости не закрываются 7+ лет, современные библиотеки не ставятся
PHP 7.428.11.2022Хостеры постепенно убирают версию, переход на 8.x требует правок кода
PHP 8.131.12.2025Уже без патчей безопасности, пора планировать переход
PHP 8.231.12.2026Осталось несколько месяцев поддержки
Yii 1.131.12.2026Срок уже продлевали (изначально поддержка заканчивалась в 2023 году); после этой даты — только своими силами
AngularJS (1.x)31.12.2021Фронтенд без обновлений, специалистов на рынке почти нет
Python 201.01.2020Большинство библиотек давно не поддерживают вторую ветку

Отдельные случаи — jQuery-монолиты и Битрикс со старым ядром. У jQuery нет «даты смерти», но проект, где вся логика интерфейса — это тысячи строк обработчиков в одном файле, трудно развивать и почти невозможно покрыть тестами. У 1С-Битрикс обновления ядра приходят только при активной лицензии: если её не продлевали несколько лет, а ядро правили напрямую, сайт застревает на старой версии, которая плохо совместима с актуальным PHP. Как выходить из этого состояния, подробно разобрано в статье про обновление 1С-Битрикс.

Почему бизнес живёт на легаси — и это нормально

Почти любой проект старше пяти лет содержит легаси. Так происходит не из-за плохих программистов, а потому что:

  • бизнес менялся быстрее, чем код, и новые требования достраивали поверх старых;
  • сроки запуска были важнее архитектуры — и это часто было правильным решением;
  • подрядчики и сотрудники менялись, каждый писал в своём стиле;
  • платформа, выбранная 8–10 лет назад, была тогда актуальной.

Главное преимущество легаси часто недооценивают: этот код проверен реальностью. В нём зашиты годы исправленных ошибок, особые случаи расчёта скидок, нюансы обмена с 1С, о которых никто уже не помнит. Именно поэтому решение «выкинуть и написать заново» так часто заканчивается провалом — об этом ниже.

Риски легаси-проекта для бизнеса

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

Безопасность

Неподдерживаемые PHP, CMS и модули с известными уязвимостями — основной путь массовых взломов. Боты сканируют сайты по версиям и атакуют автоматически, им всё равно, насколько вы крупный бизнес.

Найм и зависимость от людей

Разработчиков на Yii1, AngularJS или самописном фреймворке 2012 года мало, и они дороже. Хуже, когда проект знает один человек: он заболел, уволился или поднял ставку вдвое — и бизнес остаётся с системой, которую никто не может поправить. Это называют «фактор автобуса».

Скорость изменений

Задача, которая на чистом проекте занимает день, на легаси занимает неделю: разобраться, найти все места, проверить руками. Это прямые деньги — подробный расчёт «процентов» по такому долгу есть в статье про технический долг.

Инфраструктура

Старый код держит старый сервер: нельзя обновить ОС, базу данных, PHP. В какой-то момент хостер отключает версию, и сайт падает не из-за ваших действий.

Как принять легаси-проект на поддержку: первые шаги

Главное правило при приёмке: не трогай — сначала пойми. Новая команда, которая в первую неделю начинает «причёсывать» код, почти гарантированно что-то сломает. Правильный порядок:

  1. Доступы. Собрать все: хостинг, SSH, база, домен, DNS, панель CMS, репозиторий, почта, платёжные и сторонние сервисы. Сменить пароли, если прежний подрядчик ушёл. Проверить, на кого оформлены домен и хостинг.
  2. Бэкапы. Сделать полную копию файлов и базы и проверить, что из неё реально разворачивается рабочий сайт. Бэкап, из которого не пробовали восстанавливаться, бэкапом не считается.
  3. Код под контроль версий. Выгрузить то, что работает на сервере, в git — именно из продакшена, а не из репозитория подрядчика: они часто расходятся.
  4. Тестовая копия. Развернуть стенд с теми же версиями PHP и базы, закрытый от индексации и с отключёнными интеграциями, чтобы не слать письма клиентам и заказы в 1С.
  5. Мониторинг. Настроить проверку доступности, сбор ошибок и контроль срока SSL и домена. Вы должны узнавать о падении раньше клиентов.
  6. Инвентаризация. Описать стек и версии, интеграции, cron-задачи, внешние API, правки ядра, «особые» места, о которых предупреждал прежний разработчик.
Прежде чем менять критичный участок, зафиксируйте его текущее поведение тестами. Это называется характеризационные тесты (characterization tests): они не проверяют, «как правильно», а записывают, как система работает сейчас — например, какая сумма получается у корзины с конкретным набором товаров и промокодом. Если после правки результат изменился, вы узнаете об этом до клиентов.

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

Поддерживать, рефакторить или переписать: матрица решения

У легаси-проекта три пути. Выбирать между ними стоит не по ощущениям разработчиков («тут всё ужасно»), а по признакам:

ПризнакПоддерживать как естьПостепенно рефакторитьПереписать
Как часто меняетсяРедко, продукт стабиленРегулярно, есть план развитияМодель бизнеса поменялась полностью
СтекПоддерживается или обновляется малой кровьюУстарел частично, есть путь обновленияМёртв, пути обновления нет
Стоимость типовой правкиПриемлемаРастёт от квартала к кварталуЛюбая правка — отдельный проект
БезопасностьУязвимости закрываются патчамиНужна замена отдельных модулейЗакрыть уязвимости без переписывания нельзя
Кто знает системуКоманда разобраласьПонятна частичноЛогику можно восстановить только по поведению

Поддерживать как есть — разумно, если проект стабилен и развивать его почти не нужно: обновления безопасности, бэкапы, мониторинг, мелкие правки. Постепенный рефакторинг — самый частый правильный ответ: систему улучшают по частям, параллельно с развитием, и каждый модуль заменяют, когда его всё равно нужно трогать. Приёмы, включая паттерн «душитель» (strangler fig), разобраны в статье что такое рефакторинг. Переписать — оправдано, когда платформа мертва без пути миграции или продукт принципиально изменился, и старый код больше не описывает бизнес.

Часто решение смешанное: ядро поддерживают, самую болезненную часть (каталог, личный кабинет, расчёт цен) выносят в отдельный сервис, а морально устаревший интерфейс меняют через доработку сайта без смены движка.

Ловушки «большого переписывания»

Идея «выкинем всё и сделаем правильно» привлекательна, особенно когда её предлагает новый подрядчик. Типичные ловушки:

  • Две системы вместо одной. Пока пишется новая версия, старую надо поддерживать и развивать. Бизнес не может заморозить изменения на год, и новая система вечно догоняет старую.
  • Потерянная логика. Новые разработчики переносят то, что видно в интерфейсе, и пропускают скрытые правила: округления, исключения для оптовиков, обработку сбоев обмена. Ошибки всплывают после запуска, на реальных заказах.
  • Оценка «на глаз». Сроки переписывания почти всегда занижены, потому что объём старой системы никто не измерял. Проект растягивается вдвое, бюджет — тоже.
  • Потеря SEO. Меняются адреса страниц, шаблоны, метатеги — и накопленный трафик падает, если миграцию не планировали отдельно.
  • Новое легаси. Через три года переписанная система без тестов и документации станет таким же легаси, если не поменять процесс разработки.
Если подрядчик предлагает «переписать с нуля», не посмотрев код, базу и сервер, — это не оценка, а продажа. Просите письменное обоснование: что именно нельзя исправить в текущей системе и почему.

Как выбрать подрядчика для легаси-проекта

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

  • С какими стеками вы работаете, кроме актуальных? Есть ли опыт с нашей версией PHP, CMS или фреймворка?
  • Что вы делаете в первые две недели после приёмки проекта? Хороший ответ — доступы, бэкапы, стенд, мониторинг, аудит; плохой — «сразу начнём править».
  • Как вы проверяете, что правка ничего не сломала, если в проекте нет тестов?
  • Как документируете то, что узнали о системе? Кому принадлежат эти документы?
  • Сколько человек в команде будет знать проект? Что будет, если ваш разработчик уйдёт?
  • Как вы фиксируете оценку и что происходит, если в коде нашлись сюрпризы?

Независимое мнение до решения о рефакторинге или переписывании даёт технический аудит кода: по его итогам видно, какие риски критичны, какие плановые и сколько стоит их закрытие. Ориентиры по стоимости: экспресс-аудит небольшого сайта — от 30 000 ₽, полный аудит кода и инфраструктуры — от 60 000 ₽, абонентская поддержка — от 50 000 ₽ в месяц; итоговая цена зависит от объёма кода, числа интеграций и состояния сервера.

Чек-лист первых 30 дней с легаси-проектом

  • Все доступы собраны, пароли сменены, домен и хостинг оформлены на компанию
  • Полный бэкап снят, восстановление из него проверено на отдельном сервере
  • Код с рабочего сервера лежит в git, правки идут только через репозиторий
  • Развёрнута тестовая копия, закрытая от индексации, с отключёнными интеграциями
  • Настроен мониторинг доступности, ошибок, срока SSL и домена
  • Составлена карта системы: стек и версии, интеграции, cron, внешние сервисы, правки ядра
  • Проверены версии PHP, CMS и библиотек на EOL и известные уязвимости
  • Критичные сценарии (заказ, оплата, формы, обмен с 1С) покрыты хотя бы ручным сценарием проверки или характеризационными тестами
  • Риски разделены на «критично / планово / косметика» с оценкой в часах
  • Принято решение по матрице: поддерживать, рефакторить по частям или переписывать

Вывод

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

Частые вопросы
Технический долг — это накопленные упрощения и отложенные улучшения, за которые проект платит замедлением работы. Легаси — более широкое состояние: код без автора, тестов и документации, часто на устаревшем стеке. Технический долг обычно составляет большую часть легаси, но легаси бывает и у аккуратно написанного кода, если его никто не понимает.
Можно, если сайт почти не меняется, а платформа ещё получает обновления безопасности. Минимум всё равно нужен: проверенные бэкапы, мониторинг, актуальные доступы и обновления безопасности. Без них «работающий» сайт однажды падает или попадает под массовый взлом.
Зависит от объёма кода, числа сторонних библиотек и того, правили ли ядро CMS. Небольшой сайт иногда переводится за несколько дней, крупный самописный проект с PHP 5.6 — за недели. Точную оценку дают после аудита кода, ориентир по ставке — от 2 500 ₽ в час.
Пока он доступен, попросите его описать архитектуру, интеграции, cron-задачи и «особые» места, а также передать все доступы. Параллельно подключите второго специалиста или подрядчика, который примет проект на поддержку. Зависимость от одного человека — самый дешёвый в устранении риск легаси.
Базовая приёмка — доступы, бэкапы, тестовая копия, мониторинг — обычно занимает от нескольких дней до двух недель. Полная инвентаризация и аудит с оценкой рисков для проекта с интеграциями — ещё 1–2 недели. Спешить с правками кода до окончания этого этапа не стоит.
Нет. Проекту может быть год, но если автор ушёл, тестов и документации нет, а менять код страшно, он уже ведёт себя как легаси. И наоборот, десятилетняя система с тестами, документацией и обновлённым стеком легаси не считается.
Поддержка сайтов
Поможем с этой задачей под ключ — от идеи до результата. Рассчитаем стоимость и сроки под вашу задачу.
Читать подробнее
Услуги по теме
Берём ваш сайт на абонентское обслуживание: мониторинг доступности, бэкапы, обновления и безопасность, доработки по часам и реакция на инциденты по SLA. Студия с 2008 года — поддерживаем сайты на любой CMS и самописном коде.
Технический аудит веб-сайта изнутри: код, архитектура, зависимости, база данных, сервер, деплой и доступы. Не SEO-чеклист, а инженерная экспертиза — за 5–15 рабочих дней вы узнаёте, в каком состоянии проект, сколько стоит техдолг и что выгоднее: дорабатывать или переписать.
Развиваем и дорабатываем существующий сайт: новый функционал, аккуратные правки, ускорение и рефакторинг — на Битрикс, WordPress, Yii, Laravel и любой другой CMS, даже если код писали не мы.
Берём сайт на 1С-Битрикс на техподдержку по SLA: обновляем ядро и модули без потери ваших правок, закрываем уязвимости, следим за обменом с 1С, агентами и бэкапами, переводим на PHP 8.2+. Студия в Санкт-Петербурге с 2008 года.