React Native Radio

RNR 211 - Transitioning from Native to React Native at Coinbase

Episode Summary

Coinbase’s Brent Walter and Jacob Thornton join the show today to talk about Coinbase’s switch from native to React Native, and discuss how important it is to get buy-in. Great show to listen to if you’re considering this switch too!

Episode Notes

Coinbase’s Brent Walter and Jacob Thornton join the show today to talk about Coinbase’s switch from native to React Native, and discuss how important it is to get buy-in. Great show to listen to if you’re considering this switch too!

 

This episode brought to you by Infinite Red! Infinite Red is a premier React Native design and development agency located in the USA. With five years of React Native experience and deep roots in the React Native community (hosts of Chain React and the React Native Newsletter), Infinite Red is the best choice for your next React Native app.

Helpful Links:

  1. Blogpost announcing Coinbase’s successful transition to React Native.

Connect With Us!

Episode Transcription

Todd Werth:

Welcome back to React Native Radio Podcast.

Todd Werth:

Brought to you by a bunch of people avoiding their real jobs. Episode 211. Transitioning from Native to React Native at Coinbase.

Jamon Holmgren:

Are you into cryptocurrency, Robin?

Robin Heinze:

No, I can't say.

Jamon Holmgren:

Not at all?

Robin Heinze:

I mean, I do not own any cryptocurrency. No.

Jamon Holmgren:

You don't own any? Okay.

Robin Heinze:

No.

Jamon Holmgren:

You're just staying from the [crosstalk 00:00:49].

Robin Heinze:

Far, yeah. I've not joined in on this trend yet.

Jamon Holmgren:

How about you, Mazen?

Mazen Chami:

I do. I got in "late". I have some Ethereum and messed around with Sweatcoin for a little bit.

Jamon Holmgren:

Wait, what did you say?

Robin Heinze:

Sweatcoin?

Mazen Chami:

Sweatcoin. You would take your activity and convert it to cryptocurrency.

Robin Heinze:

Oh like, so you go for a run and you get crypto as a reward for your run?

Mazen Chami:

Yeah.

Robin Heinze:

That's really interesting.

Jamon Holmgren:

That's very interesting.

Mazen Chami:

I don't know if...

Robin Heinze:

Is that still a thing?

Mazen Chami:

I don't think so. No. They shut down. I think they actually-

Robin Heinze:

Did you just lose all the Sweatcoin that you had?

Mazen Chami:

Yeah. I converted it to OMG coin.

Jamon Holmgren:

That's sounds really better.

Robin Heinze:

Another good choice.

Mazen Chami:

Mm-hmm 

Jamon Holmgren:

I love this. It's the best. There's so many different types. Of course, I actually bought my first Bitcoin in 2014. I needed to pay a contractor who was in Canada and it was surprisingly difficult to pay people back then, so he just said, "Send me some Bitcoin." I'm like, "I've heard of it, how do I do that?" He said, "Go to Coinbase, coinbase.com." First I'd ever heard of it, signed up there, bought four Bitcoin for 2,500 bucks and sent it to him. So $2,500 worth of work, I sent him four Bitcoin, which is now worth, I don't know, a lot more.

Robin Heinze:

I wonder if he's sold it before it exploded properly.

Jamon Holmgren:

I'm still connected with him on Twitter, I should ask him and see if he still has that. I did buy a few more for myself and hung onto them, but then it spiked to an incredible price of like $1,500 each, so I couldn't pass that up and I sold most of it. I don't know.

Robin Heinze:

The incredible price of $1,500 per Bitcoin. Wow.

Jamon Holmgren:

Yeah. What's it now? 45,000.

Mazen Chami:

Yeah, it's up there in the 40s.

Jamon Holmgren:

I don't know. I can say, I've been doing like dollar cost averaging ever since then, just putting some in. Coinbase has this feature, which is really cool. Lets me just put a bid in every month. I've just got the usual suspects, Ethereum, Bitcoin, Dogecoin a little bit Litecoin, but for the most part I'm pretty basic, just buy some Bitcoin.

Robin Heinze:

It blows my mind that Dogecoin is a thing and it's based off of the meme, the Doge meme.

Jamon Holmgren:

From what I understand, the creator of Dogecoin is a little mind blown, that it's a thing. But yeah, anyway, I'm not underwater, but that's, I guess what everybody says when they get back from Vegas that they broke even. I don't know. That's how I look at it.

Robin Heinze:

That's the goal.

Jamon Holmgren:

However, we're not here to just talk about cryptocurrencies. I am joined today as usual by my resplendent cohost, Robin Heinze, as well as our guest host who may turn into a normal regular host, Mazen Chami and a couple of cryptocurrency guests who I will introduce shortly. Robin is a senior software engineer located in Portland, Oregon, works at Infinite Red, specializes in React Native. How are you doing, Robin?

Robin Heinze:

I'm good. Although I feel like I need to go change to live up to the resplendent-

Jamon Holmgren:

Resplendent. Yeah.

Robin Heinze:

... moniker that you just gave me. I'm not dressed the part.

Jamon Holmgren:

Are you saying that's an aspirational title? It's not actually applicable right now? I mean, I think it works.

Robin Heinze:

I would say it's aspirational, yes.

Jamon Holmgren:

Mazen Chami, looking resplendent as always. He lives in Durham, North Carolina. He's a former pro soccer player and coach and is a senior React Native engineer. Also, works here at Infinite Red. How are you doing Mazen?

Mazen Chami:

Doing well. Excited for this talk today.

Jamon Holmgren:

Yeah, me too. All right. So let's talk to our guests instead of just ignoring them. I will say a big thanks to my friend, Harry Tormey, who introduced me to Brent and Jacob and paved the way for this episode. Harry has been an Infinite Red friend for a long time, actually, since I think the first Chain React, he was a speaker there.

