Rails-монолиты · внутренние ERP и CRM · невоспроизводимые серверы

Самый страшный кусок старой системы. Мы возьмём именно его.

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

Бесплатно · 1 час · онлайн · без формы и менеджеров по продажам — отвечает Павел Остапенко, тимлид

Начнём с вашей задачи. Не с предложения всё переписать.

  • С 2000 годаПавел Остапенко, тимлид, в коммерческой разработке
  • 5 человекпостоянное ядро, резерв 10+ fullstack
  • Деплой 1–2 минутыбез остановки сервиса, малыми порциями
  • ООО с ИТ-аккредитациейМинцифры РФ

Симптомы, которые вы, скорее всего, узнаете

Никто не сломал систему. Она просто стала такой, что её страшно трогать.

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

  1. Оценка на два дня, правка на два часа

    Перед любой доработкой команда сначала выясняет, что ещё завязано на эти данные. Вы платите за раскопки при каждой задаче — и в бюджет это не попадает ни строкой.

  2. Сервер, который никто не разворачивал с нуля

    Настраивали руками, годами. Если диск умрёт в пятницу вечером, восстановление станет исследовательским проектом с неизвестным сроком.

  3. Один человек, который помнит

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

  4. Стек, который больше не патчат

    Rails 5, 6 и 7.0–7.1 не получают исправлений безопасности. Каждая новая CVE в зависимостях — ваша. Обновиться «одним коммитом» нельзя: без тестов неизвестно, что отвалится. У других старых стеков — своя версия той же истории.

  5. Вакансия, которую закрывают со стороны кандидата

    Сильный разработчик смотрит Gemfile.lock раньше, чем оффер. На старый стек без тестов идут либо очень дорого, либо не те.

  6. Бюджет на переписывание вам не дадут. И правильно

    В 2026 году никто не подпишет год работы без результата. А «не трогать» стоит денег каждый месяц — просто в другой графе.

Переписать всё — не вариант. Не трогать — тоже. Есть третий путь, и он скучнее обоих: взять один кусок и довести его до конца.

Первый месяц

Один контур. Один месяц. Боевая работа.

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

  1. Неделя 1

    Оконтурим

    Роли, сценарии, данные, интеграции, граница со старой системой. Критерии приёмки фиксируем до кода. Что вне контура — записываем и не трогаем.

  2. Недели 1–2

    Поставим конвейер

    GitLab, контейнеры, Kamal 2, мониторинг, бэкапы с проверкой восстановления. Это остаётся у вас независимо от того, что будет дальше.

  3. Недели 2–4

    Пересоберём сценарии

    Trunk-based, малые релизы, каждый сценарий закрыт e2e-тестом. Включаем пилотной группе через feature flag — выключается без деплоя. Старая система работает рядом: это и есть путь возврата. Финальное переключение с необратимой миграцией данных — отдельное решение с согласованным окном.

  4. Финал

    Покажем и посчитаем

    Работающие сценарии плюс оценка остальных, которые обнаружили по дороге. Дальше три варианта: продолжить, сменить границы, забрать результат и развивать самим.

1–3

Почему 1–3 сценария, а не 10

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

Мы бы тоже хотели точнее. Точнее — после первого часа разбора.

«Готовый сценарий» — это

  • его ожидаемое поведение описано и согласовано;
  • реализация проверяется e2e-тестом;
  • им пользуется пилотная группа в боевом контуре, не на стенде.

Малые порции вместо больших релизов

Trunk-based: каждое изменение — отдельный небольшой релиз в прод, от нескольких в день до одного в несколько дней. Никаких feature-веток, которые живут месяц и сливаются ночью с бубном. Никакого «большой релиз в субботу, откат в воскресенье».

Деплой 1–2 минуты. Без простоя

Kamal 2 поднимает новую версию рядом, переключает трафик и гасит старую. Пользователи ничего не замечают. Лог реального деплоя покажем на разборе.

Интеграции: мониторинг всегда, песочница — если есть

1С, банки, платёжные сервисы, СМЭВ. Каждую интеграцию закрываем контрактными тестами и мониторингом в проде. Если у внешнего сервиса есть тестовый контур — прогоняем сценарии на нём до включения пилотной группе. Если нет — говорим об этом до старта, а не выясняем на проде.

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

Кому подходит

В первую очередь — старый Rails. Но не только.

У вас Rails-монолит

Ruby переносим в Ruby: новый контур на Rails 8 и PostgreSQL, ваши разработчики читают его с первого дня и продолжают работу без смены языка.

Как делить данные между старым и новым контуром — определяем по устройству вашей системы при оконтуривании.

У вас внутренняя ERP/CRM на другом стеке

Правила процесса живут в коде и в памяти двух человек, сервер настроен руками, подрядчик сменился уже дважды. Согласованный контур пересобираем на Rails 8.

Это смена технологии. Кто будет сопровождать результат, если у вас нет Ruby-компетенции, — решаем до старта, а не после.

