Через мобильное приложение торговых представителей ежедневно проходят заказы больше чем на 100 млн ₽. Ускорили синхронизацию, каталог и поиск и сделали так, чтобы заказы доходили до дистрибьютора даже при сбое связи или дата-центра.

Клиент — международный FMCG-производитель. GROTEM развивает его экосистему продаж: мобильное SFA-приложение торговых представителей, B2B-портал и телепродажи. Через мобильное приложение каждый рабочий день берутся заказы чуть больше чем на 100 млн ₽.
При таком обороте любой сбой — это прямые потери выручки производителя и дистрибьюторов, а медленное приложение отнимает время визита у представителя и клиента.
Сделать так, чтобы торговый представитель и клиент не ждали систему, а заказы доходили до дистрибьютора при любом сбое.
Обновлять данные в приложении за минуты даже при слабом интернете.
Открывать карточки и фото товаров без задержек на портале и в приложении.
Не тормозить пользователей во время массовой загрузки прайсов и остатков.
Сохранить продажи при падении связи, синхронизации или дата-центра.
GROTEM прошла всю цепочку — от мобильного клиента до базы данных — и устранила узкие места, не меняя бизнес-логику. Отдельно команда разработала аварийный сценарий для полевых продаж.
Если связь или основная система недоступны, представитель включает в приложении режим аварийной выгрузки:
Раньше приложение запрашивало товары напрямую у сервиса каталога, который одновременно принимал интеграции цен и промо. Теперь:
Картинки конвертируются в WebP и уменьшаются «на лету» при первом запросе — без переконвертации всего архива. Браузер и приложение кешируют их на год.
Поиск по каталогу перевели на Elasticsearch: он учитывает опечатки и окончания и ищет сразу по бренду, линейке, категории, упаковке, весу и названию.
Интеграции без пауз переписывают тысячи прайс-листов и остатки, и запись тормозила чтение. Решения:
Оптимизировать пришлось живую систему: в ней постоянно работают сотни пользователей и непрерывные интеграции, а остановить продажи ради доработок нельзя.
В пределе сутки простоя означают потерю всех дневных заказов — около 100 млн ₽. Поэтому целевая метрика аварийного сценария — ноль потерянных заказов.
Аварийный файл должны принять учётные системы разных дистрибьюторов. Общие формулировки требований здесь не работают — к проработке формата нужно подключать самих дистрибьюторов.
Интеграции работают круглосуточно, и в базе нет ни секунды без записи — из-за этого методы чтения вставали в очередь.
Мобильное приложение ходило за товарами в тот же сервис, который принимает прайс-листы и промо, — его кеш постоянно сбрасывался.
Пользователи не видели прогресса синхронизации и думали, что приложение зависло. Важно было показать, что процесс идёт.
Решения подбирали так, чтобы получить эффект без переписывания бизнес-логики и без переделки данных клиента.
Синхронизация мобильного приложения стала быстрее в среднем в 5,2 раза: сеансы, которые раньше не укладывались в 15 минут, теперь могут пройти меньше чем за минуту.
в среднем быстрее синхронизация мобильного приложения
легче изображения товаров после перехода на WebP и ресайз
быстрее методы чтения данных под нагрузкой
на индексацию каталога с промо вместо 1 ч 20 мин
Разберём задачу, предложим архитектуру решения и оценим сроки реализации — на первой консультации, бесплатно.