Episode Summary: Coinbase React Native: Building the Cryptocurrency Ecosystem
Coinbase is a popular and well-trusted cryptocurrency platform for buying and selling digital currencies. With Coinbase, your portfolio for crypto investments is managed in a central location. Originally just a web application, Coinbase has now grown to multiple different products across multiple platforms such as web, iOS and Android. With that increased scale came increased complexity as the team began maintaining multiple codebases and hiring individuals to fill the same role for multiple platforms.
Around two years ago, the development team at Coinbase came up with the theory that by using React Native and its ability to develop for multiple platforms with the same codebase, they could reduce the code complexity of maintaining multiple platforms while maintaining the same high quality that people expect from native code. Traditionally iOS and Android development has happened in silos. Each team had its own development team, design team and product management. In addition, since both apps accessed the same backend data models, inconsistencies and headaches would arise with how each app accessed and used the same backend data. React Native promised to solve this problem and at least present a unified mobile platform. However, the journey would take around two years and present its own challenges and headaches.
Coinbase wanted to have an incremental approach where they could test and validate assumptions while maintaining the availability of their core app. They started by rewriting their main app for Android. At the time it was clear that React Native was much less mature, much more buggy and more difficult to make performant. If they could reach the quality bar they wanted to, Android then transitioning the iOS app would be simpler and faster. This assumption proved true as the Android app took over a year and half to transition over and the iOS app took less than six months. However, a transition from native Katlin and Swift apps was not without its own problems.
One of the biggest problems that the Coinbase team faced was people management. Coinbase had already developed two separate mobile development teams that specialize in iOS and Android development and convincing them to move over to React Native was an arduous process. Coinbase set up a React Native school where they had an expert teacher to select individuals. Those individuals then paired up with individual team members to pass on knowledge and give a tour of the features and capabilities. Only when everyone had their hands dirty writing React Native code did they begin the transition of the codebase. It required a large initial investment in time and money and continuous investment to improve the team and the technical expertise. To this day, Coinbase has a team of React Native consultants to ensure that the team is always taking advantage of new features and developing with best practices in mind.
Another big problem that Coinbase had was recognizing the limitations of React Native. There is this stigma that still exists to this day that React Native code cant be performant or as high quality as native code. Airbnb tried to make the transition to React Native but abandoned the project due to this very reason. However, this is less to do with the actual capabilities of the platform and more to do with the applications being developed. Coinbase made a concerted effort to make sure the performance and quality were as high as possible. This led to several concrete actions. They developed some custom tooling as the React Native debugger was and is still fairly obscure. They had a unified design team that made sure the user experience was consistent and exceptional across platforms and products. They also made sure to retain some of the mobile platform experts and roles as some changes needed to be made per platform experience to ensure an excellent experience. Native experts are important to making React Native look and feel really, really good on their respective platforms. Things like headers growing in IOS when you scroll over, or different rubber banding in certain places and other tiny details disguise the abstraction of Typescript so that end-users feel like they are using a Native Platform.
Part of this success at this rewrite was due to Coinbase’s unique culture of debate, decide, deliver. You make sure to take everyone’s opinion but once a decision has been made, everyone rows in the same direction. That culture led the mobile engineers to trust, work hard, and dedicate themselves to the rewrite. By honestly discussing the migration, the journey, the metrics, and the decision points and documenting them with a heavy paper trail, Coinbase got buy-in from everyone and that was an important part of their success.
Looking back, the transition from native development to React Native was not so clear for Coinbase. They had to pursue a “brownfield” approach to ensure that their product was always running. React Native was the only real solution out there for multi-platform development as alternatives like Flutter and Kotlin multi-platform were in their infancy. There were problems with efficiency and performance. However, nowadays the decision is much more simple, especially in a “greenfield” product. React Native is gaining performance by removing things from the Javascript bridge and new libraries like Reanimated 2 ensure that React Native feels like native code. Alternatives like Flutter and Kotlin are much more mature. Nowadays if you are building a product from scratch, there is no reason to not use one of these libraries. However, the technology stack is much less important than the engineer’s attention to detail and the bar of quality you set for the product.
Looking to the future, Coinbase’s development team sees three waves. Wave number one was creating a unified Javascript platform across web and mobile. That was achieved when they launched React Native application on iOS earlier this year. The second wave is unifying that UI, data and tooling layer. That way when you improve build times by five seconds, it across hundreds of engineers. The third wave is focusing on developer effectiveness, velocity and quality so you can continually iterate and improve those over time and drive key business metrics.
Coinbase is an impactful company. It’s this generation’s Facebook or Amazon. Crypto will only continue to grow and as it does Coinbase will be right beside it providing secure, highly scalable products.
This summary is based on an interview with Brent Walter, a Senior Engineering Manager at Coinbase and Jacob Thornton, a Senior Staff Engineer at Coinbase. To listen to the full interview, click here