заметка 01 · инженерия

Трое за одним столом

Агентская разработка приживается в старой компании не тогда, когда всем выдали Cursor, а когда фронт, бэк и аналитик садятся рядом и вслух рулят одним агентом.

Mertas· · 16 мин чтения· 31 микросервис, 3 человека, 4 часа
checkout-room — bash

Сначала сцена, которую видели все. Квартальное собрание. На слайде слово «AI-трансформация» и три стрелки, сходящиеся в центр, к слову «синергия». Докладчик говорит: «мы должны дать каждому разработчику инструменты искусственного интеллекта». Через полгода лицензии не продлевают, потому что «не взлетело», а единственный след эксперимента — тикет в бэклоге с приоритетом «когда-нибудь».

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

Поэтому дальше — не про инструменты. Дальше про то, как посадить трёх людей в один контекст и дать им одного агента, который читает всё.

01Как это обычно проваливают

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

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

Тикет
GD-1183 — «Внедрение AI в процессы разработки»
Статус
In Progress Cancelled
Критерии приёмки
— провести воркшоп по синергии стейкхолдеров
— закупить 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] агент:    показалось связанным. откатываю.

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

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

— это и есть главный побочный эффект

И вот тут масса человеческого фактора играет на руку. Аналитик впервые видит, что «просто добавить поле» означает миграцию, фича-флаг и два консьюмера. Фронтендер впервые видит, что бэкенд не «тормозит», а ждёт схему топика. Бэкендер впервые слышит, как звучит требование, если убрать из него слово «оптимизировать». Это дороже любой фичи, и это нельзя купить лицензиями.

аналитик что должно быть бэкенд куда это ляжет фронтенд что увидит человек steer общий контекст агент карта: 31 микросервис · 4 UI · iOS / Android · Kafka читает контракты → правит код → запускает → проверяет serena · spec-kit · openrig MR + пайплайн 14 файлов, 611 строк ревью человеком — SLA 4 часа kb/ + ADR «почему в биллинге ретрай 40 с» следующая комната стартует тёплой
Комната: три человека с разными вопросами, один агент с общей картиной и два выхода, которые переживут сессию. Стрелки — не «промпты», а разговор вслух.

03Legacy — не препятствие

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

Агент — единственный участник комнаты, который прочитал всё. Не «понял всё» — прочитал. Разница принципиальная: он не знает, почему ретраи на сорок секунд, и не узнает, пока бэкендер не скажет. Но он знает, что эти ретраи есть, где они настроены и кто ещё на них завязан. Это ровно та часть знания, которую человеку лень собирать, а агенту не лень никогда.

Отсюда — правило, которое я считаю несущим: контракт обсуждается первым, код пишется вторым. Пока в комнате нет согласованной схемы — OpenAPI для ручки, AsyncAPI для топика, — агент будет уверенно писать красивые кирпичи в неправильную стену. И самое неприятное: он будет делать это быстро.

правило комнаты

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

04Четыре часа в календаре

Комната — это не «созвон, на котором мы обсудим». Это блок в календаре, который никто не двигает. Четыре часа, три человека, один драйвер — тот, у кого открыт терминал. Драйвер меняется каждые двадцать минут, и это не про демократию, а про то, чтобы никто не залипал в одном окне и не переставал думать вслух.

ВремяЧто происходитАртефакт
0:00–0:40recon: агент строит карту — сервисы, зависимости, топики, как поднять локально. Люди поправляют вслух.карта в 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: наблюдение как штатная роль, а не подглядывание.

rig/checkout.yaml
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Где ломается

Хорошая идея не работает сама по себе. Вот шесть способов её убить, все проверены на живых людях.

  1. Двенадцать человек в комнате. После четвёртого участника начинается совещание: люди перестают думать вслух и начинают выступать. Три-четыре — предел, остальные смотрят запись.
  2. Агент без карты. Если не дать recon, агент начнёт уверенно рассказывать про архитектуру, которой нет. Он не врёт специально — он достраивает по шаблону. Карта или ничего.
  3. Контракт потом. «Сначала накидаем код, потом договоримся о схеме» — это гарантированный мерж-конфликт на уровне смысла. Схема первой, код второй.
  4. Ревью как чёрная дыра. Комната заканчивается, MR висит три дня, контекст умирает. WIP-лимит в один MR и SLA на ревью четыре часа — не бюрократия, а условие существования всей схемы.
  5. Доступ к прод «на всякий случай». Один раз «на всякий случай» — и в компании появляется история, которую пересказывают на каждом собеседовании. Стенд, моки, фича-флаги. Всё.
  6. Метрика — строки кода. Тогда агент будет писать много строк, а люди — гордиться. Считайте цикл фичи и число людей, которые понимают, как она устроена. Второе важнее.

08Сколько это стоит

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

КомнатаОбычный цикл
Часы людей12 ч подряд~54 ч растянуто
Календарь1 день3 недели
Деньги (ставка 3 000 ₽/ч)36 000 ₽ + токены162 000 ₽ + синки
База знаний8–12 карточек за сессиюобычно ноль

Это арифметика одной модели, а не обещание вендора. В ней нет главного риска: что фича окажется не та, и её придётся переделывать. Комната этот риск снижает — потому что аналитик, бэк и фронт ссорятся о смысле в первый час, а не на четвёртой неделе. Но не убирает совсем.

09Что сделать в понедельник

  1. Выберите фичу, которую не стыдно показать, и которая не трогает деньги. Размер — два-три дня для обычного человека.
  2. Возьмите трёх людей, которые реально принимают решения по этой фиче. Не тимлидов «для веса».
  3. Поставьте в календарь четыре часа. Один блок. Отмените всё, что внутри.
  4. Первый час — только карта. Никакого кода, пока комната не согласится, что карта верна.
  5. Пишите контракт до кода. Схема, поля, совместимость, что не трогаем.
  6. В конце — двадцать минут на урожай: карточки, ADR, список «где агент соврал».
  7. Через неделю повторите с другой фичей и другими людьми. Если после второй сессии никто не хочет третьей — не насилуйте, значит, дело не в инструменте.

10Вместо вывода

Мне нравится, как это звучит на бумаге, и я не люблю, как это звучит в презентациях. Разница в одном слове: в презентации агент «заменяет разработчика», в комнате он заменяет чтение тридцати сервисов, которое никто не хочет делать. Первое — фантазия, второе — работа, которую можно начать завтра.

Комната не делает вас быстрее. Она делает вас честнее: если трое специалистов не могут объяснить агенту, что именно они строят, — они и друг другу этого объяснить не могли. Просто раньше никто не спрашивал.

Talk is cheap. Show me the diff.

— Линус Торвальдс, и он, как обычно, прав
постскриптум

Если у вас триста микросервисов — начните с трёх. Если у вас нет ни одного — вам всё равно нужна комната, просто она будет короче.