QA · Надёжность
Один двойной клик создаёт две заявки. Разбор защиты на трёх слоях.
Форма отправилась, но человек не увидел реакцию и нажал ещё раз. В CRM появились две одинаковые заявки, и менеджер звонит клиенту дважды. Один слой улучшает интерфейс, три слоя защищают результат.

Задача
Что нужно было показать
Форму заявки собирают за вечер, и на демонстрации она работает. Сбой появляется на медленной сети: ответ идёт секунды, у кнопки нет понятного состояния, человек нажимает второй раз. Дубль доходит до CRM, а в сценарии с оплатой — до списания.
Решение
Как устроен концепт
Защита ставится не в одном месте, а в трёх: в интерфейсе, в API и в базе данных. Каждый слой закрывает свой класс повторов, и ни один из них не заменяет остальные.
Проверка на реальном сценарии
Как одна заявка превращается в две
Пользователь заполняет форму и нажимает «Отправить заявку». Сеть отвечает медленно, кнопка выглядит активной, реакции нет. Человек нажимает ещё раз — и в CRM появляются две карточки с одним и тем же номером.
- Блокировки кнопки мало: запрос повторяют из другой вкладки
- Ограничения базы тоже мало: человек увидит ошибку вместо результата
- Ключ идемпотентности связывает слои и делает повтор безопасным
User flow
Сценарий от входа до результата
- 01
Пользователь заполняет форму и нажимает кнопку отправки.
- 02
Сеть отвечает медленно, кнопка выглядит активной, реакции нет.
- 03
Человек нажимает ещё раз, и в CRM появляются две одинаковые заявки.
Решения
Почему интерфейс устроен так
- Кнопка блокируется сразу и показывает понятный статус
- Повтор с тем же ключом идемпотентности возвращает уже созданную запись
- Ограничение в базе остаётся последней линией на случай гонки запросов
Границы
Что этот кейс не обещает
- Разбор показывает учебный пример, а не данные реального клиента
- Цифры потерь и конверсии не измерялись и здесь не приводятся
- Конкретная реализация зависит от стека, CRM и платёжного провайдера
Что реализовано
- Кнопка блокируется после первого клика и показывает статус
- Операция получает ключ идемпотентности
- Повтор запроса возвращает уже созданный результат, а не новый
- Ограничение в базе не даёт создать дубль при гонке запросов
- Проверка идёт по количеству записей, а не только по экрану
Технологии
Next iteration
Что потребуется для рабочей версии
- Включить медленную сеть в инструментах разработчика
- Нажать кнопку отправки дважды подряд
- Сравнить не экран, а количество записей в базе и в CRM
Похожие решения
Этот кейс показывает один конкретный сценарий. В каталоге решений собраны варианты для заявок, записи, торговли, CRM и AI-помощников.