Coinbase如何根据第一性原则从原生App过渡到React Native?


Coinbase是第一家上市的比特币交易所,他们宣布截至2021年1月,Coinbase iOS和Android应用程序已从本机开发过渡到React Native
迁移到React Native意味着要重新实现200多个屏幕,其中许多屏幕包含大量的业务逻辑。过渡还涉及对30多名本地工程师进行再培训,同时继续在构建新功能和淘汰我们的旧版应用程序方面取得进展。
当Coinbase于2012年成立时,它只有一个网站-我们于2013年启动了移动程序。我们发布的首批iOSAndroid应用程序是本机的,分别用Objective-C和Java编写。
到2017年,我们拥有由Android和iOS工程师组成的小型团队来开发这些应用程序,但是尽管我们已尽了最大努力,但我们仍难以扩展。移动工程师的平均生产率然停滞不前。随后我们在2018年的扩展工作继续取得令人失望的结果,越来越明显的是,我们需要提高移动平台上的增长率和迭代速度。
需要改变策略,因此我们决定退后一步,从第一性原理的角度考虑如何构建产品:
在Coinbase,主要功能由跨功能的团队构建和维护,每个支持的平台(Web,iOS和Android)通常由2个后端工程师和2个前端工程师组成。这种结构要求大量的工程师维护我们产品的单一垂直状态。这也意味着在同一平台上工作的工程师彼此孤立隔绝,从而难以协调更大的系统性更改。
从这种角度思考,使我们提出了一个问题:如果我们可以将一个健康的功能团队从8个减少到5个工程师,而多个客户工程师可以在所有三个平台上工作,那该怎么样?
我们假设这可以大大减少我们的总体人员需求,提高我们团队的效率,并增强我们客户平台上工程师的联系度。同时,我们还认为提高效率不是唯一的目标。我们进行的任何技术更改也都必须为客户提供更高的质量和性能。这种思路导致我们开始研究不同的跨平台技术。
在这个阶段,我们已经有了一个运行良好的Web工程平台,该平台基于React。在探索了许多不同的跨平台技术平台之后,我们认为React Native将是我们的最佳选择。它利用了我们已经知道的技术堆栈,并为在移动和Web上进一步整合提供了一条清晰的道路。
一旦就技术平台达成一致,我们就制定了计划,逐步在我们的产品表面上对其进行探索。我们想从风险较低的地区入手,以降低迁移风险,然后随着我们的能力和信心的发展逐渐扩大范围和影响。经过几个月的初步研究,我们制定了一个由三部分组成的策略:

  • 从绿地新项目探索开始。 我们认为,使用React Native进行实验的第一个地方是一个全新的环境,我们可以在其中评估React Native技术而无需原生集成的复杂性。从前端的角度来看,Pro版本是我们性能最密集,最复杂的产品,并且用户一直在要求移动应用程序已有一段时间。它似乎是我们探索的理想人选。如果React Native能够满足Pro移动应用程序的需求(涉及实时价格和深度图等技术上具有挑战性的方面),我们将非常有信心它可以满足我们其他产品的需求。该项目还将使我们能够评估开发人员的速度,并确保可以对我们的Web工程师进行交叉培训,使其成为有效的React Native工程师。
  • 探索旧项目(棕色地)改写的样子。我们决定探索的下一个领域是棕地集成,我们将把React Native集成到现有的本机应用程序中。我们着手使用React Native重建入职流程,然后在Pro移动应用程序(React Native)以及主要的Coinbase iOS和Android应用程序(均为本机)之间共享它们。Coinbase目前支持100多个国家/地区,并且由于不同的司法管辖区对监管要求的要求不同,因此我们的注册经验必须是动态的-适应每个用户的位置和身份配置文件。这些流程是我们移动应用程序中最古老,最复杂的部分。即使进行增量更改,实施起来也可能会很昂贵。随着独立Pro产品的发布,
  • 在开发这些新的和未开发的解决方案的经验教训的基础上,对我们的核心产品进行完整的重写。如果我们在前两个阶段中都取得了成功,我们假设我们可以在React Native中执行对Coinbase主应用程序的完全重写。最初创建策略时,我们不确定此重写是增量式棕地重写(在此逐步重写屏幕)还是绿地重写(在此处从头开始)。我们将此实现细节留给我们从前两个阶段中学到的知识。

如果您阅读过Airbnb出色的Sunsetting React Native文章,这些挑战可能听起来很熟悉。我们花了很多时间与Airbnb的工程师交谈,并尝试从他们的经验中学习。我们感谢团队分享他们的旅程细节,因为这些信息对于确定Coinbase的最佳路径非常宝贵。我们的主要收获之一是,棕地方法似乎是他们所面临的许多挑战的核心。乍一看,渐进式迁移的想法很吸引人-利用React native的优势获得新功能,而无需完全重写的前期成本-但从长期来看,它引入了重大的技术和文化迁移风险。
以这些观察为背景,并完成了两个成功的项目,我们有信心继续推进主要Coinbase移动应用的平台转型。我们决定:
  1. 我们将首先重写Android。我们认为Android将是这两个平台中难度更大的一个,并认为,如果我们能够从质量,性能和速度的角度来实现这一目标,那么我们将有一条清晰的道路,可以紧随其后在iOS上推广。首先构建Android还使我们能够继续在本地iOS上并行开发,从而确保我们的客户在进行改写时继续看到体验方面的改进。
  2. 我们将进行完全的绿地重写,而不是采用棕地/零碎的方法。根据我们自身的经验(使用Pro和入门模块)以及从Airbnb等公司吸取的经验教训,我们得出结论,棕场项目增加了复杂性,带来了陷入“卡在”中间状态的风险,并为长期的文化分歧创造了空间在不同平台上的工程师之间。

考虑到到目前为止我们使用React Native看到的速度,我们估计我们可以在6个月内完全重写我们的产品。
我们还认为,如果最终决定取消该项目,那么在重写的最后拥有统一平台的好处就超过了成本。我们从2020年3月开始重新设计Android应用程序,并在将近6个月后交付了完全重写的Android应用程序。
在Android平台上取得了积极的成果之后,我们决定继续改造Coinbase iOS应用。
到2020年中期,我们大约有7位Android工程师和18位iOS工程师在Coinbase移动应用程序上工作。到今天为止,Coinbase的React Native仓库已经有113个贡献者,其中包括大量的Web工程师,而这些人以前是无法在移动设备上做出贡献的。通过交叉培训本地移动工程人才,我们也看到了积极的成果,并且由于技术变化而导致的人员流失很小。来自iOS和Android背景的工程师现在正在做出巨大的贡献。