Основы Android в Revolut

Наша команда Android специализируется на доставке нашего легендарного приложения миллионам пользователей Android по всему миру. Они работают над тремя продуктами - Revolut для личных клиентов, Revolut Junior и Revolut Business. Команда из 70 человек делит свою работу на два направления:

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

Мы пишем на Kotlin, Android SDK и RxJava служат основными библиотеками и фреймворками. Для хранения данных мы используем SQLite с Room OM.

У разных мобильных продуктов разная архитектура. Приложения Retail и Junior основаны на MVP (Model-View-Presenter), а приложение Business - на MVVM (Model-View-ViewModel). Они дополняются нашими фирменными надстройками, предназначенными для решения определенных задач.

Наши приложения можно считать «толстым клиентом», так как многие операции подсчета выполняются на стороне клиента. Серверная часть часто просто предоставляет необработанные данные, которые необходимо обработать.

Как мы справляемся с прекращением деятельности

Мы создали собственное решение, которое снимает некоторые ограничения Android. Это позволяет приложениям восстанавливать любое состояние или поток в любое время, тем самым решая проблему прекращения действия. Вы можете спросить, в чем выгода для наших клиентов.

Предположим, клиент нажимает кнопку, чтобы отправить деньги, и закрывает приложение. Обычно запрос «отправить деньги» может быть прекращен. Благодаря надстройке запрос клиента Revolut действует до тех пор, пока он не будет обработан. Когда клиент снова запустит приложение, он увидит фактическое состояние операции, и ему не нужно будет запускать ее снова.

Как мы заставляем приложение работать офлайн

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

Согласованность элементов пользовательского интерфейса

Мы используем макет экрана на основе RecyclerView для создания и сохранения элементов пользовательского интерфейса. Итак, когда разработчикам нужна кнопка или стиль субтитров, они просто берут готовую и прикрепляют ее к RecyclerView. Этот подход оказался чрезвычайно полезным во время нашего крупного редизайна. Нам нужно было только изменить элементы пользовательского интерфейса и средства отображения, а бизнес-логику оставить нетронутой.

Мы создали систему дизайна, которая поддерживает RecyclerView как одно из мест назначения для компонентов пользовательского интерфейса. Речь идет не только о структуре пользовательского интерфейса, но и о процессах. Это риск, не говоря уже о неэффективности, позволять нашим разработчикам просто случайным образом разрабатывать свои собственные элементы. Вместо этого они могут просто запросить новый элемент в Системе, если это необходимо, а затем дизайнеры, владельцы продуктов и разработчики обсудят, утвердят и внедряют его. Таким образом, система дизайна обеспечивает единообразие визуальных элементов приложения и экономит ресурсы.

Безопасность данных клиента

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

Git Flow

Все новые функции скрыты под переключателями функций. Как только функция или ее часть, разработчик включает переключатель, чтобы включить изменение в следующую сборку выпуска. Таким образом, мы можем быстро внести небольшие изменения в основную ветку разработки, не дожидаясь завершения всей функции. Это также приводит к более быстрой проверке кода или дизайна.

Тестирование

У нас нет ручного тестирования. Это означает, что каждое изменение должно проходить модульное тестирование, тестирование пользовательского интерфейса и скриншоты (если применимо), прежде чем переходить в ветку разработки. В большинстве случаев идеи для UI-тестов исходят от разработчика, но также могут быть предложены менеджером по продукту или даже проблемами, о которых сообщают наши клиенты.

Команда Mobile Platform Team поддерживает платформу для автоматического тестирования, поэтому разработчикам достаточно написать несколько строк в своем коде, чтобы добавить UI-тест для своей новой функции.

Освободить поезд

Продукты Android обновляются каждую неделю по средам. Если какая-то функция или ее часть готова, разработчик включит ее в следующее обновление. При планировании работы наши разработчики учитывают следующий график.

Чего ожидать новичкам

Онбординг призван быть гостеприимным, и его первой задачей является разработка демонстрационной функции. Это не то, что попадает в производство, а просто демонстрирует основные операции, которые разработчик должен выполнять на регулярной основе. Это позволяет новичкам изучать процессы и архитектуру, а также поиграть с нашими настраиваемыми инструментами, такими как Design System, прежде чем они начнут реальную работу. Этот подход стал важной частью помощи разработчикам в удаленном обучении, когда они присоединились к Revolut во время нашего обязательного периода работы из дома.

До кризиса с коронавирусом все члены команды собирались лично каждые несколько месяцев. Это был отличный шанс лучше узнать коллег и посетить офис в другой стране. Мы надеемся вскоре снова возродить эту практику.

По мере профессионального роста людей сферы их интересов могут меняться. Разработчик может сменить команду или начать что-то новое. Это может быть даже переход от мобильного разработчика к бэкэнду или от разработчика к владельцу продукта. В конце концов, почему бы и нет! Поощряется желание попробовать что-то новое.

Мы способствуем желанию учиться и развиваться внутри компании, регулярно общаясь через Slack и участвуя в сеансах обмена информацией раз в две недели. На этих сессиях могут обсуждаться конкретные темы, решение определенных проблем или что-то новое, чем люди хотят поделиться. Он открыт для всей компании - ограничений нет. Как и другие команды Revolut, мы не просто используем запросы на включение в качестве функции проверки кода - также чрезвычайно полезно делиться знаниями через эту среду. Наконец, мы документируем столько, сколько можем, через нашу внутреннюю вики, так что у знаний всегда есть конкретный дом.

Присоединяйтесь к нам

Если вам нравятся наши процессы, то, как мы работаем, и возможности, которые вы можете получить от работы с нами, почему бы вам не заглянуть на нашу страницу карьеры и не изучить вакансии в нашей команде Android?