React Native Radio

RNR 199 - Strategies for Upgrading React Native

Episode Summary

Jamon's back! In this episode, Jamon and Robin discuss strategies that they've learned over the years for upgrading React Native.

Episode Notes

Jamon's back! In this episode, Jamon and Robin discuss strategies that they've learned over the years for upgrading React Native. 

 

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. "What do you dislike about React Native?" Github Issue
  2. 2019 RN open-source update blog post
  3. React Native Versions
  4. Upgrading React Native
  5. Upgrading Ignite

Connect With Us!

  1. React Native Radio: @ReactNativeRdio
  2. Jamon - @jamonholmgren
  3. Robin - @robin_heinze

Episode Transcription

Jamon Holmgren:

Hey, React Native radio friends. Welcome back. This is the React Native Radio Podcast. I'm Jamon Holmgren, your host, and I'm joined today by my impressive co host, Robin. Robin, I'm back in the seat here.

 

Robin Heinze:

Yeah. You're also very tan.

 

Robin Heinze:

Very tan.

 

Jamon Holmgren:

Uh, yeah. I was somewhere with more sun than the Pacific Northwest.

 

Robin Heinze:

That's not that hard. Although we did have some really nice weather-

 

Jamon Holmgren:

Yeah.

 

Robin Heinze:

... like right as you got back, we had, like, almost 90.

 

Jamon Holmgren:

Yeah. It was a really nice, soft landing from being in Oahu. It was- it was fantastic. Obviously being away was nice. It was a good getaway for us, for the family. But it's nice to be home, back in the routine. And it has been pretty good weather. There's been a little bit of rain here and there but, like, I'm looking out right now and, and it's, it's sunny and starting to get towards spring.

 

Robin Heinze:

This is my favorite time of year 'cause it's like, it's starting to get nice and sunny. But it's not super hot yet.

 

Jamon Holmgren:

Exactly. Well, Pacific Northwest is pretty awesome. Uh, of course, Robin and I both live near Portland, Oregon-

 

Robin Heinze:

We're a little biased about-

 

Jamon Holmgren:

We are.

 

Robin Heinze:

... the Pacific Northwest.

 

Jamon Holmgren:

Robin, you grew up around here, right?

 

Robin Heinze:

Yeah, I did. I grew up in, uh, Corvallis, home of the Oregon State Beavers.

 

Jamon Holmgren:

Oh yeah. Corvallis, Oregon. I grew up in Clatskanie, Oregon, which is in sort of the top left corner of-

 

Robin Heinze:

It's basically Washington-

 

Jamon Holmgren:

... Oregon. It's- ironically it's, it's north of where I live now in Washington State. I live in Washington State but-

 

Robin Heinze:

It's the little part of Oregon that just like-

 

Jamon Holmgren:

... where I grew up-

 

Robin Heinze:

... is like bumps up into Washington. So it's, ah, basically Washington.

 

Jamon Holmgren:

But it's because the Columbia River takes a turn there-

 

Robin Heinze:

Yeah.

 

Jamon Holmgren:

... and, you know, goes out to the sea. So they just were like, okay, follow the river.

 

Jamon Holmgren:

But we are going to follow the river of conversation ... I love your expression-

 

Jamon Holmgren:

... with that segue-

 

Jamon Holmgren:

Into our sponsorship. This episode is sponsored by Infinite Red. Infinite Red is a premiere React Native Design and Development Agency located fully remotely in the USA. We have years of React Native experience and deep roots in the React Native community. We are the hosts of Chain React and we publish the React Native newsletter. We also, I don't know if people know this, but we also host the React Native Radio Podcast.

 

Robin Heinze:

Oh really? I didn't know that.

 

Jamon Holmgren:

Did you know that, Robin? Okay. Yeah. Well that's news. Infinite Red is the best choice for your next React Native app. Hit us up, hello@infinite.red. And learn on our website infinite.red/reactnative. And don't forget to mention that you heard about us through the podcast. We love hearing that. That's always very validating.

 

Jamon Holmgren:

We are also hiring senior React Native engineers in the US or Canada. So if you are interested in working with us, go to careers.infinite.red and fill out the form.

 

Jamon Holmgren:

All right. Let's jump right into our topic for today. This is one that's been kind of on our radar for a while that we've wanted to talk about and we're finally getting to it today, which is kind of fun. It is strategies for upgrading React Native.

 

