Аудит · легаси · независимая оценка

Аудит архитектуры и приведение легаси-кода в порядок

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

  • Фиксированная стоимость
  • 5–10 рабочих дней
  • NDA до выдачи доступов
audit / input → review → report
Репозиторий, база и метрики → разбор → карта, реестр рисков и план работ

Условие, на котором мы берёмся за аудит

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

Максим Диденкотехнический архитектор maincode
  • Второе мнение о вашем подрядчике
  • Техническая экспертиза перед сделкой
  • Права на отчёт остаются у вас

Когда заказывают

Четыре ситуации, где нужен взгляд со стороны

Общее у них одно: решение стоит дорого, а данных для него нет — есть мнения людей, у каждого из которых свой интерес.

Скорость команды

Платим команде третий месяц, а в релизе всё меньше функций

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

Второе мнение

Подрядчик говорит, что надо переписать всё — это правда?

Иногда правда. Чаще переписывания требует один-два модуля, а остальное лечится границами, тестами и парой индексов. Мы не участвуем в работах на стороне подрядчика, поэтому соглашаемся не с ним и не с вами, а с кодом.

Сделка · проверка актива

Покупаем компанию, а что внутри — знает только их техдиректор

Реальный размер кодовой базы, зависимость от одного человека, заимствования, состояние данных и стоимость владения после покупки. Отчёт написан так, что его можно приложить к переговорам.

Наследство

Мы боимся трогать этот модуль — его писали до нас

Восстанавливаем контракт модуля: что он делает, кто от него зависит, какие инварианты держит база. Дальше — план, как обвязать его тестами и резать по частям, не останавливая разработку. Похожая работа: ERP-платформа →

Первый шаг

Опишите систему — вернёмся с составом аудита, ценой и датой старта

Нужен короткий созвон: стек, сколько сервисов и репозиториев, есть ли документация и мониторинг. После него называем фиксированную стоимость и срок в пределах 5–10 рабочих дней.

  • Ответ в течение рабочего дня
  • NDA — по запросу

Что вы получите

Шесть документов, а не презентация с наблюдениями

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

Карта системы C4, уровни L1–L2

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

диаграммы + исходники, редактируются без нас

Реестр рисков с приоритетами

Каждая запись — конструкция, а не ярлык «плохой код»: что сломается, при каком условии и по какому сигналу вы это заметите. P1 — течёт сейчас, P2 — сломается на росте, P3 — тормозит разработку.

риск · причина · последствие · приоритет · оценка

ADR по 3–5 ключевым решениям

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

контекст → варианты → решение → последствия

Файл архитектурных правил

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

1–2 страницы в репозитории рядом с кодом

Набор CI-гейтов

Проверки в пайплайне, которые не дают откатиться назад: линтер, тесты с детектором гонок, проверка обратимости миграций, запрет на слияние с красной сборкой. Правило работает, только если его нельзя обойти уговорами.

готовые джобы под GitLab CI или аналог

Оценка трудозатрат на исправления

По каждому пункту реестра — человеко-дни и раскладка на «до ближайшего релиза», «в течение квартала» и «можно не делать». Разговор о деньгах превращается в разговор о списке.

дни без привязки к исполнителю

Формат записи в реестре — пример, а не реальный клиент

P1 · Потеря событий между коммитом и публикацией. Контекст: сервис пишет заказ в базу и сразу отправляет сообщение в брокер. Последствие: при падении процесса в промежутке заказ есть в базе, но не доехал до склада, и расхождение вскрывается на инвентаризации. Решение: транзакционный Outbox, публикация отдельным воркером, идемпотентность у потребителя. Оценка: 4–6 дней.

Как проходит

От доступов до защиты выводов — 5–10 рабочих дней

Срок зависит от размера кодовой базы, определяется до старта и дальше не двигается. Отсчёт идёт с момента, когда доступы выданы.

01

Доступ и запуск

Поднимаем проект у себя — или фиксируем, почему это невозможно: невоспроизводимая сборка сама по себе пункт реестра. Собираем размер модулей, историю коммитов и карту зависимостей.

Дни 1–2доступы · сборка

02

Код и границы

Где доменная логика растеклась по обработчикам и SQL, где нарушены границы, где одна правка обязана тянуть за собой три соседние. Здесь же час разговора с вашим техлидом и черновик карты C4.

Дни 2–4модули · связность

03

Данные и запросы

Схема, ключи и индексы, планы тяжёлых запросов, обратимость миграций, целостность на уровне базы против целостности «где-то в коде». Чаще всего именно здесь лежит то, что убивает систему на росте объёмов.

Дни 4–6схема · планы запросов

04

Поставка и эксплуатация

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

