skip to content

How would you set an upgrade cadence policy for a team's React Native apps, given a new minor about every two months?

level: principalimportance: should knowfreq 26%

answer

  1. stay inside the three-series window
  2. upgrade per minor, not per year
  3. budget and own it like a feature
  4. wait for the first patch release
  5. library health as a gate

basics

~20 s

Upgrade every minor, or at least every other one, soon after its first patch release, so the app never leaves the three-series support window; give upgrades an owner and a sprint budget, gate them on library support, and verify each on both platforms.

solid answer

~40 s

The constraints are fixed: a new minor roughly every two months, breaking changes in every minor, and only the latest three series maintained. So my default is to upgrade **every minor**, typically after the first patch so early regressions are fixed, and never let the app fall to the End of Cycle series without a plan. Upgrades get an **owner and a fixed budget** each cycle, like any feature, rather than competing with product work every time. The gate is **library readiness** and a green build and test run on both platforms, and release freezes (a peak sales season, for instance) are planned around. The trade-off is continuous small cost against rare, large, risky upgrades; with this cadence, the small cost wins.

go deeper

for a junior

Recall that React Native releases a minor about every two months and supports three series, so upgrades are regular work.

for a middle

Explain the policy options and why frequent small upgrades carry less risk per upgrade than rare large ones.

for a senior

Run the policy: waiting for the first patch, library gates, verification steps and scheduling around business freeze windows.

for a principal

Own the trade-off and the argument: continuous small cost against rare, risky upgrades, with a budget and owner the organisation commits to.

## The constraints you cannot change A cadence policy starts from React Native's own rules: - a **new minor** has shipped roughly **every two months**; - **minors carry breaking changes**, because React Native is still on 0.x; - only the **latest three minor series** are maintained, so a release leaves support about six months after it ships; - deprecated APIs survive **one further minor** and may be removed in the one after. Any policy that ignores these produces the familiar outcome: an app three or more versions behind, unsupported, facing a multi-step upgrade under deadline. ## Options | Policy | Effort per upgrade | Risk per upgrade | Time out of support | |---|---|---|---| | Every minor, after its first patch | small, frequent | low | none | | Every other minor | medium | medium | none, if done before End of Cycle ends | | Only when forced (store deadline, blocking bug) | large, unplanned | high | often months | There is no single right answer, but the table shows why the third row is the one to argue against. ## A reasonable default 1. **Track every minor.** Plan the upgrade when a new minor ships, and start once its first patch is out, which gives early regressions time to be fixed. 2. **Never drop below End of Cycle.** If the team skips a minor, the next upgrade must happen before the app's series becomes unsupported. 3. **Give it an owner and a budget.** A rotating owner and a fixed allowance each cycle turn upgrades into routine maintenance rather than a negotiation with product priorities. 4. **Gate on libraries.** Keep an inventory of native dependencies; an upgrade proceeds when every library supports the target or has a documented workaround. 5. **Verify the same way every time.** Upgrade Helper diff, release notes, clean builds on both platforms, automated tests and an internal build before the store release. 6. **Respect freeze windows.** Schedule upgrades away from peak business periods, and have a supported version to fall back on. ## Arguments you will need to make - **"We have no time this cycle."** Skipping is borrowing: the next upgrade inherits this one's breaking changes plus its own, and the support window keeps closing. - **"Let's wait for a big release."** React Native has no big releases to wait for; each minor is a slice of breaking change, and some, such as 0.83 and 0.86, have none that affect users. - **"Upgrading is risky."** Small, frequent upgrades are less risky than rare, large ones, because each is easy to test and easy to roll back. ## What the policy buys - **Security and crash fixes** arrive through normal patch releases. - **Store and OS requirements**, such as a raised Android target SDK, are met in advance. - **Library updates** stay possible, because library authors test against current versions. - **Hiring and onboarding** are easier on current tooling, and the team's upgrade muscle stays trained. ## Where Expo changes the picture For apps built with Expo, the unit of upgrade is the **Expo SDK**, which pins a React Native version; SDK 57, for example, ships React Native 0.86. The same reasoning applies, but the SDK's own release rhythm and support set the cadence, and that policy belongs to the Expo SDK versioning discussion. ## Measuring whether the policy works A cadence policy is only real if someone can see it being followed. Useful signals: - **Versions behind latest** for each app, reviewed at every planning cycle; the target is zero or one. - **Days in End of Cycle**: how long an app runs on a series that is about to lose support. - **Upgrade duration**: how many working days each upgrade takes; a rising trend means the process or the dependency set needs attention. - **Blocking libraries**: the count of native dependencies that held up an upgrade, which feeds back into the dependency policy. When these numbers stay small, the team has turned React Native's fast release rhythm from a recurring emergency into routine maintenance.

  • Why wait for the first patch of a new React Native minor before upgrading?
    Right after a `.0`, the Active series gets several quick patches to stabilise it and smooth the upgrade experience. Waiting for the first patch lets those regressions be found and fixed by others, while the app still upgrades well within the support window.
  • How do you justify recurring upgrade time to product stakeholders?
    Show the alternative's cost: an app out of support gets no fixes, may miss store requirements, and faces a multi-release upgrade that blocks features for weeks. A fixed, small allowance each cycle is cheaper and predictable, and it keeps security and platform deadlines off the critical path.

saying these in an interview costs you the question

  • Upgrade only when something forces it
  • Wait for React Native 1.0 before investing in upgrades
  • Staying on an unsupported version is safe if the app is stable
  • Every release must be adopted on its .0 day