В 2013 году мне казалось, что я отлично зарабатываю. Я уже около года фрилансил и получал что‑то порядка 100–120 тысяч рублей в месяц. Для того времени — очень неплохо.

В голове математика была простая: аренда квартиры — около 25к, еда — около 15к. Значит, живу примерно на 40–50к, а всё остальное — свободные деньги. Поэтому покупка машины в кредит казалась нормальной идеей. Проблема была только в том, что я считал очень оптимистично.

Я не учёл платную заочку. Не учёл лечение зубов, на которое как раз попал. И, конечно, не учёл, что машина — это не только ежемесячный платёж. Это ещё ОСАГО, ТО, постановка на учёт, бензин, резина и десятки мелких расходов, которые почему‑то не спрашивают, есть ли они в твоей финансовой модели.

А кредит под ~30% годовых довольно быстро превращает: «машину за 530 тысяч» в «миллион, который ты будешь выплачивать сильно дольше, чем планировал».

Тогда я впервые понял, что: «много зарабатывать» и «понимать свои деньги» — вообще не одно и то же.


Как Google Sheets превратилась в систему принятия решений

Сначала это была обычная Google‑таблица. Потом в ней появился план/факт, прогноз по месяцам, обязательные траты, сценарии крупных покупок и понимание кассовых разрывов.

И вот тут внезапно выяснилось, что самые неприятные расходы — не ежедневные. А те, про которые все забывают: налог на авто, отпуск, годовые подписки, обслуживание и любые платежи формата «раз в год, но зато больно». Один такой месяц мог спокойно развалить весь баланс, если заранее его не учитывать.

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

Но в какой‑то момент меня начала раздражать сама таблица. Любая новая категория — это правка формул. Любая реорганизация — риск случайно сломать суммаризацию.

А ошибку можно заметить сильно позже, когда в прогнозе внезапно появляется кассовый разрыв, которого «не должно было быть». И вот тут я решил: «Ладно. Сейчас AI всё быстро накодит».


И самое неприятное — интернет не врал

На тот момент я использовал Codex 5.2, GPT и spec‑kit. И первая версия действительно собралась за пару вечеров.

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

Правда, всё это работало только локально, на одном устройстве и с хранением данных прямо в браузере. Но после Google Sheets это всё равно ощущалось как магия.

Я тогда реально стал тем человеком из AI‑постов: «LLM меняют разработку». Потому что на этапе демки — они действительно её меняют. И вот это, как мне кажется, главный источник сегодняшнего AI‑вайбкодинга.

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


Local‑first оказался не фичей, а архитектурной проблемой

Изначально всё было просто: данные лежат локально в IndexedDB. Когда появился backend, самый очевидный путь был — переписать всё на server‑first. Но UX сразу становился хуже.

Финансовое приложение должно позволять быстро записать расход даже когда сеть плохая или backend лежит. Поэтому local‑first слой пришлось оставить.

В итоге получился гибрид: UI работает из IndexedDB, изменения складываются в outbox, sync worker отправляет typed mutations на backend, а backend валидирует изменения и возвращает server version.

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


В какой‑то момент внезапно появляются законы

И это был момент, когда пет‑проект внезапно начал превращаться в настоящий продукт. Потому что выяснилось, что я храню уже не просто «какие‑то JSON'ы».

У меня появился логин через Yandex ID, пользовательские профили, история операций, категории, бюджеты и данные, которые вполне можно связать с конкретным человеком.

И вот тут внезапно приходит неприятное осознание: «кажется, это уже персональные данные». Я изначально вообще не воспринимал приложение как что‑то, попадающее в эту область.

Казалось: «ну это же не банк и не госуслуги». Но по факту даже связка логина через Yandex ID, пользовательского профиля, истории действий, cookie, session‑данных и auth‑токенов уже начинает попадать в область вполне реальных требований законодательства.

И это очень меняет мышление. Потому что дальше ты начинаешь думать уже не только про фичи. А про удаление аккаунта, отзыв сессий, хранение токенов, права доступа, последствия утечки и восстановление доступа.

И это уже совсем другой тип задач. Потому что демка — это: «смотрите, приложение работает». Production — это: «что будет, если что‑то пойдёт не так?»


Самое опасное в LLM — они очень убедительно генерируют техдолг

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

