Привет, Хабр! В этой статье мы расскажем о мобильном приложении для обмена местоположением «Кто/Где». Оно позволяет в реальном времени видеть на карте, где находятся друзья и близкие, быстро и удобно назначая с ними встречи. Важный момент: обмениваться координатами можно только с теми пользователями, которые дали на это согласие. Подробности, как всегда, под катом.

Для кого и зачем создавалось «Кто/Где»

Геосоциальные карты начали набирать популярность несколько лет назад. По нашим оценкам, подобными приложениями сейчас пользуется порядка 9 млн человек в России, за прошедший год рост составил 40%.

Информационная безопасность крайне важна для современных пользователей. И здесь стоит отметить, что наша программа — не для того, чтобы за кем-то следить. Можно сказать, что это продукт про горизонтальные peer-to-peer-отношения, где каждый добровольно делится своей локацией, получая от этого искомую выгоду: быстрый доступ к местонахождению своих друзей и спокойствие за близких. «Кто/Где» позволяет видеть, где находятся близкие и друзья, что они планируют делать, и оперативно присоединяться к ним.

Для кого создавалось приложение? Вот несколько сценариев:

  • подвижная общительная молодёжь. Молодые люди 18-30, без детей, живущие в городах. Предпочитают проводить свободное время в компании друзей. Могут просто гулять, тусоваться в клубе, вместе сходить на какие-нибудь мероприятия. Приложения категории «геосоциальные карты» используют для того, чтобы быстро сориентироваться, с кем и где сейчас можно потусоваться

  • взрослые семейные люди 30-50 лет со здоровыми отношениями внутри семьи. Могут иметь детей 10+ лет и/или престарелых родителей. Приложение используют для взаимной заботы друг о друге: супруге, родителях, детях. Для этой категории важно знать, что с близкими всё в порядке

Есть и промежуточные кейсы. Например, недавно мы узнали о том, что велосипедисты, предпочитающие шоссейных «железных коней», оставляют свои координаты знакомым при помощи приложения. Зачем? Ездить по шоссе на велосипеде достаточно опасно, и если что-то случается, близкий человек быстро об этом узнаёт и вызывает помощь.

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

Сценариев использования достаточно много. Важно то, что в приложении — актуальные карты, данные обновляются в реальном времени. Система показывает не только последнюю зафиксированную точку, но и процесс движения пользователя. Программа использует GPS- и LBS-координаты, благодаря этому при потере сигнала GPS местоположение пользователя не будет искажено, программа зафиксирует последние точные координаты, что ��сключает возможность «телепортаций», характерных для рыночных приложений данной тематики.

Кто работал над проектом?

Мы решили разделить команду на четыре группы:

  1. Разработчики iOS-версии.

  2. Разработчики Android-версии.

  3. Команда бэкенд-модуля, основная функция которого — сбор геолокационных данных, телеметрии.

  4. Команда бэкенд-модуля, отвечающего за социальные взаимодействия между пользователями «Кто/Где».

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

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

Таймлайн, технологии, проблемы и решения

Разработка приложения стартовала в декабре 2023 года. В ходе планирования организации работы мнения разделились. Часть команды предлагала действовать по процессу на основе канбана с недельными итерациями и еженедельными демо. Другая часть выступала за то, чтобы просто обсудить, что нужно сделать, поделить зоны ответственности и начать оперативно работать, возможно, даже без задач в джире. В итоге СТО сказал, что выбирает второй сценарий и мы разошлись писать код.

Тогда же появились и первые проблемы — как с фронтендом, так и с бэкендом. В первом случае сложность была в том, что на старте разработки не было дизайнов. Это сильно мешало разработчикам — они были вынуждены использовать сырые макеты. А значит, им приходилось регулярно что-то переделывать, когда бизнес требовал внести изменения после очередного витка обсуждений.

Во втором случае работа над сервисами, отвечающими за хранение и обработку локаций, велась слишком медленно. Решили перейти на Python для части бэкенда ради ускорения работы, причём эту часть взял на себя CTO. С геолокацией были и другие проблемы. Основная заключалась в сборе геолокационных данных в фоне, это далеко не тривиальная задача. Здесь мы встретили три основных «подводных камня»:

  • фрагментированность Android и вообще мобильных ОС, ведь у каждой системы свои механики работы с геолокационными данными

  • проблемы с разрешением сбора этой информации в фоне

  • скачки GPS-геолокации. Иногда пользователя на карте «забрасывает» куда-то очень далеко, т. е. возникает ошибка, которую нужно учитывать

Java мы тоже использовали — написали на этом ЯП часть по социальным взаимодействиям, механику дружбы. Выбор обусловлен тем, что здесь сложная бизнес-логика, нужно создавать различные сущности, строить между ними связи согласно бизнес-логике. Язык программирования позволил реализовать всё так, как нам было нужно.

Чуть позже возникла ещё одна проблема, уже с инфраструктурой. Так, мы слишком долго разворачивали свою инфраструктуру с нуля, включающую кубернетис, базы данных, брокеры сообщений и мониторинг поверх этого, прорывались через бюрократические процессы, а ещё не знали точно, сколько потребуется «железа» для инфраструктуры приложения. Провести нагрузочное тестирование на этом этапе мы не могли, поскольку не были готовы сами сервисы. Решили ускориться, переехав в облако, где стали использовать управляемые услуги — тот самый Kubernetes, Redis, Postgres, Kafka.

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

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

В конце января отправили первую версию приложения на проверку, она заняла больше недели, но апп одобрили. Первая версия в маркете получила немного функций, основные — шеринг локации пользователя и отображение локаций контактов пользователя из «Кто/Где». В феврале 2024 года появились первые скачивания и пользователи. Нужно было начинать наращивать на MVP фичи. Мы так и поступили, в марте реализовали ещё две фичи — статус пользователя и возможность поделиться своим профилем по ссылке.

Что касается технологий, то мы использовали последние версии фреймворков, модулей и т. п. Сделано это для того, чтобы в течение примерно года не возникала необходимость думать над апгрейдом стека.

Что уже готово и что планируется внедрить в будущем?

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

Но главное то, что в базовом функционале приложение уже доступно для устройств на iOS и Android. В будущем в «Кто/Где» мы добавим дополнительные сервисы для друзей: статусы, планы, события, стикеры и сообщения.

Если у вас есть вопросы или замечания по теме статьи, будем рады комментариям, постараемся всё обсудить.