Вайбкодинг не падает. Он тихо врет
В начале августа я первый раз собрал приложение, не написав ни строчки кода. До этого баловался с html и css, немного смотрел swift, но программистом никогда не был. ИТ-бэкграунд есть: семь лет управляю разработкой, понимаю, как устроены проекты, могу объяснить, что должно получиться, слово «миграция» меня не пугает.
Прошло меньше месяца, и за это время получилось две вещи: внутренний календарь отпусков и ORDER (order-sky.com) — приложение, где человек прокачивает себя как персонажа в ролевой игре, но опыт дают реальные действия. 143 коммита за 19 дней, своя база, движок опыта, 216 тестов, сервер, домен, установка на телефон иконкой.
Дальше не про то, что теперь каждый может всё. Про то, где меня обманывали и как я научился это ловить.
Календарь отпусков и первое впечатление
Я не решал скучную задачу, я просто решил попробовать новое. Взял Lovable и написал: сделай календарь отпусков. Плюс пара фич отдельными предложениями. Два-три абзаца текста, минут пятнадцать ожидания.
Дальше меня накрыло. На выходе оказалось готовое рабочее решение с админкой: кто сейчас не на месте, согласование заявки, дашборд с теми, кто давно не отдыхал и кто вообще не запланировал отпуск на год. Командой такое делалось бы месяцев шесть.
Всё это уместилось в бесплатные кредиты: Lovable даёт пять штук в день, я тратил их все, несколько дней подряд, минут по пятнадцать. Ни разу не открыл ничего похожего на редактор кода.
Пишешь абзац текста, получаешь экран. Не «примерно такой», а тот самый. Правки тоже словами.
Так продолжалось, пока проект был маленьким.
Где я упёрся в потолок
Первое: правки начали ломать соседние. Меняешь одно, уезжает другое, и находишь ты это случайно через несколько дней, когда открываешь экран по другому поводу.
Второе: я не владел решениями. Как хранятся данные, кто к ним имеет доступ, что будет, когда людей станет не десять, а сто — за меня решил конструктор. Честно скажу, я забил на правило начинать с архитектуры. Я не проектировал, я исследовал, мне было интересно, что вообще получится.
Вывод, который держу до сих пор: конструктор отлично закрывает инструмент для своих и плохо закрывает продукт. Мне тут недавно сказали фразу, которая всё объясняет: ИИ крутой инструмент, но если продукт говно, то таким он и останется. Продукт делает человек.
Дальше Claude Code
Про Claude я слышал со всех сторон и решил попробовать сразу после Lovable. Забегая вперёд, результатом я остался впечатлён, хотя ждал, что будет намного круче.
Тут модель работает прямо в папке с проектом: читает файлы, пишет файлы, запускает тесты, коммитит. Первое ощущение — тебе выдали команду разработчиков, которая не спорит, не устаёт и не уходит в отпуск. За два вечера появился каркас: база, движок опыта, авторизация.
Потом начались танцы с бубном.
Оно не падает, оно считает неправильно
Как-то вечером я сел пересчитывать руками, сколько приложение начислило мне за неделю. Нашлось пять расхождений:
- Очередь записей, ждавших сети, выбрасывала запись при любой ошибке сервера. Данные молча исчезали.
- Повторное нажатие «Завершить» начисляло опыт второй раз.
- Дата личного рекорда бралась от другой записи.
- «Сегодня» считалось по часовому поясу сервера, а не телефона: после полуночи запись уезжала во вчера.
- Кое-где разъезжались кнопки, хотя html-файл я отдал готовый.
Естественно, Клод не придёт и не скажет, что он где-то что-то поломал. И если ты прямо не попросил его проверять числа, жаловаться потом не на что.
Что я понял про генерацию кода: у обычной ошибки есть стектрейс, а у этой нет ничего. Ошибка выглядит как цифра на двенадцать больше правильной, и ты живёшь с ней, пока однажды не пересчитаешь вручную.
Модель пишет код, который выглядит правильным, и в девяти случаях из десяти он правильный (насколько это возможно). Десятый ты найдёшь сам или не найдёшь никогда.
Оно тянет к тому, как принято
ORDER считает, как реальные действия растят характеристики. Сходил в зал — Сила. Прочитал главу — Интеллект.
Клод сделал привязку жёсткой и по названию. Пишешь «Чтение» — получаешь Интеллект и Самодисциплину, и всё. Читаешь книгу про финансы, хочешь отметить Финансы, а такой возможности нет. Он решил за пользователя, что чтение качает только эти навыки.
Пришлось разбирать и делать систему гибкой: связь действия с характеристикой человек задаёт сам, когда заводит практику.
Та же история вышла с дизайном. В начале Клод рисовал витрувианских человечков из палочек, и это выглядело как программа из девяностых. Причём сказать «дизайн говно» бесполезно, он не понимает. Работает только объяснение: не цепляет взгляд, скучно, будто мы вернулись в девяностые, теряется идея и смысл приложения. Через много таких заходов картинка сдвинулась.
Модель тянет к среднему по индустрии, это её работа: она обучена на том, как принято. Всё, чем твой продукт отличается от принятого, придётся вычищать руками и не по одному разу.
Оно собирает по смыслу
У меня были отрисованы 25 экранов в html, с точными отступами. Прошу перенести один в приложение, получаю экран, который выглядит правдоподобно: те же блоки, похожие подписи, всё вроде на месте.
Порядок другой, подписи пересказаны своими словами, половина мелочей потеряна. Просто потому что он по какой-то причине решил за меня, что так лучше.
Сломанный экран виден сразу. Правдоподобный проходит проверку взглядом, а расхождения всплывают потом по одному в неделю. Так вышло с разделом «Летопись», переделывать пришлось целиком.
Что помогло
Четыре вещи, каждая выросла из ошибки выше.
Файл правил рядом с проектом. В корне лежит CLAUDE.md, модель читает его в начале каждой сессии. Там не «пиши хороший код», а конкретные запреты: не привязывать характеристику к практике по названию, не собирать экран по смыслу, переносить построчно из макета, не хвалить и не укорять пользователя, не вводить хардкод цветов и шрифтов. Каждый пункт — это переделка, которая уже случилась.
Спецификация до кода. Прежде чем писать счётную часть, я описал формулы отдельным документом: как считается опыт, что такое дневная норма, как работает затухание при перевыполнении, где пороги уровней.
Смешное следствие: документ поймал ошибку в самом себе. В нём был контрольный пример, «уровень 10 при 585 опыта», а код по формуле из этого же документа посчитал 472,5. Прав оказался код: пример был написан от старого порога и с тех пор так и лежал. Не опиши я формулы заранее, просто поверил бы цифре на экране.
Отдельный md с правилами тестирования. Тестов набралось 216, и это не потому, что я их люблю — до этого проекта я не написал ни одного. Просто после этих расхождений стало понятно, что проверять числа глазами бесполезно. В файле лежит, что и как проверяется: любая формула, любое начисление, любая дата. Модель сверяется с ним, когда пишет новое.
Бэклог того, что уже сделано. Один коммит — один законченный кусок, сообщения по-русски и в повелительном наклонении: «добавь затухание по звезде», «почини чёрный экран в кабинете». Когда работаешь урывками по вечерам, это единственный способ через три дня вспомнить, на чём остановился и что уже закрыто. Ну и конечно же гитхаб: если не знаете, что это, потратьте вечер и разберитесь.
Что в итоге
Пять ветвей, двадцать характеристик, карта неба вместо профиля. Каждая звезда зажигается первой записью по ней: пока не сделал ни одного действия, которое её кормит, она спит.
Вот что я весь август отбивал у собственной модели:
- приложение не решает за тебя, что растит твоя практика, ты задаёшь это сам;
- цифру нельзя накрутить: дневная норма считается по твоим же последним записям, второй заход за день даёт меньше первого, и об этом написано прямо на экране, а не спрятано в формуле;
- оно не хвалит и не укоряет, в интерфейсе нет ни одного восклицательного знака: не «Молодец, серия 5 дней», а «последнее наблюдение: 3 августа»;
- замеры тела шифруются на телефоне, сервер их не читает.
Сколько это стоило
19 дней вечерами и на выходных, 143 коммита.
Подписка Claude Pro, домен за 800 рублей в год, облачный сервер за 1500 рублей в месяц. Меньше пяти тысяч в месяц, и это всё. Календарь не стоил ничего вообще.
Мелочь для тех, кто в России. Клод сразу предложил Fly.io и Railway, а им нужна иностранная карта. Решилось это просто: я спросил, а давай другие варианты. Взял российский облачный сервер и Caddy, который сам получает и продлевает сертификат. Забытое продление — самый частый способ уронить свой проект через три месяца после запуска, такую заботу лучше отдать программе.
Отсюда совет: не бойтесь задавать вопросы, даже если они кажутся вам глупыми.
Что я думаю про вайбкодинг сейчас
Барьер входа упал. То, что раньше означало «найми людей и жди», я собрал за три недели по вечерам.
Но решать за меня никто не стал. Если посмотреть, что я делал весь август, окажется, что кода я не писал вообще: я принимал решения и ловил враньё. Что считать честным, а что накруткой. Задавать связь руками или отдать модели. Каждое из этих решений она выполняла мгновенно и без возражений, включая неверные.
Если у вас кривые руки и нет базового понимания, как устроены продукты и ИТ, будет тяжело. Возможно, но тяжело. ИИ пока не панацея.
Хотя может я говорю полнейший бред и просто что-то делаю не так.
Если у вас есть опыт, как избежать ошибок (какими они бывают) или улучшить работу, дайте знать, буду рад попробовать/узнать. Всем добра и продуктов.