Самый показательный пример был с мобильной версией. В какой‑то момент AI начал решать все задачи одинаково: «дописать ещё немного в тот же компонент». Так один из mobile screen‑контейнеров вырос до 10 537 строк. Внутри одновременно жили страницы, формы, фильтры, авторизация, синхронизация, финансовые расчёты и AI‑заглушки. UI при этом продолжал выглядеть нормально. Цена обнаружилась позже.

Любой визуальный фикс внезапно рисковал задеть бизнес‑логику, расчёты, синхронизацию или состояние экрана. В итоге пришлось выносить мобильные компоненты, разделять view‑model, отделять UI от расчётов и добавлять golden tests.

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


Production‑боль часто вообще не в коде

Часть проблем внезапно оказалась вообще не в приложении.

Например — Docker images. CI при каждом merge в main собирал и пушил API, migrations, frontend, backup job и backup‑check job. Сначала migration image был собран максимально «удобным способом» — вместе с Go toolchain. Он работал.

Но потом оказалось, что:

  • registry начинает быстро расти;

  • vulnerability scanning становится дорогим;

  • VM забивается Docker cache;

  • deploy начинает тормозить.

В итоге migration image пришлось отдельно ужимать: только runtime, только migration binary, только SQL и ничего лишнего. И это очень хорошо описывает разницу между: «LLM помогла собрать» и «production теперь нужно эксплуатировать годами».


Самая большая ошибка — начать полностью доверять модели

Первые успешные результаты очень быстро создают иллюзию контроля. Кажется: «ну всё, теперь AI реально пишет почти production‑ready код». А потом модель начинает уверенно утаскивать архитектуру в сторону. Самая неприятная часть: чтобы получить хороший технический результат, недостаточно просто написать: «сделай красиво».

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

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


AI внутри AI‑продукта оказался отдельной инженерной задачей

Самое ироничное: добавить AI в приложение оказалось неожиданно сложно. Я думал: «Сейчас скормлю модели финансовые данные — и она начнёт давать полезные советы». На практике сначала получались рекомендации уровня: «Постарайтесь меньше тратить». В какой‑то момент стало понятно, что AI‑слой — это вообще не: «отправим текст в модель».

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

Потому что «умный AI‑ассистент» без надёжного и проверенного источника данных очень быстро превращается в генератор уверенной финансовой ерунды.


AI меняет не только скорость. Он меняет ритм разработки

Самое забавное — проект не разрабатывался «полгода каждый день».

Если посмотреть на график коммитов, видно скорее серию коротких интенсивных спринтов с большими паузами между ними.

LLM действительно радикально ускоряют фазу реализации. Если у тебя есть инженерный опыт, понятное видение продукта и понимание, куда вообще движется система, то за неделю сейчас реально собрать MVP, на который раньше ушли бы месяцы. Но дальше начинается совсем другая история.

Production — это уже:

  • ограничения;

  • инварианты;

  • поддерживаемость;

  • UX;

  • sync;

  • rollback;

  • эксплуатация;

  • последствия архитектурных решений.

И именно здесь исчезает магия: «сделал SaaS за вечер».


И, кажется, AI делает разницу между инженерами только заметнее

Наверное, самое интересное изменение я начал замечать даже не в коде, а в людях. Я работаю техруком, и последнее время всё чаще думаю: «а как вообще теперь калибровать инженеров в эпоху LLM?»

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

LLM очень хорошо ускоряют реализацию. Но они почти не помогают с инженерными компромиссами, эксплуатацией, отладкой и пониманием последствий архитектурных решений. И, кажется, именно поэтому AI пока не «обнуляет» опыт и экспертизу. Скорее наоборот — делает разницу между уровнями заметнее.


Что я в итоге понял

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

Покупка машины казалась простой ровно до момента, когда появились: страховка, обслуживание, бензин, кредит, непредвиденные расходы. С AI примерно то же самое. Демка собирается быстро. Настоящая стоимость появляется позже: sync, rollback, техдолг, поддержка, production, последствия быстрых решений.

AI действительно радикально ускоряет старт разработки. Но демо и production — это всё ещё две разные вселенные. Хайповые истории не совсем врут. Сделать SaaS за вечер — реально. Просто между: «смотрите, оно работает» и «этим можно пользоваться каждый день» обычно находится ещё несколько месяцев инженерной работы.

И это именно та часть разработки, которую AI пока не отменил. Собственно, результат этого эксперимента можно посмотреть здесь: financehelperai.ru

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