Robin Heinze:

Everybody's favorite thing.

 

Jamon Holmgren:

Mm-hmm .

 

Robin Heinze:

Necessary evil-

 

Jamon Holmgren:

Upgrading your app. Exactly. It is,, you have to stay on top of this, especially, I mean, we started back in I don't know. It was a long time ago. React Native 0.17 or something like that.

 

Robin Heinze:

Yeah.

 

Jamon Holmgren:

And I mean, we're, we're talking this is a long time ago and every upgrade was painful. In fact, back in 2018, the React Native core team opened an issue on the React Native Community Discussions and Proposals Repo called- or that was titled, "What do you dislike about React Native?" That's kind of a bold way to come into this-

 

Robin Heinze:

I think it's smart though. You have to know where your weaknesses are. If you don't know what people are complaining about, what the pain points are, you can't fix them.

 

Jamon Holmgren:

Yeah.

 

Robin Heinze:

So I think it's a smart strategy.

 

Jamon Holmgren:

It really was. It was, it was a brilliant move by them. There were a lot of responses. But the very first one that came in was upgrading requires a lot of effort. Too much, with a question mark. Upgrading from one version to another is hard and requires a lot of work, especially when you have fallen a couple of versions behind and have to manually upgrade from yours to the latest version by version. And it had 568 upvotes before-

 

Jamon Holmgren:

... the, you know, before everything was kind of locked down. There were a lot of other responses for sure. But upgrades was the one that really seemed to hit a nerve there. Do you remember upgrading back in those days? I think you were doing- you were definitely working at Infinite Red then so-

 

Robin Heinze:

So when I started doing React Native at Infinite Red, I think React Native was somewhere around, like, 0.38, 0.39. I remembered the jump into .40. So I came in somewhere around there. And that was-

 

Jamon Holmgren:

Yeah.

 

Robin Heinze:

... that was back before all the new tools that they have for upgrading.

 

Jamon Holmgren:

Yeah.

 

Robin Heinze:

But I was still pretty new to React Native on our team. So I don't think-

 

Jamon Holmgren:

Mm-hmm.

 

Robin Heinze:

... I never had to do a full React Native upgrade on one of our projects until a little bit later, until I was a little bit more experienced.

 

Jamon Holmgren:

Mm-hmm.

 

Robin Heinze:

So I don't think I ever had to do one of those really, really painful upgrades.

 

Jamon Holmgren:

Right. Yeah. Those upgrades were legendary. And, in fact, what it pretty much did was make people fall even further behind. And it was just this- it was a vicious cycle. It was like it just kept going down and down with you know, you'd fall two, three versions behind. And now some update you know, by maybe Apple or Google meant that you had to upgrade. And now you're just in a position where it was just really, really tough.

 

Robin Heinze:

So what was the process actually like back then? Did you basically just read the release notes and then-

 

Jamon Holmgren:

Yeah.

 

Robin Heinze:

... upgrade the version and try and run it and see what happened?

 

Jamon Holmgren:

Pretty much. And some people would like spin up a brand new app and just poured everything over, which was, you know, a pain in its own right. But others would just upgrade and see what happens. And then you had to like Google every error. And, you know, figure out what was going on. And so the core team decided that, okay, this is not gonna work. And there was a blog post published about six months later in 2019 talking about what the core team had done. And I was actually a part of this transition a little bit. That was when I joined the core team that was in that kind of range.

 

Jamon Holmgren:

One of the big things was the Lean Core Initiative, which allowed splitting off a lot of internal, you know, modules into external community-focused modules. And I actually was the one who split the first, the very first one-off. So I took the web view and I split it off into its own module and then eventually the internal one was deprecated and removed. So web view, for those of you who have used it, that's my fault. 

Jamon Holmgren:

... for at least the first part. Now T-bow, uh, or Titozzz, T-I-T-O-Z-Z-Z, as he's known on the web, he has been very, very instrumental in continuing to maintain it afterward. So I gotta give him huge credit. But that was a part of the change. Was to make it so that ... 'Cause I think one of the big complaints at that time was, you know, pull requests just hang out for way too long. And there were like, I don't know, 400 pull requests, or maybe issues at least, having to do with web view. And we were able to remove all those and move them over to the new repo.

 

Robin Heinze:

Easier to manage. Definitely.

 

