Moving on from React, a year later

Productivity and complexity: Rails vs React/TS

  • Many agree that duplicating logic across a JSON/GraphQL API and a React SPA slows development and increases risk.
  • Others contest the article’s “JS change costs 2× Ruby change” assumption, saying TypeScript + UI libraries make frontend changes fast, and Ruby’s dynamism/magic can be harder to work with.
  • General consensus: team familiarity and a single primary language/framework at a layer drive productivity more than language choice itself.

When SPAs are appropriate

  • Several argue fat clients shine when:
    • Multiple clients share the same APIs (web, mobile, queues, services).
    • Apps are highly interactive: editors, CAD/maps, video/photo tools, complex CRMs, real‑time dashboards, offline‑first, or sync‑heavy UIs (e.g., “Linear‑style” speed).
  • For CRUD‑heavy business apps and content sites, many claim SPAs are unnecessary overhead.

Server‑rendered HTML, HTMX, Turbo, LiveView

  • Many report success with Rails/Django/Symfony + Turbo/Stimulus, HTMX, Livewire, LiveView: simpler deployments, easier testing, fewer moving parts, no separate API for the web UI.
  • Critics say HTMX‑style architectures give worse DX/UX, messy templates, and poor discoverability, especially for frontend‑specialist teams.
  • Some emphasize that full‑page navigation and server‑rendered forms remain powerful and often “fast enough.”

Frontend ecosystem, overengineering, and churn

  • Repeated complaints about frontend teams building internal component libraries, multiple competing design systems, and constant framework churn that never pays off.
  • Others push back: overengineering and bad leadership exist everywhere, not just frontend; mature React stacks can be stable for years.

State management, APIs, and testing

  • Double state (frontend + backend) and custom client caches (e.g., Redux‑style query libraries) are seen as major sources of bugs and complexity.
  • Server‑rendered HTML is viewed as easier to test; LiveView‑style solutions draw criticism for being harder to test and reason about once nontrivial client state is added.
  • Strong separation between domain logic and views is widely recommended, regardless of stack.

Hybrid architectures and alternative stacks

  • Popular middle‑grounds:
    • Server‑rendered MPAs with “islands” of React/Vue/Preact.
    • Inertia‑style setups: React/Vue pages backed directly by server models instead of APIs.
    • Web Components + fetch(), Alpine.js, Stimulus, or small JS sprinkles.
    • Non‑JS frontends (Kotlin/JS, C++ backends with binary blobs to typed arrays) to avoid JS tooling pain.

Performance, devices, and UX

  • Some assert fat clients are here to stay, especially for AI‑heavy/dynamic UIs; others note median devices are weak, mobile networks are spotty, and JS SPAs often waste CPU/battery.
  • Agreement that you can build both very fast SPAs and very fast server‑rendered apps—but only with careful engineering.

High‑level takeaways

  • No consensus “winner.”
  • Broad agreement on: code is a liability; avoid unnecessary layers; choose SPA‑style complexity only when the interaction model truly demands it; otherwise favor simpler, server‑centric designs.