Я не искал спасательные проекты. Они нашли меня сами — три фаундера за 18 месяцев, каждый с одной и той же историей: «Мы наняли кого-то дешёвого, не сработало, теперь нужно починить».
Этот пост — не о том, чтобы стыдить дешёвых разработчиков. Он о том, чтобы сделать математику видимой. У каждого спасённого проекта был бумажный след: первоначальная цена, потраченные часы, стоимость переделки. Когда вы ставите цифры рядом, «экономия» исчезает.
Все три проекта анонимизированы. Цифры реальные.
Проект 1: интернет-магазин, который не выдерживал 50 заказов
Первоначальный скоуп: Кастомный сторфронт в стиле Shopify для нишевого продуктового бренда. Каталог товаров, корзина, Stripe-чекаут, панель управления заказами.
Первоначальный разработчик: Фрилансер с маркетплейса. €3,500 фиксированная цена. Сдал за 6 недель.
Что пошло не так:
Сайт выглядел нормально с 5 товарами. При 50 товарах страница каталога грузилась 11 секунд — разработчик загружал все товары со всеми картинками при каждом запросе, без пагинации, без кеширования. Корзина использовала localStorage без серверной валидации, так что покупатели могли менять цены, редактируя хранилище браузера. Stripe-интеграция была только в тест-моде — разработчик никогда не переключал на продакшн и не знал, как обрабатывать вебхуки.
Что я нашёл на аудите (8 часов, €640):
- Нет серверной валидации корзины — цены были только на клиенте
- Stripe webhooks не реализованы — подтверждение заказа зависело от редиректа, который ломается, если пользователь закрывает вкладку
- Нет индексов в базе данных — 50 товаров, но запросы сканировали всю таблицу
- Нет оптимизации изображений — 4MB фото товаров отдавались как есть
- Админ-панель — один React-компонент на 2,000 строк
- Нет мониторинга ошибок, нет логирования, нет способа узнать, когда что-то ломается
Переделка (62 часа, €4,960):
Я не стал патчить. Проблема безопасности корзины и отсутствие обработки вебхуков означали, что платёжный флоу был фундаментально сломан. Я пересобрал сторфронт на Next.js с корректным серверным управлением корзиной, Stripe webhooks, оптимизацией изображений и пагинацией.
Итоговая стоимость для фаундера:
| Статья | Стоимость |
|---|---|
| Первоначальный разработчик | €3,500 |
| 3 месяца упущенных продаж (сломанный чекаут) | ~€8,000 (оценка фаундера) |
| Мой аудит | €640 |
| Моя переделка | €4,960 |
| Итого | ~€17,100 |
Нормальная сборка с нуля обошлась бы в €7K–€9K. «Дешёвый» вариант стоил почти вдвое — плюс 3 месяца сломанного магазина.
Проект 2: SaaS, который утёк клиентские данные
Первоначальный скоуп: Мультитенантный SaaS для консалтинговой фирмы. Клиентский портал, загрузка документов, управление командой, базовая отчётность.
Первоначальный разработчик: Племянник друга, который «знает React». €2,000 заплачено неформально за 4 месяца.
Что пошло не так:
Мультитенантности не было. Каждый пользователь мог видеть данные каждого другого пользователя, просто изменив ID в URL. Разработчик собрал одно-пользовательское приложение и предположил, что «права добавим потом». Загруженные документы шли в публичный S3-бакет — любой человек с URL мог получить доступ к любому файлу. Пароли хранились в открытом виде в базе данных.
Фаундер узнал об этом, когда клиент позвонил и сказал: «Я вижу чужие документы».
Что я нашёл на аудите (6 часов, €480):
- Нет middleware авторизации — каждый API-роут был публично доступен
- Пароли в открытом виде (не хешированы, даже не солёны)
- S3-бакет с публичным чтением — каждый загруженный документ доступен по URL
- Нет санитизации ввода — SQL-инъекция возможна на поисковом эндпоинте
- Нет принудительного HTTPS на API
- React-приложение — ejected
create-react-appс 847 npm-уязвимостями
Переделка (78 часов, €6,240):
Это была экстренная ситуация с безопасностью. Я немедленно снял сайт, уведомил фаундера об утечке данных и пересобрал с нуля. Next.js с корректной авторизацией (Auth.js), row-level security в Postgres, приватный S3 с подписанными URL, валидация ввода на каждом эндпоинте.
Итоговая стоимость для фаундера:
| Статья | Стоимость |
|---|---|
| Первоначальный разработчик | €2,000 |
| 2 недели простоя при переделке | ~€4,000 (упущенный биллинг клиентов) |
| Юридическая консультация по утечке данных | €1,200 |
| Мой аудит | €480 |
| Моя переделка | €6,240 |
| Итого | ~€13,920 |
Нормальная сборка: €8K–€11K. «Дешёвый» вариант обошёлся дороже, раскрыл клиентские данные и едва не убил отношения с крупнейшим аккаунтом.
Проект 3: мобильное приложение, которое не прошло ревью в App Store
Первоначальный скоуп: React Native приложение-компаньон для мероприятий. Показ билетов, QR-коды, пуш-уведомления, календарь мероприятий.
Первоначальный разработчик: Агентство из страны с низкой стоимостью. €5,000. Сдали «рабочий» билд за 10 недель.
Что пошло не так:
Приложение работало в симуляторе, но падало на реальных устройствах. Разработчик никогда не тестировал на физическом оборудовании. Пуш-уведомления были захардкожены на один токен устройства (телефон разработчика). QR-код был статической картинкой, встроенной в бандл приложения — он не подтягивал реальные данные билетов.
Apple отклонил приложение три раза: один раз за падение при запуске (отсутствующие entitlements), один раз за плейсхолдер-контент (разработчик оставил «Lorem ipsum» на экране настроек), и один раз за несоответствие функционала описанию (QR-коды не работали).
После трёх отклонений за 6 недель фаундер пришёл ко мне.
Что я нашёл на аудите (4 часа, €320):
- Приложение падало на iOS 17 — разработчик собирал только под iOS 16
- Реализация пуш-уведомлений нерабочая — один захардкоженный токен
- QR-код — статический PNG, не генерируемый из данных билета
- Нет API-вызовов — все данные были захардкоженным JSON в бандле приложения
- Expo на 3 мажорные версии отставал с известными критическими багами
- Нет CI/CD — билды делались вручную на машине разработчика
Переделка (54 часа, €4,320):
Я пересобрал приложение с нуля на текущем Expo. Реальная API-интеграция, реальные пуш-уведомления через Expo Notifications, динамические QR-коды, корректное офлайн-хранение. Прошёл ревью App Store с первой подачи.
Итоговая стоимость для фаундера:
| Статья | Стоимость |
|---|---|
| Первоначальное агентство | €5,000 |
| 4 месяца задержки (пропущенный сезон мероприятий) | ~€12,000 (оценка фаундера по упущенной выручке от билетов) |
| Мой аудит | €320 |
| Моя переделка | €4,320 |
| Итого | ~€21,640 |
Нормальная сборка: €6K–€8K. «Экономия» агентства в €5K стоила фаундеру целого сезона запуска.
Паттерн
Все три проекта разделяют один и тот же режим отказа:
- Низкая цена привлекает фаундера. Цена звучит разумно, потому что фаундер не знает, что значит «разумно» для софта.
- Разработчик сдаёт что-то, что выглядит рабочим. Демо в браузере, скриншоты в Slack, ссылка на стейджинг, которая грузится. Поверхность выглядит нормально.
- Невидимая работа отсутствует. Безопасность, обработка ошибок, продакшн-конфигурация, крайние случаи, тестирование. Всё, что отделяет демо от продукта.
- Фаундер обнаруживает проблемы в продакшне. Обычно через жалобу клиента, инцидент безопасности или отклонение App Store.
- Переделка стоит дороже, чем сделать правильно с первого раза. Потому что теперь есть срочность, упущенная выручка и накладные расходы на аудит того, что есть, перед тем как собрать то, что должно быть.
Как этого избежать
Я написал подробный чеклист красных флагов для проверки разработчиков. Короткая версия:
Просите продакшн-референсы. Не скриншоты портфолио — URL живых проектов, которые обрабатывают реальные транзакции, обслуживают реальных пользователей. Если разработчик никогда не выпускал в продакшн, он упустит всё, что проявляется только в продакшне.
Спрашивайте «что будет, если». «Что будет, если платёж не пройдёт?» «Что будет, если два пользователя редактируют одну запись?» «Что будет, если API упадёт?» Разработчик, который думал о сценариях отказа, ответит сразу. Тот, кто не думал, скажет «разберёмся потом».
Оплатите фазу спецификации отдельно. Хорошая спецификация перед разработкой стоит €500–€1,000 и показывает, понимает ли разработчик вашу проблему. Если спецификация размытая — код будет таким же.
Просите разбивку, а не общую сумму. Если разработчик не может сказать, сколько часов уходит на авторизацию vs. основной функционал vs. тестирование — он не скоупил проект. Он угадывает. Вот как выглядит реальная разбивка.
Если у вас проект, который сломан, недоделан или застрял — я делаю спасательные сборки. Давайте посмотрим, что у вас есть и что нужно, чтобы починить. Аудит обычно занимает 4–8 часов и показывает, стоит ли патчить или пересобирать.