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

Разработчики на этом фоне разделились на два лагеря. Одни демонстративно сторонятся ИИ или прямо его отрицают. Другие бросили штурвал: шлют в чат «давай дальше», «сделай красиво» и пьют кофе, пока агент разбирается сам. Я хочу рассказать про третий путь, потому что обе крайности одинаково не работают.

Как это выглядело в 2019

Я начал использовать нейросети в работе еще тогда, когда большинство считало это чем‑то вроде научных игрушек, далеких от практики. Вау‑эффекта не было. Были черновики SEO‑текстов, аудио и визуальные артефакты, которые экономили время на старте задачи и помогали быстрее нащупать идею.

Потом появились Artbreeder, Amper Music и целая россыпь разношерстных LLM, и это уже начало влиять на реальную работу: продвижение идей, подготовку текстов, местами даже прод. Как только появились модели, которые прилично писали код и отдавали это через доступный API, я сразу начал внедрять их в Unity и Jenkins для анализа логов и кода. Кажется, одним из первых в своем окружении собрал десктопное приложение с адаптерами под разные модели для внутреннего использования в компании.

Честно говоря, меня удивляла реакция коллег. Технологию встречали со скепсисом и сопротивлением, инструменты приходилось буквально продавливать. Результаты были посредственными, но даже как первый срез анализа или как стороннее мнение они экономили время: не нужно было разбирать проблему с нуля, было от чего оттолкнуться.

Первый провал: вайб на уровне всего проекта

Когда модели подросли, я начал вести разработку в режиме, который тогда еще никто не называл вайбкодингом. Можно было держать в работе несколько задач параллельно, и это подкупало.

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

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

Правило инкапсуляции

С этого момента я стал делать отдельные блоки, обкладывать их тестами, и если блок стабильно давал нужный результат на разных кейсах, дальше не разбирал, как он устроен внутри. Он работает, он независим, он укладывается в нужное время: что еще от него нужно? Мы же не читаем исходники каждой DLL, которую подключаем в проект. Здесь работает тот же принцип.

До появления моделей с большим контекстным окном, способных прочитать значительную часть проекта за один проход, это решение сильно поднимало скорость. На ревью коллеги все равно интересовались, как оно устроено внутри и нельзя ли сделать иначе, но суть была в другом: если блок работает, трогать его без причины не нужно. В разработке в конечном счете решают не красота кода и не архитектура сама по себе. Решает то, сколько стоит поддержка и сколько денег приносит продукт. Если код пишется быстрее и требует меньше поддержки при росте, он полностью выполняет свою функцию. Приучить к этому команду получалось с переменным успехом.

От компонентов к фичам

С каждым новым поколением моделей масштаб задачи, которую можно доверить агенту, рос. Раньше это был компонент, теперь целая фича со связкой интеграционных тестов. CI/CD удалось заметно оптимизировать, а собственные плагины и системы для Unity стало выгоднее писать самим: адаптировать под себя чужие решения из стора вышло дороже.

При этом чистый вайбкодинг все так же перегружал QA, давал постоянные регрессы и рано или поздно заставлял лезть под капот проекта. Тогда я и пришел к ролевой ИИ‑разработке.

Ролевая система: архитектор, разработчик, публикатор

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

Архитектор не пишет код. Он получает описание фичи так, как если бы мы объясняли ее человеку, и на основе текущего состояния проекта готовит план разработки для продакшена.

Промпт архитектору

Ты архитектор. На основе текущего состояния проекта составляешь

план разработки продакшен уровня под описанную фичу.

Ты не пишешь код, а готовишь документ для разработки:

этапы, затрагиваемые файлы, контракты, риски.

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

Промпт разработчику

Ты сеньор разработчик. Идешь по намеченному плану,

вносишь правки и разрабатываешь фичи, строго следуя

контрактам и декларациям. После каждого этапа коротко

фиксируешь свои мысли и сомнения.

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

Промпт ответственного за публикацию

Ты отвечаешь за публикацию. Проверяешь тесты, e2e,

актуальность документации и бюджет изменений.

Готовишь отчет в трекере и мессенджере. Код не правишь,

только решаешь, можно публиковать или нет.

Раньше у меня этот чат просто писал файл с саммари для вставки в другие инструменты, сейчас делает то же самое через MCP, отправляя отчеты в таск‑трекер и мессенджеры.

Схема работы такая: по плану архитектора идет разработчик. После важного этапа или группы связанных изменений можно вернуться к архитектору и попросить оценить работу по дереву изменений. Он находит проблемы, оформляет их как коррективы, и они уходят обратно разработчику на доработку. Когда план закрыт и у архитектора нет замечаний, тестируем сами и передаем публикатору. Если все хорошо, отправляем.

