Написать нам
Меню

Назад к главному

Agile и кайдзен: выбрали путь постоянных улучшений и переработали приложение для банка «Открытие»

В жизненном цикле мобильного продукта рано или поздно наступает момент, когда нужно радикально обновиться. Потому что за время, прошедшее с запуска, выросли требования бизнеса и ожидания клиентов, изменились возможности платформы и средства разработки — и обновления становится невозможно реализовать путем «косметического ремонта».

В мире мобильных приложений жизненный цикл ПО составляет 2-3 года против 10-15 лет в обычном Enterprise-сегменте. Для нас с командой «Открытие Digital» момент радикального обновления мобильного банка настал в конце 2015.

От mobile first к mobile only

Мобильное приложение банка «Открытие» появилось в AppStore осенью 2014 года, когда пользователи имели айфоны 4-й и 5-й моделей с iOS 7 и 8, и была востребована довольно простая функциональность — перевод между счетами, платежи, конвертация, просмотр выписки, информация о картах и вкладах, поиск отделений и банкоматов.

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

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

Мобильные пользователи более активны — кривая посещений мобильного банка распределена по всему рабочему дню достаточно равномерно, тогда как в интернет-банке есть утренний пик, а затем активность падает.

В 2010 году известный веб-дизайнер Люк Вроблевски выдвинул концепцию разработки «mobile first». Для того времени это была революционная идея — сначала разрабатывать UX и UI для мобильных устройств, а потом адаптировать проект для веба и десктопных приложений. Но это уже вчерашний день: появилась категория пользователей, для которых мобильное устройство является единственным каналом коммуникации, в том числе и в общении с банком.

Задумывая редизайн, мы поставили себе цель: создать платформу, на которой в будущем будем строить по-настоящему умный мобильный банк.

Забегая вперед — реализовывать эту концепцию мы начали с нового коммуникационного блока на главном экране и «профиля» — центра общения с пользователем. Пока через него можно управлять настройками аккаунта и получать персональные предложения от банка, а в будущем он станет полностью персонализированным, и вся информация там будет появляться исключительно в контексте; также клиенты смогут менять в «профиле» личные данные без обращения в отделение банка.

Agile, кайдзен и кайкаку

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

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

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

Александр Нестеров
product owner «Открытие Digital»

Разработкой приложения мы, red_mad_robot, занимаемся в суперплотном взаимодействии с клиентом, «Открытие Digital», на всех уровнях: от серверной команды и службы безопасности до продуктовиков и топ-менеджмента (о рабочем процессе мы расскажем подробнее в одном из будущих постов).

Последние два месяца с нашей стороны на проекте работало две группы разработчиков. Одна занималась развитием и поддержкой текущего приложения, а другая — разработкой нового (фултайм два iOS-разработчика, аналитик, дизайнер и администратор проекта). А core team в лице тимлида, дизайн-команды и менеджеров проекта была занята сразу по обоим направлениям.

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

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

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

В нашем случае этот момент наступил в конце прошлого года, когда совпали два фактора: со стороны бизнеса и пользователей назрела потребность в серьезном расширении функционала, которому стало тесно в прежнем дизайне, а с технической стороны нужно было «обрубить хвосты» — перестать поддерживать старые версии iOS и перейти на Swift, чтобы создать платформу для будущего развития. Задачи на старте работы над проектом были следующими.

Со стороны бизнеса:

  1. 1_

    Персонализация сервиса.

  2. 2_

    Повышение удобства пользования.

  3. 3_

    Увеличение транзакционного дохода.

  4. 4_

    Наращивание клиентской базы.

С технической стороны:

  1. 1_

    Прекращение поддержки старых версий iOS (только 9 и выше).

  2. 2_

    Перевод разработки с Objective C на Swift.

  3. 3_

    Максимальное увеличение комфортного использования приложения за счёт средств платформы (быстрый доступ к функциям через 3D Touch, Spotlight Search и т. д.).

Таймлайн проекта, организация работы и юзабилити-тестирование

В ноябре 2015 года мы начали обсуждать логику нового приложения «Открытия»: составили свое видение развития продукта, получили от банка road map, а дальше началась работа по приведению их в соответствие друг другу.

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