Когда мы не подходим

  • Границы контура выделить нельзя — всё связано со всем и делить не готовы.
  • Нужно сохранить всё неизвестное поведение без обследования.
  • На вашей стороне некому принимать результат и отвечать по логике.
  • Нужна круглосуточная поддержка без отдельного соглашения.

Границы ответственности

Защита от спора «а старая система так умела»

До кода письменно фиксируем роли, входы, ожидаемые результаты, известные ошибки, интеграции, данные и критерии приёмки. Это защищает обе стороны — и вас перед вашим руководством тоже.

Как работаем с поведением системы
Что известно о поведенииЧто делаем
Согласовано и включено в контур Реализуем, закрываем e2e-тестом. После приёмки — гарантия 2 месяца.
Известно, но исключено Фиксируем письменно. В текущую работу не включаем.
Обнаружено позднее Оцениваем как отдельное изменение контура. В обязательства неявно не добавляем.

Ваша команда — владелец сценариев и принимает результат. Мы отвечаем за согласованный контур, не за весь сервис.

Что остаётся у вас

Если после первого месяца решите не продолжать

Всё созданное остаётся у вас: код, тесты, конвейер, мониторинг, документация. Без «доступ выдадим после оплаты следующего этапа». Следующее изменение не должно начинаться с поиска человека, который «помнит, как тут».

Код и поведение

  • Исходный код на Rails 8 без экзотики.
  • Описание согласованных сценариев.
  • E2e- и контрактные тесты.
  • Карта интеграций и известные ограничения.
  • Правила для AI-агентов — чтобы ваш сеньор менял код сам.

Разработка и поставка

  • GitLab-конвейер.
  • Контейнеры и devcontainer.
  • Конфигурация Kamal 2 — деплой без простоя.
  • Документация для самостоятельных изменений.

Эксплуатация

  • Мониторинг: Prometheus-агенты, VictoriaMetrics, Grafana.
  • Алерты в Telegram или ваш канал.
  • Резервное копирование с проверкой восстановления.

Стек фиксирован — поэтому быстро, качественно и предсказуемо

Мы работаем на инструментах, которые знаем до винтиков, и не изучаем новые технологии за ваш счёт. Мы уже набили шишки на этом стеке в своих проектах, поэтому в вашем обойдём все острые углы. Если стек не подходит под ваши ограничения — выясним это на первом разборе, а не в середине работы.

Передача — объяснение устройства вашего контура и ответы на вопросы команды, не курс по Rails. Для самостоятельного развития нужна компетенция; AI-агент её ускоряет, но не заменяет.

  • Rails 8
  • PostgreSQL
  • Hotwire
  • Solid Queue
  • Docker
  • Kamal 2
  • GitLab
  • Cuprite / Ferrum

Кейс · ИНГИПРО

ERP на 15 разработчиков и 4,5 года. Пересобрана за 6 месяцев.

ИНГИПРО — среда общих данных инженерного проектирования. Легаси ERP на C++ / TypeScript / React с компьютерным зрением и 2D/3D-пайплайнами, один невоспроизводимый сервер.

Было
15 разработчиков × 4,5 года. Один сервер, который нельзя было развернуть заново.
Сделали
Тимлид и три middle+, 6 месяцев полной занятости. Монолит на нашем стеке: переносимый, масштабируемый.
Что сейчас
Та же команда заказчика развивает новые модули самостоятельно. Время от задачи до релиза сократилось.
ИНГИПРО — среда общих данных инженерного проектирования
ИНГИПРО — среда общих данных инженерного проектирования. После пересборки новые модули развивает та же команда.

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

Кейсы и рабочие заметки

Другие наши кейсы и заметки о подходах к пересборке — в Telegram-канале @pragmaticdev_ru.

Читать канал

Кто работает

Постоянное ядро — 5 человек: fullstack-разработчики, DevOps, тимлид/продуктолог. Тимлид — Павел Остапенко, в коммерческой разработке с 2000 года; он же ведёт разбор, оконтуривание и передачу результата. Резерв — 10+ fullstack, наращивание согласуется заранее. Ваша команда определяет сценарии и принимает работу.

О нас

Строили системы, которые работают до сих пор. Теперь пересобираем такие же.

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

Павел Остапенко, тимлид Евгений Глеб Надя

На том же стеке и процессе построены B2B-маркетплейс с платежами, интеграциями с 1С и банками, PWA; ERP/CRM среднего размера. Они показывают стек и интеграции, а не пересборку. Каждый в команде ведёт задачу целиком — от первого разбора до боевого контура и его передачи. Опыт самых младших — не менее 4 лет коммерческой разработки.

Команду ведёт Павел Остапенко — в коммерческой разработке с 2000 года; технический директор, ведущий архитектор и разработчик «ИНГИПРО» — среды из кейса выше. Бесплатный часовой разбор вашей задачи ведёт он же.

Тимлид и DevOps работают на проекте частичной загрузкой — поэтому первый месяц стоит 200 000 ₽, а не цену полной команды. Если контур нужно ускорить, подключаем резерв из 10+ fullstack — состав и сроки согласуем заранее.

