Каждый раз, когда на Хабре очередной срач про вайбкодинг, я сижу тихонько и молчу. Мне спорить неудобно: у меня в проде живёт продукт, где весь код — от миграций базы до анимации кубиков — написали агенты. Вообще весь. Клавиатура за полгода не набрала ни одного if.

Продукт — «Таверна Мокрый Тортл», AI-мастер подземелий. Соло-игра в D&D 5e прямо в Telegram: бот плюс мини-апп с листом персонажа. Броски без поддавков, бой по правилам, магия, левелап. Сделал для тех, кто хочет играть в НРИ, но группу собрать не может — а таких, как выяснилось, немало) Бота зовут @dnd5char_bot, сайт dnd-dm.ru, кликабельных ссылок не будет.

Все цифры — из прод-базы и кабинета ЮKassa, срез на 17 августа. Где цифры мне не льстят — покажу тоже, иначе какой смысл.

Как я до этого докатился

1 февраля я откопал свой старый заброшенный проект. План был скромнейший: генератор персонажей для D&D и чарлист, простенький, для своих. Полтора месяца гонял агентов по формочкам и характеристикам, а 17 марта что-то щёлкнуло, и я написал в свой канал: «кажется я проект по ДнД + полноценный ГЭЙминг замучу всё таки. С сохранением инфы, персонажей, отыгрышем, правилами и всяким прочим». Ну то есть решил: раз персонажа можно генерировать, значит, можно его и водить. А уже 13 июня открыл бету для всех.

Всё это — вечерами после работы. Днём я проектирую чужую игру, вечером — свою. Программистом я не был (вернее был, но пол года и это не считается) и, что смешно, так и не стал: моя должность в этом проекте называется «у меня хлыст, у тебя код».

Стек: Python и aiogram на бэке, React-миниапп на фронте, PostgreSQL, хостинг на Railway, мозги через OpenRouter. Как движок устроен внутри — пайплайн хода, бой, память мира и прочие кишки — я разбирал в прошлой статье, повторяться не буду.

Как выглядит разработка, в которой не пишешь код

Сразу отвечу на главное возражение: нет, это не «попросил ChatGPT сделать бота и молюсь». Так не работает, все уже проверили. Работает скучное слово «процесс».

В репо лежит инструкция, по которой любая задача сначала взвешивается. Лёгкий фикс — агент читает пару файлов и правит. Средняя фича — сначала дизайн-док, потом план, потом отдельный агент-ревьюер ищет в этом плане дыры, и только потом код. Тяжёлая подсистема — декомпозиция в трекере, тесты до кода, ревью после каждого шага и отдельные QA-агенты, которые ходят в живое приложение и тыкают кнопки. Моя работа — ставить задачи и читать отчёты. Код читают другие агенты, и, подозреваю, внимательнее, чем читал бы я.

В цифрах: 2 700 коммитов за полгода, 123 активных дня, порядка 250 тысяч строк — 219 тысяч на Python и 29 на TypeScript. Половина коммитов сделана уже во время беты: живые игроки генерят задачи лучше меня. Любимый замер: игрок кидает багрепорт в чат в 15:23, в 15:46 отвечаю «проверю», в 15:57 фикс на проде. 34 минуты посреди буднего дня.

Стоит всё это 240 долларов в месяц за подписку Claude (на ней же сидят остальные мои проекты, так что на бота честно падает только часть) плюс 20 долларов за Railway. Сколько жрёт LLM самой игры — ниже, в деньгах.

Где агенты меня подставили

Не всё так радостно в нашем царстве прИИкрасного будущего.

Самая любимая история — про v2. Я решил, что пора переделывать движок, и скачал из интернета модный скилл «автономный цикл разработки» — из тех, что сами планируют, сами пишут, сами проверяют и сами себя хвалят. Поставил задачу «сделай v2» и ушёл жить жизнь. Агент честно работал неделю, где я периодически его переставлял, чтоб окно контекста не умирало. Сжёг весь мой недельный лимит запросов и выдал нечто, что стояло рядом с v2 и даже пахло как v2, но при ближайшем рассмотрении оказалось мёртвым куском, который я выкинул целиком. Автономность без контрольных точек — это не разработка, это обогреватель.