В марте был готов нативный прототип, а в начале апреля коллеги из Usability Lab провели юзабилити-тестирование и предоставили нам отчет, на основании которого мы внесли некоторые коррективы. Например, в приложении есть функция «пополнение с карты другого банка», которая вначале была спрятана в разделе «перевод между своими картами и счетами» — в выпадающем списке карточек клиента внизу появлялся плюсик «добавить карту другого банка».

Но когда пользователям ставили конкретную задачу — вот у вас есть карта другого банка, и вы хотите пополнить свою карту «Открытия», сделайте это — они не находили эту функцию, и поэтому мы вынесли ее в другой раздел. А в середине апреля мы приступили к разработке, которая заняла 2,5 месяца.

Проектирование, дизайн и юзабилити

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

Леонид Борисов
арт-директор red_mad_robot

Платежный функционал

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

  1. 1_

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

  2. 2_

    Оплата услуг и перевод средств теперь осуществляется в пару касаний.

  3. 3_

    В поле оплаты появились быстрые кнопки пополнения с суммой.

  4. 4_

    Быстрый доступ к обмену валют.

  5. 5_

    Переработанный каталог услуг.

  6. 6_

    Быстрый перевод средств по номеру телефона для клиентов «Открытия».

Расширение возможностей прелогин-зоны

Мы переработали прелогин-зону — неавторизованный режим перестал быть историей исключительно для клиентов «Открытия».

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

Персонализация и «умный банк»

  • Новый раздел «Профиль» мы задумали как центр управления настройками аккаунта и коммуникации с пользователем.

  • Персональные контекстные предложения от банка в «Профиле».

  • Блок коммуникации с пользователем на главном экране с персональными предложениями.

  • Контекстные сall-to-action buttons по всем ключевым продуктам банка.

  • Персонализация для банковских продуктов — например, если у пользователя карта «Открытия» с «Игрой престолов», то рисунок с ней будет на главном экране, а на странице самого продукта — стилизованное фоновое изображение.

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

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

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

Павел Усачев
бизнес-аналитик red_mad_robot

Разработка

Проект полностью на Swift

Задача архитектора — сделать так, чтобы из проекта в проект использовались одни и те же решения — с такими проектами проще работать, и их проще поддерживать.

В случае «Открытия», естественно, исключений не было, дизайн кода и идеология RESTful-взаимодействия с сервером остались неизменными, но проект был переписан с использованием нового языка программирования, что повлекло за собой обновление (зачастую, переписывание с нуля) старых библиотек, написанных на Objective-C.

Фактически, слой обработки данных и взаимодействия с сервером был полностью переосмыслен и собран заново.

Егор Тафланиди
архитектор red_mad_robot

Мобильное приложение спроектировано с оглядкой на принципы SOA (service-oriented architecture), с разделением логики на слои Presentation / Business Logic / Persistency). Подробнее про этот подход вы можете прочитать в статьях (раздва) нашего архитектора Егора Тафланиди.

В зависимости от сложности сценариев и количества типов данных часть пользовательских историй написано в стиле MVVM в связке с RxSwift и нашей собственной библиотекой для биндинга («спасибо» Роме Чуркину  firmach ).

А в части сценариев применяется «любимый» MVC с облегченными (lighter) view контроллерами и выделенными делегатами, data source и прочими вспомогательными объектами (любим принцип S из SOLID).

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

Так как это приложение — мобильный банк, мы уделяли первостепенное внимание соблюдению лучших практик и стандартов безопасности. Код регулярно проверяется лично ответственными специалистами по безопасности из банка, статическими анализаторами, периодически проводится внешний аудит и исследования. 0 (ноль) критических уязвимостей безопасности — это про приложение мобильного банка «Открытие».

В свое время данный проект послужил пионером и драйвером для развития практик по безопасности в red_mad_robot. И сейчас ни один проект не обходится без таких базовых вещей, как SSL-pinning, защита от подключений отладчика, от запуска на jailbreak-устройствах, отключение кэширования web-запросов, очень внимательное отношение к тем данным, которые сохраняются в БД, и многое-многое другое.

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