Jamon Holmgren:

Brent Walter is an engineering leader supporting the client foundations organization at Coinbase. The client foundations organization, say that 12 times fast, builds libraries and tools for all web and mobile app developers across Coinbase and is responsible for the transition from Native mobile apps to React Native apps.

Jamon Holmgren:

Did I do that right, Brent? Hopefully I hit that.

Brent Walter:

You nailed it. I should probably write it as a haiku next time.

Jamon Holmgren:

That might be easier to read, yes. Then also we have Jacob Thornton. He is the technical lead for the client foundations organization and he played a key role in transitioning both the mobile apps and mobile engineers from Native to React Native.

Jamon Holmgren:

How's it going, Jacob?

Jacob Thornton:

Pretty good man.

Jamon Holmgren:

Awesome. Reminder, this episode is sponsored by Infinite Red, a premier React Native design and development agency located fully remote in the U.S. and Canada. We have years of React Native experience, hit us up, hello@infinite.red for your next project. Don't forget to mention that you heard about us through the React Native radio podcast.

Robin Heinze:

We get very excited.

Jamon Holmgren:

We do. Yes. We actually do, like internal virtual high-fives happen. All right. Let's get into our topic for today. Transitioning from Native to React Native at Coinbase, which is why we have Jacob and Brent here with us today. Well, just to start off, could you tell us a little bit about Coinbase for our listeners who like me and 2014 may not know much about it.

Brent Walter:

Sure. Coinbase is the leading crypto exchange in the world and our mission is to bring economic freedom to all places with cryptocurrency as that vehicle. As a part of that mission is making our technology better and more accessible and more relevant and React Native is part of that strategy of a company.

Jamon Holmgren:

Crypto of course, meaning Bitcoin, Ethereum, you have a whole bunch of different crypto's, right?

Brent Walter:

Yeah. I can't keep track of all the ones because they're random new ones every day at this point.

Jamon Holmgren:

The big question is, do you have Sweatcoin?

Robin Heinze:

Mazen would like to know.

Brent Walter:

I'm guessing if we ever did it no longer exists.

Jamon Holmgren:

I mean, I liked the idea behind it. But I did read that Coinbase is providing crypto financial services to 56 million users and generated 1.8 billion in revenue in the first quarter of this year, 2021 alone. That is insane. That is incredible.

Jacob Thornton:

Yeah. It's been a pretty wild ride, I would say. Oh, yeah. I've been at Coinbase for a little over three and a half years and it's gone so much further than our even wildest expectations of where it would be. Still even with all that, a lot of people are just like, "This is the beginning." Which, is nuts.

Jamon Holmgren:

Yeah. Maybe we aren't late to the game, Mazen, you were saying you got in.

Robin Heinze:

It's not too late.

Jamon Holmgren:

Robin-

Robin Heinze:

I know, should I get in there?

Jamon Holmgren:

... still needs to buy her first-

Robin Heinze:

I got to buy my first, got to be part of it.

Jamon Holmgren:

Well, you know where to go.

Robin Heinze:

I do.

Jamon Holmgren:

I guess the obvious question on everyone's mind is, at least our audience, why did Coinbase decide to transition your app from Native to React Native? Tell us the story behind that, Brent.

Brent Walter:

Yeah. Actually, I'll pass this over to Jacob because Jacob has more of a historian's perspective than I do leading up to early last year when I joined the team. So, I'd love to hear Jacob's perspective on the history.

Jamon Holmgren:

That was perfect.

Brent Walter:

I can actually provide color around the strategy and execution.

Jacob Thornton:

Put me on the spot. Yeah. Gosh, there's really so many different things that went into it. It's like one of those, like the stars aligning and coming together that just made it make a lot of sense. Hiring your friend, Harry, like you said, it's a really big, big thing. We also had an engineer at the team, Nick Cherry, who independently wrote an entire technical design doc on React Native and how he thought that it was worth exploring or prototyping out based on his own experiences.

Jacob Thornton:

Over time, this kind of evolved, we were just about to invest. At Coinbase there's several different products that we invest in, so we have like institutional products, pro trading products, retail products. Our pro trading app was only a website at the time. We had just started to invest in building an iOS product and an Android product, but we couldn't hire Android engineers. So Harry actually was started to build the pro trading app in React Native, which quickly caught up to the iOS project and passed it basically to the point where they just shut down the pro iOS project.

Jacob Thornton:

That was a really good first signal. A little bit after that, we took on a project that we call internally UMO, it's like our unified onboarding or unified mobile onboarding project. Our goal there was to kind of have this single onboarding experience. Our onboarding is really complex actually, as you may be aware of. There's a lot of sort of things that we ask you for to prove that you are who you say you are when you're dealing with money and financial institutions and what have you. So shipping this kind of mobile onboarding experience to all of our products was something that was really, really attractive to us.

Jacob Thornton:

We had now a React Native app for pro, we had a Native iOS app and wallet, and we had a Native iOS app, an Android app and for our retail customers. So we experimented with this brownfield type implementation as you may have been familiar with, which essentially had us building this onboarding package that we distributed across the company.

Jacob Thornton:

In that a handful of us, maybe I think there was just three, well, technically I guess there was five of us that were learning React Native for the first time building out this technologies. We had two Native engineers and three web experienced engineers that were just diving into this onboarding project together. Shipped that, went really, really well, crushed a lot of our expectations around just quality and just raw performance of the actual product.

Jacob Thornton:

