Привет! Нашим расписанием пользуется около 600 тысяч человек в день (плюс-минус, зависит от сезона), поэтому я бы просто хотел рассказать, что поменялось за прошлый год, и в очередной раз спросить, чего бы вам хотелось, что не так и чего, возможно, не хватает.
Самым большим сюрпризом года оказалось то, что нашим расписанием пользуется очень много машинистов электричек. То есть да, у них есть телеграммы, собственное расписание и так далее, но наше они используют как человекочитаемый источник. Плюс у нас, похоже, очень удобный для них аппарат расчёта волны задержки в зависимости от известных опозданий других поездов, который заранее позволяет подсказать им, что произойдёт.
И вот они попросили повысить точность расписания. С их точки зрения «повысить точность» — это указывать время отправления с точностью до полуминут. Более того, похожие запросы были и от пассажиров. Дискретность расписания на железной дороге — не минута, а полминуты, то есть время отправления может быть не 14:30, а 14:30:30 или, как принято указывать в служебных расписаниях для машинистов, 14:30,5. Отправление поезда на 30 секунд раньше является грубым нарушением, локомотивную бригаду могут лишить премии. Выстаивать лишние 30 секунд, на всякий случай — вариант, обычно это не считается нарушением. Но есть шанс превысить допустимый порог опоздания по следующим станциям и тоже «попасть» на премию. В 2020 увеличилось число аналогичных просьб от пользователей. Во-вторых, отсутствие полуминут усложняло работу наших операторов при внесении специфических изменений в расписании, а их число также увеличилось. Мы доработали бэкенд и сделали в 2021 году расписание с ними.
Вопрос очистки визуала от номеров поездов и «лишних» секунд решился тоже просто: можно просто выключить это в настройках и вернуться к классическому виду расписания.
Почему машинисту легче ориентироваться по человекочитаемому расписанию?
Потому что основной источник данных для машиниста — телеграммы РЖД. То есть у него есть базовое расписание и много пулл-реквестов к нему. Точно так же работает внесение правок в разные нормативные и законодательные акты: вместо того, чтобы выкатить новый текст документа, выкатывается нечто вот такое:
Это начало документа о том, что ресторанам в Москве можно работать и после 21:00 снова, как в старые добрые времена
Проблема в том, что до этого в документе было несколько итераций правок вот примерно такого вида:
Эта схема идеальна с точки зрения работы бэкенда: по сути, это очень точные инструкции компилятору на то, как меняется документ. Но если вы человек, то собрать всё это во внятную картину при прочтении будет сложно.
На железной дороге в обычной ситуации приходит одна телеграмма, которая легко считывается и понимается. Но в узлах с плотным движением нередко приходит сначала один модификатор, потом модификатор модификатора, а потом модификатор, отменяющий первый модификатор, но оставляющий второй, но с небольшими правками. Уровней вложенности может быть и 6-7, если очень повезёт. То есть поезд может иметь базовое расписание, 3-5 корректировок по нему и несколько телеграмм на временное изменение.
Машинист может неверно всё это скомпилировать и недоглядеть что-то. Поэтому многие сверяются с ещё каким-то источником, где всё собирается. Поскольку мы 16 лет красноглазим над расписанием, часто выбирают именно нас.
Так что теперь можно включить номера поездов:
И повышенная точность расписания до ? минуты (тоже отключается):
По отображению больше всего было сложностей с дизайном — нужно было сохранить считываемость расписания. Решили вот так. Если у вас есть идеи лучше — скажите, пожалуйста. Ну и вообще, мне было бы полезно знать, нужна ли вам как пассажирам такая точность.
Сравнение тарифов
Тут всё просто: на один и тот же поезд можно обычно купить много разных билетов. Показывать все варианты в разрезе частоты использования — настолько очевидная идея, что никто так до этого особо не делал. Мы сделали:
Пока 9 из 10 пользователей считают вручную, и первый экран очень востребован. А вот второй уже сложен. Пассажиры доверяют себе, а не софту)
Увеличение доли приложений, уменьшение сессий с iOS
Ещё 10 лет назад мы доставляли изменения в расписании в том числе в СМС, и казалось, что за этим будущее. Но сейчас СМС умерли, а десктоп очень сильно просел. Большая часть обращений к расписанию идёт через мобильную версию сайта и через приложение. То есть с телефонов. В этом году можно говорить о том, что почти каждый пассажир предпочитает смотреть свою электричку с телефона, а не с десктопа — победа мобильной платформы окончательная. Но! В мае была большая просадка по iOS: мы не знаем, почему так, но есть гипотеза, что это из-за удалённой работы. Доля Android при этом не пострадала.
Пуши про сбои в движении и изменения
В приложении можно выбрать любимые направления. Раньше мы отправляли только пуши про временные изменения расписания, а в этом году научились отправлять и пуши про сбои в движении. Связано это было с тем, что количество людей у нас очень большое и пуши на легаси-системе отправлялись медленно. Охватить пользователей можно было за 3-4 часа, что не подходит для тех, кто бежит на опаздывающий поезд. Точнее, так: поскольку обычно на расписание подписаны далеко не все из нашей базы, это по факту 5-10 минут, а не 1 минута, как сейчас.
Систему мы обновили, но в первый же день знатно прилегли: оказалось, что один из пушей одномоментно вызвал огромное количество запросов нового расписания. А там ещё рядом была покупка билетов на электрички онлайн, что создало коллапс длиной в 2 часа. Вообще-то мы держим утилизацию на уровне 30%, но здесь превышение было в 5 и более раз (насколько более, мы по очевидным причинам не знаем).
Покупка электронных билетов на электрички
Коротко — можно купить билет на электричку Центральной ППК в приложении. Мы первые это интегрировали, но это общее API ЦППК, поэтому скоро ждите много где ещё на рынке.
Длинно — нельзя просто взять и купить билет на электричку, там очень много лазеек для «зайцев». Поэтому вы покупаете сертификат с закрытым ключом, который на турникете дополняется второй половиной (открытым ключом) и превращается в билет. Проверка билета – вызов анимации его вращения для контролёра. Звучит всё как груда костылей, но пока так. Мы очень надеемся, что перевозчики найдут более простые правила реализации всего этого, в частности, чтобы исключить турникет или валидатор на станциях.
Про это я писал отдельный пост. Можете зайти и оценить то, какие могут быть неожиданные баги.
Показ зон
Ну, тут всё просто:
Просто теперь чуть удобнее ориентироваться, куда сколько стоит билет. А также позволяет оценить расстояние поездки: то, что длина одной зоны примерно 10 километров, довольно известный факт.
Хуавей
Среди Android-приложений отдельно выделяется платформа Хуавей. Смысл в том, что Хуавей просит полностью отказаться от гуглосервисов и использовать их сервисы. Для нас в первую очередь это касается отправки пуш-уведомлений. Документация на платформу переведена странно, примерно на том же уровне, что и технические интерфейсы. И дело не в сложных русских буквах: в английской локализации примерно такая же история.
В целом консоль похожа для нас на Firebase, внутри есть своя аналитика.
Обещали 98% доставку пушей (что выше Гугла). По факту у нас около 83-86%.
Для версии на Хуавей заменили аналитику Гугла на Хуавей Аналитикс Кит. Аналогично надо поступать с другими вещами, в частности, рекламным кабинетом. В рекламе был провал, из 6 разных форматов работал только один. Следующий шаг — будем осиливать платёжный шлюз, мы пока не интегировали Huawei Pay, оплаты пока только картами.
Больше платформ богу платформ!
Мы показываем в расписании ещё платформы отправления со станций и остановочных пунктов. Раньше мы собирали для обучения модели крауд-данные, куда какой поезд пришёл. Теперь это пригодилось, и мы сильно улучшили точность данных. Итог года в том, что куда больше станций стали появляться с платформами:
Именно для Болшево платформы у нас уже были, но не по всем электричкам. Не было по электричкам с начальной станцией Болшево. Теперь добавили и их. Слово «обычно» перед номером платформы обусловлено тем, что в ряде ситуаций есть небольшая вероятность отправления с другой платформы – например, при сбое в движении или внеплановом размене составов. Раньше в таком случае мы вообще не указывали платформу. Но, исходя из общения с пользователями, стало понятным, что указание в таком виде лучше, чем полное отсутствие информации.
Также по ряду платформ мы скорректировали обозначения. Например, по Подольску раньше мы писали номера платформ. Однако некоторая часть пользователей почему-то прочитывала их как путь. И когда поезд уходил со 2 платформы 10 пути (а не со 2 платформы 2 пути), то нам часто писали жалобы – у вас неверно, указан 2 путь (хотя была указана 2 платформа), а по факту 10.
Теперь же мы пишем в формате «путь 2 или 10». К сожалению, точнее (без «или») пока не можем, так как 2 и 10 путь чередуются без однозначной закономерности. Но число пользователей, упустивших стоящую на 10 пути электричку, подумав, что она должна приехать на соседний второй путь, уменьшилось.
К сожалению, пути пока показываются не по всем станциям, где бы нам этого хотелось. Не везде обеспечивается стопроцентная точность. Мы продолжаем работать над этими вопросами
Больше городов
Добавили расписание поездов Южной ППК, и теперь у нас есть расписание пригородных поездов по всей России.
Иногда люди думают, что мы только по Москве-Петербургу, но нет, у нас есть все-все-все электрички:
Что дальше?
Мы думаем о бесшовной связке электричек и других видов транспорта — это одна из долгих (где-то на год минимум) вещей. Ну и плюс очень много небольших фич, правок и доделок. Как обычно, если у вас есть что добавить, дополнить и т.п., был бы рад услышать, как улучшить наше расписание.
akryukov
Почему именно половина минуты? Выглядит как издержки каких-то старых систем с низкой точностью часов.
matsulenko Автор
Ранее на многих направлениях действовала точность до 1/4 минуты, но её сочли избыточной и перешли к 1/2.
Думаю, высокая точность могла бы быть актуальна, если бы интервалы в движении составляли 3 минуты или менее, а для текущих интервалов точности до 1/2 минуты достаточно.
theodorthegreathe
А как насчёт :30<\superscript> вместо текущей реализации (хотя бы в виде опции)? Кстати, отправлениям без ? можно вместо ничего или ":00" рисовать "=".