Back to all episodes

RNR 343 - Discord's Journey to React Native with Chas Jhin

September 12, 2025
40:09
E
343
Chas Jhin, Mazen Chami, Jamon Holmgren, Robin Heinze

Chas Jhin, Director of Engineering for Discord, joins our hosts to unpack Discord’s adoption of React Native. Chas opens up about Discord's experience adopting React Native, performance challenges, and the New Architecture.

 

Show Notes

 

Connect With Us!

 

This episode is brought to you by Infinite Red!

Infinite Red is an expert React Native consultancy located in the USA. With nearly a decade of React Native experience and deep roots in the React Native community (hosts of Chain React and the React Native Newsletter, core React Native contributors, creators of Ignite and Reactotron, and much, much more), Infinite Red is the best choice for helping you build and deploy your next React Native app.

Todd Werth:

Welcome back to React Native Radio podcast, brought to you by me. I'm sending out a big hug to everyone who hears this episode 343 Discord's journey to React Native with Chas Jhin.

 

Jamon Holmgren:

Robin, did you say that you've been playing chess lately?

 

Robin Heinze:

Sort of.

 

Jamon Holmgren:

Okay,

 

Robin Heinze:

So I found out that Duolingo now offers chess as one of its language, language options, so you can learn chess through Duolingo.

 

Jamon Holmgren:

Oh

 

Robin Heinze:

Wow. And I started doing it. That sounded really fun and I love it. I'm not very good yet,

 

Jamon Holmgren:

But they're like lessons.

 

Robin Heinze:

Yeah, they were little. I mean it's like if you've ever done Duolingo, they're like little bite-sized, just repetitive examples, puzzles, like little lessons, but you're practicing things like checkmating and exchanging and all the different sort of chess concepts and you just kind of do it over and over again in little bite-sized pieces. And then every once in a while the lesson will be just a full game and you play the person and it adjusts automatically to your skill level and it also tracks, it calculates your elo every time you do a full match, it tells you what your ELO is. I've been really liking it. I find it super, super engaging and it's the most Duolingo XP that I've ever done. I just want to keep playing, whereas when I'm doing Spanish or something, I get bored after a few lessons and then I put it down, but I've been really enjoying it.

 

Mazen Chami:

It's like you do move my night to a four or whatever,

 

Robin Heinze:

But in Spanish, the little guy will just be solve the puzzle and it's like a chess board and you have to figure out what the best move is in that configuration. Usually it's checkmating or taking their queen or some big move like that.

 

Mazen Chami:

That's a cool concept. Integrating a game gamifying

 

Robin Heinze:

Essentially to learn. It's made me Duolingo more and chess more, so

 

Jamon Holmgren:

There you go. I always say that I'm glad I didn't discover chess until later in life because I think it scratches the same itch that programming does for me, and I don't know, it's harder to make a living with chess, so it's a good hobby. But

 

Robin Heinze:

You weren't going to be the next Magnus Carlson?

 

Jamon Holmgren:

Very unlikely. I'm only half Norwegian, so yeah, I still play chess from time to time. It's usually more like, well, I mean I play daily games all the time, but that's like you make a move and then my cousin in Minnesota a day later might make his move.

 

Robin Heinze:

It's like worth his friends, but

 

Jamon Holmgren:

Yeah, exactly. It's just kind correspondence, chess sort

 

Robin Heinze:

Of,

 

Jamon Holmgren:

Which is fun. I enjoy it. And my cousin is determined he's going to beat me to a hundred wins, but I think I have 20 left and he has about 80 left.

 

Robin Heinze:

Well, maybe when I get enough confidence I can start playing correspondence chess with you two.

 

Jamon Holmgren:

Oh, I'm totally down. Yeah, chess has been a lot of fun. Even last night I was watching chess, YouTube and I looked at a tournament like the top 10 finishers from a tournament and I told my wife, it's kind of sad. I know all of these players. I know all these players. I've been spending way too much time following professional chess. Anyway, it's fun. That's cool that Duolingo does that. Anyway, we should probably talk about React native though. I do want to ask our guest here, Chaz Jim, director of engineering at Discord. First off, welcome to the podcast.

 

Chas Jhin:

Thank you. Thank you. Thank you for having me.

 