Then after that, we were like, "Okay, well I think we should continue to invest in this, but let's start by building Android." Which, we had learned from doing pro was actually historically the hardest thing. So with pro early on, we struggled a lot with the radians, with getting performance where it needed to be. So we put together another sort of team of super talented folks and we just set off with the Android Native engineers, both ramping them up on TypeScript and that whole world. We use TypeScript at Coinbase by the way.

Robin Heinze:

Yes.

Jacob Thornton:

Yeah. We came up with a little curriculum to teach people on the fundamentals of what we had learned so far from building the onboarding experience and then had them teach us a little bit more about Android Native and what we could be doing to make sure that we were getting the performance that we hoped.

Jacob Thornton:

We instrumented a handful of performance tooling and monitoring things ad then we yeah, got to work. I think we were a couple of months early and this is around the time Brent started to join. We were a couple of months actually ahead of schedule. Obviously it's pretty hard to estimate as you all know, especially when you're like, "How long will it take to write the app from scratch?"

Robin Heinze:

Yeah like, I don't know.

Jacob Thornton:

Exactly, yeah. Some engineers were like, "Oh yeah, this will be done in like two quarters." Some were like, two months, it's all over the place. But our team just really, really picked up a lot of momentum really, really quick. We invested in some really good infrastructure stuff, a design system, a couple of other things like that, which paid a lot of dividends as we were onboarding Native engineers in particular.

Jacob Thornton:

Yeah. We got to a place where we were sending out internal builds, et cetera, and really excited with it. Then just leadership made the call to also then build for iOS, which ended up not being a massive project, but was something that we hadn't like fully really tested. Some people were developing on it a little bit, because the simulator is a little quicker and things like that, but not really going out of our way to test, is that interaction actually working on iOS and things of that nature.

Jacob Thornton:

Yeah. Then at that point, our iOS org was quite a bit larger than our Android organization and so then we spun off and created this entire sort of plan for replatforming essentially. I think it was like 30 plus engineers into React Native, which is complex in so many different ways, just logistically, emotionally. People love writing iOS code, they love Swift, people love writing Kotlin and Android. I think that's a really big piece of replatforming.

Jacob Thornton:

Yeah. We undertook that for... I think that in and of itself took a little over a quarter of a year as we slowly ramped down development on iOS and slowly we ramped up the iOS engineers through web burst and then into React Native. Then now here we are today with a massive React Native team and, we have our entire app has been reacting to it for a while now. We're quite pleased with it. Excited about the next iteration of the app and growing it to do a lot more product surfaces and things like that for the company.

Robin Heinze:

Awesome. That's a really great summary of the journey that you guys just went on.

Jacob Thornton:

Yeah. Sorry, it was a lot of words. A lot of steps there.

Robin Heinze:

No.

Jacob Thornton:

I also glazed over so much obviously, but...

Jamon Holmgren:

I'm sure.

Jacob Thornton:

Yeah.

Robin Heinze:

So, for some context, Mazen and I are actually both on a client project right now, which is in the middle of a full app rewrite in React Native. So we're going to have lots of questions.

Jacob Thornton:

Okays. I'll do much better.

Robin Heinze:

I'll just take you more in-depth into that whole process. I want to briefly go back to, you mentioned doing a brownfield experiment before you went all in on an app rewrite. Most people in the React Native community are familiar with the infamous Airbnb exit where they did brownfield and decided to drop React Native because of the experience doing brownfield. So I'm just curious what you all learned doing that brownfield experiment, what was it like, did it go well?

Jacob Thornton:

Totally, yeah. Maybe I'll handle this one to, Brent, because I led this project also, it was called UMO. We were really lucky in that one of the engineering leads or director of retail engineering at Coinbase, this guy, Jesse Pollak, extreme champion of React Native and also just really great at reaching out to the community. So he connected us with Eli White, from the React Native team pretty early on.

Jacob Thornton:

They actually came by our office, talked to us a bunch, showed us a lot of the stuff they were doing with Facebook marketplace and talked us through the things that they've seen work well or the things that they've seen not work well. I think then we talked to honestly, a bunch of people from Airbnb and a bunch of other places. What we found was that the integrations where you could have a pretty clear line in the sand were the ones that were most successful in a brownfield way and onboarding was so separate. It's like you click a button, here's an entire immersive experience, which takes you through an onboarding flow and then spits you out at the end with a token and everything else that you need to actually use the application.

Jacob Thornton:

So, it felt like very ripe for... it felt media enough that it's like, okay, we're going to have to learn React Native to build this thing. I don't know how many flows there are, but it's quite exhaustive in the Coinbase app. I think also we just had a team of folks that were maybe overly confident in our skills and we were just like, "Oh, this is going to be no problem." Obviously, React Native humbled us pretty quickly. But I think-

Robin Heinze:

I mean, it's almost not a brownfield app at that point, when it's that isolated-

Jacob Thornton:

Totally.

Robin Heinze:

... you're basically building a full fledge React Native app and just you happen to be sticking the bundle inside it-

Jacob Thornton:

Kind of. Yeah. Exactly.

Robin Heinze:

... the existing iOS.

Jacob Thornton:

Exactly. Also, we had Harry who's written and talked about this stuff a lot and who was also able to... I mean, I feel like we had a lot of community support before we even really dipped our toes into it, which is like, we're so spoiled in a lot of ways.

Robin Heinze:

Yeah. That helps a lot. Especially with a library like React Native, that was probably still pretty beta at the time.

Jacob Thornton:

Totally.

Robin Heinze:

It really helps to have people who are on the inside helping you out.

Jacob Thornton:

Definitely. Yeah. I mean, I think a lot of it also was talking to the Facebook people and them being open and sharing, where are they going? How are they investing in it? Making us feel confident as like a team that like, okay, we're trying to build this multi-billion dollar company on top of this software, is it going to be around by the time we launch this?

