Doing Rails Wrong
Rails vs Modern JS Stacks
- Many argue most real-world apps (CRUD, dashboards, forms) don’t need React+Vite+Tailwind+ESLint+Prettier. Vanilla Rails (especially v8) already gives fast forms, navigation, and “batteries included” productivity.
- Others counter that almost every app grows in complexity; starting with React/Vue/Svelte makes future rich UI and state handling easier than retrofitting onto Hotwire/Stimulus.
Hotwire/Stimulus vs React/Vue/Svelte
- Pro-Hotwire view: lets you avoid heavy JS, build modern-feeling apps with server-rendered HTML, websockets, minimal JS, no build step, and leverage browser/server state instead of duplicating it on the client.
- Critics say Hotwire/Stimulus are confusing, poorly documented, and degrade quickly in multi‑dev projects with complex, stateful interactions. They see component-based UIs (React-style) as the real win of the last decade.
- Several report replacing Hotwire frontends with InertiaJS + React/Vue and finding it far easier to maintain.
InertiaJS and Hybrid Approaches
- InertiaJS is repeatedly praised as a “best of both worlds”: Rails/Laravel handle routing, auth, data; React/Vue/Svelte handle views without a separate API or duplicated state.
- Islands/progressive enhancement approaches are suggested: default to SSR, mount SPA-like components only where highly interactive behavior is truly needed.
Tooling Fatigue and Ecosystem Churn
- Many complain about “web dev tooling fatigue”: endless stacks in JS and in DevOps (Terraform/Pulumi, k8s toolchains, etc.), and job ads expecting knowledge of everything.
- Others push back that Vite-based setups are now straightforward, and tools like React, TypeScript, ESLint, Tailwind exist for concrete reasons (types, consistency, bundling).
- Rails is also criticized for its own churn (Coffeescript, Sprockets → Webpacker → Propshaft, different JS stories), though some say upgrades are manageable if dependencies are kept under control.
Monolith vs SPA + API
- One camp: for small teams and typical business apps, a monolith (Rails/Django/Laravel + a bit of JS) is simpler, cheaper, and avoids duplicated validation, routing, and state bugs between frontend and backend.
- The other camp prefers a thin CRUD backend and a rich SPA client, arguing this simplifies each side conceptually and scales to more interactive experiences and multi-platform clients.
Meta & Culture
- Several note this “you’re doing Rails/JS wrong” argument has recurred for 10–20 years with new names and similar tradeoffs.
- Opinions differ on whether complexity is inherent to “modern” web apps or mostly self-inflicted via overengineering and fashion-driven tool choices.