saasauditbuild-in-publicdevopsstartup

Мы прогнали свой SaaS через 5 аудитов за неделю. Нашли 62 проблемы.

3 мин чтения

14 критичных проблем в проде: нет бэкапов, лимиты не считаются, протухший фронт, [object Object] живым людям. Честный отчёт.

Мы прогнали свой SaaS через 5 аудитов за неделю. Нашли 62 проблемы.

Свой продукт от скуки не аудируют. Мы сделали это, потому что наш запуск WhatsApp ломался новыми и креативными способами, и мне надоело узнавать об этом от пользователей. Итак: пять аудитов, одна неделя, все слои — безопасность, производительность, деньги, UX, инфраструктура. 62 находки. Вот честный отчёт.

Табло

АудитКритичноВажноВсего
Безопасность и комплаенс4717
Производительность2313
Бизнес-логика и деньги2312
UX и конверсия5310
Инфраструктура и DevOps1410
Итого142062
Четырнадцать критичных проблем в проде. На продукте, который принимает настоящие платежи. Осмыслите это.

Худшие находки (мой личный список позора)

Нет бэкапов базы. Вообще. Один неверный docker volume rm — и данные всех клиентов испаряются. Лечение заняло 20 минут: скрипт дампа плюс строчка в cron. Самая страшная находка чинилась дешевле всех — так бывает почти всегда. Лимиты, которые никто не считал. Тарифы с лимитами постов — Starter 1 500, Pro 7 500 — а код подсчёта использования нигде не вызывался. Безлимит на дешёвом тарифе. Месяцами. Новые пользователи падали на пустую страницу. После регистрации — дашборд аналитики с нулём данных и одиноким «Нет данных». Ни онбординга, ни чек-листа, ни намёка куда нажать. В воронке активации — дыра, куда грузовик проедет. Фронт неделями был протухшим. Бэкенд переехал на новые пути API, сборки Vercel падали на missing-импорте иконки, а прод отдавал старый бандл. Пользователи ловили «Not Found» на экране QR. Никто не заметил до живого теста с реальным человеком. Стыдно? Глубоко. Полезно? Чрезвычайно — теперь каждый деплой проверяется по живому бандлу, а не «запушил и молишься». Реальные пользователи видели [object Object]. Ошибка валидации регистрации отрендерилась строкой JS-объекта девушке по имени Ксения. Правила пароля жили только на бэкенде, форма о них молчала. Она попробовала пять раз. Пять.

Что реально удивило

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

И ещё: починка 31 критичной + важной проблемы заняла около двух недель, а не два квартала. Большинство находок — мелочь: индекс тут, сообщение там. Дорого стоили не фиксы, а нежелание смотреть.

Что поменяли навсегда

  1. Каждый деплой заканчивается живой проверкой (health + роуты + бандл), а не «запушил и молишься».
  2. Миграции едут на старте контейнера — и горьким опытом выучили: воркеры на время DDL останавливать, иначе локи висят вечно.
  3. Тексты ошибок ревьюятся как фичи. Если это может увидеть пользователь — это UX.

Вывод

Аудируйте свой продукт до того, как это сделают ваши пользователи. Возьмите один слой на этой неделе — рекомендую бэкапы, это всегда бэкапы — и посмотрите. Что-нибудь найдёте. Находят все.

А вы когда последний раз аудировали своё? Что было самым стыдным?