Это ощутимо подняло качество и заодно расходы на подписки и API, но выхлоп того стоил.

Почему разработчик живет недолго

Самое важное правило здесь: чат‑разработчик — недолгоживущая сущность. Нельзя доводить его до суммаризации или даже приближения к переполнению контекста, и нельзя распылять его на разные задачи. Закрыли работу или логически связанный кусок задачи — смело открывайте нового разработчика. Иначе он начинает закапываться, путать строки и копаться не в тех местах.

По мере развития Cursor, Claude и Codex у каждого семейства моделей нашлись свои сильные кейсы, и со временем стало неэффективно держаться одного инструмента. Я пробовал автоматические системы, где агенты в песочнице сверяют друг друга без моего участия, и это правда освобождает время. Но чаще на практике использую обычное перекрестное копирование между чатами, просто потому что одновременно запущенных агентов и проектов слишком много, чтобы доверить всю цепочку автоматике.

Декларации и контракты до старта агентов

Отдельно от ролевой схемы важна вещь, которая меняет все: декларации, контракты и стандарты должны появиться до того, как вы наплодите агентов. По ходу дела их выстраивать уже поздно.

Если проект стартует с нуля, тут проще всего. Определяетесь со стеком, смотрите на актуальные решения и опыт похожих проектов, и составляете файлы CODEX, CLAUDE, AGENTS так, чтобы все они ссылались на один общий документ. В нем стек для бэкенда и фронта, границы ответственности, границы модулей, правила работы с зависимостями, требования к тестам, безопасности и обработке ошибок. Это тоже можно делать через агентов, и после настройки архитектору всегда есть с чем сверять прогресс.

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

Пример обычной функции поиска цели
public static float GetVisibleTargetDistance(
    Transform observer,
    Transform target,
    float radius,
    float fieldOfView)
{
    Vector3 toTarget = target.position - observer.position;
    float distance = toTarget.magnitude;

    if (distance > radius)
        return -1f;

    float angle = Vector3.Angle(observer.forward, toTarget);

    return angle <= fieldOfView * 0.5f
        ? distance
        : -1f;
}
Пример от Sonet 3 если позволить ему свободу
public static bool TryGetVisibleTargetDistance(
    Transform observer,
    Transform target,
    float radius,
    float fieldOfView,
    out float distance)
{
    distance = 0f;

    if (observer == null)
        return false;

    if (target == null)
        return false;

    if (!observer.gameObject.activeInHierarchy)
        return false;

    if (!target.gameObject.activeInHierarchy)
        return false;

    if (radius <= 0f)
        return false;

    if (fieldOfView <= 0f || fieldOfView > 360f)
        return false;

    distance = Vector3.Distance(
        observer.position,
        target.position);

    if (distance > radius)
    {
        distance = 0f;
        return false;
    }

    Vector3 direction =
        target.position - observer.position;

    if (direction.sqrMagnitude <= Mathf.Epsilon)
        return true;

    float angle = Vector3.Angle(
        observer.forward,
        direction);

    if (angle > fieldOfView * 0.5f)
    {
        distance = 0f;
        return false;
    }

    return true;
}

Простота как главный принцип

Если выбирать одно правило над всеми остальными, это будет простота. Любой код, компонент или продукт должен быть простым в использовании и в работе. Усложнить всегда успеете, а вот задача разработчика в том, чтобы этого не допустить. Тогда и разработка, и тестирование остаются в радость. В раскопки они уже не превращаются.

Это не вайб

Вайбкодинг заканчивается там, где начинается ответственность за результат. В этой схеме она есть с первого шага: за план отвечает архитектор, за код разработчик, за релиз публикатор, и никто из них не работает на ощущении «получилось красиво».

Вся эта схема не оставляет места расслаблению. Пока агенты работают в одном месте, вы одновременно в другом: на созвоне, в управлении, в другом проекте. Агенты крутятся постоянно, вы постоянно тестируете, ловите регресс, заставляете их писать тесты и оцениваете сложность решений.

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

Разрыв, за которым не угнаться

За нейросетями стоит огромный опыт человечества. Угнаться за ними в ручном кодинге невозможно, и разрыв будет только шире с каждым обновлением моделей.

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

Легко скатиться в громкое заявление «разработчики больше не нужны». Пока что ИИ требует участия человека, который задает волю и рамку задачи, и моя ролевая схема держится именно на этом. Но это не гарантия навсегда: зона, которую можно отдать агентам, растет, зона ручного контроля сужается. Рано или поздно человек может остаться в роли потребителя, тем, кто выбирает из готового и оценивает результат, примерно как сегодня никто не думает об ассемблере, компилируя на C#. Я в этом убежден.

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

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

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

Пока воля еще остается за вами. Вопрос в том, пользуетесь вы ей или просто ждете результата.