Аудит архитектуры и приведение легаси-кода в порядок
Разбираем чужую систему как инженеры, а не как будущие исполнители работ: где она сломается при росте, что чинить первым и что можно спокойно не трогать.
Репозиторий, база и метрики → разбор → карта, реестр рисков и план работ
Условие, на котором мы берёмся за аудит
Отчёт вы получите, даже если вывод будет «всё нормально, ничего не трогайте». Мы продаём диагноз, а не переписывание: цена фиксирована и не зависит от того, найдём мы работу для себя или нет.
Максим Диденкотехнический архитектор 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. Тот же формат мы применяем в отчётах по чужим системам.
Восемь микросервисов за API-шлюзом, логирование через Vector в Elasticsearch. Обработка ключевых процессов сократилась с 16+ часов до 9 минут — после того, как узкие места были найдены и описаны.
Движок распределения — объяснимость каждого решения
Движок распределения товара, где любой результат разбирается до причины: стоп-причины, журнал разбивки, выгрузка любого фильтра в Excel. Аудит устроен так же — вывод разворачивается до строки кода.
Аудит не продаётся по часам: у почасовой оплаты и у диагноза противоположные интересы.
Срок аудита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 — инженерная студия ИП Диденко М. С.