Robin Heinze:

Yeah. You'd want that reassurance for sure.

Jacob Thornton:

Definitely.

Jamon Holmgren:

Well, I think as more companies like Coinbase and Microsoft and Shopify, as these companies that are well-known and they're not going anywhere, adopt React Native, then it just shores up the whole ecosystem in a lot of ways. We have definitely, I mean, talked about staking a company on it, that's all we do as a consulting company is React Native. So we're happy to have you folks along.

Robin Heinze:

Sort of a chicken and egg thing, it feels like you have to get the big companies to invest in it so that it gains credibility, but it doesn't gain credibility until those big companies invest in it.

Jamon Holmgren:

Totally.

Robin Heinze:

So we're really happy to see a lot of really well known players entering-

Jacob Thornton:

Definitely.

Robin Heinze:

... the React Native world.

Jamon Holmgren:

As opposed to Flutter which Google could kill tomorrow.

Robin Heinze:

Hey, now.

Jamon Holmgren:

I don't know if the editors will cut that one.

Robin Heinze:

I don't know. Totally leave that one in.

Jamon Holmgren:

We've already ticked off the Flutter community too much. Yeah, no, that's a fantastic kind of arc there. I think the Airbnb side of it, we've talked to a few people, we've even had some people on the program and a lot of it wasn't so much technical and it was a lot more organizational. So I'm really interested to hear more about that side.

Robin Heinze:

Yeah. It was less about React Native itself and more that it didn't fit with what Airbnb was trying to do as a company.

Jacob Thornton:

Yeah, totally.

Jamon Holmgren:

They didn't really have that support. You folks did a great job of rallying support internally and externally and having Facebook there. I mean, that all makes sense to me.

Jacob Thornton:

Yeah, definitely. I mean, so much of changing. For context, I also worked at Twitter way back in the day and we had replatformed everyone off of Ruby and onto Scala. So, I had that firsthand view of how important cultural buy-in and, or getting people excited about the technology versus just shoving it down their throats kind of. It is honestly something that can be really easily overlooked, but I would say, it's by far the most important thing, especially if you're replatforming a massive organization or business.

Robin Heinze:

Definitely. So that leads to my next question, which I think every company that does a React Native transition probably faces, is that the process of getting developer buy-in and transitioning your developers. I think you mentioned that you had both Native and web developers moving to React Native?

Jacob Thornton:

We seeded the group originally with Native and web developers and so our thinking there was, Native engineers understand Native platforms, period and they're absolutely instrumental in making us achieve the look and feel of a Native app that we really wanted. The worst case scenario was that we build something that looks like a website or something like that-

Robin Heinze:

Totally. It looks like a-

Jacob Thornton:

.... and ship it to Android and iOS engineers and [inaudible 00:21:28] and yes, and all that everything else. That was really important. I also think that was a lot of advice, again, we got from the community pretty early on, which is just like, yeah, when something goes wrong, you need to open up like Android studio, you need to open up X. Just all these different tools, it's going to be helpful in profiling performance. Is going to be helpful in all these other ways.

Jacob Thornton:

Me coming from a web background, I was like, "Okay, I know a little bit of Swift and I can get around there, but I'm going to be completely lost when Android is crashing." It's like, I'm not getting any logging in the console and all that kind of good stuff. So having Native engineers and Native engineers happy and capable to dive into that stuff and help us work through a lot of these problems was just outrageously important.

Jamon Holmgren:

I came from originally a web background, but I did Native iOS development and I always felt like React Native has a surplus of web developers. There are a lot of people coming from React JS, which is great. It's fantastic to have that community.

Robin Heinze:

I mean, it's one of the selling points, right?

Jamon Holmgren:

It is. It's like this natural onboarding. But we need more Native developers to be doing React Native. I think that's happening. We're seeing more Native developers moving to React Native, but we need that perspective. I think that collision of Native and web developers allows for the best ideas to pop to the top, while still having the standards that Native engineers would have for a mobile app.

Jamon Holmgren:

It's like the technology because of the way it's constructed has forced these two groups together in a way that is sometimes uncomfortable, often uncomfortable, but it leads to so much clutter in the-

Robin Heinze:

Yeah. There can be clashes, because there's a different culture between them-

Jamon Holmgren:

Cultures and-

Robin Heinze:

... as in terms of rigor and what kinds of things are important. Poll requests get a little bit contentious sometimes.

Jamon Holmgren:

They can. They totally can.

Robin Heinze:

Native engineers tend to care about different things and web developers just want to ship it.

Jamon Holmgren:

They've been bitten by different things. Right?

Robin Heinze:

Yeah, exactly. Just out of curiosity, what did the training process look like for both the web and the Native engineers to get up to speed on React Native.

Jacob Thornton:

We did it in three phases, I would say. Three phases with the final phase also being made up of three things. So bear with me. I'd say that the first group was a small group of us and I'd say we were just told to figure it out. We were like a higher level of engineers. So the expectation was like, "Oh, they'll just like figure it out and work with Harry. I paired a little bit with the pro team that had already been doing some work there and Harry had already grown that team out. There's also a guy named Lucas who had some experience with React Native, who was awesome.

Jacob Thornton:

So, we were able to learn some basic stuff there and then just feel it out for a little while, make a lot of mistakes and go back and delete them, slowly try to refactor them away. So I'd say that was the first bit with the UMO project.

Jacob Thornton:

Then when we actually started underway with the retail app and we brought in some Android Native engineers, so Bruno and Diane, who were awesome, they were basically added to a team of four web engineers. These two Android engineers, we essentially put them through like a mini TypeScript class that lasted... gosh, Nick and I taught it over the period of maybe three or four weeks as they were halftime still developing the Android app and halftime listening to Nick and I try to explain Reacts and why TypeScript is not Kotlin and all kinds of goofy things. I would say that was pretty fun, pretty loose though, because there were just two folks.

