AI пишет код быстрее, чем команда его читает. Почему ревью стало бутылочным горлышком — и что с этим делать
Возьмём обычную команду образца 2026 года. Раздали Copilot и Cursor, кода стало выходить ощутимо больше. А вот людей, которые этот код вычитывают, больше не стало — те же лица, те же сутки. Дальше всё предсказуемо: пул-реквесты копятся, диффы пухнут, и в какой-то момент тимлид замечает, что жмёт «approve», толком не глядя. Он не разгильдяй. Он просто не успевает. И вот тут зарыта подмена: писать код мы научились быстрее, а проверять его быстрее — нет. Баги от этого никуда не исчезли. Они просто доезжают до стадии подороже. И теперь делают это шустрее.
Ревью — это очередь, и мы сломали ей баланс
Полезно перестать смотреть на ревью как на «надо просто внимательнее читать» и взглянуть на него как на очередь. У любой очереди две величины: сколько работы прилетает и сколько успеваешь разгребать. Пока прилетает меньше, чем уходит, всё спокойно, диффы разбираются за часы. Но стоит нагрузке подползти к потолку — и время ожидания начинает расти уже не пропорционально, а заметно круче. Грубый пример: загрузка поднялась с 70 до 95 процентов, а ждать в очереди стали не на четверть дольше, а в несколько раз. Это, кстати, не моя выдумка. Так ведёт себя любая очередь у предела, хоть касса в магазине, хоть треды в проде.
AI тут сделал одну-единственную вещь. Он поднял входящий поток — по моим прикидкам, раза в три-пять — и не добавил ни одного ревьюера. А пропускная способность ревью держится на людях: на том, сколько у сеньоров остаётся внимания и часов. Подпиской это не докупишь. Команда годами жила на спокойных шестидесяти-семидесяти процентах загрузки и за пару месяцев оказалась под сотней. Дальше — затык. Узкое место тихо переехало с написания кода на его проверку, а меряем мы по привычке всё ещё скорость написания.
Что команды делают — и почему это не помогает
Ревьюить быстрее. Самый частый ход и самый незаметный. Человек начинает пробегать дифф глазами, верить автору на слово, цепляться только за то, что прямо бросается в глаза. Очередь будто бы рассасывается. Только ревью при этом перестало ловить баги, то есть перестало быть собой. Проверку вы не ускорили — вы её потихоньку выключили, просто вслух об этом никто не объявлял.
Нанять ещё ревьюеров. На бумаге решение, на практике так себе. Сеньор — самый дорогой и редкий человек в команде, и берёте вы его явно не для того, чтобы он сутками вычитывал нагенеренное. Вдобавок проверка чужого кода плохо делится на двоих: чем больше ревьюеров, тем больше разнобоя в том, что вообще считать в этом проекте нормой.
Пусть AI ревьюит сам. Звучит логично: машина написала — машина пусть и проверит. Загвоздка в том, что стандартное AI-ревью, которое идёт в комплекте с git-платформой, видит ровно один дифф и больше ничего. Оно не в курсе вашей архитектуры и ваших договорённостей, не знает, кто отвечает за этот модуль и что по нему решали полгода назад. Пропущенный null оно поймает. А вот то, что новый эндпоинт повторяет уже существующий сервис или ломает контракт соседям, спокойно пройдёт мимо. Выходит ревью, которое проверяет ровно так же, как генерация пишет: гладко и не по делу. А когда таких гладких комментариев набегает много, команда быстро учится их пролистывать. И толку не остаётся вовсе.
Генерить меньше. Тоже вариант, чего уж. Правда, при нём вы добровольно отказываетесь от того, ради чего AI и покупали, так что всерьёз его никто не держит в голове.
Если приглядеться, три ответа из четырёх лечат симптом — длину очереди — и не трогают причину. А причина одна: проверка отстала от генерации, потому что у неё нет того, чем генерация её и обошла. Контекста и автоматики.
Как ревью должно работать в эпоху AI-генерации
Я уже какое-то время делаю продукт на весь цикл разработки, и про ревью у меня сложилось несколько простых правил.
— Проверка должна расти вместе с генерацией, а не плестись сзади. Помогает AI писать — пусть помогает и читать. Иначе вы автоматизировали полконвейера, и вторая половина превращается в затык просто по построению.
— Ревью нужен тот же контекст, что и живому сеньору. Не голый дифф, а ваши соглашения, ваша архитектура, владельцы кода, история решений по этим местам. Без этого осмысленное ревью не отличить от придирчивого линтера.
— Важнее не «красиво ли написано», а что эта правка задевает. Какие сервисы, какие таблицы, чей контракт, какой релиз. Увидеть это можно, только если у инструмента есть карта системы, а не один файл под носом.
— Последнее слово остаётся за человеком. AI отсекает шум, готовит замечания, подсвечивает то, над чем правда стоит подумать. Но «approve» жмёт человек. Там, где ошибка стоит прода, никакой автономности.
— Ревью — это часть процесса, а не реплика в комментариях. Видно, что проверили, по каким правилам, что подняла машина, что одобрил человек и почему. Тогда ревью чинится как процесс, а не как настроение конкретного дня.
Если совсем коротко: чтобы проверка догнала генерацию, ей надо отдать ровно те две вещи, которыми генерация её обогнала. Контекст и автоматику. Но автоматику с человеком на финальном гейте, а не вместо него.
К этому я и пришёл в ShipGrid - в платформе по автоматизации SDLC процессов от постановки задачи до ее рилиза с ИИ на каждом этапе. Мысль простая: ревью нельзя держать на голом диффе — оно должно понимать, куда этот дифф падает. Какие сервисы и таблицы задевает мердж-реквест, кто отвечает за этот код, какой релиз чего касался. Тогда машина читает изменения, в том числе сгенерированные, сверяет их с вашими же соглашениями и архитектурой и показывает не «стиль не тот», а радиус поражения. На человека выносится только то, над чем правда надо подумать.
Эффект, ради которого всё и затевалось: проверка начинает поспевать за генерацией, а ревьюер перестаёт выбирать между «утонуть» и «штамповать approve вслепую». (Как устроен сам граф кода внутри — отдельная тема, как-нибудь распишу на Хабре, тут не закапываюсь.)
Сколько это стоит на самом деле
Если перевести в деньги, картинка отрезвляет. Баг, пойманный на ревью, — полчаса правок одного человека. Тот же баг в проде — уже инцидент: откат, несколько выдернутых из своих задач людей, испорченный вечер. По прикидкам — в десятки раз дороже; коэффициент у каждого свой, цифра честно мутная. Но возьмите даже скромный множитель и умножьте на число диффов, которые сейчас проходят «на доверии», потому что очередь не разгрести. Цена просевшего ревью считается совсем не в строчке «подписка».
И вопрос в зал: у вас ревью успевает за генерацией — или диффы уже стоят в очереди, и часть уезжает в прод «на доверии»?