Jamon Holmgren:

I appreciate having you on. Do you play chess?

 

Chas Jhin:

Not well, not at your level, that's for sure. Nobody saying anybody

 

Jamon Holmgren:

Here is good at it,

 

Robin Heinze:

So I'm hoping to change it.

 

Jamon Holmgren:

Yeah, exactly. Yeah, I don't know. It's a lot of fun and it seems to jive well with a lot of what us programmers.

 

Robin Heinze:

I

 

Jamon Holmgren:

Don't know, just for some reason just the puzzles seem to kind of dial in there. Chaz, can you give a little background about yourself?

 

Chas Jhin:

Of course. So I am the director of engineering at Discord for client platform. And as some of you might know, discord is primarily a chat app. It's used by a lot of different folks, primarily by gamers, but also a lot of communities use Discord as well to kind of connect and majority of users are on desktop or mobile. And so those platforms, we use a lot of cross platform frameworks and libraries, so our web app is in React. The desktop apps are basically the same React app in an electron shell onto Windows and Mac and Linux. And then on mobile we use React Native, hence why I'm here for Android and iOS and some similar platforms. As a result of all of those cross-platform libraries, we have a team, a group of folks at Discord that think a lot about the foundational work, keeping React Native and React up to date. And we also care a lot about performance and quality. We've found that small changes to performance metrics, metrics sounds so boring to the feel of the app. When the app loads faster, when it feels smoother, it actually has a pretty big impact on user engagement, which then obviously impacts the business. That's Discord. And then, I don't know, maybe talk about other stuff too, if that's interesting.

 

Jamon Holmgren:

Yeah, well how long have you been doing it? I feel like you've been coding professionally for a little while now.

 

Chas Jhin:

Yeah, so I've been fortunate enough to get to work at a couple of different startups over the course of my career, which has been a lot of fun. Started as a software engineer. I studied computer science in college. I started at a data science startup for a few years, so I got to learn some data science machine learning stuff before it was actually AI just kind of got lucky and I ended up joining a company called Cameo pretty early. They do celebrity video shout outs, which are a lot of fun. And yeah, I joined as one of the first engineers and then kind of ended up building and growing the team there. So that was definitely a very interesting ride. We grew very fast. I learned a lot of things the hard way, but we also had a lot of fun. We built some stuff that people really loved. The primary app at Cameo was also a React native app. And so really all the startups we've been at, I did a few other startups after that, a childcare startup, a climate tech startup, and not intentionally, but all of those actually either had a React native app or I was working on a React native app. And so I've had some experience with that through the course of my career, which has been a nice connecting thread

 

Jamon Holmgren:

I guess. Yeah, yeah, that's awesome. Well, you're in the right place then. React Native Radio. We're glad to have you here. Before we get into our topic, let's talk really quickly about our sponsor, infinite Red. We are a premier React native consultancy located fully remote in the us We're about 30, actually about 33 now, senior plus level React native consultants and support staff, and we've been doing this for getting very close to a decade. If you are looking for React native expertise, hit us up at Infinite Red slash Radio and don't forget to mention that you heard about us through the React Native Radio podcast. Alright, let's talk Discord and React native. I actually think this story is very interesting from the very beginning. It seems like when Discord went to mobile React native was sort of the play, at least initially on iOS. Walk us through that decision to use React native at Discord.

 

Chas Jhin:

Of course. Yeah, I think the whole hindsight is 2020. I think for Discord it is really fun to look back because maybe a little bit of luck and a little bit of skill. I think we ended up making a choice that we still really are really happy with and I honestly think at the time was not maybe the obvious choice, so we were pretty early to React native and maybe to give is it okay if I can give a little bit of backstory? So this is public knowledge, but Discord originally was not a chat app, it was actually a mobile game studio and the game was called Fates Forever and it was this mobile moba like doda League of Legends like game. The founders loved building games and so they were building it and the game was doing okay, but what they found was that the feature that people really liked was the in-game chat feature they had built and also this guild coordination feature thing.

