Я только что выполнил свой первый вайбкодинг-заказ по разработке небольшого интернет-магазина. Изначально задача выглядела понятной: каталог, корзина, админка, оплата, деплой. Казалось, что это несложный CRUD-проект плюс дизайн по референсам заказчика.
В моем случае все началось с оценки: «три недели, а если пойдет хорошо, то и две». Но фактически проект занял месяц. Ниже я описываю 10 своих ошибок, из-за которых мой план разошелся с реальностью.
1. Разрабатывал только локально, на VirtualBox
Я установил виртуальную машину VirtualBox и вел всю разработку на ней. Это удобно: можно держать открытыми сколько угодно окон, не бояться что-то сломать и иметь полностью контролируемую среду.
Но мой VirtualBox не был доступен из внешнего интернета. Поэтому через несколько дней пришлось разворачивать staging-сервер на VPS для полноценного тестирования.
Пока для себя формулирую так: если проект маленький и завязан на внешние интеграции, staging нужно поднимать как можно раньше и использовать его не только для тестирования, но и как рабочую площадку для ИИ-агентов.
2. Слишком поздно занялся боевым доменом и сервером
Регистрацию домена и настройку боевого сервера я откладывал до последнего. Казалось логичным сначала закончить код, все протестировать и только потом выкатываться в прод.
Это решение оказалось ошибкой. В середине разработки понадобилось подключать онлайн-платежи, а банк запросил боевой домен. Пришлось срочно решать вопрос, но быстро это не получилось: домен нужно было регистрировать на заказчика, а он в этот момент был в отъезде. В результате работа встала на несколько дней.
Вывод простой: домен, сервер и базовая прод-инфраструктура должны появляться в самом начале проекта, тянуть с этим себе дороже.
3. Неправильно организовал доступ к хостингу
Я попросил заказчика самостоятельно зарегистрировать аккаунт у хостера и временно передать мне пароль, чтобы я настроил прод-сервер. Это тоже было плохим решением.
Не успел я довести настройки до конца, как клиент добавил 2FA по email. В итоге доступ пришлось восстанавливать через лишние согласования.
В следующий раз попрошу заказчика не передавать пароль, а сразу выдать мне отдельный доступ разработчика, если такая возможность есть у хостера.
4. Недооценил сложность интеграции с банком
Сама интеграция с банком оказалась не столько технически сложной, сколько медленной в организационном плане. Пришлось несколько раз звонить в поддержку, уточнять порядок подключения и ждать согласований. Вся история с доступом к онлайн-платежам растянулась больше чем на неделю.
Теперь я бы закладывал на такие интеграции значительно больше времени. И сразу просил бы заказчика добавить меня как разработчика во все банковские и платежные кабинеты, где это возможно.
5. Не определил процесс согласования дизайна
По ходу проекта я так и не пришел к окончательному ответу, что эффективнее:
либо сначала показывать заказчику сгенерированные макеты или референсные картинки;
либо сразу писать черновой код фронтэнда и показывать реальные экраны из браузера.
У обоих подходов есть недостатки.
Если согласовывать картинками, на старте это дешевле и быстрее. Но потом можно потратить много времени, пытаясь добиться точного соответствия между референсом и живым интерфейсом.
Если начать с чернового кода фронтэнда, а заказчик не примет дизайн, то переделка обойдется дороже.
Сейчас мне ближе такой компромисс: сначала быстрое визуальное согласование направления, а затем переход к рабочему прототипу в браузере, дизайн которого согласовываем уже окончательно.
6. Не проговорил с заказчиком реальную стоимость доработок
Мы с заказчиком заранее договорились, что после сдачи проекта любые мелкие доработки оплачиваются отдельно. Но на практике возникла проблема: пожелания были настолько мелкими, что просить за них деньги было как-то совсем неудобно.
Один раз я договорился вместо оплаты получить отзыв о работе. Но это скорее исключение, чем рабочая практика.
Я сделал вывод, что «мелких правок» не бывает. Даже минимальное изменение, состоящее из одной строки, в моем случае означает:
открыть проект и рабочую среду;
переключиться на актуальную ветку;
внести изменение;
проверить его локально;
проверить на staging;
отправить скриншот заказчику;
получить ОК на обновление;
выкатить обновление в прод.
На это в любом случае приходится тратить время. Поэтому заказчик должен заранее понимать: любой апдейт - это реальные трудозатраты.
7. Недостаточно подумал о безопасности
В этом проекте я отнесся к безопасности скорее как к опции "на потом", а не как к части базовой архитектуры. Тем не менее, простая связка логин-пароль для админки выглядит слишком слабым решением.
Усиление защиты почти всегда означает дополнительные работы, а значит, и рост бюджета. Но минимум, который в следующий раз я продумаю заранее, - это ограничение доступа, двухфакторная аутентификация и журналирование.
8. Переусложнил архитектуру
Я сделал магазин в двух вариантах: как обычный сайт и как Telegram Miniapp. Заказчику я представил это как преимущество. Но на практике это оказалось лишним усложнением.
Две платформы означают больше условий, больше развилок в логике, больше тестирования и больше точек отказа. Сейчас я бы так не делал. Для небольшого проекта разумнее выбирать что-то одно: либо обычный сайт, либо Miniapp.
С Telegram Miniapp есть и дополнительная проблема: для нормальной работы Telegram API по причине блокировок лучше использовать зарубежные серверы. Но здесь сразу возникает вопрос соответствия требованиям по хранению персональных данных. В результате архитектурное решение перестает быть чисто техническим и быстро упирается в юридические ограничения и сетевую доступность.
9. Столкнулся с юридическими рисками
Я реализовал авторизацию через Google, а потом вышел закон, который запрещает это в России. Теперь авторизацию, вероятно, придется переделывать.
Эта ситуация показала простую вещь: юридические ограничения могут влиять на работу ничуть не слабее, чем плохая архитектура или неверно выбранный стек.
10. Недостаточно вложился в нагрузочное тестирование
Пока мой сервер с 2 ГБ памяти справляется с текущим объемом нагрузки. Но это скорее наблюдение, чем реальная уверенность в запасе прочности.
Если проект предполагает рост, такие проверки нужно делать заранее, хотя бы на базовом уровне: определить узкие места, оценить поведение под пиками и понять, где находится предел текущей конфигурации.
Что я вынес из этого проекта
Как видите, даже маленький веб-магазин очень быстро обрастает внешними зависимостями: доменом, платежной интеграцией, доступами, требованиями к безопасности и т.д. Каждая такая деталь по отдельности не выглядит критичной, но именно они и съедают сроки.
Спасибо, что дочитали до конца.
Надеюсь, этот список поможет вам (и мне) не наступить на те же грабли.
Комментарии (5)

