Rails gives you routing, ORM, background jobs, auth scaffolding, and a deploy story in one framework with one set of conventions — no stitching together six packages with overlapping responsibilities. For CRUD-heavy products, internal tools, and platforms where the database is the source of truth, that convention pays for itself in weeks, not months. We reach for a Node or Go backend when the workload is genuinely different — high-concurrency streaming, CPU-bound processing — not as a default.
Default to Hotwire — Turbo Drive, Turbo Frames, and Stimulus cover the large majority of "SPA-feeling" interactions without a separate API layer or client-side state to keep in sync. We reach for a separate React or Vue frontend when the UI genuinely needs heavy client-side state, offline support, or a native-feeling editor experience. Most CRUD-heavy and admin-heavy products never need that trade-off.
Solid Queue is our default in Rails 8 — it's database-backed, so there's no separate Redis to provision or monitor for most workloads. When throughput genuinely demands it — high-volume webhooks, fan-out jobs, sub-second latency requirements — we move to Sidekiq backed by Redis. Either way, jobs are idempotent, retried with backoff, and instrumented so a stuck queue shows up before a customer notices.
Yes — a large share of our Rails work is brownfield. We start with a tech audit (Rails version, gem freshness, test coverage, Brakeman findings), then upgrade one minor version at a time with the test suite as the safety net, never skipping majors. Deprecation warnings get fixed as they appear, not batched into a single risky jump.
The Bullet gem runs in development and CI and flags every N+1 and unused eager-load before it ships — that's the "N+1 queries flagged: 0" number we hold every build to. Beyond that, we lean on includes/preload for predictable joins, counter caches for hot counts, and database-level indexes matched to actual query patterns, not guessed ones.
RSpec for unit, model, and request specs, system specs with Capybara for full Hotwire flows, and Brakeman plus Bundler Audit for static and dependency security scanning. CI runs the full suite plus SimpleCov coverage reporting on every PR; nothing merges on a red build or a coverage regression.
10 — Start
Let's build something worth shipping.
Two-week diagnostic, four-week MVP, twelve-week ground-up. Bring the brief — we'll send a plan, not a pitch deck.