В мае Jaguar Land Rover впервые за 9 лет полностью обновил iOS-приложение для своих авто. Пока оно доступно только для жителей Великобритании. Дизайном, а также разработкой сервиса под iOS и Android занималась минская команда из Bamboo Apps. У ребят есть опыт сотрудничества с автопроизводителями: они делали софт для Skoda Auto, занимались разработкой HMI и «подключённых функций» для швейцарской Rinspeed.
dev.by встретился с разработчиками, чтобы подробнее узнать о том, как разрабатывается приложение для JLR.
«Пилотным стал R&D проект по разработке приложения для тест-драйва без представителя дилера»
В Bamboo Apps отмечают, что с JLR они работают на протяжении почти двух лет. Пилотным стал R&D проект по разработке приложения для тест-драйва авто без участия представителя дилера.
— У менеджеров компании была идея автоматизировать тест-драйвы, — говорит СТО минской компании Сергей Мищенко. — Мы сделали тестовую версию, и концепт очень понравился. Сервис проверили в Гейдене, где находится R&D-центр JLR, а спустя полгода в США — с реальными юзерами.
В результате клиент остался доволен сотрудничеством, решили сделать на базе версии от Bamboo Apps полноценное приложение. «Но пока оно ещё в процессе разработки, — добавляет СОО Анатолий Спирков. — Проект очень трудоёмкий».
«В машинах появляются новые фичи, и их нужно как-то реализовать в приложении»
— Приложение, над которым сейчас работает команда, — вторая версия существующего сервиса, написанного ещё в 2010 году, — рассказывает Сергей. — Оно позволяет удалённо управлять системами автомобиля: открывать/закрывать двери, управлять климатической установкой, отслеживать технического состояние и местоположение автомобиля.
Разработчики «полностью переосмыслили его» и сделали редизайн. Вся работа заняла 1,5 года.
— Развитие автомобильной индустрии не стоит на месте — в машинах появляются новые фичи, и их нужно как-то реализовать в приложении. Сейчас, например, набирают популярность электрические автомобили — и это тоже должно находить отражение в сервисе.
Прежде чем начать работу над новой версией, ребята из Bamboo Apps в течение 8-9 месяцев занимались усовершенствованием её предшественницы — изучали, вникали в детали. Говорят, было непросто. На добавление чего-то нового к старому коду требовалось очень много времени. Периодически возникали проблемы, а попытки их исправить порождали «снежный ком» из других, потому что между модулями существовали зависимости.
— Когда мы пришли на проект, значительная часть автоматизированных тестов не работала, потому что при добавлении новых фич старые тесты просто не переписывались. Ты исправляешь самый маленький баг — и надеешься, что не сломается что-то ещё, более серьёзное, — отмечает Сергей.
— Плюс морально устарел дизайн, — добавляют его коллеги. — Так что JLR постепенно созрели к тому, чтобы выпустить новое приложение, которое:
- во-первых, соответствует современным техническим требованиям автомобилей;
- во-вторых, отвечает запросам пользователя.
«Например, вы хотите, чтобы автомобиль заряжался с 2:00 ночи до 7:00 утра, а в 8:00 запустил климат-контроль»
— Когда было принято решение передать нам новую версию, её разработка уже велась другой компанией в течение трёх месяцев, — говорит Анатолий.
Какие-то вещи уже были запланированы:
— Из must have фич — режимы зарядки электроавтомобиля, режимы запуска климата, а также установки времени зарядки.
Если, например, вы хотите, чтобы автомобиль заряжался с 2:00 ночи до 7:00 утра, а в 8:00 запустил климат-контроль и подогрел машину, всё это можно сделать удалённо из приложения, — рассказывает Сергей.
— Вообще первостепенная задача второй версии — выпустить всё тот же набор функционала, что был в первой, но с небольшими отличиями, которые соответствуют современным запросам: а-ля вход в приложение с помощью Touch ID и Face ID для iPhone и для Android. А в последующем — без проблем добавлять новый функционал, которого ранее не было, с учётом запросов бизнеса и пользователей. Задача для дизайнеров — выполнить редизайн, — добавляет Александр Антонюк, менеджер проекта.
Он отмечает, что команда придерживается Agile-подхода в разработке продукта — при внедрении фич ребята ориентируются на фидбэк, собранный от пользователей из «внутренней базы». В основном, это сотрудники JLR, которые являются владельцами «ягуаров».
— После, когда приложение начало обретать финальные черты, мы подключили к бета-версии обычных пользователей — но очень ограниченный круг, 100+ человек.
«Когда выбирали технологии, Kotlin был „тёмной лошадкой“. Но задел для перехода есть»
Сравнивая версии и рассказывая о том, что изменилось, Сергей отмечает, что изначально для iOS использовали Objective C, теперь Swift.
— В Android-версии, к сожалению, так и осталась Java: когда выбирали технологии, Kotlin всё ещё был «тёмной лошадкой» — в JLR сомневались, и в итоге решили не рисковать, — говорит собеседник dev.by.
Тем не менее команда «сделала задел для перехода» на Kotlin:
— Вопрос миграции поднимался несколько раз, и сейчас мы активно обсуждаем переход. Мы думаем, что проще всего будет начать с тестов, — рассказывает Сергей.
Говоря о тестах, СТО Bamboo Apps отмечает, что команда добавила в приложении UI-, BDD- и Unit-тесты. «Мы стараемся со всех сторон обезопасить себя от необдуманного рефакторинга, а также от проблем с UI».
Разработчики рассказывают, что придерживались так называемой чистой архитектуры.
— Бизнес-логика у нас одинакова и для iOS-, и для Android-, и она не зависит ни от фреймворков, ни от платформы, ни от чего бы то ни было ещё.
«Во время ремонта автомобиля вы не будете получать уведомления, что с него сняли аккумулятор»
Рассказывая о трудностях в работе над проектом, Сергей не скрывает, что немало проблем было у команды с нотификациями по Service и Transport Mode.
— Эти секьюрити-фичи нужны для того, чтобы во время ремонта автомобиля или путешествия на пароме, к примеру, тебе на телефон не приходили уведомления, что с машиной что-то не так — угнали, сняли аккумулятор и так далее.
Вроде бы всё просто, но мы столкнулись со множеством проблем на бэкенде: статус «активировано» после включения Service или Transport Mode спустя секунду-другую сменялся — и в нём уже не было указано, что функция включена.
Мы долго бились над решением, пытались сделать что-то на стороне мобильного приложения. В итоге через 6 месяцев обновили бэкенд — и только тогда смогли добавить эту функцию.
Непросто шла работа по локализации сервиса:
— Когда у тебя больше 40 языков — для всех это боль: весь текст вроде бы перевели, но тут начинается — его либо очень много, либо мало, и это некрасиво. Где-то слова не переносятся, всё торчит в разные стороны. Дизайнерам приходится думать, как выставить правила, чтобы текст был красивым на всех языках. Потому что делать отдельную вёрстку для каждого языка — это так себе подход.
Что ещё — разработчикам пришлось написать 2 варианта сервиса под Android: одну версию для Европы и США, другую — для Китая, потому что там не работают установленные в сервисе Google-карты.
«Старый дизайн не в последнюю очередь причина того, что предыдущая версия зашла в тупик»
Дизайн приложения серьёзно изменился по сравнению с версией 2010 года.
— Картинка значительно посветлела: если раньше сервис был выполнен в серой гамме, то сейчас — с использованием белого.
В то же время акцент сделан на использование большого количества брендовых элементов — цветов, шрифтов, элементов: водитель сразу понимает, что использует функционал, который относится именно к Jaguar Land Rover. Всё «кричит» о том, что это «ягуар», — отмечает арт-директор Игнат Плотников.
Он рассказывает, что у нового приложения с точки зрения дизайна «более простая архитектура, чем у предыдущего».
— Старый дизайн — вот что не в последнюю очередь виной тому, что предыдущая версия зашла в тупик. Функционал добавлялся и добавлялся — архитектура сервиса становилась всё более непонятной. В приложении было огромное, странное меню, которым было тяжело пользоваться. Поэтому первое, с чего началась переработка — с создания новой архитектуры: чтобы можно было открыть-закрыть что-то при помощи нажатия одной кнопки.
Игнат отмечает, что не все решения дизайнеров были интуитивно понятны пользователям:
— Работая над изменением экрана настроек машины, мы осознали, что хоть он и выглядит симпатично, но юзеры не понимают, как им пользоваться. Некоторые водители не могли дойти до того, как поменять имя машины — и задать вместо Jaguar F Type, например, «моя ласточка».
Получилось так, что мы реализовали функционал, но затем нам пришлось его обновлять.
— Но в этом и плюс того Agile-подхода, которого придерживается JLR: участие пользователей в тестировании, ещё до релиза, позволило нам проявлять гибкость — и менять многие вещи ещё в процессе разработки, — добавляет Александр.
«Считаем правильным решение использовать чистую архитектуру с разбиением»
Предмет особой гордости команды, «то, что было сделано безупречно с первого раза — экраны: мы сделали их сразу, и больше ничего не добавляли, и не меняли», — отмечает Сергей
Собеседник dev.by вспоминает, что удачной идеей было также сделать детализацию ошибок — почему не удалось запустить какой-то функционал: «например, потому что села батарейка или ещё что-то». Раньше сервис просто выдавал ошибку, не уточняя, в чём её причина. До этого пользователь должен был доходить своим умом.
— Что ещё мы считаем правильным — решение использовать чистую архитектуру с разбиением: сейчас это помогает нам добавлять новые фичи без жёсткого связывания.
— Я вспомнил ещё одну штуку: у нас есть разработчик Сергей Никитенко, в начале работы на этом проекте он копался в коде и обнаружил библиотеку, которую когда-то написал и запаблишил на GitHub. И эту его «либу» использовали в приложении для JLR. Было приятно об этом узнать.
Разработчики говорят, что они делали приложение совместно с двумя командами JLR — в Манчестере и в Гейдене.
Однако Анатолий призывает не делить их по локальному признаку, и говорит что «по сути все находятся в одной лодке» — как одна большая команда.
— Когда во время совещаний принимаются решения, абсолютно любой участник может высказать свою точку зрения, и её примут к рассмотрению, — таковы наши Agile-процессы.
Релоцировались? Теперь вы можете комментировать без верификации аккаунта.