tarasovaksu
23.06.2026 10:59Спасибо за рассказ, прочитала прям с интересом. Всегда кажется, что небольшой проект сделать легко, а потом вылезает куча мелочей. Хорошо, что поделились своим опытом и ошибками. Думаю, многим это будет полезно.

andreymal
23.06.2026 10:59Но мой VirtualBox не был доступен из внешнего интернета.
Сделать его доступным вообще не проблема
банк запросил боевой домен.
Ну к боевому серверу это в общем-то не имеет отношения
Я попросил заказчика самостоятельно зарегистрировать аккаунт у хостера и временно передать мне пароль, чтобы я настроил прод-сервер.
Если имеется в виду именно нормальный сервер, а не какой-нибудь shared-хостинг и прочее такое убожество, то вроде достаточно просто закинуть SSH-ключ на сервер сразу после его покупки у хостера, а после этого про хостера можно забыть и ходить напрямую на сервер. Или что там у вас за сложные взаимоотношения?
- либо сначала показывать заказчику сгенерированные макеты или референсные картинки;
- либо сразу писать черновой код фронтэнда и показывать реальные экраны из браузера.Ну раз уж в тегах зачем-то стоит «вайбкодинг», то можно упомянуть, что клод умеет генерировать вроде неплохие макеты в html-коде (но стоит иметь в виду возможную нейрослопнутость)
Тем не менее, простая связка логин-пароль для админки выглядит слишком слабым решением.
«выглядит» ≠ является, не ставьте пароль 123456, не лепите бумажку с паролем на монитор, и всё будет хорошо
Xtray
Похоже, что не справляется..
(Secure Connection Failed и NS_ERROR_NET_EMPTY_RESPONSE)
hukka777 Автор
Спасибо, поправил кривую ссылку