Jamon Holmgren:

Yeah. And then there were a lot of other things that happened during that time, but upgrading was really kind of, I think more React Native community-led. So there were multiple improvements that happened during that time to upgrading. Which one was auto-linking. So manually linking back then, if you had like a new native module, either on Android or IOS, you had to manually link it. And that was a process that was a little finicky and, especially when you were upgrading, was prone to issues. It's easy to forget to do it. And there were problems with it quite often. So auto-linking was a big deal.

 

Jamon Holmgren:

There was also another command called React Native Diff Purge, which I think maybe had existed in some form before that, but it became more officially supported. And what that would do is basically take, like, the previous version, spin up an app, and then take the new version, spin up an app, and then just do a diff between them so you knew what had changed. And they then announced an upgrade helper website which has been released and been out for a couple years now.

 

Robin Heinze:

Yeah.

 

Jamon Holmgren:

And we'll be talking more about that. There was also a commitment to making sure that breaking changes and features are published in blog posts for each...

 

Robin Heinze:

Mm-hmm.

 

Jamon Holmgren:

... major release. And I think they've done a good job of that since then. And you know, there were some other things that were kind of just committed to. Just fewer breaking changes at that point would be a big one. Because they just knew that this was a pain point.

 

Robin Heinze:

Yeah. Definitely. I think I remember using the diff purge tool once. It was okay. It got pretty manual there for a while because the diff got pretty complicated because, you know-

 

Jamon Holmgren:

Right.

 

Robin Heinze:

... you have a brand new React Native app and you're comparing it to an app that you've added things to and built up upon. So it could get pretty messy that way. But, I mean, that's still basically the strategy now, is to like look at that diff between two React Native projects.

 

Jamon Holmgren:

Yeah. We'll be talking about that and talking about how we do upgrades at Infinite Red. And, what we've kind of found has worked well. We're also interested in listener feedback. So if you listen to this episode and are like, "Hey, I've got a better way to do this." You know, let us know. We'd love to hear it. And we'll share it with people internally at Infinite Red too because, you know, there's still room for improvement, I think, in all of this.

 

Jamon Holmgren:

There's also an upgrading documentation page. And I actually do recommend that people look at it. We'll put it in the show notes. But in the official React Native docs, upgrading to new versions is a document that you can look at under the workflow tab. And it goes through what to do to upgrade expo projects as well as React Native CLI projects.

 

Jamon Holmgren:

There's the React Native upgrade, command. Which I wanna ask you, Robin, is that something that you've used before?

 

Robin Heinze:

I have not specifically used the upgrade command. I think it's related to or based on the diff-

 

Jamon Holmgren:

Diff purge-

 

Robin Heinze:

... purge. Yeah. It sort of tries to apply the diff automatically which-

 

Jamon Holmgren:

Mm-hmm.

 

Robin Heinze:

... I guess I avoid just because I don't know, I like to have more manual control over what's happening to my codebase. So I haven't used that upgrade tool specifically. But I've heard that it works decently well if you don't have a super complex project.

 

Jamon Holmgren:

Yeah. So that's something that was kind of common when I was talking to people about upgrading. A lot of people said the upgrade command is cool, but it breaks often enough that I don't really trust it. And it also, I feel like I don't have enough control. I don't really know what happened.

 

Robin Heinze:

Well, it takes a lot of GIT expertise to really know what's going on. Like GIT, GIT apply is a pretty advanced GIT command. And so it can be easy to sort of lose track of what's happening. And if you get stuck and you start to get merge conflicts and stuff, it can be kind of hard to untangle. 

 

Jamon Holmgren:

Yeah.

 

Robin Heinze:

... so that's, that's why it's a cool tool but can sometimes be a little confusing to use.

 

Jamon Holmgren:

Yeah. But I like that they released it though because I'm sure that there would be some people who maybe are using React Native in a very kind of straightforward way.

 

Robin Heinze:

Right.

 

Jamon Holmgren:

Where just running React Native upgrade and committing the result just works.

 

Robin Heinze:

Exactly. Yeah. I think for a lot of, um, especially if you're just doing- if you're doing hobby projects or, like, playing around with React Native apps and you haven't built out a really complex application, I think it could- it's probably really straightforward and makes upgrading really easy.

 

Jamon Holmgren:

