Index

4-5 минут чтения

История перемещений

Как отказ от маршрутов закрыл три ограничения.

Предпосылки

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

Спрос подтверждали три источника:

  • родители просили историю на интервью;
  • просьбы приходили в отзывах;
  • фича была в старом приложении и работала плохо, но метрики показывали, что ей всё равно пользуются.

Проблемы

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

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

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

Второй риск — выбросы: ошибочные координаты, разовые или из зон глушения БПЛА, где GPS подменяет спуфинг.

GPS-спуфинг GPS-спуфинг

Поиск решения

Черновую идею я задокументировал ещё в «Мой Поиск». Тогда её отклонили из-за сложности реализации.

Черновая идея: интерактивный сегментный график Интерактивный сегментный график — таймлайн вместо списка точек

Переделал круговой график в линейный под интерфейс нового приложения, добавил таймлайн и пометки. На этом прототипе защитил решение перед стейкхолдерами и снимал технические требования с разработчиками.

Первая итерация Первая итерация

Здесь я узнал про неточность привязки к графу дорог и стал искать, как отказаться от треков. Подсказку дал Яндекс: на одном из тарифов такси маршрут не рисуется — заранее непонятно, каким он будет, — и две точки соединяет стрелка.

Примерил к себе: выделяешь сегмент передвижения в шторке — на карте подсвечивается отрезок.

Вторая итерация Вторая итерация

Механику подсказали часы разбора с разработчиками и аналитиками. Как по сырым данным отличить стояние от перемещения? Сошлись на пороге 20 минут: не покидаешь место дольше — отрезок становится точкой стояния. Порог опирался не только на GPS, данных из смежных источников хватало.

Добавлены подсказки, оформился период «стояния» Добавлены подсказки, оформился период «стояния»

Решение

День делится на отрезки двух типов. Стоял — точка на карте. Перемещался — стрелка между точками с длительностью.

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

Дальнейшая доработка Дальнейшая доработка

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

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

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

Одно решение вместо трёх компромиссов.

Выбросы

Спуфинг видно по поведению данных: валидные координаты держатся кучно, подменённые разлетаются по радиусу глушения. Бэкенд сравнивает расстояния внутри пакета и ещё несколько параметров. Из двух десятков координат хватало трёх валидных, чтобы определить верную точку.

В интерфейс приходила очищенная картина. Где выбросов нет — устройство опрашиваем реже, плюс экономия заряда.

Результаты

Выпустили MVP в бете. Функцией пользовались в среднем ~12% MEU — для вторичного сценария, не завязанного на core job, это подтверждение спроса.

Собрали бэклог итераций. Я предлагал выводить на таймлайн геозоны: видно, какие зоны контакт посещал внутри дня, — две функции связались бы в единый сценарий. До этих итераций не дошли, приложение закрыли.

Спасибо за внимание! ♥︎