Вовсю используем общие наработки по цветам и шрифтам, при этом перечисления (enum) из Swift позволяют в полной мере развивать применение стилей. Расширения и кастомные элементы UI часто используются повторно на разных проектах.

Проект «Открытия» преимущественно написан на Swift 2.2.1. Представленный два года назад на WWDC язык Swift хоть и молод по традиционным меркам, уже пережил несколько релизов и из проприетарного перешел в open source. Несмотря на то, что еще не вся экосистема iOS перестроилась на новые рельсы, рискованным решение портировать разработку мобильного банка на Swift назвать нельзя.

Главное — мы увидели, что на Swift можно соблюсти все требования по безопасности, и это стало отправной точкой. Инициатива шла от разработчиков. Потихоньку мы начали применять этого язык на проектах уже довольно давно (мы рассказывали об этом в кейсе про разработку «АльфаСтрахования Мобайл»).

Поначалу стали делать один-два экрана на Swift, оставляя бизнес-логику на Objective-C, а затем внутри компании собралась команда энтузиастов, которая за несколько недель переписала на Swift весь наш шаблонный каркас для iOS-приложений, включая широкий пласт логики взаимодействия с сервером.

Это был не «перевод» с одного языка на другой, это было «изложение». Как в школе, когда текст нужно сначала запомнить, а потом написать заново. Возможно, другими словами. С точки зрения методологии разработки вообще нет особой разницы, на каком языке писать.

В проекте «Открытия» осталось всего несколько модулей, реализацию которых не затронул переход на новый язык программирования. Например, внутри приложения в поле суммы, когда делаешь перевод, есть калькулятор, чтобы посчитать, сколько каждый должен, допустим, заплатить за ресторан — можно записать общую сумму и поделить на троих.

Скорее всего, мы возьмем и просто встроим его в новое приложение. В целом на сегодня мы почти отказались от Objective-C и все новые проекты пишем на новом языке.

В Swift больше синтаксического сахара, на нем приятнее пишется, его легче форматировать и код в итоге выходит более читаемым. Да, еще не все идеально — дебаггер немного хромает, рефакторинг пока не работает, бывает в IDE подсветка синтаксиса отваливается.

По большому счету если сравнивать с Objective-C, то у Swift в каком-то смысле даже меньше возможностей, например, в нем нет динамической типизации, поэтому нет каких-то вещей, которые можно сделать на Swift, но нельзя было сделать на ObjC. Разумеется, статическая типизация это с одной стороны плюс, а с другой даже немного минус потому что компилятор везде подсвечивает ошибки несовпадения типов и не дает вольничать как прежде. А динамизм Objective-C иногда нам очень помогал — например, так парсить JSON было удобнее. Но нельзя сказать, что это такая ужасная боль, чтобы нам захотелось вернуться на Objective-C.

Антон Подеречин
iOS-разработчик red_mad_robot

Было понятно, что релиз приложения состоится летом, а уже в сентябре появится iOS 10, и нам удалось убедить банк ограничиться поддержкой только iOS 9 — в ней многие вещи удобнее, чем в более ранних версиях: работа с анимациями таблиц, Stack View, WebKit, Layout Guides, Layout Anchors, Touch ID Reuse Duration, Contacts Framework и так далее.

Но это, конечно, не было просто нашей прихотью — решение было продиктовано аналитикой: версия iOS ниже 8 или 9 установлена у 13% пользователей, а все устройства, поддерживающие iOS 8, вполне могут обновиться до 9-й версии. Исключение составляют только iPhone 4 c iOS 7, но их в клиентской базе осталось совсем немного (и все они смогут пользоваться предыдущей версией мобильного банка).

Кэширование данных

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

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

Григорий Матвиевич
тимлид iOS-команды red_mad_robot

Интеграция с банковскими системами

Мы работаем с серверной командой мобильного банка на стороне «Открытия». Все данные клиентов, их аккаунты и заявки хранятся в многочисленных внутренних системах банка.

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

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

Повторные операции, шаблоны и возможности платформы

Более быстрая и удобная оплата, а также повтор операций были для нас крайне важны при переработке приложения. Мы добавили последние операции, шаблоны и контекстные кнопки для разных банковских продуктов.

Из несложного с точки зрения реализации, но приятного для пользователя — мы активно использовали возможности платформы, добавив в приложение 3D Touch и Spotlight Search — в iOS 9 он позволяет искать не только по базе контактов и заметкам, но и по объектам приложения, если они опубликованы.

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

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

Для того, чтобы все правильно заработало с поиском через Spotlight, на беке внедрили счетчики, вычисляющие самые частые шаблоны. Некоторые сложности были с определением, какие шаблоны мы можем проводить через быструю оплату (модальное окно), а какие нет, и как правильно вычислять те поля в шаблоне, которые пользователь может изменить, и показывать только их.

Схема платежа и мгновенный расчет комиссии

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

Помимо этого у каждого поля есть тип, который определяет интерфейс в приложении. Данный протокол был значительно доработан с учетом новых потребностей: дизайн банковских карт других банков, определение банка и корр счета по БИК, определение клиента банка по номеру телефона. Другой пример — раньше комиссия показывалась только в алерте после нажатия кнопки «Оплатить».

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

Прочие улучшения

Работая над встраиванием функционала P2P-переводов, мы собрали базу бинов, чтобы определять банк по номеру карты и показывать пользователю фирменную расцветку и логотип. Этой базы нет в открытом доступе, и по сути мы составляли ее вручную.

Мы начали работу по актуализации JSON банкоматов и офисов, это позволило убрать отображавшиеся раньше на карте дубликаты. Спасибо команде интернет-банка! И тут у нас большие планы: добавить метро, описания, где их еще нет, кнопку «пожаловаться на банкомат».

Чат

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

Что у нас в бэклоге

Как обычно, все классные идеи не уместились в свежий релиз :) Что же мы хотим добавить?

  • Более плотную интеграцию с CRM-системами банка — то, что мы сейчас сделали в рамках персональных предложений, — только первый шаг.

  • Скидочные программы и программы лояльности и рекомендации друзьям.

  • Дальнейшее наращивание платежного функционала: например, оплата штрафов ГИБДД. Довольно сложно сделать этот функционал действительно удобным образом, нужно уметь искать по гибкому набору реквизитов — номеру водительских прав, номеру и марке автомобиля, ПТС. С учетом всех нюансов нужно сделать такой поиск, мимо которого не пройдет ни один штраф.

  • Сервис оплаты по номеру мобильного телефона с автоматическим определением оператора. Для клиентов было бы удобно не заполнять лишнее поле, да и вообще, когда нас просят кому-то кинуть денег на телефон, оператора мы не всегда помним. Но банку обязательно надо знать поставщика услуг связи, чтобы провести платеж. Существует простая база кодов мобильных операторов, но после вступления в силу закона об отмене «мобильного рабства» появилось 4 миллиона людей, оператора которых по коду определить нельзя, нужна дополнительная интеграция со сторонним сервисом.

  • Информативные графики по вкладам и состоянию счетов.

Также в планах добавление для переводов карт других банков, оплата ЖКХ по штрих-коду, оплата парковок и многое другое. На последней WWDC был представлен Siri Kit, Apple открыла API для общения со своим умным помощником, и это предоставляет огромные перспективы для новых пользовательских сценариев, в том числе и для мобильного банка «Открытие».

Вместо заключения

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

Так мы делали новое «Открытие». Как в приложение не уместились все классные идеи, так и в эту статью не вошло все, что мы хотели рассказать о проекте, поэтому мы запланировали еще несколько постов — о том, как работали над MVP и делали чат в приложении. Stay tuned :)

Запилили!

Благодарим за помощь в подготовке материала Станислава Макарова.

Наша рассылка
В ней только самое важное: новости, кейсы, немного аналитики. Присылаем два раза в месяц.
Политика обработки персональных данных
По вопросам работы с персональными данными и подписками пишите на [email protected]
© red_mad_robot, 2008— 
Сделано роботами для людей
Разработка —