В рубрике DOU Labsмы приглашаем IT-компании делиться опытом собственных интересных разработок и внутренних технологических инициатив. Вопросы и заявки на участие присылайте на editors@dou.ua.
Привет! Меня зовут Антонина, я Project Manager в компании KeepSolid. Недавно мы выпустили новое приложение LezGo — навигатор для совместных автопутешествий, который разработала команда студентов нашей IT-интернатуры. В статье я расскажу о том, как создавался проект, с какими сложностями столкнулись студенты при разработке, как решали их и что у нас в итоге получилось.
Как появилась идея создания LezGo
LezGo — это бесплатное приложение для совместных автопутешествий, которое позволяет создавать маршрут и делиться им с друзьями, чтобы оставаться на одной волне во время путешествия.
Идею придумал наш офис-менеджер 3 года назад, когда в одном из автопутешествий на четырех машинах мы постоянно синхронизировали свои действия и созванивались, чтобы узнать, кто где пропал. Уверены, многие сталкивались с подобными неудобствами и поймут, о чем речь. В то время эта проблема была очень актуальной: тогда еще не было режима навигации для нескольких человек ни в Google Maps, ни в других популярных приложениях, таких как Roadtrippers, Waze или Google Trips. Командная навигация и удобство приложения должны были стать нашим главным конкурентным преимуществом.
В результате проект LezGo стартовал трижды в разных группах студентов интернатуры. До этого все заканчивалось ничем: студенты то теряли интерес, то не могли завершить проект из-за нехватки навыков. Мы с руководством компании уже не ждали, что приложение обойдет конкурентов, и не строили коммерческих иллюзий. Нашей целью стало дойти до конца и выпустить продукт, несмотря на все сложности во время разработки. Наша третья попытка оказалась удачной.
Процесс разработки
В сентябре 2017 года после успешного прохождения основной программы летней интернатуры 6 junior-разработчиков (1 iOS, 2 Android и 3 back-end) приступили к проекту Trip Navigator (тогда LezGo назывался так). Рабочий процесс был организован просто: мы выделили для ребят рабочие места, описали продукт, и они приступили к работе.
К каждому из джунов был прикреплен ментор — более опытный разработчик из нашей компании, который проверял код, помогал студенту безболезненно погрузиться в проект и получить экспертизу. Совместными усилиями в апреле 2018 года ребята подготовили к релизу первую версию с минимальным функционалом:
- основной экран приложения — карта, на которой отображалось текущее местоположение пользователя (с использованием GPS);
- два режима работы — режим автора маршрута и режим участника;
- возможность создать 2 типа маршрута: первый — от точки текущего местоположения до заданной пользователем точки, второй — из точки A в точку B (возможны и промежуточные пункты, например маршрут с 10 остановками в конкретных местах);
- возможность пригласить на маршрут участников (доступно автору маршрута);
- для маршрутов с участниками на карте — отображение пина автора маршрута с иконкой автора, пинов участников;
- перестроение маршрута при отклонении от заданного;
- синхронизация между устройствами (списка контактов, маршрутов, данных пользователя);
- отправка писем и уведомлений об определенных событиях (например, пригласить/удалить участника, напомнить об инвайте, завершить маршрут и т. д.).
Однако в итоге было принято решение отложить релиз до лета, чтобы добавить в него новые фичи.
Процесс разработки приложения совпал с выездными тимбилдингами и разными «покатушками» офисным составом. Во время таких путешествий коллеги тестировали приложение и оставляли фидбэк для его улучшения, предлагали пути развития продукта. Так, например, со временем появилась возможность выбирать из предопределенного списка причину остановки водителя, оповещать о ней каждого участника групповой навигации, указывая расстояние и расчетное время до него. Или режим Follow me: для автора маршрут всегда строится по навигации, которую он сам же создал, а для приглашенных пользователей — по ведущему.
Техническая реализация
iOS-версию писали на языках Objective-C и Swift, а версию для Android — на Java и Kotlin. Для back-end использовали PHP и JavaScript, так как это достаточно быстродейственные и относительно дешевые (по стоимости внедрения и сопровождения) языки программирования. JS, конечно, уже ушел далеко вперед от PHP, но JS мы использовали только для создания сокет-серверного сервиса для постоянного общения клиентского приложения и сервера (следовательно, мы использовали не все возможности языка, а лишь конкретную библиотеку). PHP в этом списке — наш любимчик. Это основной язык нашего back-end-отдела.
В качестве фреймворков мы выбрали:
- Firebase — для push-уведомлений (cloud messaging);
- Socket.IO — как общую библиотеку;
- Retrofit, Gson, AndroidX — в качестве библиотек для Android;
- Phalcon — для back-end-разработки. Этот фреймворк позволяет быстро начать разрабатывать, поскольку имеет готовый набор методов. Выбран он был из-за своего быстродействия в сравнении с другими фреймворками (например, Yii, Laravel, Symfony). Позволяет выигрывать в производительности.
PHP и Phalcon отлично подходили для LezGo по нескольким критериям:
- У них низкий порог вхождения, что дало быстрый старт для разработки.
- Если писать на других языках, они были бы тяжелее в сопровождении другими сотрудниками, следовательно, в случае ухода сотрудника потребовалось бы больше времени на знакомство с проектом.
Также для работы мы использовали:
На iOS:
- Cocoa Pods — менеджер зависимостей для проектов на Swift и Objective-C;
- Xcode — для работы со сторибордами.
На Android:
- Gradle — как инструмент сборки проекта;
- Android Studio — IDE от Google.
Back-end:
- PhpStorm — IDE oт JetBrains. Используется для back-end-разработки всех наших проектов.
Общение с сервером происходит через REST, WebSocket. Для архитектуры проектирования мы взяли MVC, Apple MVC и Android MVP.
Наш QA-отдел тестировал приложение с помощью manual testing, но часть функционала LezGo также покрыта unit-тестами.
Сложности при разработке
Нанимая джуниоров, мы четко понимали, что работа с ними потребует много усилий: составление детальных ТЗ, частые встречи, постоянный мониторинг и проверка каждого этапа работы. Все это отнимало время опытных специалистов, которые параллельно работали над реализацией флагманских продуктов компании. Но мы расценивали это как вложение в будущее: сегодня студент отнимает наше время — завтра приносит прибыль.
Главной сложностью/препятствием в разработке LezGo стало изменение ценовой политики сервиса Google Maps. Изначально мы планировали использовать Google Place API для поиска мест и Google Directions для построения маршрута. Но в июне 2018 года нас ждал неприятный сюрприз: компания Google подняла ценына коммерческое использование своих карт в 14 раз и уменьшила лимит бесплатного использования почти в 30 раз. Это было слишком дорого, и команда была вынуждена искать альтернативное решение. Большую часть приложения пришлось переписывать.
После тщательного изучения конкурентов и ресерча мы остановились на HERE Maps. Среди его главных преимуществ — возможность полноценно использовать пошаговую навигацию в режиме офлайн и большое количество карт разных регионов.
Под формат данных HERE Maps пришлось переписать большую часть приложения: мы применили другую логику работы с картами в клиентах, переделали back-end и полностью изменили логику навигации. В финальной версии мы также добавили/реализовали новый функционал:
- еще один режим Follow me — следование за автором маршрута;
- ограниченный режим без авторизации (доступен только просмотр карты и маршрута);
- типы остановок для участников маршрута (заправка, обед, техническая неисправность и т. д.);
- выбор мест по траектории маршрута: вдоль выбранного маршрута пользователь может отмечать отели, АЗС, кафе, интересные места/достопримечательности.
Как работает итоговая версия LezGo
LezGo отлично подойдет любителям автопутешествий. Они являются нашей главной целевой аудиторией. Приложение предназначено как для индивидуальных, так и для совместных поездок на двух-пяти-семи (и даже больше) автомобилях.
Работает LezGo по такой схеме:
Релиз в App Store и планы на будущее
Несмотря на высокие требования и ряд препятствий в ходе разработки, несколько недель назад приложение LezGo появилось в App Store. Для нас это подтверждение того, что с решением набирать и учить студентов мы не промахнулись, а для интернов это стало шансом реализовать себя.
В настоящее время работа над LezGo временно приостановлена, так как сейчас мы задействуем ребят для работы на более приоритетных продуктах компании. Однако уже во втором полугодии мы планируем возобновить разработку LezGo и начать воплощать новые идеи, которых накопилось уже немало. Одна из них — офлайн-карты. Выезжая из «зоны комфорта», можно будет скачивать всю карту или маршрут частично и пользоваться полноценным приложением, не заморачиваясь покупкой местной сим-карты и ценами на интернет в роуминге.
Над геймификацией мы тоже думаем. Нам интересно добавить в приложение элемент соревнования. Кто проехал больше километров? У кого был самый насыщенный маршрут? Чьи фото из поездки собрали больше всего лайков? Как будет работать система поощрений, бонусов и плюшек для самых активных пользователей, пока не обсуждали. Но это в планах.
Вдобавок мы хотим реализовать в приложении ряд функций:
- возможность создавать маршрут поездки онлайн в веб-версии приложения;
- чек-лист вещей, которые нужно взять в дорогу, а также рекомендации, которые варьируются в зависимости от места поездки. Например, путешествующим в район N приложение порекомендует взять с собой лопату, палатку, дождевик, спрей от комаров, теплую одежду и т. д.;
- список предлагаемых/популярных дорожных маршрутов в районе с возможностью планировать поездку на будущее;
- поиск компании для поездок через приложение (возможность задать начало и конец маршрута, указать время и найти людей, которые также заинтересованы в данном маршруте); также можно будет получать уведомления, когда кто-то запланирует открытую поездку по интересующему вас маршруту.