So let me take a step back for a second here. And ask when should you upgrade? Like do you upgrade immediately as soon as something drops? Or you know, is there some kind of, like a little bit of a buffer there.

 

Robin Heinze:

This is one of those questions where there's often a huge gap between what you should do and what people actually do. And like, do as I say, not as I do.

 

Robin Heinze:

I would definitely say you should, if you have the ability to sort of have that control over what's happening with your app, I would absolutely upgrade every time there's even a minor version change. 'Cause each minor version is probably gonna be a really easy straightforward upgrade. And if you just do those regularly, the major versions are gonna be a cake walk because they'll basically just be another minor version. So I would definitely recommend doing it every ... Like just make a habit of keeping track of the React Native releases and just upgrade all the time.

 

Robin Heinze:

However, in real life, especially if you're working for clients like we do-

 

Jamon Holmgren:

Mm-hmm.

 

Robin Heinze:

... upgrading is seen somewhat of a liability, a risk. A lot of clients don't want to fix what's not broken. And so they don't want to budget the time for upgrading when things already work as they are. And so it can kind of be a tech debt thing that gets pushed down the line. And we really do our best to try and communicate to our clients that it will be much less painful and much less risky overall if you just let us do it regularly. And some clients are really good about saying, "Hey, you, you guys do whatever you think you best." And some aren't.

 

Jamon Holmgren:

Yeah.

 

Robin Heinze:

So, yeah. It just- it depends. Any time you have control over your own project, upgrade as often as you can. That's really the best way.

 

Jamon Holmgren:

Yeah. I would agree with that. And I definitely see the hesitancy of clients. You know, the new- new version comes out and it's like that disrupts the plans.

 

Robin Heinze:

Right. It takes the place of features you could be building, things that are time-sensitive that need to go out. So-

 

Jamon Holmgren:

It introduces bugs often.

 

Robin Heinze:

Yeah. I can see their hesitancy. It can be hard to see the long-term benefits above the short-term costs.

 

Jamon Holmgren:

Yeah. Now one idea or one kind of bit of feedback I have around this is if you upgrade regularly, then you build your upgrading muscles, so to speak.

 

Robin Heinze:

Definitely.

 

Jamon Holmgren:

You get good at it.

 

Robin Heinze:

Definitely.

 

Jamon Holmgren:

And when you're good at it, then it doesn't take as long and it's less risky. It almost seems like not doing it becomes more risky because then you get, you end up with more problems when you do finally go, not only because you're not good at it but also because there's just so many versions to kind of jump through.

 

Robin Heinze:

Yeah, yeah. That's really true. It is, it is a skill and you kind of- you develop an intuition or sort of a sixth sense for what the various errors might mean and how you might solve them, which can help a little bit in your Googling around.

 

Jamon Holmgren:

My recommendation would be, if a client were to ask me, I would say upgrade every version but, like, three months later. So you have three months warning. Like, you're like-

 

Robin Heinze:

Mm-hmm.

 

Jamon Holmgren:

... okay, a new version came out so now let's schedule it for three months down the road. And this is when we're gonna upgrade. And then every time, you know, it's, it's just a three-month delay. One big reason for that is not only can you plan for it, you know that it's coming, but also everybody else will have already run into all the issues, and there will be lots of stack overflow questions and whatnot-

 

Robin Heinze:

Yeah.

 

Jamon Holmgren:

... that you can just look at.

 

Robin Heinze:

So if you're taking that approach, you may not end up going to every single minor version because a lot of times the minor versions are fixes for things that were broken in the first time.

 

Jamon Holmgren:

Yeah.

 

Robin Heinze:

So you may actually end up doing fewer upgrades that way, which is-

 

Jamon Holmgren:

Yeah.

 

Robin Heinze:

a plus.

 

Jamon Holmgren:

Now, on the flip side, if you want to help kind of contribute back to the core team and the community, being on beta versions can be- or release candidates, can be very helpful to the core team. Like what problems did you run into when you upgraded to the release candidate?

 

Jamon Holmgren:

So, if you're maybe working on a project where you do have that level of control and you want to be kind of cutting edge and you wanna provide feedback, I know the core team doesn't get enough feedback. Not enough people install the RCs. So I do wanna encourage people who are in that position where they can do that, you know, like give it a try. And then provide feedback because the-

 

Robin Heinze:

Helpful. Helpful feedback.

 

Jamon Holmgren:

... yeah. Helpful feedback.

 

