Если коротко, то я взял первую фичу из бэклога — перевёрнутые карты Таро, на которые в поиске висит около 12.5 тысяч показов — и отдал её нейросети целиком, под ключ, по полному процессу STC: спека, консилиум, разбивка на шаги, деплой. От нуля до ста без меня, я только в конце дёрнул проверить. И в целом оно собралось и выкатилось, всё как надо, но самое интересное вскрылось не во время сборки, а после неё. Оказалось, что у меня в данных давно лежала системная дыра, про которую никто не думал, да ещё и прилетел целый вагон постфактум-фидбэка: кнопку не видно, карты вдруг на английском, а сам расклад выглядит скудно. Вот про это и расскажу честно, как было.
Почему вообще перевёрнутые карты, а не что-то другое
Тут было сразу две причины, и я их не люблю разводить по разным углам, потому что они работают вместе. Первая — банальный спрос: я давно собираю Wordstat по своей теме, и «перевёрнутые карты» вышли в бэклоге номером один, около 12.5 тысяч показов, а это не та цифра, которую можно проигнорировать, когда у тебя приложение про Таро. А вторая причина глубже, и я сам себе её проговорил примерно так: «А перевернутые карты не только потому что спрос есть а они же вроде как неотъемлемая часть таро». И ведь правда — в нормальном раскладе карта может лечь прямо или перевёрнуто, и значение от этого меняется чуть ли не на противоположное, так что без переворота это вообще не полноценное Таро, а половинка. То есть тут спрос и суть продукта совпали, а это редкий случай, когда не надо выбирать между «что хотят люди» и «что правильно».
Как я отдавал фичу нейросети под ключ
Команда была примерно такая, дословно: «делай перевернутые полный цикл. стс консилиум там и все по шагам от 0 до 100 без меня. меня в конце только дернешь. разоешения все даю». И вот это для меня было экспериментом, потому что обычно я держу руку на пульсе на каждом шаге, дёргаю агентов по очереди, смотрю, что они там наворотили, а тут я сознательно отпустил вожжи и дал нейросети пройти весь маршрут самой.
Если вы не в теме, что такое STC — это мой процесс разработки с ИИ, где сначала пишется спека (что вообще делаем и как поймём, что готово), потом по сложным решениям собирается консилиум из нескольких AI-экспертов, которые спорят между собой, дальше задача бьётся на атомарные шаги, и каждый шаг проходит через ревью, прежде чем попасть в коммит. По этому же процессу я недавно за неделю собрал телеграм-бота с нуля до прода, так что маршрут для меня уже обкатанный. Я к этому пришёл не от хорошей жизни, а потому что чистый вайбкодинг без рамок очень быстро превращается в свалку, где «готово» от модели и реально работающая фича — это две разные вселенные. Claude Code тут выступает не как джинн, который по одному запросу выдаёт лендинг, а как исполнитель, которого я оркестрирую по процессу, и разница тут огромная.
И в этот раз процесс отработал как должен: спека написалась, консилиум прошёл, шаги нарезались, механика выпадения карт легла на бэк, UX подтянулся, и всё это докатилось до прода в Telegram Mini App. На бумаге чистая победа — фичу собрал ИИ, я только разрешения раздавал. Но дальше начинается та часть, ради которой я вообще пишу эти build-log'и, а не пресс-релизы.
Дыра, которую увидели только когда полезли в историю
Самое неприятное вскрылось в данных, и это тот случай, когда фича, которую ты делаешь сегодня, спотыкается о решение, которое кто-то принял полгода назад не подумав. В моём приложении есть история раскладов, и каждый расклад там хранится как простой массив с ID карт — то есть мы знаем, какие карты выпали, но не знаем, как они легли, прямо или перевёрнуто. Раньше это было неважно, переворота-то не существовало. А теперь существует, и получается красивая ловушка: вы делаете расклад, видите перевёрнутую карту с её особым значением, а потом заходите в историю — и переворот не восстанавливается, потому что в данных его просто нет, ориентация никуда не записалась.
И вот это цепляет меня больше всего, потому что сама фича на свежем раскладе работает, демо выглядит отлично, ты выкатываешь и радуешься, а потом понимаешь, что половина пользовательского пути молча сломана. Чтобы починить нормально, надо расширять саму структуру хранения — добавлять ориентацию к каждой карте, а это уже не косметика, это лезть в данные и думать про то, что лежит в истории прямо сейчас. У меня уже была похожая история, когда цена жила сразу в нескольких местах и фронт с бэком разошлись — данные в неправильной форме всегда потом прилетают в самый неподходящий момент. Ни одна модель тебе про это заранее не крикнет, если ты сам не заложил это в спеку, и вот тут как раз граница между «ИИ собрал фичу» и «ИИ понял всю систему» — он собрал ровно то, что просили, а связку с историей надо было предусмотреть на этапе спеки, и это уже моя зона ответственности как того, кто оркестрирует.
Отдельно отмечу деталь, которая меня самого сначала смутила: карта дня у меня разыгрывается не локально, а через отдельный сервис, и она оказалась вне охвата перевёрнутых. То есть не везде, где есть карта, есть и переворот, и это нормально, просто надо держать в голове, что система состоит из кусков с разной логикой, а не из одного ровного слоя.
Постфактум-фидбэк: то, что не ловится ни тестами, ни ревью
Когда фича доехала до прода и я начал ей реально пользоваться, посыпались вещи, которые ни в спеке, ни в консилиуме, ни в ревью не всплывают, потому что они живут в ощущениях, а не в коде. Первое и самое смешное — кнопка переворота. Реакция была дословно такая: «Прикольно. Но кнопку переворота плохо видно. Надо выделить ее как то сильнее». Механика-то работает, перевернуть можно, но если пользователь не замечает, что вообще есть такая возможность — фичи как будто и нет, она существует только для тех, кто знает, где искать.
Второе — карты вдруг оказались на английском вместо русского. Это из тех багов, которые отдельно бесят, потому что вроде мелочь, но она моментально выдаёт, что что-то делалось на автомате и не докрутилось до конца под мой продукт. А кожаные разработчики, кстати, такого не лепят? не смешите меня, лепят и ещё как, просто у меня тут вместо человека нейросеть, и логика ровно та же — что не прописано явно, то и проседает.
И третье, самое тонкое — ощущение «скудного расклада», из-за которого перевёрнутость как будто теряется. Это уже не баг в привычном смысле, это про подачу: когда расклад визуально бедный, акцент на том, что карта легла перевёрнуто, просто не считывается, теряется в общей серости. И вот это чинится не строчкой кода, а тем, что надо садиться и думать про UX как про живую вещь, а не про галочку «фича есть».
Что я из этого вынес
Главный вывод простой и немного отрезвляющий: отдать нейросети фичу под ключ по процессу — это реально работает, и это сильно быстрее, чем сидеть над каждым шагом, спека → консилиум → шаги → прод действительно прошли без меня. Но «собрал и выкатил» и «фича живёт хорошо» — это всё ещё две разные точки, и расстояние между ними как раз в том, чего модель не видит: в накопленных решениях про структуру данных, в том, заметна ли кнопка, на каком языке текст, и в ощущении от продукта в целом. Я могу делегировать ИИ почти всё, что касается кода, но рамку, спеку и проверку живого опыта пока держу на себе, и похоже, что это и есть та граница, где я действительно нужен.
Сейчас в работе как раз доводка по всем трём пунктам плюс расширение структуры истории, чтобы переворот восстанавливался из старых раскладов, а не пропадал. Если интересно, как у меня вообще устроен этот процесс с фазами и ревьюерами, я про это писал отдельно в посте про STC и Guardian MCP, там как раз про то, как заставить AI-агента работать не по наитию, а по правилам. А пока вот и делайте выводы — даже когда нейросеть собирает фичу от нуля до ста сама, последний метр про то, живая ли она для пользователя, всё равно проходишь ногами.