And so then eventually they pivoted over to that and the rest is history. But from a technical point of view, I think the thing that's fascinating is that the very first version of that Chat Guild coordination app was a web app and it was built in React, and this was back in 20 14, 15, maybe even earlier. And so this was an early React. React had been on the scene for a little while, but I think at the time at least my memory when I was working then was Angular was maybe the more popular framework and React was maybe up and coming but was certainly not the obvious choice. And so I think we got maybe a little bit of luck or I think a lot of credit to Stan, our CT and co-founder. I think a little bit of skill there as well. And so then as we leaned into Discord, the actual chat app, we eventually got to the point where we realized we needed a mobile app because users wanted a mobile app, they wanted to be able to continue chatting outside their desk so to speak. And so again, kind of made the choice. Stan actually spent a weekend and kind of just built a prototype in React Native, which at the time this was early React native, so I think it had been released maybe a few months prior by Meta and so it was just on iOS. Android hadn't been released yet, but kind of took the web app and ported it over on a weekend and it mostly worked. It didn't fully work, but it mostly worked

 

Jamon Holmgren:

And it was good enough to be like, you know what, let's do this. And so from day one we had a React web app or maybe day 90 or whatever, react web app, a iOS React native app, and then an Android just standard at the time Java app. And so the mobile code base was basically a whole bunch of conditionals that said if Android go Java and if not, go React native. So that was kind of the start. The piece has kind of fall into place here. This kind of makes sense why Discord originally appealed more to gamers I guess, and that's still kind of a big contingent of people

 

Robin Heinze:

That use Discord. Oh, I'm pretty sure Disco. My husband was using Discord in 2014 and 2015 when you were brand new

 

Jamon Holmgren:

Because

 

Robin Heinze:

He's a hardcore gamer,

 

Jamon Holmgren:

But

 

Robin Heinze:

It's much more than what's this Discord thing?

 

Jamon Holmgren:

And it's much more than that now, of course a lot of companies use it

 

Robin Heinze:

Open, see a lot open source. We see lot in tech

 

Jamon Holmgren:

For

 

Robin Heinze:

Community chat platforms.

 

Jamon Holmgren:

Yeah, I'm building a game and I have my Discord community. People can jump in and kind of follow along.

 

Robin Heinze:

The React core team uses Discord for their

 

Jamon Holmgren:

Community

 

Robin Heinze:

Chat

 

Jamon Holmgren:

Discord is a big deal and it's kind of funny to me also that Slack's origin story is kind of similar where it came out of a game and they needed a way to communicate and built Slack as a side thing. And that became of course, much bigger than the game ever did. Yeah, very, very interesting stuff.

 

Mazen Chami:

I also kind of want to highlight something you said there that I think our listeners, given that you're probably React native, all React native developers, probably not really surprised by it, but it speaks to React Native a lot. As you said, your CTO and co-founder back in 2015, that time when React native was still young, spent a weekend to transform an app that is right now very successful over to iOS. That speaks a lot to React Native and its core foundations. So back then it was only iOS and the fact that he was able to do it in a weekend and put together a really well rounded app, you said some features weren't working, but still he got it well enough on its point to where it, what's it called? It kind of launched you guys into transforming into being a chat app and that speaks to a good foundation was laid at that point just over a weekend. So I think that's incredible in its own sense.

 

Chas Jhin:

Absolutely. And I think that it's a pattern that we've probably all seen a few times since we've worked on React native at various places. It really is a very powerful tool to getting, they talk about 80 20, maybe even getting beyond 80%, getting to 85 or 90% or something like that, which is really nice. The last, I will say the Last Mile has its own very unique challenges, which maybe we can talk about later, but the first half is I think a very compelling value prop.

 

Jamon Holmgren:

Yeah, I definitely want to talk about that for sure. I guess because it was early on and because it was a CTO doing this, my assumption is that alignment with the rest of the development team went okay, but was there pushback, do you know? Or do you think that overall the company was just sort of aligned on, okay, this looks like the right choice from a tech standpoint?

 

Chas Jhin:

