заметка 01 · инженерия
Трое за одним столом
Агентская разработка приживается в старой компании не тогда, когда всем выдали Cursor, а когда фронт, бэк и аналитик садятся рядом и вслух рулят одним агентом.
Сначала сцена, которую видели все. Квартальное собрание. На слайде слово «AI-трансформация» и три стрелки, сходящиеся в центр, к слову «синергия». Докладчик говорит: «мы должны дать каждому разработчику инструменты искусственного интеллекта». Через полгода лицензии не продлевают, потому что «не взлетело», а единственный след эксперимента — тикет в бэклоге с приоритетом «когда-нибудь».
Я не люблю такие разговоры, потому что они про закупку, а не про работу. Инструмент, выданный каждому по отдельности, ускоряет ровно то, что человек и так делал в одиночку. А узкое место в большой компании — не в скорости набора текста. Оно на стыках: в согласовании контракта, в знании, как это запускается на стенде, в ревью, где три дня ждут единственного человека, который помнит, почему в биллинге ретраи на сорок секунд.
Поэтому дальше — не про инструменты. Дальше про то, как посадить трёх людей в один контекст и дать им одного агента, который читает всё.
01Как это обычно проваливают
Типичный сценарий внедрения выглядит так. Покупают лицензии. Проводят воркшоп. Просят всех «использовать ИИ в работе». Никто не отменяет спринты, никто не меняет процесс ревью, никто не трогает определение готовности. Через месяц ассистент помогает писать шаблонные тесты и объяснять чужой код на митинге, а сроки фичи не меняются вообще — потому что фича всё равно ждёт согласования с аналитиком, потом бэкенд-ревью, потом проверки на стенде, где половина сервисов не поднялась.
И вот здесь начинается тот самый жанр, который я люблю цитировать: корпоративный тикет, в котором написано всё и не написано ничего.
- Тикет
- GD-1183 — «Внедрение AI в процессы разработки»
- Статус
In ProgressCancelled- Критерии приёмки
- — провести воркшоп по синергии
стейкхолдеров
— закупить 400 лицензий
— измерить ROI по количеству сгенерированных строк - Комментарий
- «нам нужен ChatGPT, но чтобы на нашем сервере и бесплатно»
Строки кода — это не метрика. Это побочный продукт нажатия клавиш. Метрика — сколько времени фича идёт от «надо сделать» до «в проде», и сколько людей в компании понимают, как она устроена. Обычно второе число равно двум, и один из них в отпуске.
02Что именно мы делаем
Идея называется своеобразное параллельное программирование — не в смысле «трое пишут в трёх ветках и потом три дня мержат», а в смысле «трое находятся в одном контексте в одно и то же время».
Если для фичи нужны фронт, бэк и аналитик, они втроём приходят на встречу. С кофе. Можно спокойно это делать удалённо: голосовой канал, шаринг экрана, один общий терминал. Начиная с одного агента, ему дают возможность разобраться со всей кодовой базой — не с одним репозиторием, а со всей: тридцать один микросервис, фронт с несколькими UI, админки, мобилка на iOS и Android, CI, GitLab, Kafka. Не потому что агент умный, а потому что он терпеливый. Тридцать сервисов — это не «сложно», это «долго». Ровно та работа, на которую у человека нет недели, а у агента есть.
Дальше начинается разговор. Аналитик говорит, что должно получиться с точки зрения бизнеса. Бэкендер говорит, как это ляжет на существующие сервисы и где оно сломает чужие ожидания. Фронтендер говорит, что увидит человек и чего он точно не увидит. Агент в это время не «генерирует код по промпту» — он слушает, ищет, проверяет и показывает. Каждая реплика в этом разговоре — буквальный steer: не «сделай красиво», а «в биллинге скидка уже применяется до налога, не трогай, только читай».
[14:07] аналитик: скидка считается до налога. иначе бухгалтерия нас съест [14:07] бэк: в биллинге уже так. не трогаем, только читаем через API [14:08] агент: нашёл 3 места, где скидка применяется иначе. вот диффы [14:09] фронт: тогда в корзине показываем скидку отдельной строкой [14:09] агент: ок. правлю контракт, тесты на копейки, миграция не нужна [14:31] агент: MR !4821, 14 файлов, 611 строк. пайплайн зелёный [14:33] бэк: стоп. почему ты тронул retry в payment? [14:33] агент: показалось связанным. откатываю.
На выходе — фича и база знаний. Фича может быть тестовой, если это первый прогон: не «переписать биллинг», а «добавить поле в чек». Смысл первого прогона не в фиче, а в том, чтобы комната научилась работать, а компания увидела, как это выглядит.
Люди, которые раньше занимались только своей областью, смотрят, как агент работает над совершенно другим кодом: как он запускается, как проверяется, где врёт.
— это и есть главный побочный эффект
И вот тут масса человеческого фактора играет на руку. Аналитик впервые видит, что «просто добавить поле» означает миграцию, фича-флаг и два консьюмера. Фронтендер впервые видит, что бэкенд не «тормозит», а ждёт схему топика. Бэкендер впервые слышит, как звучит требование, если убрать из него слово «оптимизировать». Это дороже любой фичи, и это нельзя купить лицензиями.
03Legacy — не препятствие
Мне часто говорят: «у нас не гринфилд, у нас двенадцать лет кода, это не сработает». Обычно это говорит человек, который сам не открывал половину этого кода. Именно в legacy такой подход работает лучше всего, потому что основная проблема legacy — не качество кода, а распределённость знания. Оно живёт в головах, в переписке и в устной традиции. Новый человек входит в проект месяцами, потому что читать тридцать сервисов руками — это не работа, это наказание.
Агент — единственный участник комнаты, который прочитал всё. Не «понял всё» — прочитал. Разница принципиальная: он не знает, почему ретраи на сорок секунд, и не узнает, пока бэкендер не скажет. Но он знает, что эти ретраи есть, где они настроены и кто ещё на них завязан. Это ровно та часть знания, которую человеку лень собирать, а агенту не лень никогда.
Отсюда — правило, которое я считаю несущим: контракт обсуждается первым, код пишется вторым. Пока в комнате нет согласованной схемы — OpenAPI для ручки, AsyncAPI для топика, — агент будет уверенно писать красивые кирпичи в неправильную стену. И самое неприятное: он будет делать это быстро.
Если участник не может объяснить, зачем эта строка существует, — строку удаляет не он. Её удаляет агент, а человек объясняет, почему стало страшно.
04Четыре часа в календаре
Комната — это не «созвон, на котором мы обсудим». Это блок в календаре, который никто не двигает. Четыре часа, три человека, один драйвер — тот, у кого открыт терминал. Драйвер меняется каждые двадцать минут, и это не про демократию, а про то, чтобы никто не залипал в одном окне и не переставал думать вслух.
| Время | Что происходит | Артефакт |
|---|---|---|
| 0:00–0:40 | recon: агент строит карту — сервисы, зависимости, топики, как поднять локально. Люди поправляют вслух. | карта в kb/, список неизвестного |
| 0:40–1:20 | контракт: что меняем, чего не трогаем, какие поля, что с обратной совместимостью. | спека + ветка с OpenAPI |
| 1:20–2:40 | код. Агент пишет, люди смотрят диффы и спорят о смысле, а не о пробелах. | черновой MR, тесты |
| 2:40–3:20 | запуск и проверка: поднять стенд, прогнать сценарий, посмотреть логи, найти враньё. | зелёный пайплайн, список косяков |
| 3:20–4:00 | урожай: карточки знаний, ADR, следующий шаг, разбор «где агент соврал и почему мы не заметили». | KB, ADR, план |
Четыре часа — не потому что магическое число, а потому что это предел, после которого люди начинают соглашаться со всем, лишь бы закончить. Два часа мало: не успеваешь дойти до запуска, а именно запуск — место, где выясняется правда.
05Чем это включается
Можно делать это на коленке: один ноутбук, шаринг экрана, агент в терминале. Для первого прогона так и надо. Но если комнат больше одной, нужна инфраструктура — иначе каждый раз заново выясняется, кто что видит и кто куда пишет.
Комната как конфиг
OpenRig описывает комнату топологией: поды, участники, рёбра, кто кого видит. Ключевое ребро — can_observe: наблюдение как штатная роль, а не подглядывание.
pod: id: room label: checkout-split continuity_policy: { kind: restore_brief } members: - { id: analyst, role: product, seat: voice } - { id: backend, role: backend, seat: driver } - { id: frontend, role: frontend, seat: observer } - { id: agent, role: coder, seat: driver } edges: - { from: analyst, to: agent, kind: can_steer } - { from: backend, to: agent, kind: can_steer } - { from: frontend, to: agent, kind: can_observe } surfaces: - { id: checkout-bff, health: "http://localhost:8081/actuator/health" } - { id: wiremock, health: "http://localhost:8089/__admin/health" }
Дальше три команды, которые и создают всю магию: rig up поднимает комнату, rig attach --self --member lead сажает человека, rig chatroom открывает общий канал. Снимок комнаты — rig down --snapshot — чтобы назавтра не начинать с нуля.
Карта кода вместо grep
Serena даёт агенту LSP-навигацию: не «найди строку», а «найди символ, его тип, всех вызывающих». На тридцати одном сервисе это разница между «я поискал и вот пять файлов» и «я знаю, что этот метод вызывается из двух мест, и одно из них — джоба, которая ходит в прод каждую ночь».
Спека, которая переживает сессию
Spec Kit даёт ритуал: /specify — что делаем, /plan — как, /tasks — на что режем, /implement — делаем. Звучит бюрократично, но именно этого не хватает агенту: он блестяще помнит контекст в пределах окна и полностью теряет его между сессиями. Спека — это память комнаты, которая не зависит от того, кто сегодня за рулём.
Не надо давать агенту доступ к проду «чтобы быстрее проверял». Не надо сажать в комнату двенадцать человек «чтобы все в курсе». Не надо мерить успех числом строк. Все три ошибки выглядят как решительность и заканчиваются одинаково — откатом и разговором о том, что «ИИ пока не готов».
06Урожай: база знаний
База знаний — не побочный продукт комнаты, а главный. Каждая сессия оставляет карточки: как поднять checkout локально, почему payment ретраит сорок секунд, какие топики читает биллинг, что сломается, если поменять формат даты. Не эпос на сто страниц — карточка на экран, с датой и ссылкой на код, который её подтверждает.
Обычно такую базу никто не пишет, потому что «потом». Здесь её пишет агент по ходу, а люди только поправляют — и это принципиально другая экономика. Человек не тратит час после утомительной встречи на документацию; он тратит две минуты, пока агент ещё держит контекст.
И у базы есть второе назначение, о котором редко говорят: следующая комната стартует тёплой. Не «мы всё расскажем новому агенту заново», а «recon читает kb/ и уже знает половину». В компании, где знания уходят вместе с людьми, это не удобство. Это страховка.
07Где ломается
Хорошая идея не работает сама по себе. Вот шесть способов её убить, все проверены на живых людях.
- Двенадцать человек в комнате. После четвёртого участника начинается совещание: люди перестают думать вслух и начинают выступать. Три-четыре — предел, остальные смотрят запись.
- Агент без карты. Если не дать recon, агент начнёт уверенно рассказывать про архитектуру, которой нет. Он не врёт специально — он достраивает по шаблону. Карта или ничего.
- Контракт потом. «Сначала накидаем код, потом договоримся о схеме» — это гарантированный мерж-конфликт на уровне смысла. Схема первой, код второй.
- Ревью как чёрная дыра. Комната заканчивается, MR висит три дня, контекст умирает. WIP-лимит в один MR и SLA на ревью четыре часа — не бюрократия, а условие существования всей схемы.
- Доступ к прод «на всякий случай». Один раз «на всякий случай» — и в компании появляется история, которую пересказывают на каждом собеседовании. Стенд, моки, фича-флаги. Всё.
- Метрика — строки кода. Тогда агент будет писать много строк, а люди — гордиться. Считайте цикл фичи и число людей, которые понимают, как она устроена. Второе важнее.
08Сколько это стоит
Считаю на пальцах, подставьте свои цифры. Сессия: три человека по четыре часа плюс токены. Обычный цикл той же фичи: те же три человека, но растянутые на три недели календаря, с двумя синками и ожиданием ревью.
| Комната | Обычный цикл | |
|---|---|---|
| Часы людей | 12 ч подряд | ~54 ч растянуто |
| Календарь | 1 день | 3 недели |
| Деньги (ставка 3 000 ₽/ч) | 36 000 ₽ + токены | 162 000 ₽ + синки |
| База знаний | 8–12 карточек за сессию | обычно ноль |
Это арифметика одной модели, а не обещание вендора. В ней нет главного риска: что фича окажется не та, и её придётся переделывать. Комната этот риск снижает — потому что аналитик, бэк и фронт ссорятся о смысле в первый час, а не на четвёртой неделе. Но не убирает совсем.
09Что сделать в понедельник
- Выберите фичу, которую не стыдно показать, и которая не трогает деньги. Размер — два-три дня для обычного человека.
- Возьмите трёх людей, которые реально принимают решения по этой фиче. Не тимлидов «для веса».
- Поставьте в календарь четыре часа. Один блок. Отмените всё, что внутри.
- Первый час — только карта. Никакого кода, пока комната не согласится, что карта верна.
- Пишите контракт до кода. Схема, поля, совместимость, что не трогаем.
- В конце — двадцать минут на урожай: карточки, ADR, список «где агент соврал».
- Через неделю повторите с другой фичей и другими людьми. Если после второй сессии никто не хочет третьей — не насилуйте, значит, дело не в инструменте.
10Вместо вывода
Мне нравится, как это звучит на бумаге, и я не люблю, как это звучит в презентациях. Разница в одном слове: в презентации агент «заменяет разработчика», в комнате он заменяет чтение тридцати сервисов, которое никто не хочет делать. Первое — фантазия, второе — работа, которую можно начать завтра.
Комната не делает вас быстрее. Она делает вас честнее: если трое специалистов не могут объяснить агенту, что именно они строят, — они и друг другу этого объяснить не могли. Просто раньше никто не спрашивал.
Talk is cheap. Show me the diff.
— Линус Торвальдс, и он, как обычно, прав
Если у вас триста микросервисов — начните с трёх. Если у вас нет ни одного — вам всё равно нужна комната, просто она будет короче.