Объявление об успешном переходе Coinbase на React Native

Гарри Торми

С января 2021 года приложения Coinbase для iOS и Android перешли от нативной разработки к React Native, и все мобильные инженеры теперь сотрудничают в единой кодовой базе. Переход от нативного к React Native не произошел в одночасье, и в интересах помощи тем, кто обдумывает такое решение, мы хотим рассказать историю того, как мы сюда попали. В частности, мы хотим поделиться нашим сознательным и методичным процессом тестирования и наблюдения за результатами, а затем повысить ставки с помощью все более эффективных испытаний, поскольку этот подход был критически важен для успеха миграции.

Чтобы оценить влияние этого технологический сдвиг в перспективе, Coinbase предоставляет финансовые услуги 56 миллионам пользователей и принесла 1,8 миллиарда долларов дохода только в первом квартале 2021 года. Ухудшение функций или низкая производительность могут иметь серьезные последствия для наших клиентов и нашего бизнеса.

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

Когда Coinbase была основана в 2012 году, у нее был только веб-сайт — мы начали нашу мобильную программу в 2013 году. . Первые выпущенные нами приложения для iOS и Android были нативными, написанными на Objective-C и Java соответственно.

К 2017 году у нас была небольшая группа инженеров Android и iOS, работавших над этими приложениями, но, несмотря на то, что мы Максимум усилий, нам было трудно масштабироваться. В течение того года мы смогли нанять вдвое меньше мобильных инженеров, чем веб-инженеров. Более того, хотя веб-инженеры заметили заметный рост производительности, средняя скорость мобильного инженера оставалась неизменной. По мере того как наши усилия по масштабированию продолжали приносить разочаровывающие результаты в 2018 году, становилось все более очевидным, что нам необходимо увеличить темпы роста и скорость итераций на мобильных платформах.

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

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

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

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

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

  • Начните с исследования с нуля. Мы решили, что первое место для экспериментов с React Native — это полностью новая среда, где мы могли бы оценить технологию без сложности встроенных интеграций React Native. С точки зрения внешнего интерфейса Pro был нашим самым сложным и требовательным к производительности продуктом, и пользователи уже давно просили мобильное приложение. Это казалось идеальным кандидатом для наших исследований. Если бы React Native мог справиться с требованиями мобильного приложения Pro, которые включали технически сложные аспекты, такие как графики цен и глубины в реальном времени, у нас была бы высокая степень уверенности, что оно сможет удовлетворить потребности других наших продуктов. Этот проект также позволит нам оценить скорость разработки и быть уверенным, что мы сможем обучить наших веб-инженеров эффективными инженерами React Native.
  • Изучите, как будет выглядеть переработанное переписывание. Следующей областью, которую мы решили исследовать, была интеграция с заброшенными объектами, где мы должны были включить React Native в существующее собственное приложение. Мы решили перестроить наши процессы адаптации с помощью React Native, а затем поделиться ими между мобильным приложением Pro (React Native) и основными приложениями Coinbase для iOS и Android (оба являются собственными). Coinbase в настоящее время поддерживает более 100 стран, и, поскольку в разных юрисдикциях действуют разные нормативные требования, наш опыт регистрации должен быть динамичным — адаптироваться к местоположению и профилю личности каждого пользователя. Эти потоки были одними из самых старых и сложных частей наших мобильных приложений; внедрение даже дополнительных изменений может оказаться дорогостоящим. С запуском автономного продукта Pro повторная реализация их дважды была бы чрезвычайно дорогостоящей, поэтому мы увидели здесь возможность как изучить React Native в заброшенной среде, так и создать общий процесс адаптации между двумя приложениями.
  • Основываясь на уроках, извлеченных при разработке этих новых и старых решений, полностью переписать наш основной продукт. Если мы добьемся успеха на первых двух этапах, мы предположили, что сможем полностью переписать основное приложение Coinbase в React Native. Когда мы изначально создавали стратегию, мы не были уверены, будет ли это переписывание постепенным переписыванием старых полей (когда мы переписывали экраны постепенно) или переписыванием с нуля (где мы начали с нуля). Мы оставили эту деталь реализации открытой для того, что мы узнали на первых двух этапах.

Имея нашу долгосрочную стратегию, мы начали с мобильного приложения Pro. После 6 месяцев разработки мобильное приложение Pro было выпущено в октябре 2019 года и превзошло наши ожидания. Мы увидели положительные бизнес-результаты, получили хорошее представление о проблемах производительности (и решениях) на платформе и начали в полной мере оценивать пошаговое функциональное изменение производительности разработчиков, возможное с помощью React Native. Это также показало нам, что веб-инженеры могут стать эффективными разработчиками React Native за относительно короткий период времени.

Воодушевленные нашим успехом с мобильными приложениями Pro, мы приступили к этапу 2 — переработке старых процессов адаптации наших процессов. . Проект стартовал в середине 2019 года и был реализован через 6 месяцев, что снова соответствует целям, которые мы поставили в отношении качества и бизнес-показателей. Поскольку модуль онбординга был написан на React Native, его можно было использовать в мобильных приложениях Coinbase и Pro.

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

