Flutter-приложение для необанка

Финансовый сервис для одного из стартапов Y Combinator — первого необанка Пакистана

Клиент

Клиент — финансовый стартап из Пакистана, необанк. Входит в число стартапов Y Combinator. Оценивается в 100 млн долларов. 

Задача

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

Клиент обратился к нам, чтобы мы помогли ему создать приложение для одного из первых online-банков в Пакистане. Они хотели реализовать удобный и инновационный сервис, сравнимый с приложением Тинькофф банка. С его помощью компания планировала решить амбициозную задачу — популяризировать банковские услуги в Пакистане и сделать диджитал платежи доступными для жителей страны. 

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

Вызовы

Реализовать с нуля суперапп в сжатые сроки

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

Множество интеграций со сторонними сервисами

Так как продукт нужно было разработать очень быстро, для некоторых функций мы использовали готовые SDK, в том числе решения от других финансовых стартапов Пакистана — IDWise и I2C. Для этого реализовали большое число интеграций, каждая из которых имела свои особенности.

Создать продукт на пике «техномоды»

Клиент хотел создать инновационный продукт. Поэтому они стремились использовать в своём сервисе самые новые технологии: самые актуальные версии Flutter, недавно появившиеся на рынке SDK. 

Что получилось

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

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

  • Регистрация и авторизация с помощью удалённой верификации
  • Профиль пользователя
  • Заказ физической карты
  • Информация по транзакциям
  • Межбанковские переводы
  • Переводы внутри банка по номеру телефона
  • Установка лимитов по картам
  • Оплата счетов
  • Быстрый чат с оператором
  • Push-уведомления

Как мы это сделали

Выбрали Flutter и другие актуальные технологии

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

Приложение писали с нуля. В ходе разработки клиент продолжал придерживаться своего видения, поэтому именно этот проект первым переезжал на новые версии Flutter и использовал самые актуальные технологии. Например, мы впервые использовали для проекта на Flutter библиотеку Redux — систему управления состоянием приложения. Она применяется для загрузки и хранения данных пользователя: учётных данных, данных по картам и т.д.

Кроме того, это был первый проект, в котором мы использовали нашу разработку — решение для построения чёткой и прозрачной архитектуры во Flutter-приложении — библиотеку Elementary

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

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

Вместе с командой клиента написали бэкенд

Бэкенд сервиса на Kotlin разработчики банка и Surf писали вместе. Важной особенностью проекта стало то, что у нас не было разделения на команду заказчика и исполнителя. Мы работали единой сплочённой командой по каждому из этапов. 

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

Реализовали интеграции с множеством SDK

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

Назовем только ключевые. 

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

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

IDWise. Приложение интегрировали с решением ещё одного стартапа — IDWise. Он предоставляет удобную систему для удалённого онбординга в банковском приложении: пользователю не нужно идти в банк, достаточно сфотографировать себя и документы и отправить фото для верификации. IDWise, в свою очередь, передаёт данные в систему NADRA, пакистанский аналог госуслуг, которая и верифицирует личность пользователя. 

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

Реализовали дизайн приложения и улучшили UI Kit 

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

Дизайнеры Surf не только продумывали реализацию конкретных фич в соответствии с сформированной в UI Kit концепцией. Они поддерживали UI Kit в актуальном состоянии и наполняли его своими решениями. 

Поработали по методологии Scrum

Проект развивался по методологии Scrum. С её помощью можно быстро и эффективно разработать принципиально новый продукт, аналогов которому нет на рынке. Но методология отличается и некоторыми особенностями. Прежде всего, это командный подход и специфические роли внутри команды. У всех членов команды и со стороны клиента, и со стороны Surf был очень высокий уровень вовлечённости. Каждый член команды должен был брать ответственность за решения и проявлять проактивность.

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

В ходе всего проекта нужно было очень быстро отвечать клиенту. После каждого спринта мы отдавали клиенту сборки на ревью и оперативно исправляли выявленные баги. 

Это живой продукт, который быстро меняет свою направленность и свои приоритеты. Именно на нём мы попробовали работать по классической Scrum-методологии, в условиях экстремальной разработки, и это был новый интересный опыт для нашей команды. Уже реализованная фича могла быть через 2 недели переосмыслена и переделана, решения нужно было принимать каждому члену команды и очень быстро.
Алина Белоконева

аналитик Surf

Реализовали все необходимые мобильному банку фичи

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

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

Удобная home-страница со списком транзакций. На ней отображается информация по аккаунту, баланс и список транзакций. 

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

Информации о счете. Раздел содержит детализированную информацию о карте и  реквизиты счета. 

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

Межбанковские и внутрибанковские переводы. Переводы между банками тоже реализовали при помощи сервиса I2C, для интеграции его с бэкендом разработали API. Также реализовали переводы между картами и счетами внутри банка по номеру телефона и p2p переводы, которые сейчас активно применяются для переводов криптовалюты между пользователями напрямую, без участия посредника.

Настройка карт. Реализовали возможность выставлять лимиты по карте.

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

Чат с оператором. Для чата использовали готовое решение — Zendesk, которое интегрировали в приложение.

Push-уведомления. Настроили в приложении push-уведомления, интегрировав в него сторонний сервис One signal. Причём изначально уведомления планировали реализовать при помощи Airship, но когда выяснили, что сервис не позволяет создать центр нотификаций, выбрали более оптимальную технологию.

Внедрили продуктовую аналитику и аналитику ошибок

В приложении добавили пользовательскую аналитику. Для неё использовали сервис Segment. 

Кроме того, в приложение интегрировали сервис Sentry — бесплатный инструмент для удалённого мониторинга багов в приложении.

Покрыли код проекта тестами на 100%

У этого проекта самое большое тестовое покрытие среди Flutter-проектов, которые реализовал Surf (а их более 10). Разработчики приложения написали unit-тесты для каждой фичи.

Помогли систематизировать работу по развитию проекта 

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

Но с ростом функциональности продукта и проектной команды контролировать и развивать проект без документации становится сложно. Поэтому мы приложили много усилий, чтобы внедрить на проекте некоторые лучшие практики Surf. Например, мы настроили процесс delivery-менеджмента. Перешли на 2-недельные спринты, PM описал процессы: в какой момент какой этап внутри спринта проводится и какими активностями он должен подтверждаться. К примеру, когда QA отдаёт отчет о сборке, в какой день релиз, когда product-менеджер делает release notes. К началу спринта мы готовили артефакты и дизайн фич, которые планировали реализовать. 

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

Результат

Приложение вышло в релиз и доступно в сторах в статусе раннего доступа. Сейчас у него уже более 3 тысяч пользователей, а сотрудники банка получают на карты банка зарплату. Клиент продолжает развивать проект инхаус.

Давайте создадим мобильное приложение под ваши задачи вместе
Обсудить проект
Eng Обсудить проект