ИИ написал. Никто не понимает. Трогать страшно

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

Ключевое слово — «кажется». Именно оно отделяет готовый код от кода, который готов до первого бага в проде

Ключевое слово — «кажется». Именно оно отделяет готовый код от кода, который готов до первого бага в проде

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

Меня зовут Артём Герасимов, я владелец продукта SimpleOne SDLC. Мы уже писали про технический долг и про то, как ИИ меняет жизнь разработчиков — и не всегда в лучшую сторону.

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

Отдельную благодарность за помощь в написании статьи выражаю автору SimpleOne Панфиловой Яне.

Это не технический долг. Хотя похоже

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

С ИИ-долгом история формально та же: торопимся, выпускаем, не думаем. Только виноватый другой. Точнее — его нет :)

Потому что технически команда сделала всё правильно: взяла инструмент, получила результат, сдала задачу. Просто никто не проверил, что именно этот инструмент написал.

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

ИИ не стесняется. Если сказать ему «сделай быстро» — он сделает быстро. Но плохо. Ровно настолько плохо, насколько ему позволили.

Почему это не видно сразу

Главная ловушка ИИ-долга — он долго не проявляется. Задачи закрываются, метрики зелёные, velocity растёт. Никаких тревожных сигналов. Момент истины наступает позже, когда вдруг нужно модифицировать то, что ИИ написал три месяца назад.

Я как-то проверил это на практике, просто из любопытства. Попросил ИИ реализовать фичу. Он реализовал и сообщил, что всё готово. Я спросил: «А что бы ты ещё сделал?» Он нашёл что улучшить. Я спросил ещё раз — нашёл ещё. И так пять-шесть итераций подряд, пока наконец не ответил что-то вроде «ладно, кажется, теперь всё».

Ключевое слово — «кажется»

Это значит, что код, который вам сдали как «готовый», в момент сдачи содержал баги, которые сам же ИИ потом и нашёл — просто потому что его спросили. А если бы не спросили, так бы и ушло в прод. Именно так и копится ИИ-долг: незаметно, задача за задачей, спринт за спринтом, а потом разработчик превращается в уборщика этих косяков — об этом писали на Хабре тоже.

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

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

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

Вот почему установка «я написал за пять минут, значит, и перепишу за десять» — это самообман. Перепишете. Только не за десять минут, и не вы.

Это старая история, просто на другой скорости

Есть паттерн, который повторяется в истории разработки раз за разом — и понимание этого помогает не паниковать, но и не расслабляться.

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

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

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

ИИ-долг — не новая проблема. Это та же проблема, что всегда, просто темп её накопления вырос на порядок.

Что же делать?

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

Первый вариант — использовать ИИ только как справочную систему

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

У нас был конкретный кейс: мы проводили исследование графовых баз данных и выбирали, какую внедрять. Одна из кандидатур — Memgraph. У них документация была подключена к ИИ-ассистенту ещё три года назад, и настроена она действительно хорошо. Мы разобрались с Memgraph, написали тестовый подход и провели нагрузочное тестирование за один день. Аналогичную по сложности базу данных без такой поддержки мы разбирали больше пяти дней — документация была непонятной, структурированной поддержки не было, вопросы некуда задать.

Разница колоссальная и очень наглядная.

В эту же логику вписываются MCP-серверы — это протокол, который позволяет ИИ обращаться к актуальной документации в реальном времени, а не опираться на то, что было в обучающей выборке год назад. Мы работали с PowerSync, решением для синхронизации локальных баз данных в браузере, это достаточно нишевый продукт. Документация обновляется редко, поэтому ИИ не знал, как работать с последней версией, и генерировал код на основе устаревших данных. Команда PowerSync решила это просто: написала собственный MCP-сервер, к которому ИИ обращается напрямую и получает актуальную информацию.

Результат — рабочий код без галлюцинаций.

Второй вариант — внедрить ИИ на полный цикл разработки, но делать это осознанно

Здесь два пути: либо выстроить нормальное ревью каждой строчки, которую написал ИИ — и нанять людей, которые будут это делать, либо осознанно выпускать на свой страх и риск. Второй путь звучит безрассудно, но он реален — при условии, что вы понимаете риски. Просить ИИ проверить самого себя — это 50 на 50, и история с OpenClaw это подтверждает. Иногда он найдёт что-то важное, чаще скажет «всё отлично» и окажется неправ.

Третий вариант — использовать ИИ как ассистента при разработке, а не как замену разработчику

Он помогает думать над сложной функциональностью, предлагает подходы, ускоряет мозговой штурм. Но финальное решение — за человеком, и человек понимает каждую строчку, которая идёт в прод.

Панель разработчика в SimpleOne SDLC: merge-реквесты, коммиты и ветки прямо в карточке задачи — и кнопка «Запустить ИИ-код ревью» там же. Human-in-the-loop, не выходя из системы

Панель разработчика в SimpleOne SDLC: merge-реквесты, коммиты и ветки прямо в карточке задачи — и кнопка «Запустить ИИ-код ревью» там же. Human-in-the-loop, не выходя из системы

Где мы оказались

Мы пришли к третьему варианту с элементами первого. ИИ помогает нам разбираться в документации и думать над сложными кейсами. Заменять разработчика мы не стали — и дело не в консерватизме.

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

Меня в этой ситуации больше всего удивляет вот что: всё, о чём я написал, давно очевидно тем, кто пишет код. Но на уровне принятия решений эту проблему почти никто не называет своим именем. Velocity растёт — значит, всё хорошо. Сколько ИИ-долга накопилось за этим velocity — никто не считает. И не считает ровно до того момента, когда трогает модуль, написанный три месяца назад.

***

Как у вас устроена работа с ИИ в команде? И приходилось ли вам сталкиваться с тем, что разобраться в ИИ-коде или исправить его оказывалось дороже, чем написать заново?

Автор: SimpleOne_it

Источник

Оставить комментарий