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

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

Отказ от треков закрыл три ограничения: приватность, ложную точность GPS и расход батареи на телефоне ребёнка. В бете функцией пользовались ~12% активной базы.

Предпосылки

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

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

Проблемы

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

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

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

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

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

Черновую идею я задокументировал ещё когда мы работали над прошлым приложением. Тогда её отклонили из-за сложности реализации.

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

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

Концепт Концепт

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

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

Итерации Итерации

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

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

Решение

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

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

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

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

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

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

Выбросы

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

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

Результаты

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

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

Вывод

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

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