It's funny because I think again, hindsight's 2020, we're so happy with where we are that I think if you were to ask anyone on the team like, Hey, how do you feel about the decision? Did you feel like it was a good idea? Everyone now says like, oh yeah, it was great. I think on the other hand though, there were a variety of challenges that we've had to face over the last, I guess decade now from a technical point of view where it probably wasn't always obvious. And I think maybe even the most clear point on that is that we were on React native and iOS on day one, but we didn't actually port our Android app over to React native for about six years and we tried the entire time to port it over. So we wanted to, even from day one, we had this feeling of meta just released React native iOS, Android's probably right around the corner, we'll just port it over the second they come around, it'll be just a few months, we'll be fine. That was the sentiment at the time. And obviously it took six years, so it clearly wasn't that easy.

And so I am sure if you were to ask any individual engineer in 2017, how do you feel about this right now? They probably would throw their hands up and be like, why is this not working? But now looking back, the team is, I mean we're pretty happy with it.

 

Robin Heinze:

Biggest, I mean what were the challenges on Android that prevented you from making that leap right away and then what eventually, I know you finally did it in 2022, I think what ultimately convinced you that it was like ready enough to make that change?

 

Chas Jhin:

So for us, the spoiler here is that I think the unlock was really Hermes being stable enough and being fully an Android, which was around 20 20, 20 21 something, it had to stabilize over a few months. So that, that's the spoiler end answer. But I think at a more bigger picture level, there's probably two things. One of them was that in the early years, there were just some features that were actually missing on Android with React native and things like certain kinds of scrolling interactions, certain kind of edge to edge detection, certain other, not push, but there was a few other libraries that kind of just didn't quite work. And I think a lot of those gaps ended up being filled by open source, third party libraries, so not directly by the meta team but by libraries like React Navigation or React Native screens or reanimated or something like that. But those didn't come out immediately and I think the platform, or sorry, the ecosystem had to mature I guess. So that's one. It's just like there was actually just straight up some features that were missing on Android that were present on iOS. And if you look at the React native code base from back in 20 16, 17, I remember there were conditionals in here or there was code comments that would basically just say, this doesn't work on Android, it just didn't implement it. And it's okay. I think it was the right choice for what they needed at the time,

But there was just things missing we needed. So that's one just feature gaps that ended up being filled by third party libraries and that was part of what helped us. But then the second part, and this is I think most related to Hermes was actually performance. I'm not entirely sure, it's hard to tell exactly why, but there were definitely key parts of our app as a chat app, being able to scroll through your messages quickly when you have a lot of them, like say millions of them or millions of people on a server and then some of the various animations that occur. Performance was really hard. We tried, it was almost like every six months from 2015 to 2021, we kept trying to port, we would spend a month, an engineer would do it spike, and they'd come back and be like, cold start time, 30 seconds. It's like, this is literally not going to fly. Can't do it, can't do it. Crash rate is 5%, which is 4% higher than Google plays bad behavior like this is not going to work. So we're dealing with lot of performance issues.

 

Robin Heinze:

Well, and yeah, for your use case specifically or scroll performance has to be on point because the entire content of your app is long list

 

Jamon Holmgren:

And what got in the way, a lot of times, and we'll talk about this later, but the legacy architecture, trying to measure table items, the sizes of them as you're scrolling and be able to accurately predict those things. That wasn't easy. It was actually hard to do with the legacy because it was like the asynchronous communication with the native side, but the new arc, we have a lot more options. There's a lot more things. And actually real quick, I know Zen's got a question. There's three articles that we want to point people to. Most notably the one from this year, supercharging, discord Mobile, and then there's also from 2022 when you switched from Android native to React native and then way back in 2019 talking about the effort to achieve native iOS performance with React Native. And we'll link to those in the show notes. So they're very, very interesting and detailed articles about how you did that. A follow up to

 

Mazen Chami:

That, Chaz, is how much of your app is built in the native layer versus the JS layer, and when did you determine to drop to the native to solve your issues and did that help within your Android? You mentioned performance and all that. Is that how you solved your performance issues along the way?

 

Chas Jhin:

Yeah, it's a good question and we definitely have had to leverage this balance between Native and JavaScript to get performance on both platforms, Android and iOS. I think the context of the backstory is a little bit helpful here to the actual next part of the answer, which is that the Android app probably has a little bit more native code because it started in native and went over to React native and the iOS maybe has a little bit less. The thing that they really share is that, and we've read about this in some blog posts, we've ended up having to implement a lot of the core chat feature itself, the actual chat screen, which is the most important screen to us from a user point of view in native code to get in particular the scrolling to work really nicely, especially when you've got a lot of rich media coming in and you're trying to be smart about how you're pre-cash things off the screen and floating them in.

