2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

  • 2019-10-15
  • 本文字数:4071 字

    阅读完需:约 13 分钟

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

提到 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 社区在不断更新……


因此,我们开始讨论关于应用程序交付的更为深刻的话题,即如何发挥软件工程师的生产力。我们对以下问题展开讨论:- 对软件工程师而言,技术门槛越来越高。比如,在我们的信用卡产品中,软件工程师必须学习 Android 的 Kotlin,iOS 的 Swift,如果要帮助开发 NuConta 产品还要学习 React Native。更不用说每个解决方案的体系结构都各不相同了!


  • 我们假设的场景是,通过降低移动开发的技术门槛,Nubank 将看到更多的工程师为代码库做出贡献,而不是学习各种新技术。

  • 当 Native APP 开发人员开发每个新功能或产品时,我们遇到的一个瓶颈是“技术人员的噩梦”,即使我们加大了招聘力度,也没有足够的开发人员来充分配备我们的产品团队,因为同时需要 Android 和 IPhone 平台技能。


我们很快意识到我们的团队比技术栈更重要,而试图拥抱太多选择会引起团队不适和技术的混乱。现在是时候认真研究哪种跨平台移动技术更适合 Nubank 整体的业务需求了。


因此,我们着手组建了一个攻坚技术小组,以整个软件工程的技术支持为基础,调查和研究我们应该采用哪种技术,并考虑将 Kotlin Native、React Native 和 Flutter 作为替代方案展开调研。



React Native、Flutter 和 Kotlin Native 的架构对比图


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


攻坚技术小组 我们在 Nubank 选择了经验丰富的移动开发人员组成了一个团队,共同确定了研究项目中要评估的 11 项标准。在这里,我们选取 5 个最重要的事项进行简要描述:


  1. 开发人员的经验:如何使开发人员交付更多价值并提高生产力?例如:热更新、组件可见性、调试器工具、 IDE 集成以及测试工具成熟度等。

  2. 平台的长期生态能力:对平台未来的信心指数。维护者会长期(五年)支持它吗?如果维护者决定放弃该项目,社区支持该项目的可能性是多少?

  3. 是否依赖某一平台:工程师应该能够为产品编写代码,而无需区分 Android 和 iOS。该代码在 Android 和 iOS 上的外观和行为是否相同,并且很少出现特定于某操作系统的 bug?

  4. 扩展插件成本:扩展每个产品任务的平台的成本以及集中扩展工作的成本。添加新组件有多困难?

  5. 技术重构的风险:需要对已经实现的技术进行重构的风险。我们是否需要对整个代码库进行不重要的更改以支持新的 NuDS(Nubank 设计系统)组件?


然后,我们开始使用不同的技术来收集证据,并就几个方面的主观评分达成一致:- 在生产中使用其中一项功能来测试 Flutter 版本的支撑情况。


  • 分析可用于每个技术平台的社区、资源库和资源。

  • 与各个平台开发的专家、团队和公司进行对话。

  • 在三个不同的平台上实现应用程序的某一项功能,然后逐一比对。

  • 进行内部可用性测试,无论新手还是高级工程师都对上述应用程序中的功能进行了更改。

  • 进行演讲、辩论和讨论,听取工程师和高级顾问的意见,并回答他们的问题。


可用性测试的结果是最有趣的。所有级别、不同技术背景的人员(包括没有移动开发经验的入门级工程师)都参与了一个小时的测试。他们每个人得到了一个可用的应用程序、搭建开发环境、混合平台及其组件的文档,以及一些越来越复杂的编码任务。我们的团队在执行任务时对他们进行了观察,最后大家都回答了调查问卷。


例如,工程师必须添加一个功能,以便用户可以使用“快捷”按钮来将钱存入他们的储蓄帐户:



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



开发人员在可用性测试面临的编程挑战的结果是:工程师必须在帐户的存款流程中添加三个具有固定值的按钮。


即便收集了很多信息,我们仍然很难做出决定,我们必须专注于七项最重要的标准才能得出以下结果:



雷达图显示了三个平台的每项标准得分


  • Kotlin:结合我们自身的经验(我们的 Android 代码库中 80%是 Kotlin,NuConta 是用 React Native 开发的),并根据 Nubank 优先级评估我们的替代方案,我们觉得 Kotlin 是一种很棒的语言。但是 Kotlin Native 是唯一不提供 UI 抽象的平台,因此它依赖于 Android 平台进行开发和测试。虽然它在我们的最低优先级标准中得分较高,而且没有明显功能限制或应用商店上架限制的风险,但在测试对专家工程师的支持时,Kotlin Native 还不太适合我们。

  • React Native:我们担心偏向于 React Native,因此我们有意识地降低了另一个标准的优先级:在平台上构建初始抽象的成本,而 React Native 显然是赢家。当考虑更重要的标准时,React Native 也赢得了社区的支持。我们不担心项目的延续性和未来发展,并且对丰富文档和学习资源也感到非常满意。但是,当涉及到重大更改时,我们发现 React Native 的依赖性要比其他替代方案高一个数量级,因此维护和升级会比较麻烦。

  • Flutter: 我们的工程师文化非常鼓励测试自动化,而 Flutter 拥有出色的测试功能,这些功能很好地契合了我们的思维方式(用于单元测试、集成测试和端到端测试的内置测试基础结构,无需渲染到屏幕上)。而 React Native 则需要第三方的依赖,这使其更容易破坏更改。我们发现 Flutter 出色的开发经验,具有更好的热更新功能,更强大的官方文档以及更稳定的 API 库。


