Свой продукт для управления корпоративами: от MVP за 2 месяца до успешной версии 4.0

Привет, Хабр! Меня зовут Женя, я занимаюсь развитием цифровых продуктов в Sminex, в том числе — разных внутренних сервисов. Моя команда запустила и продолжает улучшать корпоративный портал, о котором мы рассказываем в отдельной серии статей. В этом материале поделюсь опытом создания Sminex Event — собственной разработки для управления мероприятиями.

Почему решили уйти от списков на бумаге и в Excel

Мероприятия для сотрудников — часть нашей культуры. У нас есть большие корпоративы на всю компанию, тимбилдинги департаментов, спортивные турниры, регулярные встречи с президентом компании для новичков и другие форматы. Раньше мы вели всю работу вручную:

  • проводили опрос на портале — кто пойдёт, кто нет,

  • выгружали списки участников и проверяли их, 

  • передавали распечатанные списки администраторам.

Это отнимало много времени у команды организаторов. Более того, для бизнеса важна аналитика и возможность оценить, насколько каждый формат эффективен, что можно сделать лучше, а от чего полностью отказаться.

Процесс регистрации на площадке в день мероприятия выглядел так:

  • администраторы стояли на входе с перечнем гостей в Excel-списках на планшетах и с запасными бумажными копиями, отмечали присутствующих,

  • на массовых мероприятиях возникали очереди — люди стояли долго, что снижало комфорт и скорость входа,

  • человеческий фактор приводил к ошибкам — одного сотрудника могли отметить вместо другого, данные дублировались или терялись,

  • сложно было контролировать доступ — данные по сотрудникам, например увольнения, не синхронизировались с системой пропускного контроля в реальном времени. Также оставалась возможность пройти для посторонних людей.

От идеи покупки коробочного продукта мы отказались практически сразу. Во-первых, на рынке в целом почти нет таких готовых решений. Во-вторых, для нас очень важно соблюдение высокого уровня безопасности. Передача персональных данных сотрудников во внешнюю систему создаёт риски и требует сложной юридической проработки. Сохранение во внутреннем контуре более безопасно и даёт требуемую гибкость в управлении.

Необходимость автоматизации назрела давно. Как это часто бывает, решение уходить в разработку своего продукта было принято внезапно, накануне традиционного спортивного праздника, летней Олимпиады Sminex — 2024.

Как мы создали систему за 2 месяца и хотели отказаться от запуска за 2 дня

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

  • Фронтенд: React.

  • Бэкенд: Rust. Предвосхищаю скепсис — выбрали исходя из параметров производительности и безопасности.

  • Мобильное приложение: React Native. Сразу делали только под «Андроид», чтобы снизить затраты и ускорить запуск. Мобильная версия нужна для регистрации перед входом на мероприятие, поэтому мы закупили телефоны для администраторов на «Андроиде».

  • Инфраструктура: Yandex Cloud. При общем штате сотрудников свыше 3 000 важно было предусмотреть серверную архитектуру, способную выдерживать пиковые нагрузки с умной очередью запросов.

В нашей базовой веб-версии и приложении для «Андроида» работали следующие функции:

  • создание самого мероприятия и отдельных сегментов участников, в случае с Олимпиадой — спортивных команд,

  • добавление участников — на этом этапе только вручную,

  • отправка билета в виде ссылки через СМС,

  • мобильное приложение на «Андроиде» для администраторов со сканированием QR-кода, то есть билета участника,

  • базовая статистика по тем, кто прошёл регистрацию.

Свой продукт для управления корпоративами: от MVP за 2 месяца до успешной версии 4.0 - 1

Мы уложились в сроки, но понимали, что продукт пока сырой. Скажу честно: за 2 дня до Олимпиады я предложил отложить запуск. Обсудили с руководителем, в итоге приняли решение стартовать с учётом рисков. Всю ночь накануне Олимпиады мы с командой разработки что-то допиливали и в день мероприятия выкатили наш MVP. Администраторы получили телефоны, начали регистрацию участников в Sminex Event. Всё отлично работало, и мы даже успели обрадоваться. А через 4 часа статистика начала внезапно снижаться.

Сроки дали о себе знать: не всё мы успели полноценно протестировать. По результатам запуска выявили четыре основные ошибки.

  • Падение статистики из-за бага с отменой регистрации. Это стало главным уроком. Фронтенд-разработчик оставил запрос на странице с билетом, который при обновлении страницы обнулял статус регистрации. На практике это происходило так: сотрудник на входе сканировал билет, система учитывала его в статусе «Пришёл». А потом многие не закрывали билет — просто блокировали экран и убирали телефон в карман. В итоге при следующем использовании телефона страница автоматически перезагружалась, статус участия по этому сотруднику сбрасывался на «Не пришёл». У нас не было логирования запросов, поэтому, несмотря на бэкапы, восстановить данные по каждому пользователю не получилось.

  • Проблемы с СМС. При массовой рассылке мы упёрлись в лимиты операторов и попали в спам-фильтры. Пришлось экстренно дописывать логику с задержками между отправками.

  • Ручная выгрузка. Мы не настроили интеграцию с 1С. Были кейсы, когда человек увольнялся между выгрузкой и мероприятием, и его билет, соответственно, оставался активным.

  • Уязвимость ссылок. Ссылки на билеты были явными, номера шли друг за другом: 1, 2, 3 и так далее. Теоретически можно было открыть чужой билет, а это не ок по требованиям безопасности.