Generally speaking, the chat is what's in native. The other thing, part of the reason the chat's in native as well is that for the most part, our chat interface doesn't change as much. And when I say the core chat interface, I mean where you're actually DMing someone that doesn't change as much as some of the other features. And that actually probably gets to another interesting topic, which is that one of the things that we've really enjoyed about React Native, that's not unique to us. And when I talk to other folks at larger companies with React native, they say the same thing, but it really has allowed our product engineering team to iterate really quickly and much more quickly than they used to be. And we have this kind of very not scientifically rigorous AB test example, which is like we know what it was like when we had to ship features when we were on native Android and prior to 2022, and we know what it's been like after and the velocity has been significantly higher for being able to test things and figure out are users interested in these new features, whatever they are, whether it's our new Quest and Orbs products or whether it's voice filters or things like that, it's a lot faster when our product engineers are able to, for the most part, write code in JavaScript and then have it go to everywhere, web, desktop and mobile.

 

Jamon Holmgren:

Yeah, I love that. And do you mind if I take a quick second to rant? I'm not going to rant thought this, I'm going to issue, I know Robin knows me too well. I'm going to issue a challenge to our audience, react native developers out there. Too many of you are scared of Native Code, too many of you, and that needs to change. This is React native. We do work with Native Code Discord shows how it can be done. They do it well. They know when to drop into native code. Now as time goes on, Chaz, I think you'd agree with me, you have to do it less and less, right? There's more opportunities to use React native itself, but for core experiences, exactly what you just said. For things that are super critical, obviously try to do it in React native because if you can get away with that, obviously there's the speed of deploying it.

There's the fact that it's one code base, it's all in TypeScript. You can kind of roll with it, but don't be afraid of dropping into Native. I'll say this as long as I need to. The core platform is ours. We are running in a React native app, but we're running on a native app too. We have the native app, we have the native platform, we have the native languages, we have things like turbo modules, expo modules and nitro modules that allow us to drop down. And if you want to, you can always build right on JSI. Anybody can build these things, react native itself. The views that it renders are native views. They're no different than the ones you might write obviously. And reading, especially this latest blog article talking about the emoji picker, I mean this is actually very difficult to achieve in React Native.

You could maybe do it, maybe there's some ways you could make that happen, but if you already had one working in native or you knew how to achieve it in native and you knew that you could do that on just by dropping down into a native component, mount it right up. In fact, I don't know if people know this, but obviously you can mount native components UI components right into a React native app. You can also pass them children which are React native and have them mount inside of there, and then those can mount native components. You can inception mix and match. It is a little bit mix, little bit. You can mix and match however you need

 

Robin Heinze:

To. Native inception,

 

Jamon Holmgren:

That's right. React native really is like an orchestration layer for all these different renderers and all of these different ways of doing things. I actually talked to Jordan walk about this concept not long ago one, the creators of course the creator of React and one of the creators of React native. And he said, yeah, that's how it's designed to work. It's basically the building blocks, the things that you build are then composable into an app and some of those building blocks could be things that are like a list view that you really couldn't achieve the performance you needed using React native for whatever reason. Of course, now we have better options because of Flash List two and Legend List and a bunch of other things. And I know internally Discord has some interesting list items or list components that they've built over the years. But anyway, that's my rant. It's also my challenge to the listeners that, Hey, I want you all, this is your assignment. Go out and build either an expo module, like start there, it's probably the easiest or turbo module or a Nitro module, like go build something like that and render it in your app and get used to this feeling of like, I'm in control. I don't have to only rely on what everybody else builds for me. I can build this stuff at any layer on the stack that we have.

 

Robin Heinze:

It's funny if you, exactly the situation that Chaz described, what Discord has done utilizing Native where it makes sense to get the best UI experience. If you go into Hacker News, Reddit, the internet will tell you that that's a failing of React Native, that these are things that React Native can't do when it's really the opposite. That's React native superpower. These are things that React Native can do because you can utilize Native when you need to. I think that's a huge win and it's a huge strength of React native.

 

Chas Jhin:

