Мы используем печеньки,
точнее cookie.
Высшая оценка от бортпроводников S7 Airlines
Перед нами стояла задача — разработать мощный сервис (12 интеграций, backend, frontend, analytics, design), который решил бы сразу несколько проблем авиакомпании S7 и ее бортпроводников.
Наш продукт должен предоставлять актуальную информацию о рейсе в режиме онлайн. Проблема в том, что большую часть времени его будут использовать над землей — в оффлайне или при низком качестве соединения, но при этом этом сервис должен хранить более 200 мегабайт данных, необходимых для совершения рейса.
Еще одной сложностью стали интеграции с 12 динамически развивающимися сервисами.
Бортпроводники испытывали трудности в ознакомлении с новыми документами, а еще тратили от 20 до 60 минут на заполнение массы бумажных отчетов. Старший бортпроводник носил с собой около десяти килограмм документации на рейс.
Кроме того, администраторам было сложно обработать полученную информацию — например, из-за непонятного почерка.
Также экипаж получал перед вылетом все данные на бумажном брифинге, и если во время рейса ситуация менялась, например, с задержками, он не мог узнавать об изменениях.
Мы поселили наших системных и бизнес-аналитиков рядом с Домодедово, чтобы они в течение года ежедневно ходили в офис S7 и изучали процессы компании.
В офисе заказчика они провели множество интервью с главами различных служб, включая пассажирский сервис, логистику, безопасность, бортпроводников и маркетинг. Определили бизнес-требования, нашли проблемы бизнеса, его потребности и определили текущие процессы, которые нуждаются в оптимизации. В итоге мы составили спецификацию требований и разработали отдельные технические задания по каждому блоку:
Мы разработали специальный сервис Cabin Crew Pad — основной рабочий инструмент для бортпроводников до рейса, во время и после него. Он включает в себя приложение на iPad для старших бортпроводников с расширенным функционалом.
Также программа имеет портал администратора — веб-сервис для настроек и загрузки данных для устройств, анализа послерейсовой отчетности.
А еще мы разрабатываем Android-версию приложения для рядовых проводников. Приложение включает электронную библиотеку нормативных, накладных актов и других данных по отчетности. Помогает в адресном обслуживании пассажиров, содержит информацию по категориям пассажиров.
Теперь каждый бортпроводник знает обо всех событиях на рейсе, оперативно получает информацию о задержках, количество экипировочного имущества, неиспользованного питания, имеет доступ к полной инструкции по безопасности, составу меню. Также приложение упрощает работу с пассажирами.
Рассмотрим, что включает приложение для старших бортпроводников.
Приложение для бортпроводников сообщает информацию о рейсе на дашборде по принципу атомарности.
Теперь бортпроводнику нет необходимости после рейса нести отчеты администратору, все разместили в удобный интерфейс, который отправляет отчеты в админку. Провели кучу юзабилити-тестов, чтобы это было удобно и быстро.
Задача было крайне сложной, так как в самолете нет интернета и в аэропортах отображается обычно только «ешка». Пол года мы потратили на то, чтобы тяжелые отчеты с фотографиями и видео инцидентов перестали теряться и всегда доходили до админки.
Бортпроводник теперь получает самую актуальную информацию о пассажирах – видит, тех кто опоздал и не попал на рейс. Также выделены особые пассажиры, например с малой мобильностью, животными.
Бортпроводник имеет возможность оперативно найти каждого пассажира с помощью текстового поиска или кликнуть по месту в салоне на своем планшете:
Содержит в себе информацию об особенности его перевозки и ведет к дополнительной информации о нем:
Показывает предпочтения пассажира по питанию в бизнес классе, также помогает бортпроводнику не забыть заказы:
Приложение для бортпроводников включает возможность заанкетировать пассажира или получить обратную связь, которая отобразится у руководителя службы бортпроводников:
На рейсе пассажир может получить компенсацию за косяки авиакомпании:
Накладные помогают в учете потраченного на рейсе имущества, что помогает экономить на закупках:
Приложение для бортпроводников отображает коллег на рейсе, также старший бортпроводник имеет возможность сменить позиции экипажа:
Внедрен чат с экипажем и наземными службами:
Десять килограмм бумаги перевели в удобный интерфейс с поиском, интерактивным оглавлением и закладками:
Приложение для бортпроводников включает даже виджет.
Собрали красивый ui-kit
Чтобы приблизиться к 100-процентному SLA, мы должны обеспечить соответствующее тестирование и мониторинг системы. Для этого используются юнит-тесты и функциональные тесты, которые помогают выявлять и устранять ошибки на ранних стадиях разработки.
Наша система обладает высокой масштабируемостью благодаря семи контейнерам, работающим в режиме Master-Slave в реальном времени. Эти контейнеры постоянно мониторятся системой Zabbix, что обеспечивает поддержание 100-процентного SLA. База данных является распределенной, что способствует повышению надежности и производительности системы.
Для взаимодействия с клиентами у нас разработаны три отдельных приложения. Еще три приложения используются для планирования задач, а одно приложение предназначено для сбора метрик. Этот комплексный подход позволяет эффективно управлять всеми аспектами работы системы и обеспечивать высокое качество обслуживания.
Нужна эффективная синхронизация данных до и после перехода в оффлайн-режим. Перед тем как система переходит в оффлайн, сервер должен обеспечить их максимальную полноту, чтобы пользователи имели доступ ко всей необходимой информации.
Синхронизация данных осуществляется по принципу диффов (Diffs), что позволяет загружать только изменения, а не весь объем данных целиком. Этот метод обеспечивает быструю и эффективную актуализацию данных, снижает затраты на передачу и обработку информации.
Таким образом, благодаря предварительной полной загрузке данных и последующей синхронизации изменений, система может функционировать в оффлайн режиме без потери производительности и надежности.
В 2016 году, когда начался проект, у нас был корпоративный сертификат разработки от Apple, который позволял нам устанавливать любое приложение на любое устройство без необходимости загрузки в Apple Store. Это дало нам значительное преимущество в начальной фазе разработки.
Наше приложение интегрировано с различными системами и сервисами для обеспечения полной функциональности:
Мы стремились использовать существующие API, которые уже были разработаны внутри компании заказчика. Это включало сервис продаж, систему развлечений и операции с данными в оффлайн-режиме. Такой подход позволил нам ускорить процесс разработки и интеграции, используя уже проверенные и надежные решения.
Мы провели исследование и выяснили, что больше всего раздражает пользователей. Одной из главных проблем была долгая авторизация, так как все привыкли к быстрому входу. В ответ на это мы сократили время авторизации до двух секунд.
Также пользователей раздражал крутящийся значок до Full Load — полной загрузки на страницы. Мы реализовали фоновую загрузку с отображением прогресса.
Все ресурсы приложения проходят через API Backend. Для работы с системой продаж на борту (MediaHub) используется отдельное API. Важно отметить, что Backend рассматривает API сервисы одинаково как для Android, так и для iOS, что обеспечивает унифицированный подход к интеграциям.
Оффлайн функциональность мобильного приложения Android
Для обеспечения оффлайн функциональности в приложении реализовано кэширование данных, что позволяет нивелировать различия между оффлайн и онлайн режимами. Принудительное обновление данных перед вылетом является одной из ключевых функций, которая позволяет загружать данные без участия Backend и пользователя с помощью AlarmManager. Синхронизация данных выполняется по окончании рейса, что обеспечивает актуальность информации.
Система iOS унифицирована, и разработка ведется под ограниченное количество устройств. В случае с Android — разнообразие процессоров, архитектур и доступных GPU. Основные узкие места включают работу с сетью, графикой и обработку больших массивов данных.
Для работы с сетью мы применяем подход оффлайн-first и минимизируем блокирующие операции. Обработка данных оптимизирована за счет предгенерации данных для ускорения доступа. Для работы с графикой проведена оптимизация карты салона и PDF-файлов, что улучшает производительность приложения и качество отображения.
Оказалось, что на iOS проще работать с графикой, поскольку графический ускоритель (GPU) унифицирован. Разнообразие процессоров, архитектур и GPU на устройствах Android затрудняет разработку и оптимизацию. Еще одной проблемой стало — ограниченное количество доступных библиотек: Нам пришлось создавать собственные «костыли» — части кода, которые заменяют недостающие функции, чтобы обеспечить нужную функциональность.
Из-за высокой стоимости и значительной продолжительности проекта (восемь лет) мы отказались от прямолинейного тестирования, так как цена ошибки слишком велика. Вместо этого мы используем Firebase Crashlytics для отслеживания работы приложения и выявления ошибок. Кроме того, мы добавили Performance-метрику производительности, чтобы обеспечить высокое качество работы и своевременное выявление проблем в производительности приложения.
Приложение для бортпроводников помогает планировать персоналу работу заранее с наглядной схемой салона, а также видят всю нужную информацию по пассажирам — кому предоставить специальное питание, где сидят инвалиды и семьи с младенцами, какие есть специальные требования у VIP-пассажиров.
А чтобы узнать абсолютно все подробности реализации проекта — переходите смотреть презентацию Валеры Котелова и Александры Соколовой (S7), где они объяснили каждое рабочее решение.
Это уже вторая версия приложения CCP, первую мы начали делать 5 лет назад и развивали ее все эти годы. Сейчас новое приложение обрастает функционалом, переехало с iOS на Android, и будет только расти.