Why Tech Companies Are Moving Off React
Based on Theo - t3․gg's video on YouTube. If you like this content, support the original creators by watching, liking and subscribing to their content.
Many “React scaling” complaints are attributed to developer practices, state/data architecture, and performance discipline rather than React itself.
Briefing
Silicon Valley CTOs are increasingly discussing moves away from React, but the most consequential takeaway is that many of the complaints blamed on React are really about scaling patterns, developer practices, and missing performance discipline—not React’s core design. The argument centers on a blunt idea: React “succeeded too well,” making it easier for more teams (including less experienced ones) to ship large, state-heavy front ends—so the resulting pain often shows up as “React problems” even when the root causes are elsewhere.
A fintech VP quoted in the discussion describes going all-in on React in 2017 and then hitting scaling walls by 2021 as a team grew to 200 developers. The counterpoint is that scaling issues aren’t automatically caused by React itself: a large Twitch codebase reportedly had scaling trouble tied to TypeScript and codebase weight, not React rendering. More broadly, the critique targets the React ecosystem’s “bets” at scale—hooks, concurrent mode, server components, and the compiler—arguing that several of these were specifically designed to address the exact kinds of performance and complexity problems large apps face.
Hooks get the strongest defense. The discussion contrasts older state-sharing patterns—higher-order components and render props—where state and data had to be threaded through wrapper layers with complex prop plumbing, with hooks that standardize state reuse and composability. The practical claim is that hooks reduce cognitive overhead for large codebases by making reusable state logic easier to package as custom hooks, which then compose cleanly with other state tools like Redux or Zustand.
Concurrent mode is framed as a performance fix for “sticky keys” style input lag: synchronous rendering can block user events on the main thread, while concurrent rendering can pause, defer, and resume work so typing stays responsive. Server components are treated as a larger architectural shift aimed at version drift and oversized client bundles. Instead of shipping JSON and client-side logic that must stay in sync with server-driven UI states, server components push rendered output (or render instructions) from the server, reducing client logic, version mismatch risk, and the need to update every client before new experiences can ship.
The compiler is presented as the newest lever, with concrete results from Meta. React Compiler was rolled out on Quest Store and Instagram.com, reportedly improving click/scroll interactions by more than 2×, speeding initial load and cross-page navigation by up to 12%, and improving route performance by several percentage points without measurable memory or crash regressions.
The broader conclusion is that “moving off React” rarely solves the real issues: performance bottlenecks often come from too much JavaScript, too many client-server round trips, and insufficient use of browser tooling. The recommended path is to adopt React’s scaling features (hooks correctly, concurrent mode, server components where version drift and bundle size matter, and compiler), and to keep non-React logic in the right layer when it’s more performant or simpler. The transcript also attacks the “churn” narrative, arguing that many framework changes are optional improvements rather than forced migrations, and that blaming React for developer onboarding delays or codebase complexity ignores the reality that complexity rises with product scope and team practices.
In the end, the case for leaving React is portrayed as mostly job-security or misdiagnosis dressed up as architecture. The prescription is to measure the actual bottlenecks, fix state and data-fetching patterns, and only change frameworks when the problem truly lies outside React’s reach.
Cornell Notes
The transcript argues that React isn’t failing; many scaling failures blamed on React come from how teams structure state, data fetching, and performance work as apps grow. Hooks are defended as a major win for large codebases because they replace wrapper-heavy patterns (higher-order components, render props) with composable reusable state via custom hooks. Concurrent mode is framed as a fix for main-thread blocking that causes input lag, while server components are presented as an architectural answer to version drift and oversized client bundles by shifting UI rendering responsibility to the server. React Compiler is cited with Meta rollout results on Quest Store and Instagram.com showing large interaction and navigation speedups without memory/crash regressions. The practical takeaway: measure bottlenecks, use React’s scaling tools correctly, and don’t switch frameworks just to avoid learning or debugging the real causes.
Why do some teams interpret scaling pain as “React’s fault,” and what counter-explanation is offered?
How do hooks change state reuse compared with older React patterns?
What problem does concurrent mode target, and what user-visible symptom does it address?
Why are server components framed as a solution to “version drift” and server-driven UI challenges?
What evidence is given for React Compiler’s impact, and what does it claim to avoid?
What does the transcript recommend when performance problems appear—switch frameworks or change how React is used?
Review Questions
- Which specific React features are defended as addressing scaling and performance bottlenecks, and what bottleneck does each one target?
- How do hooks change the mechanics of state reuse compared with higher-order components and render props, according to the transcript?
- What kinds of performance problems does the transcript attribute to client-side JavaScript and round trips, and why does it argue that switching frameworks won’t automatically fix them?
Key Points
- 1
Many “React scaling” complaints are attributed to developer practices, state/data architecture, and performance discipline rather than React itself.
- 2
Hooks are presented as a major improvement over wrapper-heavy patterns (higher-order components, render props) by enabling composable reusable state via custom hooks.
- 3
Concurrent mode is framed as a fix for main-thread blocking that causes input lag (the “sticky keys” problem).
- 4
Server components are argued to reduce version drift and client bundle bloat by shifting UI rendering responsibility to the server, aligning with server-driven UI needs.
- 5
React Compiler is cited with Meta rollout metrics showing large interaction and navigation speedups without memory/crash regressions.
- 6
Performance issues are often linked to too much client JavaScript and inefficient client-server round trips; the transcript recommends measuring and fixing those rather than switching frameworks.
- 7
“Churn” narratives are challenged: many changes are portrayed as optional improvements or interoperable transitions rather than forced migrations.