AI написал весь проект за ночь. Почему утром его пришлось удалить?
В 23:40 я сформулировал задачу в чат: «сделай сервис учёта задач с авторизацией, канбан-доской и уведомлениями».
Нажал Enter и лёг спать.
AI работал всю ночь. Без пауз. Генерировал модели, роуты, компоненты, миграции. К девяти утра в репозитории лежало 340 файлов. Приложение открывалось. Кнопки нажимались. Демо-сценарий - регистрация, создание задачи, перемещение по доске - проходил идеально.
Я попытался добавить вторую роль пользователя. И выяснил, что права доступа зашиты добавлены прямо в компоненты интерфейса. Тесты не запускались - их тупо не было. В одном месте статус задачи хранился строкой, в другом - числовым кодом. Две части проекта работали с одной сущностью по-разному.
Я прикинул, сколько времени уйдёт на то, чтобы разобраться в этой каше. И решил: проще снести всё и написать заново, чем править то, что там нагромоздилось.
Это не история про «AI плохо пишет код». Нет, модель справляется отлично - на коротких отрезках.
Но когда ей дают задачу масштаба целого проекта и уходят спать, происходит закономерная вещь: она генерирует правдоподобный код, который держится на честном слове.
Вот что я понял, разбирая этот ночной кошмар.
Модель не держит в голове весь проект. У неё есть ограничение по контексту. Когда проект вырастает за пределы одного запроса, она начинает опираться на суммаризацию, додумывать, терять связь с тем, что написано в других файлах. Именно поэтому статус задачи в одном модуле оказался строкой, а в другом - числом. Модель генерировала вторую часть, уже не видя точного определения первой.
Промпт был слишком широким. «Сделай приложение» - это как сказать стажёру «построй дом». Без чертежей, без материалов, без плана. Модель заполняет пробелы сама. И делает это так, как ей удобно, а не так, как нужно мне.
Не было промежуточных проверок. Если бы я проснулся в три часа ночи и глянул, что там насоздавалось, я бы остановил этот процесс. Но я спал. А ошибки накапливались лавинообразно - каждое следующее решение строилось поверх предыдущего, и к утру исправлять было уже нечего.
Тесты отсутствовали. Я не просил их писать. Мне нужен был результат, а не качество. И я его получил - фасад, за которым руины.
Сейчас я делаю иначе.
Я больше не прошу AI написать проект целиком. Я разбиваю задачу на куски, которые модель может переварить за один раз. И после каждого шага проверяю, что получилось.
Вот как теперь выглядит та же самая задача:
Шаг 1. Спроектируй схему базы данных для задач и пользователей с ролями. Только схема, без кода. Статус задачи - строка из фиксированного enum.
Шаг 2. Реализуй модели и миграции по этой схеме.
Шаг 3. Напиши REST API для работы с задачами. Покрой базовыми тестами.
Шаг 4. Добавь middleware проверки прав на уровне API, а не в интерфейсе.
Шаг 5. Реализуй канбан-доску поверх готового API.
После каждого шага - коммит. После каждого коммита - быстрый прогон тестов. Если четвёртый шаг сломался, я откатываюсь к третьему и переделываю, а не переписываю всё приложение.
Я заметил ещё одну вещь.
Когда формулируешь правила для AI, начинаешь лучше понимать собственный проект. Если не можешь чётко сказать, где должна лежать бизнес-логика или какой формат у статуса задачи - значит, в проекте уже есть проблемы. AI просто делает их видимыми.
Теперь у меня есть несколько железных правил.
Никаких запросов на весь проект целиком. Только модули.
Архитектура фиксируется до генерации - стек, структура папок, формат ключевых полей.
Тесты пишутся с первого модуля. Даже простые. Это единственный способ быстро увидеть, что сломалось.
Коммит после каждого стабильного шага. Без исключений.
Ревью кода, а не только результата в браузере. Работающий интерфейс ничего не гарантирует.
Если задача не помещается в контекст модели - дроблю дальше. Лучше десять маленьких итераций, чем одна большая ночь.
Недавно я попробовал ещё один эксперимент. Попросил модель объяснить сгенерированный код своими словами.
Знаете, что я услышал? Путаницу. Противоречия. Модель не могла связно описать, как её собственные модули взаимодействуют друг с другом. А если она сама не понимает, что написала - какой смысл доверять этому коду?
Я всё ещё использую AI для генерации. Каждый день. Но теперь я не оставляю его одного с большим проектом на всю ночь.
AI - отличный инструмент для отдельных модулей и итераций. Он может написать функцию, компонент, скрипт. Он может отрефакторить кусок кода по чёткому ТЗ. Он может предложить пять вариантов решения одной задачи, и я выберу лучший.
Но архитектуру он не спроектирует. И согласованность на всём проекте не удержит. За этим стоит следить мне.
Удалять утром приходится не код, написанный AI. Удалять приходится последствия моего собственного решения - одного слишком широкого запроса вечером.
Комментарии
Чтобы оставить комментарий, войдите в аккаунт.