I think I'll plus one that, and actually to add a second data point, this dropping into native where needed, whether it's for performance or for something else, is something that's been very valuable for us at Discord and very powerful. I also saw it at Cameo as well. We did this same thing where, so probably at the time Cameo had somewhere north of 50 or 60 product engineers and we had a small mobile team of maybe two or three folks that was just focusing on bringing some of the UI flows that were most important or needed performance most into Native. So at the time for Cameo, that was mostly the video and things like that. And I think that it first off, definitely plus one to Jim and that would definitely encourage everyone to try dropping in. It seems scarier than it is once you do it. It's really not that bad. It actually, it's just

 

Jamon Holmgren:

Coding you probably you're good enough already. You can figure it out. Exactly,

 

Chas Jhin:

And if not, some AI code assistant could probably help you. But seriously, I think the frameworks like Turbo Modules and things like that actually do make it a lot easier and make it safer where you're not having to stare at EXCO and be like, why is this not building? It does actually help you.

But also, and Jamen, you were speaking a lot to the developers. I'm going to sort of speak to the, I don't know, not the developers, but I guess the engineering managers out there or whatnot. Is that from an organizational leadership point of view? It's from a business point of view, actually. Maybe I'll just speak to the business people out there. It's very valuable because the business ROIs is really great. What maybe would normally take, let's say a hundred native engineers, two teams, like 50 iOS engineers and 50 Android engineers, you can actually build the same thing with 30 or 40 React native engineers. And then they just need support from a few folks who are excited to dive into Native. And that could be that group itself too, but you're able to move so much faster because you're not waiting for like, oh, well the Android isn't ready for release, so we're going to have to hold up the entire thing for two more weeks until they're both finished with this new feature you can just kind of ship once. And speaking for myself, I think I've seen that be incredibly valuable at Discord and also at Cameo.

 

Mazen Chami:

Awesome. I have a question specific to your code base, and I think some of our listeners would appreciate knowing this too. What's your primary stack? What packages do you use that you can talk about? Because you mentioned earlier how the community really helped you all patch up some holes within Android and all that. What are some packages do you use? Do you use Expo? I think that's it. That's probably a big one.

 

Chas Jhin:

So we don't use Expo. I'm not entirely sure if we predate Expo. I'm pretty sure we predated Expo.

 

Robin Heinze:

Yeah,

 

Chas Jhin:

I feel like they didn't get around until 20 17, 18.

 

Robin Heinze:

That's a good reason to not have used. So

 

Chas Jhin:

Their team is great, to be very clear. I think Expo is great. I've used it a bunch for personal projects and whatnot, but we just kind of predated it. And so a lot of the things that Expo kind of gives we had already built at that point. That's definitely one of the big technology call outs. I think otherwise some of the things we use are actually probably fairly well known, and so just kind of a plus one that they're useful. For the most part, it's TypeScript. In terms of state management, we use Flux. And then some of the big libraries that I think help a lot are things like Reanimated, react, native screens, react native. We've tried every version of list and then some, we actually, they're all in our code base since sometimes we flip between them to see do we want to try Legend list again or do we want to try Flash List V two now or whatnot. So I think those are probably some of the big ones in terms of third party libraries.

 

Mazen Chami:

Cool. What about your infrastructure for release? Do you all do internal builds? How do you manage getting it all the way to the stores?

 

Chas Jhin:

Yeah, we have built our own release pipeline, which my team manages.

 

Robin Heinze:

When you're Discord, you could do that. Well,

 

Chas Jhin:

Yeah. I mean again, I think maybe had we started later, maybe we would've leveraged some, whether it's EXPO or something else that was existing, but

 

Robin Heinze:

You were kind of pioneers in the wild, wild west. Oh yeah. Building your own wagons.

 

Chas Jhin:

And also I think maybe to credit where credit is due, we haven't purely been building in an ivory tower so to speak. We kind see what some other folks are doing and we're like, oh, that feature would be very useful for us. And whether that's kind of easier ways to OTA or different ways to think about rollbacks or different ways to deal with some of the sometimes flaky APIs from the mobile app stores, things like that. We try to take ideas when people do them all.

 

Robin Heinze:

