拉美独角兽Nubank:为什么用Flutter做移动开发很酷?

时间:2020-12-23 12:18:10   收藏:0   阅读:0
拉美独角兽Nubank:为什么用Flutter做移动开发很酷?

技术图片

图片

作者|Alexandre Freire、Vinicius Andrade
译者 | 王强
编辑 | 王文婧
提到 Nubank,一些做技术的朋友可能比较陌生,这家巴西金融科技公司成立于 2013 年,主营业务是虚拟信用卡。2018 年年初,Nubank 获得了由 DST Gobal 领投的 1.5 亿美元 E 轮融资,晋级为拉美的第一个独角兽。2018 年 10 月,腾讯以 40 亿美元的估值,向这家公司注资约 2 亿美元,获得了 5% 的股份。在跨平台开发的过程中,Nubank 也曾遇到过技术选型的困惑,综合各方案,他们最终选择了 Flutter。为什么 Nubank 认为用 Flutter 做移动开发很酷?下文是他们对选型过程的具体阐述。
自 2013 年起,Nubank 在信用卡业务上就采用面向 Android 和 iOS 平台的 Native APP 技术开发,并在 Google 宣布 Kotlin,Apple 宣布 Swift 后迅速采用了这些新技术。有一阵子,我们甚至还支持 Windows Phone 平台。
随着公司的业务发展(我们现在是亚洲以外最大的独立数字银行),开发除信用卡之外的新产品成为我们的当务之急,新技术团队不得不弄清楚如何将新技术高效地投放到我们的应用中。
技术图片

为什么不尝试使用 React Native?

Nubank 的第三个产品是数字储蓄帐户 NuConta,这也是我们的核心产品之一。所以,我们在技术选型上非常谨慎。
NuConta 团队在 2016 年成立之时,我们面临的挑战是:没有足够的 Native APP 工程师。而且招聘也不容易,我们看到 Native 移动软件工程师在就业市场上的炙手可热,如何在短期内招聘到合适的人才让我们很头疼。
我们希望移动开发人员致力于 NuConta 业务的迭代发展,因为我们已知 Native 团队无法短期扩招。我们相信,自治、敏捷、跨职能的团队应该从起始到生产都保持合作、避免交接,并对产品的质量、运营和维护等全生命周期负责。我们相信开发端到端功能的单个团队可以更快地提供更多价值。
然而,对于 APP 而言,同样的业务,两次编写相同的功能(仅仅是不同的语言和平台),并且不得不学习所有功能,似乎很耗时低效。假如只学习一个移动混合框架技术来交付,可以大大降低产品研发的成本。
当时,React Native 是已经成熟的替代方案,并得到了一些大型公司的支持。最重要的是,我们的工程师文化是不断学习和改进(我们明确表示,每个人都有责任学习,并在工作中进行实战),因此不难理解,NuConta 团队为何决定尝试使用该跨平台技术。
NuConta 取得了巨大的成功,拥有 1300 万客户,在过去五年中帮助客户(截至 2019 年 9 月)总共节省了高达 3.05 亿美元的资金。我们首次使用了由 React Native + GraphQL 开发的 APP 应用,该技术栈与任何一个 Native APP 平台使用的技术栈都不同。
Nubank 采用 React Native 的故事是我们引以为傲的事情,非常值得一提。但今天,我们想谈谈下一步:Flutter。毕竟,无论工具或平台的如何成功,我们的工程师都将继续学习和尝试新技术。

快速学习和鼓励实战的工程师文化

在 2019 年初,新产品团队(例如企业帐户和借贷产品线)可以选择使用 Native APP 解决方案或尝试使用 React Native 跨平台解决方案。
大约在同一时间,移动 APP 技术的已经有了巨大进步。Kotlin 成为 Android 的首选语言,Swift 5 ABI Stability 日趋成熟,Flutter 1.0 已经发布,React Native 社区在不断更新……
因此,我们开始讨论关于应用程序交付的更为深刻的话题,即如何发挥软件工程师的生产力。我们对以下问题展开讨论:

React Native、Flutter 和 Kotlin Native 的架构对比图
我们的目标是做出框架选择。这样一来,无论团队成员的专业化程度如何,团队都将自治并富有成效地开发移动应用程序。在基于单一体系结构、编程语言的约定上,为产品提供更大价值。

攻坚技术小组

我们在 Nubank 选择了经验丰富的移动开发人员组成了一个团队,共同确定了研究项目中要评估的 11 项标准。在这里,我们选取 5 个最重要的事项进行简要描述:
开发人员的经验:如何使开发人员交付更多价值并提高生产力?例如:热更新、组件可见性、调试器工具、 IDE 集成以及测试工具成熟度等。
平台的长期生态能力:对平台未来的信心指数。维护者会长期(五年)支持它吗?如果维护者决定放弃该项目,社区支持该项目的可能性是多少?
是否依赖某一平台:工程师应该能够为产品编写代码,而无需区分 Android 和 iOS。该代码在 Android 和 iOS 上的外观和行为是否相同,并且很少出现特定于某操作系统的 bug?
扩展插件成本:扩展每个产品任务的平台的成本以及集中扩展工作的成本。添加新组件有多困难?
技术重构的风险:需要对已经实现的技术进行重构的风险。我们是否需要对整个代码库进行不重要的更改以支持新的 NuDS(Nubank 设计系统)组件?
然后,我们开始使用不同的技术来收集证据,并就几个方面的主观评分达成一致:

APP 应用程序将通过“ boleto”条形码创建流程进行工作,该流程始于客户输入要存入帐户的值。技术图片

开发人员在可用性测试面临的编程挑战的结果是:工程师必须在帐户的存款流程中添加三个具有固定值的按钮。
即便收集了很多信息,我们仍然很难做出决定,我们必须专注于七项最重要的标准才能得出以下结果:
技术图片
雷达图显示了三个平台的每项标准得分

Flutter 中内置的“奖励”程序中的里程积分转移流程的确认屏幕

结 论

到目前为止,我们在产品中使用 Flutter 方案的效果非常棒,我们希望能够将更多功能迁移到 Flutter 方案之下,并尽快将其发布给我们的数百万用户,为此我们一直在努力。在这一过程中,我们也将遇到一些挑战:

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!