Jamon Holmgren:

Because, like, a lot of these problems that pop up and that have to be patched, they could've been caught if enough people were on the release candidates.

 

Robin Heinze:

Definitely agree there. It’s all about what your situation is and what your project is. And what your budget is, if you're working with a budget and-

 

Jamon Holmgren:

Yeah. Totally.

 

Jamon Holmgren:

So, if it's just a small bump, what strategy would you follow, Robin-

 

Robin Heinze:

Um-

 

Jamon Holmgren:

... to upgrade?

 

Robin Heinze:

To upgrade small bumps. Actually, like large bumps too, but I always go to the React Native Community Upgrade Helper website, which we'll put in the show notes. Which is, it's a pretty simple concept. It's really just you select the version that you're on-

 

Jamon Holmgren:

Mm-hmm.

 

Robin Heinze:

... and then the version that you're going to. And it shows you a diff between a newly generated React Native project of each of those versions. So it shows you what changed if you were just to go run React Native new. And so what then I'll do is just go through that diff. And it actually makes it really, really easy. They have ways to sort of check off each file as you go through and say, like, did this one, did this one. 'Cause you're basically gonna go and apply those changes manually in your project..

 

Jamon Holmgren:

Mm-hmm. Which when you first see that, like I know my first impression was, oh, that's a lot of manual work. But, at the same time, if you're careful about it ... And one thing that's really cool about this tool is that you can actually click a checkmark in the top right and it'll say-

 

Robin Heinze:

Yeah.

 

Jamon Holmgren:

... oh, I already did this-

 

Robin Heinze:

It'll check off the file. It'll hide it. It'll show you the next one.

 

Jamon Holmgren:

Yeah.

 

Robin Heinze:

And it seems like oh, that would be a lot of work. But it's really not unmanageable, especially for small jumps. It's just something you go through and do. And maybe take you a couple hours. And you know- you have the control of doing it manually in your project in case your project doesn't look exactly like a freshly created one would.

 

Jamon Holmgren:

That makes sense to me. Yeah. I'm looking through the latest one which happens to be 0.63.4 to 0.64.0. And I know 64.1 is coming out soon. So, by the time people look at this, that may be the jump. But you can just kinda see there actually are quite a few changes but they're pretty small. Like you can just, you know, take this little block of code or add this comment or remove this piece.

 

Robin Heinze:

And honestly, a lot of them, I don't even bother with because some of them-

 

Jamon Holmgren:

Mm-hmm.

 

Robin Heinze:

... are just like boiler plate parts that a React Native app that we don't even use-

 

Jamon Holmgren:

Ah.

 

Robin Heinze:
Like we don't use flow. And so if there are changes to flow config-

 

Jamon Holmgren:

To flow config-

 

Robin Heinze:

... like we-

 

Jamon Holmgren:

Yeah.

 

Robin Heinze:

... skip those. If you're not using, like, flipper, or something like that, there's parts that you can skip that don't apply to your app. So it can sometimes be even faster.

 

Jamon Holmgren:

And there's some defaults that change. So, for example, inline requires became true in 0.64. And if you don't want inline requires, you just don't have to flip that bit.

 

Robin Heinze:

Yeah. So that's why I like that you have a little more granular control and you know exactly what you're changing in your app. And it's not automatic.

 

Jamon Holmgren:

It's such a great tool. I'm really thankful to the people that worked on it to bring it to us. 'Cause it certainly has saved a lot of brainpower. 

 

Robin Heinze:

Yes. I really appreciate that tool.

 

Jamon Holmgren:

So this brings a lot of changes to just the base app. But are there changes that have to happen other than that? Like, third party libraries, your own code, et cetera?

 

Robin Heinze:

Yes. Yes. You should, along with using the upgrade helper, you should absolutely also read the release notes-

 

Jamon Holmgren:

Okay.

 

Robin Heinze:

... uh, the changelog because there may be changes to various components or prop names or other things that wouldn't be in the base app that you may need to change because you've used that component in your app somewhere.

 

Jamon Holmgren:

The code that's changed is internal. Not with the generated app, so you're not gonna see it.

 

Robin Heinze:

Right. Exactly.

 

Jamon Holmgren:

Makes sense.

 

Robin Heinze:

So you should definitely read the release notes as well and see if there are any breaking changes that you need to go apply in your app somewhere.

 

