Я только что выполнил свой первый вайбкодинг-заказ по разработке небольшого интернет-магазина. Изначально задача выглядела понятной: каталог, корзина, админка, оплата, деплой. Казалось, что это несложный 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 ГБ памяти справляется с текущим объемом нагрузки. Но это скорее наблюдение, чем реальная уверенность в запасе прочности.

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

Что я вынес из этого проекта

Как видите, даже маленький веб-магазин очень быстро обрастает внешними зависимостями: доменом, платежной интеграцией, доступами, требованиями к безопасности и т.д. Каждая такая деталь по отдельности не выглядит критичной, но именно они и съедают сроки.

Спасибо, что дочитали до конца.
Надеюсь, этот список поможет вам (и мне) не наступить на те же грабли.