We don't have a ton of time left, but I want to make sure to hit on this before we wrap up. The new architecture, or I guess now we're calling it the architecture as opposed to the legacy architecture has been on a lot of people's minds lately. We've had meta on to talk about it pretty recently. So for our audience's sake, I would love to hear about how the new architecture transition, what that looked like for Discord and how that went for such a complex and historic app. You've been around a long time at the time that you were starting to do this, so how hard was that? What were the sort of obstacles that you ran into?

 

Chas Jhin:

So I'm going to preface this by saying the meta team has been very helpful and we were very appreciative for all the help and support they've given us. And also it has been really hard, really hard. It feels similar to the Android migration actually. We were in standup yesterday and I was trying to look for standup notes or something, and I accidentally pulled up standup notes from October, 2022 and the standup notes looked identical to the ones from my standup notes today, which basically said Android, Newark, iOS, Newark. And we were still thinking about it two, three years ago. Some exciting news. We are in the middle of hopefully shipping Android, Newark to Android to a hundred percent today. We've been in beta testing for the last eight to 10

 

Robin Heinze:

Weeks

 

Chas Jhin:

And we're very excited. We are, I don't want to jinx it, but we're tentatively seeing some performance gains, particularly some wins on CPU improvements which matter to us, but most importantly, some improvements to what we call jank or dropped frames. Basically we're seeing some dramatic improvements to that, probably from the new render, but maybe also a couple of the other technologies as well. So we're pretty excited about that. But yeah, in a nutshell, it's been really difficult and I think the thing that's been particularly hard for us, I don't want to scare people off who maybe haven't made the migration yet. The first part of the migration was relatively easy getting a working build with the Newark flag flipped on. Honestly, it wasn't that bad. It took a couple of weeks of an engineer and kind of mostly worked, but the long tail was tough for us. And I think for better and for worse, but probably for better at this point, we've got a pretty high performance standards that we set for ourselves because we have done some testing that we know what the business impact is. Even a 5% regression on memory or a 1% regression on crashes, it impacts the business and we see that. And so

 

Jamon Holmgren:

Huge deal

 

Chas Jhin:

Took us a long time to burn down the long tail of little things, little crashes out of memory errors that were hiding, other crashes, and then a lot of what I would just call UI discrepancies. They weren't crashes, but they just didn't look quite right. You would scroll and it would flicker somewhere or something would pop in a little bit late or it would take a little bit longer to connect to the voice call than we're used to, and we weren't sure why and there was no bug. That one was actually interesting. There's just the current new architecture, right, by being more multithreaded so to speak, allowed more things to happen, which then actually ironically slowed things down. Oh, okay. So we kind dealing with some of those. It took us a very long time, but fingers crossed we're almost there.

 

Robin Heinze:

It's really cool. I think it's really cool that you know your apps so intimately that you can pick up on these microscopic little like, oh, there's a little extra Jan here. I love that you're working with that amount of precision. I'm sure it leads to a really good ui.

 

Chas Jhin:

We have very passionate users and I think you'll hear it's actually really awesome. I think one of the things that's been really cool for us is we have a very substantial beta tester group like opt-in of just users who just are passionate about it. And

 

Robin Heinze:

I mean, your user base is a bunch of nerds.

 

Chas Jhin:

It's true. Bunch of very passionate nerds, but very passionate nerds. Our Android beta tester group is a million plus people. And so when we ship something to beta,

 

Robin Heinze:

Oh, they'll tell you they'll,

 

Chas Jhin:

What's wrong, get reports, and we're on a weekly release cadence, so we'll ship to beta on Monday and by Monday night, Tuesday morning, we'll have 15 reports already of little

 

Robin Heinze:

Things. I mean, that's so valuable. That's awesome.

 

Jamon Holmgren:

Wait, does this mean you don't even have to have qa? You just ship it and then wait for your users will

 

Chas Jhin:

Tell you what's wrong? Well, so the other thing too is conveniently enough, we use Discord to do Discord to build Discord, so to speak. So we use it as our internal app, and so staff is all on our canary build and that gets shipped immediately. And so if an engineer ships something to production that breaks voice basically crashes. Everybody knows it. Everyone knows immediately.

 

Robin Heinze:

I mean, I'm assuming you guys at Discord use Discord to communicate.

 

Mazen Chami:

