← Журнал
Engineering practice

AI-кодинг не отменяет инженера: кто отвечает за архитектуру, тесты и production

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

Юрий Елисеев
53
AI-кодинг не отменяет инженера: кто отвечает за архитектуру, тесты и production
Содержание статьи9
Три часа ночи. Телефон. Клиент. Платежи не проходят. Сорок минут уже. Открываю ноутбук. Логи чистые. Тесты зелёные — я сам прогонял их вечером. Сорок семь тестов, покрытие 92%. Модуль биллинга писал агент, я проверял, всё сходилось.

А платежи не проходят.

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

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

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

Где помощник вывозит по-настоящему

Начну с хорошего. Врать не буду — ускоряет.

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

Рутина. Миграции. Рефакторинг однотипных мест. Обвязка API. Конфиги. То, что раньше съедало день, сейчас занимает час. Чтоб я так жил, если преувеличиваю.

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

Тесты. Не все, но покрытие на очевидные сценарии, это да. Крайние случаи, которые я бы забыл, агент часто вспоминает сам.

Список приличный. За эти четыре пункта я готов простить AI-кодингу многое.

Но дальше начинается то, о чём на демо не рассказывают.

Ловушка скорости

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

Скорость опьяняет.

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

Это опасное чувство. Оно приходит к каждому. И оно же потом дороже всего обходится.

Потому что скорость — это не то же самое, что качество. Быстро написать код и быстро построить продукт — две разные вещи. Первое AI умеет. Второе — нет.

Где заканчивается ускорение

Слушайте внимательно. Это главное.

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

Пример из практики. Агент предложил архитектуру: монолит, фоновые задачи в том же процессе. Логично? Вполне. Быстро? Ещё бы. Мы выпустили бы MVP за неделю.

Я отказался.

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

Мы потеряли неделю на старте. Сэкономили два месяца потом.

Это не история про «AI плохой, человек хороший». Это разница между оптимизацией сегодня и архитектурой на годы. Агент не видит горизонт. Он видит задачу, которую вы перед ним поставили. Поставили неверно — он не виноват. Виноват тот, кто поставил.

Тесты, которые всегда зелёные

Отдельный разговор про тесты. Здесь у AI-кодинга есть коварное свойство.

Он пишет тесты, которые проходят. Звучит как комплимент. На самом деле — диагноз.

Тест, который всегда зелёный, часто проверяет не то, что нужно. Он проверяет, что код делает то, что код делает. А не то, что он должен делать по замыслу.

История из той самой ночи. Сорок семь тестов. Покрытие 92%. Все зелёные. Красиво.

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

С тех пор правило простое. AI пишет тесты — я пишу сценарии для тестов. Каждый тест на крайний случай — это не про покрытие. Это про вопрос: что произойдёт, когда всё пойдёт не так? Агент этот вопрос за вас не задаст. У него нет опыта, из которого такой вопрос берётся.

Опыт — это единственное, что не делегируется.

Production: где делегирование заканчивается

Здесь спорить не о чем.

Production — территория, где AI-кодинг замолкает. Не потому что не умеет. А потому что за последствия отвечает человек.

Когда в три часа ночи падает сервис, звонят вам, а не модели. Когда клиент теряет данные, судятся с вами, а не с агентом. Когда счёт за инфраструктуру внезапно вырос в десять раз, объясняться будете вы, а не промпт.

Тут важно понять одну вещь. AI не отменяет ответственность. Он её концентрирует.

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

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

Кто же всё-таки отвечает

Вернёмся к вопросу, который мне задали год назад: зачем я нужен, если AI пишет код быстрее?

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

Это не громкие слова про ценность человека. Это разделение труда. Агент — исполнитель. Инженер — тот, кто ставит задачу, выбирает из вариантов, проверяет, отвечает и, если надо, переделывает.

Разница видна не на демо. Она видна через полгода — когда система живёт, растёт и не разваливается.

Развязка

AI-кодинг никуда не денется. Он будет становиться лучше, быстрее, умнее. И это отлично.

Но чем мощнее инструмент, тем дороже ошибка того, кто им управляет.

Раньше инженер стоил дорого, потому что умел писать код. Теперь — потому что умеет отвечать за результат. Разница тонкая, но именно она отличает человека, который «пользуется AI», от того, кто строит продукты.

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

Глоссарий терминов

  • AI-кодинг — практика разработки с активным использованием AI-инструментов генерации кода.
  • Вайб-кодинг (vibe coding) — подход, при котором человек задаёт направление, а модель пишет значительную часть кода.
  • AI-агент — система на основе модели, способная выполнять задачи автономно: писать код, вызывать инструменты, принимать решения в заданных рамках.
  • Инженер — специалист, отвечающий за архитектуру, качество, тесты и эксплуатацию системы, независимо от того, кто написал код.
  • Архитектура — структура системы: компоненты, их связи, распределение ответственности и границы.
  • Production (прод) — рабочая среда, где система используется реальными пользователями.
  • Тестирование — процесс проверки системы на соответствие требованиям и устойчивость к ошибкам.
  • Покрытие тестами (test coverage) — доля кода, проверяемая автоматическими тестами. Не гарантирует качества само по себе.
  • Юнит-тест — тест отдельного модуля или функции в изоляции.
  • Интеграционный тест — тест взаимодействия нескольких компонентов системы.
  • Регрессионный тест — тест, проверяющий, что новые изменения не сломали ранее работавшее поведение.
  • Идемпотентность — свойство операции давать один и тот же результат при повторном выполнении.
  • Вебхук — уведомление, которое внешняя система отправляет на ваш сервис при наступлении события.
  • Крайний случай (edge case) — редкая, но возможная ситуация, которую легко пропустить при проектировании и тестировании.
  • Код-ревью — проверка кода другим специалистом до попадания в основную ветку.
  • Отладка (debugging) — процесс поиска и устранения причин ошибок в системе.
  • Инцидент — событие, приведшее к сбою или деградации системы в production.
  • Ответственность за production — обязанность инженера отвечать за работу системы у реальных пользователей.
  • Автоматизация — замена ручных действий программными процессами: сборка, тесты, деплой, мониторинг.
  • Технический долг — накопленные компромиссы, замедляющие развитие и требующие переделок.
  • LLM (Large Language Model) — большая языковая модель, основа современных генеративных AI-систем.

С уважением,

Юрий Елисеев

Архитектор AI-систем · Full-Stack Product Engineer

Сотрудничество

Нужен проект любой сложности?

Обсудим идею, продукт, AI-систему или сложную техническую задачу и определим реалистичный первый шаг.

Написать заявку