经过大量的讨论和争论,直到最后一刻,我们决定将 Flutter 作为 Nubank 移动开发的主要技术。这意味着新功能将用 Flutter 编写,随着产品的发展,我们希望它成为代码库中更重要的一部分。



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

结论

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


  • 构建管道的变化。

  • 构建主要平台渠道。

  • 在 React Native、Flutter、Kotlin 和 Swift 之间集成跨平台接口,因此可以保持互操作性。


尽管 Flutter 将成为我们的主要技术,但仍需要重视 Native APP 开发,因为每个平台都需要 Native 代码的功能插件(Native 对一些硬件的支持是必不可少的,如 GPS 功能和摄像头功能,Apple Watch、Android 最小化等)。随着 NuBank 的软件工程团队的成长,个人专业化也将受到欢迎。


请注意,本文对 Flutter 有效的方法可能对您的实际情况不起作用。我们还建议您调查其他公司的移动 APP 选型经验。尽管有些公司使用 Flutter 或 React Native,但 Dropbox 放弃了其多平台技术(C ++),原因是“在 iOS 和 Android 之间共享代码的成本太高“,而 Airbnb 决定采用“ Sunset React Native”。


感谢 AndréMoreira、Rafael Ferreira、Ana Paula Maia 和 Paula Rothman 对本文的支持。- 贵公司的移动开发策略是什么?


  • 您是否也在使用混合技术?

  • 您对 Kotlin Native/React Native/Flutter 的看法是什么?


请在留言区发表评论,让我们一起交流探讨。


原文链接:


https://medium.com/building-nubank/https-medium-com-freire-why-nubank-chose-flutter-61b80b568772


2019-10-15 18:372573

评论

发布
暂无评论
发现更多内容

ERP和MES的区别与联系,这篇接地气的文章终于讲明白了!

优秀

MES系统 mes ERP系统 mes和erp区别

面试问题总结(一)

xfgg

Java

Amazon WorkSpaces 推出 Amazon WorkSpaces Web

亚马逊云科技 (Amazon Web Services)

容器 Amazon WorkSpaces

「智造」第12期:浅谈时序数据库的应用及发展

用友BIP

时序数据库

音视频FAQ(三):音画不同步

ZEGO即构

CDN 直播 实时音视频 视频编解码 实时互动

[译]你需要知道的CSS属性isolation

南城FE

CSS 前端 布局

服务器异常问题排查指南

AiDaddy

trouble shooting 线上问题排查 服务器异常排查 linux 命令

从ByteHouse网关,看如何进一步提升OLAP引擎性能

字节跳动数据平台

数据库 大数据 云原生 数仓 企业号12月PK榜

低多边形3D建模石头材质纹理贴图

3D建模设计

3D渲染 材质贴图 纹理贴图 材质纹理

🎉开发者的福音:TinyVue 组件库文档大优化!类型更详细,描述更清晰!

Kagol

开源 Vue 前端 UI组件库

喜报!MIAOYUN入选成都高新区“瞪羚企业”

MIAOYUN

云计算 MIAOYUN 瞪羚企业 成都高新梯度培育企业 企业资质

英特尔李映:开源开放是软件生态开拓进取的原动力

E科讯

Wireshark中的TCP协议包分析

小齐写代码

低多边形游戏风格3D模型纹理贴图

3D建模设计

3D渲染 材质贴图 纹理贴图 材质纹理

低多边形建筑3D模型纹理贴图

3D建模设计

3D渲染 材质贴图 纹理贴图 材质纹理 多边形建模

我的2023年度关键词:迎接不一样的挑战,充实自我

芯动大师

#技术人的2023总结

Native Drawing开发指导,实现HarmonyOS基本图形和字体的绘制

HarmonyOS开发者

HarmonyOS

低多边形3D建模动画风格纹理贴图

3D建模设计

3D渲染 材质贴图 纹理贴图 材质纹理

【EMNLP 2023】面向Stable Diffusion的自动Prompt工程算法BeautifulPrompt

阿里云大数据AI技术

【Android】深入Binder拦截

iofomo

android 拦截器 binder

另一种学习 Linux kernel 的方式 —— UML

袁世超

UML Linux Kenel

SQL ALTER TABLE 语句- 灵活修改表结构和数据类型

小万哥

MySQL 数据库 sql 程序员 后端开发

使用 Kubernetes Agent Server 实现 GitOps

极狐GitLab

Kubernetes DevOps gitlab gitops workflow

“敏捷教练进阶课程”2024年1月27-28日 · A-CSM认证在线周末班【分时段模块化教学】CST导师亲授

ShineScrum

敏捷教练

一文让你知道企业真正需要一个怎样的远程协同运维平台?

行云管家

运维 远程运维 远程协同

Groovy StringBuilder类踩坑

FunTester

wing一款轻量快捷的团队开发工具

iofomo

Python 跨平台 开发工具

Amazon WorkSpaces 现在提供使用 WorkSpaces 流协议(WSP)的 Web Access

亚马逊云科技 (Amazon Web Services)

Amazon WorkSpaces

14 | 排序优化:如何实现一个通用的、高性能的排序函数.md

鲁米

基于Unity3D 低多边形地形模型纹理贴图

3D建模设计

3D渲染 材质贴图 纹理贴图 材质纹理

政采云基于 Dubbo 的混合云数据跨网实践

阿里巴巴云原生

阿里云 云原生 dubbo

拉美独角兽Nubank:为什么用Flutter做移动开发很酷?_大前端_Vinicius Andrade_InfoQ精选文章