Jamon Holmgren:

Yeah. That totally makes sense to me. And this, of course, is if you're not using expo. If you're using expo it's actually generally easier-

 

Robin Heinze:

Expo does a lot for you.

 

Jamon Holmgren:

Yeah.

 

Robin Heinze:

'Cause that's expo's whole business model. Make things easy.

 

Jamon Holmgren:

It really is. I think if you go to ReactNative.dev/versions you actually get a list and a link to all the documentation-

 

Robin Heinze:

Yes. It should link to the-

 

Jamon Holmgren:

the change log-

 

Robin Heinze:

... change log and-

 

Jamon Holmgren:

Mm-hmm.

 

Robin Heinze:

... also if there's any blog posts about major changes, it'll all be linked there.

 

Jamon Holmgren:

You know, it would be really nice to link each one to the diff as well. That'd be something to add at some point, from this page. Anyway-

 

Robin Heinze:

Oh, in the upgrade helper?

 

Jamon Holmgren:

Yeah.

 

Robin Heinze:

That's a good suggestion. We should-

 

Jamon Holmgren:

Yeah.

 

Robin Heinze:

... put in a-

 

Jamon Holmgren:

It's an open-source website. I'm sure-

 

Robin Heinze:

Yeah.

 

Jamon Holmgren:

... we can, or someone can add that link. 

 

Jamon Holmgren:

So then when you're talking about major versions or let's say you're way behind, like, five major versions behind, how would you approach a-

 

Robin Heinze:

Those are more fun.

 

Jamon Holmgren:

... project like that?

 

Robin Heinze:

I've had to do that a couple of times. I think the largest jump I ever did was 43 to 59? Yeah.

 

Jamon Holmgren:

Wow.

 

Robin Heinze:

That was fun. Yeah. 'Cause we-

 

Jamon Holmgren:

That's big.

 

Robin Heinze:

... the way we sometimes have client projects where we'll finish the app, ship it, it'll be working-

 

Jamon Holmgren:

Mm-hmm.

 

Robin Heinze:

... fine, chugging along. The client will say, okay, see ya for a while. And so the app will kind of stagnate for a year, maybe more. So we'll have sometimes really, really huge jumps like that. So for those, usually I'll start out attempting to use the upgrade helper.

 

Jamon Holmgren:

Mm-hmm.

 

Robin Heinze:

I always start there. But usually, there's been so many changes that it's pretty overwhelming. Plus, if you're upgrading that big of a jump, you're also going to be upgrading a lot of your dependencies, like React Navigation, probably Redux or Mobx State Tree. Because those kind of are tied, they sort of grow along with React Native. So you'll probably be upgrading those as well. And the upgrade helper's not gonna help you with that.

 

Robin Heinze:

What I'll do, and this is usually a much longer project, I'll create a brand new React Native app or Ignite, usually an Ignite app, since we're using Ignite.

 

Jamon Holmgren:

And just for an aside for those who are just listening to this and haven't heard us before-

 

Robin Heinze:

If you don't know ignite is our, uh-

 

Jamon Holmgren:

Yeah.

 

Robin Heinze:

... boilerplate library that we created here at Infinite Red and we use for all of our projects. We will also link that in the show notes.

 

Jamon Holmgren:

Exactly. And it creates a new React Native app with all of our defaults-

 

Robin Heinze:

Right.

 

Jamon Holmgren:

... kind of baked in.

 

Robin Heinze:

Has our default stack, some example screens, that kind of thing. But I'll create a brand new app with the new React Native version. And then folder by folder, I'm just gonna copy the source code from my app over into the new app. So all my models, my screens, my components. The sort of, the core of the app, while leaving a lot of the configuration, the sort of React Native framework part, is coming from the brand new app. And then as I go, I'll upgrade React Navigation or our state management library, those kinds of things, and make those changes to make those compatible. It's definitely a much, much larger project. I don't recommend skipping that many versions. 

 

Jamon Holmgren:

Yeah. But I could see how it would happen, because, like you said, people go away for a while. They're focused on other things.

 

Robin Heinze:

Yeah. It does happen.

 

Jamon Holmgren:

And then they come back and wanna make some ... And you can't just stay on those old versions because Apple and Google also move along. And that's where-

 

Robin Heinze:

Mm-hmm.

 

Jamon Holmgren:

... you know, the versions will keep pace with that.

 