Jacob Thornton:

Then after that, we just got into the code, we done a ton of pairings, so we just would pair people together. I think, working with Diane, for example, and having an Android engineer pairing taught us a ton about the ecosystem. At the same time we were able to say, "Oh yeah, this is a hook. This is why we're using the hook this way and not this way." And everything else.

Jacob Thornton:

That went on for a while and it was pretty good, but it's really hard to scale that type of learning and mentorship. So when you go from trying to add a group of two to five Native engineers versus 30 plus Native engineers, you can no longer goofily pair through and make jokes and figure it out as easily. So that's when we kind of pulled back and created an entire a lot more thoughtful kind of way of getting people into React Native.

Jacob Thornton:

This was largely the remaining Android migration of Native engineers. There were three different pieces of this big migration. So there was all led by a different person. So there was like a course thing that actually Harry did a lot of thinking there and really drove forward. There was an entire mentorship traunch.

Jacob Thornton:

Essentially, if you imagine a timeline, first couple of weeks, you would go through this course. I think it was like two to three weeks and then you would be paired with a web expert, which we had a way more web engineers than Native engineers. So we were like, "Okay, we can pair and create like a TypeScript mentor relationship and embed them into a web project. Have them write code and lead some web project for..." I think they ended up doing this for a couple of weeks, four to six weeks, get comfortable in the React ecosystem, get comfortable with hooks, get comfortable with TypeScript and have a lot of resources that are already there with TypeScript.

Jacob Thornton:

After that, we had contractors that we hired to be React Native mentors because we had this small core that we considered React Native experts, but we couldn't just dump all of our Native engineers and be like, "All right, good luck experts." Because, we still have to write code and ship product to do everything as well and we would have drowned it.

Jacob Thornton:

We hired a few folks to help supplement mentorship of React Native. Then we staggered people coming in to the actual mobile code base from Native and three groups. We could limit it to around eight to 10 people at a time so that we had enough one-to-one mentorship coverage for people that had React Native stuff, alongside of Slack channels and office hours and lots of things of that nature. Also, a lot of long hard conversations about just culture and what we want and how we can keep it mobily and all that kind of good stuff.

Jacob Thornton:

Yeah, I'm sure I'm probably missing something, but from a very high level that's how we went about it.

Jamon Holmgren:

That's fantastic, Jacob. I want to piggyback on the culture, you alluded to the cultural kind of shift that had to happen there. I want to throw this over to Brent, because I know that you are a piece of this as well. Brent, what was your perspective on how you were able to work on merging the web and mobile teams and make all that work from a cultural standpoint?

Brent Walter:

Yeah. A great question. When you think about the stereotype, the trope of React Native is, oh, it's cheap and easy and fast, you can hire some web developers and throw something out. You think about the core of the ethos of the Android and iOS ecosystem is, we're Native developers and we care about quality, every pixel matters, we're curators of the user's experience in this ecosystem and we care about everything that the user touches on that little device.

Brent Walter:

So, a big part of making that transition work was not only saying we're making a business decision for React Native, because it's part of our strategy and we think it can enhance collaboration, but also we can build a better product that is higher quality than what we're doing today.

Brent Walter:

So, part of that was making sure we followed through on not only the messaging around that and being authentic, but putting boundaries around net promoter score and ratings and performance and key business metrics and showing clearly that, if this isn't successful, we're not going to ship it.

Brent Walter:

So when we launched Android, it was very clear. We told the iOS engineers, "If this isn't successful, it's a failure, there's no way we're going to replatform iOS. Only after it's successful, then we take that next step." Having that transparent communication and that trust and holding a very high level of quality means that the Native engineers are willing to take that leap of faith. When you also then give them that fairly expansive education and replatforming support saying, "Your skills are valuable. We want to use your expertise and your platform knowledge and keep you at this company. We want to build better applications and we think this is better for Coinbase, but only if you come along with us."

Brent Walter:

That framing is what makes that merger work, where you have React, which is a wonderful technology, a fantastic architecture, relatively unopinionated, combined with Native expertise and platform APIs, you can create that much better of a product for your end users. That's what we found through this journey is that we can ship products faster, but also all of our business metrics and quality metrics also went up into the right.

Robin Heinze:

Yeah. I think that's a really, really smart way to approach it. Don't treat React Native as a cheap and easy tool, treat React Native as a really powerful tool that can build amazing apps in conjunction with Native knowledge and Native tooling.

Brent Walter:

If you want to make a very performing Android iOS app, you have to invest heavily in performance profiling and debugging and get deep into those systems. The same thing as with React Native. It's not a slow or fast technology, it's are you spending the time and investing to make it a high performing application? The answer is, you can absolutely do that, you just need to spend the time and invest in it.

Jamon Holmgren:

I think that the sort of emotions and feelings matter around this too, because someone coming in with a brand new technology, you've spent a lot of time as a Android and iOS engineer, refining your knowledge and getting really good at a technology and now they want to come in and for "business reasons", bring in another technology and that you're not very good at maybe yet. But reframing it and saying, "Hey no, we need you here."

Robin Heinze:

We need you and your knowledge to make this-

Jamon Holmgren:

Yeah. With your specific skills.

Robin Heinze:

... a great product.

Jamon Holmgren:

Incredibly important. Because, it's true. That's the thing, that's why it lands, is because it's true. It's totally true. We've seen a part of this where we've rebuilt Native apps where the Native team has completely quit, they're just gone. They're like, "Well, you're moving to React Native. Okay. We're done." The way that it was handled was not great. So then they reach out to a consultancy, of course we do our best, but it always reveals that like, hey, they approach this the wrong way. So I really like what I'm hearing from you.