Yes, yes.

 

Robin Heinze:

Yeah,

 

Mazen Chami:

That's another right there. Discord to Discord.

 

Robin Heinze:

It's pretty cool when your product is actually something that's very useful to a technical team and you could dog food it pretty heavily.

 

Jamon Holmgren:

Absolutely. So last question, we do have to wrap up here, but we've talked a little bit offline about Discord getting more involved in the community, whether it's contributing to open source or just kind of sharing their knowledge and your expertise, your experience. It's very valuable. Honestly, there's so much that you've figured out over the years that is super awesome. Can you talk a little bit more about that?

 

Chas Jhin:

Yeah, it's something that we are really excited to lean into, I think in the coming forever, but I'll say coming months and years, I think we've obviously, we're very thankful to the open source community. It's helped us get where we are. You build on the stand on shoulders of others or whatever, and we've got some things like our blog posts where we try to get back and there's a few open source packages that we've open sourced, but we want to lean into more. I think especially as we've gained more confidence as a team, as we've learned more and as our engineers have grown and really become experts in their own, which has been really awesome to see. We're interested in giving back more, and so I'm hoping you'll hear from more of the team over the coming months and years at conferences and things like that.

 

Jamon Holmgren:

Perfect. Speaking of conferences, hopefully we can get you to chain React next year, our conference of course, in Portland, Oregon. Would love to see some Discord representation there. It'd be a lot of fun.

 

Mazen Chami:

Maybe

 

Jamon Holmgren:

Even give a talk or two. I know. Yeah, let's definitely keep in touch about that as we end here. And thanks so much, Chaz, really appreciate you coming on. This was just absolutely packed with great information. As we end here, I do want to shout out Zen's new YouTube show, react Native Mornings, Mazen. Can you give a quick little rundown of what you've been doing over there?

 

Mazen Chami:

Yeah, so we've done three episodes so far. The first two, I actually had Robin on, we celebrated React Native Turning 10, and then we did some performance discussions. I'd say performance is really a hard to do just out of thin air kind of thing, unless you had a client's app that you wanted to fix, which we can't do most of the time. I had on two engineers, an engineer and a co-founder from Maestro in the last live episode, which was mainly about testing, end-to-end testing, and that went really well, I think. And actually, I am going to be on with Gabrielle Donel from Expo in probably by the time this airs, it'll already be out, but it's early September is the episode, and we'll be actually releasing the new Expo SDK 54. That's awesome. It's in Beta live, but the release will happen in with our

 

Robin Heinze:

Show while you're live. That's awesome. That's really cool.

 

Mazen Chami:

Yeah, we'll go live once it goes live sort of thing. So there's that. And yeah, we have other ideas of some stuff that we'll do down the line, maybe stuff where people like Chaz or Discord or other companies that want to come on and we talk and go through some different products and stuff like that, but using it as a platform to celebrate React Native and what we all love to do. Awesome.

 

Robin Heinze:

Go subscribe to React native to mornings on YouTube and you'll get notifications

 

Mazen Chami:

About

 

Jamon Holmgren:

Please do

 

Robin Heinze:

Scheduled streams.

 

Jamon Holmgren:

Perfect. Alright, well that's all we have for today. We'll see you all next time.

 

Jed Bartausky:

As always, thanks to our editor, Todd Werth, our assistant editors, Jed Bartausky and Tyler Williams, our marketing and episode release coordinator, Justin Huskey and our guest coordinator, Mazen Chami. Our producers and hosts are Jamon Holmgren, Robin Heinze and Mazen Chami. Thanks to our sponsor, Infinite Red. Check us out at infinite.red/radio. A special thanks to all of you listening today. Make sure to subscribe to React Native Radio on all the major podcasting platforms.

Photo of Gant Laborde and Mark Rickert hugging at a retreat.Photo of Todd Werth laughing during an online team game. Other members of the team are in the background.Photo of team members Jed Bartausky and Carlin Isaacson at a team dinner.Photo of Darin Wilson sitting at a table listening to a presentation

Ready to get started with us? Chat with our team over zoom

There’s no perfect time to get started. Whether you have a formal proposal or a few napkin sketches, we’re always happy to chat about your project at any stage of the process.

Schedule a call