Robin Heinze:

Yeah. Exactly. So you will have to upgrade eventually.

 

Jamon Holmgren:

I remember one of the more painful ones we had to do involved us actually replacing the navigation library entirely.

 

Robin Heinze:

Yeah. That was the same project. 'Cause we were using-

 

Jamon Holmgren:

Was it that one?

 

Robin Heinze:

... we were using React Native Router Flux, and we switched to React Navigation. Yeah. Which was-

 

Robin Heinze:

... it was doable. It was just a project.

 

Jamon Holmgren:

So, speaking of Ignite itself, it was a tool developed by a member of the community, Nicholas, Soderstrom, who created Ignite diff verge. He made it so that it's actually pretty similar to the upgrade helper website for React Native. So from time to time we'll make changes. Like, for example, I just submitted a PR yesterday, removing one of the Mobx State Tree extensions that we include with the boilerplate that we actually don't use. It's called with status. And it's a cool idea. I think it's meant to sort of demonstrate how extensions work. But-

 

Robin Heinze:

Mm-hmm.

 

Jamon Holmgren:

... at the end of the day, we don't really use it. And so shipping dead code doesn't really make a lot of sense. So I removed that. And when that gets merged and Nicholas updates his repo, it will actually show what I removed. Because we got questions, you know, the way that we intended Ignite to work was you spin it up and then you kind of continue on independently. And you upgrade React Native independently. And you upgrade your dependencies independently. And any changes we make to the boilerplate, well, you know, they're just for future projects.

 

Jamon Holmgren:

But that's not how people always use it. They like to actually stay kind of abreast of what changes we're making. And so this tool is really cool because it actually gives people a sense, it works the same way as the React Native one. And it tells them, hey, this is what Infinite Red has done, you know, to make some changes recently. And so they can go through and look at the diff and then decide what changes they wanna bring back to their own app.

 

Robin Heinze:

It's amazing how powerful GIT tools are for more than just version control. Like this is-

 

Jamon Holmgren:

Yeah.

 

Robin Heinze:

... sort of using GIT for something that it wasn't primarily built for. But it's really powerful.

 

Jamon Holmgren:

All in all, would you say that upgrading React Native apps now is, is it getting easier over time? Or is it still just a pain in the butt?

 

Robin Heinze:

It will always be somewhat of a pain in the butt. That's just kind of the nature of upgrading stuff. But it has absolutely gotten easier than it was 20, 30 versions ago. I think there's more of an established process for it now.

 

Jamon Holmgren:

Yeah.

 

Robin Heinze:

And there's tools. There's- we've been doing it a lot longer and so there's a lot more experience at it and help on the internet. Yeah. It's definitely a better experience now.

 

Jamon Holmgren:

And to the core team's credit, they ran another one- or they did another one of those issues on GitHub saying, you know what needs to be improved on React Native. Or what's the name of it? It was, uh, what do you dislike about React Native? Another, like a follow up a while later. And upgrades did not show up on that one.

 

Robin Heinze:

Nice.

 

Jamon Holmgren:

It was not one of the things that people pointed out. So there were other issues, obviously, but kudos to the core team for kind of helping-

 

Robin Heinze:

They really listened to that feedback and made a noticeable improvement.

 

Jamon Holmgren:

Absolutely. I think we'll call that good. Where can people find you to ask for help upgrading, Robin?

 

Robin Heinze:

I'm on Twitter @Robin_Heinze.

 

Jamon Holmgren:

Don't really ask her for help. I'm kidding.

 

Jamon Holmgren:

You can go to our community for that, community.infinite.red

 

Robin Heinze:

Yes.

 

Jamon Holmgren:

... it's a Slack community and there's a lot of people that will help you. You can also find me @jamonholmgren and you can find React Native Radio on Twitter @reactnativerdio. As always, thanks to our producer and editor, Todd Werth. Our transcript and release coordinator, Jed Bartausky, our social media coordinator, Missy Warren. Thanks to our sponsor, Infinite Red. Check us out, infinite.red/reactnative. A special thanks to you for listening today. Really appreciate you joining us today and hanging out with us for this, I don't know, half hour or whatever it was. Make sure to subscribe on all the major podcasting platforms and send this to a friend who might need help upgrading and needs some insight. Reminder, we are hiring. Go to careers.infinite.red. And we will see you next time.