Mazen Chami:

Building on this, did you guys have any trouble recreating anything specific in React Native and, or did you have to keep anything Native going back to keeping both Android and iOS engineers involved in the process?

Jacob Thornton:

Yeah. That's a great question. Most of our app is TypeScript. I think we created a date or I want to say maybe some sort of date picker or a calendar picker, and UMO and that's really the only thing I can think of beyond we have React Native camera and other things like that, obviously that are like Native integrations. But that we actually wrote in-house. It's almost exclusively TypeScript.

Jacob Thornton:

Now, were there things that were difficult to do? Yes, for sure. I think as you all are super aware that a lot of interaction work is really, really challenging. I think anytime you're going over the bridge a ton and during a sort of interaction it's really hard to get right and feeling really, really good.

Jacob Thornton:

We're not yet on Reanimated 2, so maybe that's like a spoiler for some folks, but which we could go into a probably a whole tangent on, but I'll try not to do that. I'll just say we aren't yet on Reanimated 2 and we aren't on Hermes either as a result also.

Jacob Thornton:

So, being on Reanimated 1 and having this kind of bridge traffic to deal with, we're lucky in that a lot of our app doesn't rely on a ton of interactions, but there's a handful... well, the one that's coming to mind that I spent a week of my time personally, up every night trying to figure out was our tab integration. I wrote a blog post on this, actually.

Robin Heinze:

Mm-hmm (affirmative). I think it was in our newsletter.

Jacob Thornton:

Oh, okay, awesome.

Jamon Holmgren:

Yeah. I think so.

Robin Heinze:

I'm pretty sure.

Jacob Thornton:

Yeah. I am just so extremely stubborn with things like that and I have a lot of UX friends and a lot of designer friends, so I know they just roast me whenever the app has something like that, that doesn't look or feel right. So, I personally was like, "No, I'm going to get this." It was really, really, really tough to do right and get the performance there. But again, it just goes back to, I don't know, I feel like I was in web development from so long where we were doing all this absolutely bananas stuff to make these things that looked and feel really, really good.

Jacob Thornton:

Then eventually web technology caught up to the point where everything felt really easy. In React Native, it kind of felt the same. I was like, "Okay, I can still get this to do what I want to do." But maybe in the special places where I want it to be a little more delightful, I have to roll up my sleeves a little bit and put in a little more time and work."

Mazen Chami:

Going off of that, there was no platform divergence then, so you guys pretty much kept everything in TypeScript and didn't have to create Android specific or Iowa specific code?

Jacob Thornton:

Yup, exactly.

Mazen Chami:

Excellent. Cool. When you were rewriting the app, did you guys aim for 100% duplication or were you looking at adding in design changes along the way as you were working? What was your process with that?

Jacob Thornton:

There's this guy named [inaudible 00:36:02], who's a fantastic designer at Coinbase and he joined the project as a PM and designer combo, we were real scrappy. So, from my history, I created this thing in Twitter called Bootstrap, that's quite popular.

Robin Heinze:

Wait, you created Bootstrap?

Jamon Holmgren:

You created that?

Jacob Thornton:

Yeah.

Jamon Holmgren:

Okay. Well, I've used that a few times.

Robin Heinze:

I feel like you should brag about that more, because that's-

Jamon Holmgren:

Yeah. That wasn't in your bio.

Robin Heinze:

... quite a claim to fame right there.

Jacob Thornton:

Yeah. It's a good one. Yeah. Anyways-

Robin Heinze:

That's what I'm going to tell my friends later. Just like, "FYI, I talked to the creator of Bootstrap today."

Jacob Thornton:

Yeah. So my friend Mark and I created Bootstrap a long time ago, and I've just thought about, and been in the design system space for an epically long time. One thing really powerful about design systems is they abstract away, especially in the context of React Native, a lot of the sort of functional layout, display type things for you. So, as you're replatforming, a bunch of engineers from different like Swift engineers and Kotlin engineers coming from different backgrounds with different ways of laying stuff out, it's much easier to say, "Okay, this is how we do it in this design system. If you would just want a bunch of cells or whatever, to lay whatever out, it's quite easy."

Jacob Thornton:

So, we just leaned extremely, extremely hard into that. I think we got a lot for free as a result.

Jamon Holmgren:

Yeah. That's awesome. I have a bunch of questions that I want to ask you about Bootstrap now, but I'm not going to...

Robin Heinze:

Yeah.

Jacob Thornton:

Sorry about that.

Robin Heinze:

It's like, can we have you back on just to talk about that? No, I'm just...

Jamon Holmgren:

Right. Yeah. So one thing with cryptocurrency is obviously security and privacy is a huge concern within just the entire space. Did you have any kind of concerns about security with React Native, or did you feel like the way that it approached... or I guess, the affordances that it gives you were sufficient to hit your goals on that?

Jacob Thornton:

Yeah. That's a great question. We have a really, really amazing security team at Coinbase. I can't say enough about them. I definitely feel like the most secure I've ever felt ever.

Jamon Holmgren:

That's awesome.

Jacob Thornton:

I think that there's the first month or so where you fight it, because you're like, "Oh my God, I have to have all these different key fobs and things to access anything and all this different two factors and retina scans or whatever, and just banana stuff."

Jacob Thornton:

I think after a while you are just like, "Okay, I get it. We're dealing with money and they're taking this very, very seriously." Our security team, like I said, it's gangster. It's so good. As a result, everything we've done get scanned all the packages and stuff that we include, go through an auditing process, anytime we upgrade anything. All of our PR's, all of our technical design docs, all of this stuff goes through security reviews. By the time everything gets vetted and signed off on and gets the green light, we feel pretty good that we're going to have a good time out there.