Модель почему-то решила, что я хочу v2 просто как факт существования, а не как продолжение текущего проекта. Поэтому он сам себе сделал всё, сам себя покрыл тестами зелеными и был таков. Попытку встроить я выкинул, легче было сделать нормально. Скилл я тоже выкинул, как вы понимаете)

Вторая история массовее. За один июль агенты 372 раза уронили SQL-запросы к прод-базе. Сел разбирать логи: 93% фейлов — одна и та же причина. Агент угадывал имя колонки вместо того, чтобы посмотреть схему. Уверенно, с деталями, мимо. Вылечилось до обидного просто — шпаргалкой со схемой, которую я принудительно вбил в контекст. Агенты с тех пор живут со шпаргалкой, я — с лёгким недоверием.

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

Вывод из всех трёх случаев один. Агенты — не магия и не сотрудники, а очень быстрые исполнители с уверенностью сеньора и памятью аквариумной рыбки. Держит их в рамках только процесс: ревью, тесты, узкие ТЗ и контрольные точки. Ну и полезные плагины и шишки, которые ты сам себе набил. Или он тебе набил. Тут как посмотреть :) Вайбкод без процесса рождает ровно то, чем его пугают в комментариях.

Циферки

Бета открылась 13 июня. Ниже — два полных месяца с хвостиком, всё из базы.

Воронка

968 новых пользователей. Рекламный бюджет — ноль рублей: пара постов в моём же канале, сайт и один ролик в TikTok на великие и могучие 17к просмотров (мама я блогер). 59% пришедших создают персонажа, из создавших 83% делают первый ход. И трафик становится чище: в июне до персонажа доходило 41–52% пришедших, сейчас — почти три четверти. Не релевантный юзер ушёл, а НРИшник с желанием покатать в днд - пришёл)

Глубина

Медианный игрок делает 16 ходов — а ход тут не клик по кнопке, а полноценное действие с ответом мастера. 45% игравших переваливают за 20 ходов, каждый пятый за 50, рекордсмен наиграл 333 за одну сессию. Первая сессия затягивает: садишься «на полчасика», выныриваешь через пару часов с прокачанным героем.

Жизнь игрока

А вот тут больно. Медианная «жизнь» (считаю по тем, кто наиграл хотя бы пять ходов) — одна сессия: сел, выжег вечер, ушёл. В среднем игрок живёт 2,6 дня, верхние 10% — от 6,5 дня, почти каждый десятый — неделю и дольше. Первая сессия работает, а причины вернуться через неделю у продукта нет. Это сейчас моя главная продуктовая задача — не «сделать интереснее», а «дать повод прийти ещё раз».

Деньги деньги дребеденьги

125 платежей на 50 635 рублей за два месяца, 53 плательщика, средний чек 405 вечнодеревянных. 45% плательщиков платят повторно. Июнь принёс около 15 тысяч, июль — 30,5. И самое странное открытие: медиана времени между первым ходом и оплатой — около нуля, а почти половина плательщиков платит вообще до первого хода. Люди покупают не привычку, а обещание. Что с этим делать в оффере — ещё думаю, но факт красивый :)

Движок и маржа

За первые два месяца бета сгенерировала 1,03 миллиарда токенов на 293 тысячах LLM-запросов. Смешанная цена — 0,36 доллара за миллион токенов, спасает кэширование промптов: кэш-хиты 18,5% (за всё время, т.к. опростоволосился на старте и первый месяц не дал должного внимания кэшированию, а жаль). Маржу считаю двумя способами, потому что один слишком красивый. Только игровые вызовы — около 73%. А если повесить на бету вообще все затраты OpenRouter, включая разработку, QA-прогоны и тесты, — около 36%. Аккуратная формулировка: бета в плюсе, даже если заставить её оплачивать собственную разработку.

Что я понял

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

Тем, кто пилит свои проекты: платят на входе, а не после «распробовал». Глубина сессии и удержание — разные метрики, и прокачка первой не тянет вторую. И агенты снимают потолок «нет времени», но не снимают потолок «нет процесса».

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