Никто не знает, как система работает
Авторы ушли, документация не соответствует коду, часть логики реализована в скриптах, триггерах и ручных операциях. Формально система описана, фактически её поведение неизвестно никому, включая поддержку.
Выберите тему — соберём контекст
Разбираем унаследованную систему как археологи: восстанавливаем бизнес-правила из кода, сопоставляем данные между старой и новой моделью, генерируем тесты на текущее поведение и переносим функциональность модулями. AI здесь ускоряет работу инженеров, а не заменяет архитектурные решения.
Или сразу: +7 (962) 368-39-51 Telegram
Причины, по которым проекты переписывания унаследованных систем срывают сроки и в итоге возвращаются к старой системе.
Авторы ушли, документация не соответствует коду, часть логики реализована в скриптах, триггерах и ручных операциях. Формально система описана, фактически её поведение неизвестно никому, включая поддержку.
Скидка считается по таблице, которая заполняется вручную; проверка контрагента зависит от поля, которое заполняется только в одном сценарии; округление сделано нестандартно. Эти правила нигде не записаны, но именно они определяют, что система делает правильно.
В старой базе 200 таблиц без внешних ключей, дубли клиентов, справочники с расхождениями и поля, которые заполнялись по-разному в разные годы. Прямой перенос создаёт мусор, который потом невозможно распутать.
Переписанный модуль невозможно сравнить с оригиналом, потому что нет ни тестов, ни эталонных результатов. Любое расхождение обнаруживается уже в эксплуатации, и доверие к проекту падает с каждым инцидентом.
Проект «большого взрыва» тянется годами, старая система продолжает меняться, требования устаревают быстрее, чем пишется код. В итоге новая система либо не выходит, либо выходит без функциональности, ради которой всё затевалось.
Разработчики не хотят поддерживать код на старом языке, новых специалистов найти сложно, знания уходят вместе с людьми. Через несколько лет система остаётся без сопровождения, хотя продолжает обслуживать критичный процесс.
Четыре направления, где языковые модели и анализ данных экономят месяцы работы инженеров.
Строим карту системы: из чего состоит, как связаны модули, где находятся точки входа и какие данные куда передаются.
Восстанавливаем правила, которые нигде не записаны, и оформляем их так, чтобы их можно было обсуждать с бизнесом и проверять.
Приводим старую модель данных к новой: разбираем справочники, устраняем дубли, находим несоответствия до переноса, а не после.
Создаём тестовый контур вокруг старой системы, чтобы новую можно было сравнивать с ней на одинаковых данных.
Переносим функциональность модулями, каждый из которых можно откатить без влияния на остальную систему.
Составляем карту модулей и зависимостей, определяем, что переносим, а что выводим из эксплуатации, и выбираем первый модуль.
Извлекаем бизнес-логику, согласуем её с экспертами и фиксируем расхождения между документацией и фактическим поведением.
Реализуем модуль в новой системе, запускаем параллельно со старой и сверяем результаты, устраняя расхождения по одному.
Повторяем отработанный процесс для остальных модулей, постепенно выводя старую систему из эксплуатации без остановки бизнеса.
Начинать нужно не с выбора новой технологии, а с карты системы: какие модули существуют, кто ими пользуется, какие процессы они обслуживают и как связаны между собой. В унаследованных системах связи часто неочевидны: модуль, который считался второстепенным, может оказаться точкой, через которую проходит половина операций. Языковые модели здесь помогают быстро получить черновик описания каждого модуля, который затем проверяют инженеры и эксперты предметной области.
Второй шаг — определить, что вообще переносить. Часть функциональности в старой системе может быть мёртвой: отчёты, которыми никто не пользуется, интеграции с отключёнными сервисами, режимы, оставшиеся от прежних процессов. Вывод из эксплуатации лишнего сокращает объём проекта иногда на 20–30% и снижает риск, потому что меньше логики нужно воспроизводить.
Третий шаг — выбрать первый модуль для переноса. Он должен быть достаточно значимым, чтобы проект имел смысл, и достаточно изолированным, чтобы ошибка не остановила бизнес. Обычно это отчётность, справочники, вспомогательные расчёты, интеграции — то, что можно запустить параллельно со старой системой и сравнить результаты.
Классический разбор унаследованного кода — это медленное чтение процедур на тысячи строк с постепенным построением картины в голове инженера. Языковые модели ускоряют эту работу: они формулируют назначение модуля, перечисляют входные и выходные данные, объясняют неочевидные условия и предлагают, где искать связанную логику. Инженер получает черновик, который нужно проверить, вместо пустой страницы.
Важно понимать границы применимости. Модель хорошо отвечает на локальные вопросы: что делает этот фрагмент, при каких условиях сработает ветка, какие таблицы читаются. Она хуже справляется с вопросами о глобальном поведении системы, потому что не видит всей картины и склонна додумывать. Поэтому карта зависимостей строится не по ответам модели, а по статическому анализу вызовов, а модель используется для объяснения и навигации.
Практический приём — превратить кодовую базу в поисковый индекс: разбить файлы и процедуры на фрагменты, построить векторный индекс и дать инженерам возможность задавать вопросы на русском языке с обязательной ссылкой на исходный код. Это снижает порог входа для новых разработчиков в разы и делает знания о системе независимыми от конкретных людей.
Проект «перепишем всё за два года» почти всегда заканчивается плохо: старая система продолжает меняться, требования устаревают, команда выгорает, а бизнес теряет доверие к направлению. Работающая альтернатива — переносить функциональность модулями, при котором старая и новая системы существуют одновременно, а данные синхронизируются между ними.
Технически это означает несколько вещей. Нужен слой маршрутизации, который решает, какая система обрабатывает конкретный запрос. Нужна синхронизация данных в обе стороны на период сосуществования. И нужен параллельный прогон: одинаковые входные данные проходят через обе системы, результаты сравниваются, расхождения разбираются. Только после устойчивого совпадения модуль переключается на новую реализацию.
Такой подход даёт бизнесу видимый прогресс каждые несколько недель и позволяет остановиться в любой момент. Если проект по каким-то причинам прекращается, вы остаётесь с работающей системой и перенесённой частью, а не с недостроенной заменой. Это существенно снижает риск и делает модернизацию управляемым процессом, а не ставкой на один большой релиз.
Да, и это основной принцип нашей работы. Старая и новая системы работают параллельно: сначала новая обрабатывает часть трафика, результаты сверяются со старой, и только после устойчивого совпадения модуль переключается. Полная остановка требуется лишь в редких случаях, когда нужно перенести данные, которые невозможно синхронизировать в реальном времени, — и тогда она планируется в технологическое окно.
Отсутствие исходного кода усложняет задачу, но не делает её невыполнимой. В этом случае мы работаем от данных и поведения: анализируем структуру базы, логи операций, документы и результаты работы системы, восстанавливая правила по наблюдаемому поведению. Такая реконструкция занимает больше времени и требует активного участия экспертов предметной области, зато часто вскрывает правила, о которых в компании уже забыли.
Срок зависит от объёма и связности системы. Обследование и карта занимают три-пять недель, восстановление правил по выбранному модулю — ещё три-четыре. Первый перенесённый модуль появляется через три-четыре месяца. Дальнейшие модули идут быстрее, потому что процесс отлажен. Полная замена системы редко укладывается в год, и мы всегда предлагаем разбить её на этапы с самостоятельной ценностью.
Иногда это оправдано, но чаще попытка «написать заново» недооценивает объём неявных правил, накопленных за годы эксплуатации. В унаследованной системе закодирован опыт десятков людей и множество исключений, которые нигде не документированы. Мы предлагаем сначала оценить объём этих правил, а затем решать: если их немного и они понятны — возможна разработка с нуля; если система содержит годы наслоений, поэтапный перенос безопаснее.
Смежные задачи, которые обычно решаются в одном проекте с этой.
Расскажите, на чём она написана и какой процесс обслуживает, — оценим объём разбора, предложим порядок переноса и покажем, что можно сделать без остановки работы.
Cookie и аналитика
Мы используем необходимые cookie для работы сайта и форм. Аналитические cookie (Яндекс.Метрика, включая запись сессий) подключаем только с вашего согласия — от него можно отказаться. Подробнее: Политика использования cookie и обработка персональных данных.