Jacob Thornton:

That said, there's always unknown stuff. I think that's again where the security team comes in and they are super responsive. We have dedicated security people per each business unit, essentially at Coinbase and people, if there's a fire, they'll jump in and make sure we get out of it.

Jamon Holmgren:

You mentioned a couple of libraries that you guys are using currently. Are there any other community libraries that you're using? If so, what was the criteria in selecting them?

Jacob Thornton:

Yeah. We're using a good amount of libraries like React navigation for examples is a major one. We're using React Native camera, like I said. Oh my gosh, putting me on the spot. I'm sure there's a ton.

Robin Heinze:

I'm sure the list is long.

Jacob Thornton:

Yeah. Let me just recite the package JS of from memory now.

Jamon Holmgren:

Yeah, exactly. Are you really the [inaudible 00:40:17]-

Jacob Thornton:

Yeah. Oh, busted.

Jamon Holmgren:

What about state management? What do you use for state management?

Jacob Thornton:

We actually have two teams now that we have created that are in the client foundations team, which is like our client infrastructure team. One of them is our data layer team and so they're in the process of moving us to GraphQL and we also have this thing called Instant Hooks, which is like an entire hook based data delivery system for realtime updates for our candle sticks and order books and things. It's a whole massive massive thing.

Jacob Thornton:

Again, if you want another guest, I can introduce you to a guy who's will blow your mind with-

Jamon Holmgren:

I'd love that.

Jacob Thornton:

... thinking around data stuff and state-

Robin Heinze:

Oh, we still have to do state management part two.

Jamon Holmgren:

Yeah. We still have to do that [inaudible 00:41:04].

Robin Heinze:

Yeah. So, that can be fun.

Jacob Thornton:

Yeah.

Jamon Holmgren:

I mean, I can talk about state management all day long. I'm the primary maintainer of MobX-State-Tree, so it's something I really enjoy.

Jacob Thornton:

Oh, nice. It's awesome. Very cool. We use MobX on web for a long time. I like MobX.

Jamon Holmgren:

Yeah. It's cool. Well yeah, I'm not going to get on this tangent, because we'll be-

Jacob Thornton:

You're like, it's so cool, let me tell you about how cool it is.

Robin Heinze:

Stop.

Jamon Holmgren:

Yeah. Let's keep going. Yeah, no.

Robin Heinze:

Okay. Cut you off.

Jacob Thornton:

Oh, one thing actually just really quick. I do not want to miss the second part of your question, which was how did we select the packages that we do select? There was a lot of criteria here. I think in general, we actually opted to when reasonable rewrite a lot of things versus use external third party stuff, partially for security concerns, partially because especially, when we started this project, React Native still felt pretty early on. So, the quality of a lot of the projects or packages that were out there and the ownership maintenance thing coming from an open source background with Bootstrap and a handful of other open source things, I totally get it. It's a massive, and I'm sure you do, as maintaining the MobX. I know and I'm sure you all have worked with this. It's maintaining open source is a ton of work, and it's really scary to rely on some of these packages.

Jacob Thornton:

In general, I'd say we went for less is more kind of strategy. There is the React Native like blessed repo that has like a bunch of packages. I can't think of it. Whether its community repo off the top of my head. But most of the packages we rely on are hosted from there, except for maybe a handful.

Jamon Holmgren:

Yeah. I was part of that process of extracting a lot of modules from React Native and into the React Native community repo. I extracted for example, React Native WebView out of there and have been involved in maintaining it since. Normally, for projects and apps, I would be like, "Use third party modules. It's just gonna make your life easier in so many ways." But something like Coinbase, it actually makes you feel better that you're taking a more hands-on approach.

Robin Heinze:

Literally own your dependencies, roll your own-

Jamon Holmgren:

Yeah. Say, own your dependencies.

Robin Heinze:

Even if it means like taking some code and looking at, okay, I like how this works, copy, paste.

Jamon Holmgren:

Yeah. Dropping and-

Jacob Thornton:

Yeah, exactly. We are definitely in a unique place, that you're dealing with people's financial stuff.

Jamon Holmgren:

Yeah. You don't want to just have like a bought auto update in everything in releasing.

Robin Heinze:

No. Definitely not.

Jacob Thornton:

No. Deeply no.

Mazen Chami:

In my past, I've had to do a lot of work with charts and I really like your charts in the app. If you don't mind me asking, is it custom built or did you guys use a library that's out there?

Jacob Thornton:

Yeah, that's a great question. I believe we're using D3 right now actually, or some pieces of it. I know that we went back and forth on this a number of times, we have some internal home baked one. I know we were using on web for a while. We had our own charting layout thing.

Jacob Thornton:

I think that Kat, who's leading our design system stuff, shout out Kat, she took on charts, basically completely on her own for a good amount of time to get them again, perform it. It was really hard. I know she spent a bunch of time on getting gestures and scrolling back and forth on them, all that sort of stuff, updating.

Jacob Thornton:

She did so much work around trying to... actually, when you scrub over a chart, we update some of the text things in the UI. I remember she was using inputs at one point and updating the input values and things like that. Just little hacks to try to prevent the app from re-rendering or redrawing things out. But I believe with the actual lines of the chart, she was using something like D3 or something. I can't remember exactly.

Jamon Holmgren:

Yeah. They really are beautiful. Although today, the data that is being displayed, isn't so beautiful as we see a big drop-

Jacob Thornton:

Right. Classic.

Jamon Holmgren:

Yeah. One last question for Brent, when you were doing this kind of integration of the teams, what would you say were, I guess, the biggest challenges in doing that, and then also, what were the biggest successes that you saw come out of that, that you're most proud of?