Дни 6–8CI · логи · метрики

05

Отчёт и защита выводов

Собираем карту, реестр, ADR, правила и оценки в один документ и защищаем выводы на созвоне 60–90 минут вместе с вашей командой. Вопрос «почему это P1, а не P3» разбирается при всех.

Дни 8–10документ + созвон

Что нужно от вас

Четыре пункта, около двух часов вашего времени

Аудит не отвлекает команду от текущих задач: всё остальное мы читаем сами.

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

Опыт

С чужим кодом мы работаем не реже, чем со своим

Рефакторинг кодовых баз объёмом 30 000+ строк на React, Python и PHP. Регламентированный учёт для онкологического центра в США, интеграционное решение в Murex для крупного банка, миграция ETL с SSIS на Airflow и переезд хранилища на ClickHouse в игровом холдинге. Общее одно: систему приходилось сначала понять и только потом менять.

30 000+строк в рефакторинге на React, Python и PHP
9+ летв разработке, с 2015 года
100+обратимых миграций в одной системе
C4 + ADRформат, в котором сдаём выводы

ERP · учётная платформа

ERP-платформа — модель C4 и корпус ADR

10+ доменных модулей, единый gRPC-контракт, архитектура зафиксирована на уровнях C4 L1–L4 и в решениях ADR. Тот же формат мы применяем в отчётах по чужим системам.

C4 L1–L4плюс корпус ADR

Разбор проекта →

Логистика · микросервисы

Логистическая платформа — разбор ручных процессов

Восемь микросервисов за API-шлюзом, логирование через Vector в Elasticsearch. Обработка ключевых процессов сократилась с 16+ часов до 9 минут — после того, как узкие места были найдены и описаны.

16 ч → 9 минобработка ключевых процессов

Разбор проекта →

Ритейл · алгоритмы

Движок распределения — объяснимость каждого решения

Движок распределения товара, где любой результат разбирается до причины: стоп-причины, журнал разбивки, выгрузка любого фильтра в Excel. Аудит устроен так же — вывод разворачивается до строки кода.

3 пайплайнапрямая, обратная, Blackbox

Разбор проекта →

Стоимость и срок

Фиксированная цена, названная до начала работ

Аудит не продаётся по часам: у почасовой оплаты и у диагноза противоположные интересы.

Срок аудита5–10 дней

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

Информация на сайте не является публичной офертой. Точная стоимость, состав отчёта и срок фиксируются в договоре после созвона. Работы ведёт ИП Диденко М. С.

Честно о неудобном

Что спрашивают до подписания

В аудите заказчик рискует отношениями внутри компании, поэтому отвечаем на неудобное сразу.

«Не хотим отдавать код наружу»

NDA подписываем до выдачи доступов, в вашей редакции или в нашей. Хватает доступа на чтение; при жёстких политиках работаем на вашем оборудовании или через ваш VPN. После сдачи отчёта копии репозитория у нас не хранятся.

«Выводы не понравятся нашему подрядчику»

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

«Бюджета на полный аудит сейчас нет»

Берём частями. Первый шаг — карта L1–L2 и реестр рисков: этого достаточно, чтобы принять решение о судьбе системы. ADR, архитектурные правила и CI-гейты можно взять отдельно позже, каждая часть закрывается своим документом.

«У нас не Go, а PHP и Python»

Смотрим и их. Пишем мы на Go, а разбираем PHP, Python, JavaScript и TypeScript, T-SQL и хранимые процедуры — опыт рефакторинга на 30 000+ строк как раз оттуда. Архитектурные болезни от языка почти не зависят.

FAQ

Частые вопросы об аудите

Не нашли ответ — напишите, разберёмся по вашей системе.

Сколько стоит аудит и от чего зависит цена?

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

Сколько занимает по времени?

От 5 до 10 рабочих дней с момента выдачи доступов. Срок и состав отчёта фиксируются в договоре; если доступы задерживаются, сдвигается дата старта, а не длительность работ.

Что если вывод будет «всё нормально»?

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

Вы работаете только с Go?

Нет. Разрабатываем мы на Go, а разбираем PHP, Python, JavaScript и TypeScript, T-SQL и хранимые процедуры. Опыт включает рефакторинг кодовых баз объёмом 30 000+ строк на React, Python и PHP.

Можно ли показать отчёт подрядчику или инвестору?

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

Можно ли после аудита нанять вас на исправления?

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

Контакты

Расскажите, что за система и что именно вас в ней беспокоит.

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

Куда дальше

Если ваша задача другая

Аудит — это диагноз. Дальше нужен тот, кто выполнит план: ваша команда, другой подрядчик или мы.

Смотреть разборы проектов →