Версия 2.0 на большом новогоднем празднике — 2025

Мы провели работу над ошибками, чтобы исключить предыдущие баги. К новогоднему корпоративу выпустили обновлённую версию.

  • Логирование запросов и статистика по участникам.

  • Проблемы с отправкой приглашений → рассылки по e-mail как ещё один способ доставки билетов. Мы дополнительно внедрили отправку билетов через корпоративную почту, но тут тоже сначала столкнулись с проблемой. Почта блокировала массовые рассылки из внешнего источника как спам. Для решения внедрили порционную отправку с задержками, в итоге рассылка на всю компанию занимала 4 часа, но это гарантировало, что письма дойдут.

  • Ручная выгрузка → синхронизация с 1С. Каждые 30 минут 1С передаёт нам изменения: увольнения, смена ФИО, новые сотрудники. Это позволило актуализировать базу в реальном времени.

  • Уязвимость ссылок → хешированные ссылки. QR-код теперь содержит зашифрованный хеш, который расшифровывается и валидируется только внутри приложения. Открыть билет методом подбора стало невозможно.

Версия 3.0 к Олимпиаде-2025: перезагрузка и отдельная команда

Коллеги оценили удобство Sminex Event, бизнес — экономический эффект. Снизились ручные трудозатраты на этапе подготовки. Появилась прозрачная статистика по участникам, на её основе стало проще оценивать эффективность прошедших мероприятий и планировать новые. Поэтому мы собрали команду из аналитиков и разработчиков и продолжили улучшения. К традиционной летней Олимпиаде запустили версию с обновлениями, на этот раз всё работало на ура.

Доставка билетов. Мы полностью залогировали все запросы. Теперь видим, кому дошло письмо, кому нет и статус доставки. Система может повторно отправить билеты, если в первый раз не получилось доставить. Также переделали алгоритмы доставок, сократили задержки между отправками писем до всё ещё безопасных от спам-блокировок. Время массовой рассылки сократилось с 4 часов до 30 минут.

Свой продукт для управления корпоративами: от MVP за 2 месяца до успешной версии 4.0 - 2

Категории участников и оргструктура. Мы добавили возможность создавать категории. Например, актуально для Олимпиады присваивание категории «Прошёл медкомиссию». Она отображается в билете и при сканировании, администратор теперь сразу видит её при регистрации, не допускает на спортивную часть без медицинской справки. Это ускорило распределение людей на входе.

Свой продукт для управления корпоративами: от MVP за 2 месяца до успешной версии 4.0 - 3

Добавление оргструктуры значительно упростило подготовку мероприятий отдельных департаментов — можно пригласить одним кликом всех сотрудников определённого подразделения.

Поиск в реальном времени. В мобильное приложение включили функцию ручного добавления сотрудника. Если человек пришёл без билета (а такие есть всегда), администратор использует расширенный поиск по участникам мероприятия. Если не находит, тогда происходит автоматический поиск по всем сотрудникам компании и отображается, что, например, в списке мероприятия такого человека нет, но он является сотрудником.

Далее администратор просит сотрудника показать пропуск, добавляет его по ФИО в мероприятие и активирует билет.

Примеры сценариев обработки билета после сканирования

Примеры сценариев обработки билета после сканирования

Подробная статистика. Теперь мы видим количество прибывших участников из каждой категории или подразделения. Это в том числе помогает организаторам понимать загрузку зон.

Свой продукт для управления корпоративами: от MVP за 2 месяца до успешной версии 4.0 - 5

Версия 4.0: новые фичи

В последнем релизе мы уделили основное внимание аналитике. Это ещё сократило трудозатраты организаторов. Запустили мощную фичу — приглашения. При настраивании стали доступны новые функции.

Свой продукт для управления корпоративами: от MVP за 2 месяца до успешной версии 4.0 - 6

Установка срока ответа для получателя — до какой даты сотруднику нужно ответить, идёт ли на мероприятие, автоматическая отправка билета после подтверждения участия (сразу или с задержкой).

Интеграция с календарём в почте — при принятии приглашения создаётся событие в Outlook сотрудника.

Фильтры для формирования списка участников. Например, новички за последние 3 месяца для вводной встречи с президентом компании или работающие удалённо для оформления командировок на общие праздники.

Фильтры для формирования списка участников

Фильтры для формирования списка участников

Быстрый поиск участников за счёт рефакторинга — мы переложили техническую логику поиска с фронтенда на бэкенд, и процесс стал занимать секунды.

Ещё одна полезная фича — авторизация администраторов. Ранее для авторизации мы высылали QR-коды администраторам для каждого телефона. Теперь нам достаточно сгенерировать индивидуальные коды для входа на мобильном телефоне через личный кабинет, это в том числе экономия бюджета на СМС. Мы видим, какой именно оператор просканировал билет, анализируем потоки на регистрации и сравниваем активность самих администраторов.

Текущая версия Sminex Event — удобный инструмент, который соответствует требованиям безопасности, экономит ресурсы и предоставляет широкие возможности для аналитики. Мы проделали большую работу по созданию специальных функций для проведения клиентских мероприятий, но это уже другая история — расскажем в отдельной статье.

Автор: evgensmnx

Источник

Оставить комментарий