Brent Walter:

I'd say that, the biggest success is that, now within our retail organization, we have a product excellence group and it's made up of former Native engineers who are now taking over the mantle of React Native development for their teams and are the drivers of quality and performance and JavaScript standards and patterns for that code base. The lead of that was a former iOS engineer. Just seeing that transformation from fearful and reluctant and hesitant to excited and passionate and leading, to me is the biggest success of watching that transformation.

Jamon Holmgren:

That's fantastic. Yeah. What would you say were the biggest challenges? I mean, you've talked about some of them so far, but just to put a pin in it.

Brent Walter:

The biggest challenge is getting buy-in and retaining trust. You can make a decision and it can be for the right reasons, but if you aren't honest and transparent and you don't share that in a vulnerable way with folks, they don't want to come along for that ride because essentially, they don't trust you and they feel like you're forcing them to change careers. Because going from iOS or Android development to React Native is a change in career.

Brent Walter:

I think the leadership team at Coinbase did a phenomenal job with empathy and honesty and transparency. Also, Coinbase as a company, the vision and the mission and ethos and the way the company operates was enough of an incentive when the time and place, so people would take that leap of faith. Because you can imagine, if you had a company that people are already unhappy about that they already feel, isn't going to be successful and isn't going to treat them well, they're not going to bet their careers on this transition.

Jamon Holmgren:

Yeah. That makes a lot of sense. I guess what I'm hearing from you and what I really love is, if other companies are considering making this transition and I'm sure that they're going to be listening to this podcast. It's that we get feedback all the time like, "Oh, I use this podcast as part of my research for this transition."

Jamon Holmgren:

What I'm hearing is that you do really need to get those parts right. You really need to get the trust right. You need to really listen to people. You need to understand what they're concerned about and have them understand what they're bringing to the table in terms of their knowledge set and their value.

Jamon Holmgren:

Like you said, turning them from being unwilling, which is a natural thing, don't get mad at them for that, that's a natural human thing to be reluctant about this stuff, to then becoming advocates and be becoming excited about the new direction. But also doing it in a way, like you said, it was totally a possibility that you would've said, "This didn't work." That was on the table as being an outcome. It wasn't a predetermined outcome. So, it was like, if we're going to use this, it's because we like it, not because we just made an organizational decision and we have to go with it.

Brent Walter:

Yup, absolutely. It's getting alignment on how you're going to make the decision and why you're making this bet in this test. Then clearly communicate that information every step of the way saying, "This is what we think isn't best for the company. This is what we're going to try to do about it. Here's our next milestone. Here's how we're going to make a decision at that next milestone."

Brent Walter:

Then, just being very honest about that transition and then helping people go along with you on that journey. If they believe just as you do as a leader, this is the best decision technologically for the company and for the product and you're making the decision for the right reasons, then they're in a position where they can either decide that staying with the company and growing and learning of this new technology is in my benefit. Or, they can make the decision going, "My career is actually sticking with iOS or Android and this is something I would rather do despite everything that's around me." Then that's okay too.

Brent Walter:

Because if you asked me if I had to go learn Scala tomorrow, I'd be like, "No, thank you."

Jamon Holmgren:

Yeah. As an old Ruby dev myself, I think moving to Scala, would've been an interesting thing back in the day. I really loved Ruby and I went away from it kicking and screaming. But I mean, you move along with your career. I was really, really interested in mobile and while there were some options to do Ruby on mobile, they weren't long lasting and they didn't stick around. So if I wanted to be on that platform, I had to grow.

Jacob Thornton:

Definitely.

Jamon Holmgren:

Awesome. Thanks so much, Brent and Jacob for being on the show today. It is fantastic hearing from you and hearing about your journey with Coinbase, very, very much appreciated. Where can people find you online if they want to follow you and see more content?

Jacob Thornton:

Good question. I have a super inactive Twitter account, twitter.com/fat. F-A-T.

Jamon Holmgren:

F-A-T.

Jacob Thornton:

F-A-T.

Jamon Holmgren:

Okay.

Jacob Thornton:

GitHub, F-A-T also. Medium, F-A-T also. That's where I am mostly online. Although, I'm pretty hard to find in podcasts here and there.

Jamon Holmgren:

What's the story between F-A-T?

Jacob Thornton:

F-A-T, oh my God. That's for another podcast, long story.

Jamon Holmgren:

Brent, where can we find you?

Brent Walter:

Yeah. Online, I'm a ghost, so the best place to get anything from me is the stalking on LinkedIn probably. Then look for more blog posts coming out from the React Native engineers at Coinbase, because we have a giant series of technical deep dives and a lot of the parts and pieces that Jacob talked about today over the next handful of months and quarters.

Jamon Holmgren:

Perfect. Yeah, definitely will be tuning into that. People can also check those out. We'll most likely be putting them into our newsletter, reactnativenewsletter.com.

Jamon Holmgren:

Robin, you can find her at @robinheinze, Heinze with an E. Mazen, you can find him @mazenchami. You can find me @jamonholmgren. React Native radio is @ReactNativeRdio on Twitter, because Jacob didn't give us enough letters when he worked at-

Jacob Thornton:

Smart

Jamon Holmgren:

He figured three was enough for anybody. As always, thanks to our producer and editor, Todd Werth, our transcript and release coordinator, Jed Bartausky, our social media coordinator, Missy Warren, and our designer, Justin Huskey. Thanks to our sponsor, Infinite Red. Check us out infinite.red/reactnative.

Jamon Holmgren:

Thanks to all of you listening today. Again, thank you to Jacob and Brent for joining us today. We will see you all next time.

Robin Heinze:

Bye.