Если вы у вас есть. Прочтите превосходную статью о Sunsetting React Native от Airbnb, эти проблемы могут показаться вам знакомыми. Мы много часов разговаривали с инженерами Airbnb и пытались извлечь уроки из их опыта. Мы благодарны команде за то, что они поделились подробностями своего путешествия, поскольку информация была бесценна при выборе наилучшего пути для Coinbase. Один из наших ключевых выводов заключался в том, что подход заброшенных месторождений, казалось, был ключевым для решения многих проблем, с которыми они столкнулись. Хотя идея постепенной миграции на первый взгляд привлекательна — использование преимуществ React native для новых функций без первоначальных затрат на полное переписывание — она ​​представляет собой значительный технический и культурный риск миграции в долгосрочной перспективе.

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

  • Сначала мы перепишем Android. Мы считали, что Android будет более сложной из двух платформ, и полагали, что если мы сможем сделать это правильно с точки зрения качества, производительности и скорости, у нас будет четкий путь к быстрому развертыванию на iOS. Первоначальная разработка Android также позволила нам параллельно продолжить полное продвижение на родной iOS, гарантируя, что наши клиенты продолжат видеть улучшения опыта, пока мы работаем над перезаписью.
  • Мы бы полностью переписали с нуля, а не чем использовать браунфилд / поэтапный подход. Основываясь на собственном опыте (с Pro и адаптивным модулем) и уроках, извлеченных из таких компаний, как Airbnb, мы пришли к выводу, что проекты на старых объектах увеличивают сложность, создают риск «застрять» в промежуточном состоянии и создают пространство для длительных культурных разногласий. между инженерами на разных платформах.
  • Учитывая скорость, которую мы наблюдали до сих пор с React Native, мы подсчитали, что сможем полностью переписать наш продукт за 6 месяцев. Мы также чувствовали, что преимущества наличия единой платформы в конце этого переписывания перевешивают затраты в том случае, если мы в конечном итоге решим свернуть проект. Мы начали перепрограммировать приложение для Android в марте 2020 года и почти ровно через 6 месяцев выпустили полностью переписанное приложение для Android. Мы развернули переписывание в качестве эксперимента и измерили результаты, которые показали положительное влияние на ключевые показатели, на которые мы нацелились.

    Получив положительный результат на Android, мы решили перейти к повторной платформе приложения Coinbase для iOS. Следующий квартал мы потратили на то, чтобы «наверстать упущенное» над ключевыми функциями, которые команда iOS создала параллельно с переписыванием Android. Затем мы развернули новую базу кода React Native для наших клиентов iOS в качестве эксперимента и завершили это развертывание в конце января 2021 года. Как и в случае с Android, мы увидели положительное влияние на ключевые показатели, на которые мы нацелились. С запуском React Native на iOS мы завершили полную миграцию нашего продукта на эту новую технологическую платформу.

    В середине 2020 года у нас было примерно семь инженеров Android и 18 инженеров iOS, работающих над Мобильные приложения Coinbase. На сегодняшний день репозиторий React Native на Coinbase насчитывает 113 участников, в том числе большое количество веб-инженеров, которые раньше не могли вносить свой вклад на мобильных устройствах. Мы также увидели положительные результаты в перекрестном обучении наших талантливых специалистов в области мобильных инженеров с небольшим оттоком в результате изменения технологий. Инженеры, работающие как с iOS, так и с Android, теперь вносят значительный вклад.

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

    Теперь мы снизились с 3 до 2 платформ приложений — React Native и React Web — но мы хотели бы перейти к 1.5, и у нас есть амбициозная дорожная карта на 2021 год, чтобы сделать это. Мы создаем кроссплатформенную систему проектирования, универсальный уровень данных на основе GraphQL и основы, необходимые для объединения веб-инструментов и инструментов для мобильных устройств. Мы представляем себе мир, в котором инженеры могут внедрять функцию в наши веб-приложения и мобильные приложения с минимальным переключением контекста, реинвестируя повышение эффективности в качество наших приложений.

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

    2018–2012: инженер делится предложением для Coinbase по изучению возможностей React Native в качестве мобильной платформы

    2019 –03: Члены команды Coinbase изучают несколько технических направлений кроссплатформенности и решают двигаться дальше с React Native

    2019–04: Начинается разработка мобильного приложения Coinbase Pro

    2019–07: Начинается разработка унифицированного мобильного подключения

    2019–10: мобильное приложение Coinbase Pro выпущено в App Store

    2019–11: Unified Mobile Onboarding поставляется на Coinbase .com и Pro

    2020–03: мы начинаем полную перезапись нашего приложения Coinbase для Android

    2020–07: все инженеры Android и iOS в Coinbase имеют возможность пройти через внутренняя программа обучения по внедрению React Native

    2020–2010 гг .: переписанное приложение Coinbase запускается на Android, и Coinbase обязуется перейти на новую платформу приложения Coinbase.com для iOS

    2021–01 : Коинбас Приложение для iOS развернуто для 100% наших пользователей

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

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

    Этот веб-сайт содержит ссылки на сторонние веб-сайты или другой контент только в информационных целях («Сторонние сайты»). Сторонние сайты не находятся под контролем Coinbase, Inc. и ее дочерних компаний (далее «Coinbase»), и Coinbase не несет ответственности за содержание любых Сторонних сайтов, включая, помимо прочего, любую ссылку, содержащуюся в Сторонних сайтах. Сторонний сайт или любые изменения или обновления Стороннего сайта. Coinbase не несет ответственности за веб-трансляции или любые другие формы передачи, полученные с любых Сторонних сайтов. Coinbase предоставляет вам эти ссылки только для удобства, и включение любой ссылки не означает одобрения, одобрения или рекомендации Coinbase сайта или какой-либо связи с его операторами.

    * Эта информация основана на информации, доступной Coinbase на дату выпуска этого релиза, и подлежит завершению ежеквартальных процедур финансового закрытия и проверке независимой зарегистрированной аудиторской фирмой Coinbase.

    Все изображения, представленные здесь, принадлежат Coinbase.

    Объявление об успешном переходе Coinbase на React Native было изначально опубликовано в блоге Coinbase на Medium, где люди продолжают обсуждение, выделяя и отвечая на эту историю.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *