К содержимому
CodeHero

переписываем legacy

Модернизация legacy-приложений: переписано и в продакшене за 30 дней

В здании есть сервер, который никто не решается перезагрузить, и все знают какой. Мы забираем его и переписываем на Go, Rust и TypeScript силами инженеров, которые пишут продакшен-код больше 25 лет. Через 30 дней новая система в проде.

Пришлите стек сегодня. В течение 48 часов инженер вернётся с фиксированной ценой и датой старта.

Сегодня

PHP 5.6, клиент на VB6, ядро на Java, которое собирается на одном ноутбуке, и сервер, который никто не перезагружает.

  • app.phpPHP 5.6
  • legacy.dllVB6
  • reports.cfmColdFusion
  • crystal reportsunsupported
  • ftp-dropplaintext

30 дней, и каждый из них старая система обслуживает прод

День 30

Go в ядре, TypeScript на фронте, Postgres под ними, старые серверы выключены.

  • coreGo
  • reportingGo · read replica
  • webTypeScript
  • transferSFTP · signed
Мёртвый код мы сначала меряем, потом удаляем. Это самая дешёвая работа в проекте, и она снимает деньги с цены раньше, чем мы напишем строку.

От вашего репозитория до продакшена за 30 дней

Модуль получает живой трафик, только когда совпадает со старым на вашем же записанном трафике. Так мы и держим дату из договора.
  1. 01дни 1–4

    Картируем всю систему

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

  2. 02дни 3–7

    Ставим шов

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

  3. 03дни 6–25

    Переписываем модуль за модулем

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

  4. 04дни 24–30

    Выключаем старую систему

    Удаляем старый код, отменяем лицензии и гасим серверы. С 30-го дня вы поддерживаете одну систему, и счета за старую перестают приходить.

Платформа переводит, инженеры решают

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

    Платформа

    Включая диалект, который никто не поддерживает, и файл, который генерируется с 2009 года.

  • Замер мёртвого кода

    Платформа

    Статическая достижимость плюс ваши продовые трейсы. Что никогда не выполняется, удаляется, и цена падает вместе с ним.

  • Перевод каждого модуля в идиоматичный Go

    Платформа

    Первый проход машинный, ревью как у пул-реквеста, и ручная переписка везде, где ревьюер перестаёт понимать код.

  • Где поведение баг, а где правило

    Инженер

    Система двенадцать лет округляет одинаково, и кто-то ниже по цепочке на это опирается. Мы находим этого кого-то.

  • Parity harness и сверка данных

    Вместе

    Запись, проигрывание и построчная сверка на нас. Ваша сторона подтверждает, какие расхождения задуманы.

  • Переключение и откат

    Инженер

    Выбираем ночь, держим пейджер и пишем откат до того, как он кому-то понадобится.

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

Лучшие инженеры для вашей системы

Наши инженеры выпускают продакшен-код больше 25 лет, и лучше людей на вашу систему не поставить. Десктопы на VB6 и Delphi, Classic ASP и ColdFusion, монолиты на PHP 4, cron-задания на Perl, пакеты PL/SQL, Oracle Forms, Java старше Maven. Десятки миграций, и все приземлились в Go, Rust и TypeScript. Ваш диалект они уже переписывали.

Фиксированная цена до старта, дата запуска в договоре, код ваш. Фаза, не давшая паритета на вашем же записанном трафике, не принимается.

О чём спрашивают CTO перед подписанием

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

Да. Фичи идут в старый модуль до дня его переноса, а parity harness ловит всё, что поменялось у нас под ногами. Ваш релизный календарь остаётся как был. Пришлите стек сегодня, и в плане будет видно, какой модуль в какой день переезжает.

Зачем переписывать, если можно отрефакторить то, что есть?

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

Код после машинного перевода можно будет поддерживать?

Да. Каждый модуль генерируется идиоматичным Go, проходит ревью как любой пул-реквест и переписывается руками там, где ревьюер перестаёт его понимать. Первый модуль ваши инженеры проверяют сами, до того как мы пойдём дальше. Запросите оценку и выберите модуль, по которому они будут нас судить.

У нас намного больше миллиона строк. 30 дней всё равно держатся?

Да. Платформа читает миллион строк за один проход, а работу мы делим на фазы, у каждой своя дата. От размера зависит, сколько инженеров мы ставим, а срок остаётся 30 дней. Пришлите число строк сегодня, и через 48 часов у вас план фаз с ценой на каждой.

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

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

Пришлите систему сегодня

Назовите стек, размер и дату, которая вас подгоняет. Через 48 часов у вас фиксированная цена и дата старта. Через 30 дней новая система работает в продакшене, а старая выключена.

Получить оценку

Заполнить можно за десять минут. Читает инженер с продакшен-стажем больше 25 лет, он же и отвечает.