Взять систему, на которой держится чей-то бизнес, и аккуратно перевести её в 2026 год так, чтобы никто не заметил переезда, — интереснее, чем написать ещё один новый сервис.
Павел Остапенко, тимлид

Стоимость

Сначала — месяц. Не обязательство на всю переделку.

Все суммы — вознаграждение команды. Налоги и обязательные взносы начисляются сверх и зависят от формы договора; итоговую сумму фиксируем в договоре до старта. 200 000 ₽ — спеццена для новых заказчиков на первый проект с нами, не постоянный тариф: дальнейшая работа идёт по тарифам продолжения.

Вход · спеццена для новых заказчиков · 2026

Первый месяц

200 000 ₽

+ налоги и взносы

Ваш первый проект с нами. Дальнейшие месяцы — по тарифам карточки «Продолжение».

  • Месяц работы: тимлид и DevOps частичной загрузкой.
  • Обычно 1–3 готовых сценария в боевом контуре.
  • Конвейер, деплой без простоя, мониторинг, бэкапы — остаются у вас.
  • Оценка остальных обнаруженных сценариев.
Обсудить с тимлидом

Продолжение

Пересборка контура

100–200 тыс. ₽ / мес. за единицу мощности разработчика

+ налоги и взносы

  • Уровень разработчика и загрузка — под задачу, а не «ставка по прайсу».
  • Продуктовая команда: берём задачу как user story или JTBD, без подробного ТЗ. Детали уточняем напрямую с вашими людьми — без менеджеров-передатчиков и недели ожидания ответа.
  • Контроль тимлида, design review, техпланирование включены.
  • Инфраструктурные изменения — отдельно, по согласованной оценке.

Эксплуатация

Инфраструктурное сопровождение

≈ 50 тыс. ₽ / мес.

+ налоги и взносы

  • Мониторинг работоспособности и проверка бэкапов.
  • Восстановление при инциденте.
  • Реакция на критичный инцидент за 1–2 часа в согласованный период.

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

Договор

ООО с ИТ-аккредитацией Минцифры либо прямые договоры с ИП на УСН и самозанятыми — форму выбираем под ваш учёт. Серверы, лицензии и внешние сервисы оплачивает заказчик; это фиксируем в договоре отдельно.

До решения

Вопросы, которые вы и так задали бы

Лучше сейчас, чем в середине проекта.

Где подвох в цене 200 000 ₽?

Подвоха нет, есть три причины. Первая: тимлид и DevOps работают на вашем проекте частичной загрузкой, до половины времени каждого. Вторая: мы работаем на инструментах, которые знаем до винтиков — Rails 8, PostgreSQL, Kamal 2, GitLab — отсюда скорость и предсказуемость. Третья: первый проект — кейс для ваших ЛПР: продолжение проще согласовать по работающему контуру, чем по презентации.

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

Что именно покрывает гарантия?

Два месяца после приёмки исправляем несовпадения с зафиксированным ожидаемым поведением принятых сценариев.

Не покрывает новые сценарии, ранее неизвестное поведение, дефекты внешних систем и изменения, внесённые третьими лицами.

Можно не продолжать после первого месяца?

Да. Код, тесты, конвейер, настройки инфраструктуры и документация — ваши. Можно продолжить своей командой, изменить границы контура или продолжить с нами; продолжение согласуется отдельно.

Вы гарантируете экономию после пересборки?

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

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

Нам придётся переходить на Ruby?

Новый контур строим на Rails 8, остальная система продолжает работать на прежнем стеке. Если у вас нет Ruby-компетенции и она не планируется, до старта обсуждаем, кто будет сопровождать результат.

Стек под проект не меняем — это источник предсказуемости и цены.

Что с 1С, банками и другими внешними системами?

Работаем с интеграциями с 1С, банками, платёжными сервисами и СМЭВ. Каждую интеграцию закрываем контрактными тестами и мониторингом в проде.

Если у внешнего сервиса есть тестовый контур (песочница) — прогоняем сценарии на нём до включения пилотной группе. Если нет — фиксируем это как ограничение до старта.

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

Есть опыт production в закрытом контуре на сертифицированной ФСТЭК Astra Linux. Используем собственные GitLab и Docker registry либо разворачиваем их у вас; секреты — через Rails credentials и GitLab variables, ролевой доступ, журналирование в БД. Требования к размещению ПДн согласуем до обязательств.

Бесплатно · 1 час · онлайн

Какую задачу вы откладываете из-за состояния системы?

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

  • Наметим контур: роли, сценарии, данные, интеграции.
  • Сравним пересборку с точечной правкой и с «ничего не менять».
  • Если пересборка не нужна — скажем прямо.

Для первого сообщения достаточно:

«Хотим [задача]. Сейчас у нас [система/стек]. Мешает [проблема]. Есть ли смысл пересобирать часть?»

Написать тимлиду

Написать в Телеграм Написать в Макс

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