Nubank has been a mobile-first Fintech from the beginning. We started our mobile development with native apps for our Credit Card supporting both Android and iOS platforms back in 2013 and quickly adopted Kotlin and Swift after they were announced. For a while, we supported the Windows Phone platform.

As the company grew (we’re now the largest independent digital bank outside Asia), developing new products beyond Credit Card became a priority and new teams had to figure out how they would ship to our apps.

But how? Well, why not try React native?

Nubank’s third product was NuConta, our digital savings account.

When the NuConta team was staffed in 2016, we were facing a challenge: not enough native mobile specialists available. And it wasn’t easy to hire either, we saw (and still see) fierce competition for these professionals in the job market.

We wanted mobile developers dedicated to the NuConta team because we already knew that specialized teams don’t scale. We believe in autonomous, agile, cross functional teams, working together from Inception to Production, avoiding handoffs and being responsible for the quality, operations and evolution of their products. We believe single teams developing features end-to-end deliver more value, faster.

Writing the same feature twice, only in different languages and platforms, and having to learn all of them, seemed wasteful. Learning one hybrid platform to ship features would reduce the entry barrier for backend developers to contribute to the mobile frontend.

At the time, React Native was an established alternative, backed by some big players. On top of that, our engineering culture is all about continuous learning and improvement (we make it clear it’s everyone’s responsibility to learn and experiment on the job) — so it’s not hard to understand why the NuConta team decided to experiment with this cross-platform technology.

NuConta has reached great success, with more than 13 MM customers, who saved as much as US$ 305 Million in the past 5 years by not paying a series of fees (as of September 2019). They have all used an app developed with React Native + GraphQL, a tech stack very different from the one used by either native platforms.

The story of React Native at Nubank is something we’re very proud of and that deserves its own post.

But today we want to talk about our next step. After all, no matter how successful a tool or platform is, our engineers continue to learn and experiment with new technologies:

“Hello beautiful people from this channel. After our presentation (myself + @ring) about the Flutter spike during NuConta’s Hackathon, there were many people interested in the technology and language (Dart); After talking to some of you, I suggested we have a Flutter Dojo for those wanting to familiarize themselves with the language, syntax, patterns and tests. If you don’t know what a Dojo is, there’s an explanation in the thread. The idea is to pick a simple problem (TodoMVC, maybe) and create and app from scratch, using TDD, with everyone who’s there. It’s important to highlight that this Dojo is 100% educational, that is, the code written will not be used later. The event will be Thursday, during lunch time, with pizza! …"

A culture of experimenting and learning rapidly

At the beginning of 2019 new product teams, like Business Accounts and Lending, now had a choice to go native or to try React Native.

Around the same time, the industry had already demonstrated great advancements in mobile technologies (just a few announcements from 2019): Kotlin as preferred language for Android, Swift 5 ABI Stability, Flutter 1.0, updates to React Native community governance).

So we found ourselves discussing how to better support our engineers’ productivity when delivering features for our app. Here were some of the issues:

For engineers who are interested in being more full-stack, the entry barrier was too high . To contribute to the Credit Card one had to learn Kotlin for Android, Swift for iOS and, to help NuConta, one also needed to learn React Native.

. To contribute to the Credit Card one had to learn Kotlin for Android, Swift for iOS and, to help NuConta, one also needed to learn React Native. Not to mention the fact that the architecture of each of these options was very different ! Our hypothesis is that by reducing the entry barrier for mobile development, Nubank will see more engineers contributing to the codebase.

! Our hypothesis is that by reducing the entry barrier for mobile development, Nubank will see more engineers contributing to the codebase. Another bottleneck we found when relying on specialized native platform-developers for every new feature or product launch was the “staffing nightmare”, even with our increased hiring efforts there were never enough developers to fully staff our product teams.

We quickly realized that our teams were more important than a technology stack and that having all these choices was causing discomfort and confusion. It was time to seriously investigate which of the cross-platform technologies would be a better fit for Nubank’s needs.

So we set out to charter a task force with the mission to investigate and decide, with buy-in from the whole of software engineering, which technology we should standardize on, considering Kotlin Native, React Native and Flutter as alternatives.