I’m in the back of the Track 2 hall at the Beurs van Berlage in Amsterdam at the end of the second day of Rails World, so I figured I’d jot down some quick notes on the experience thus far.
Full disclosure: I’m here because the company I work for is a contributing member of the Rails Foundation. I am neither a paying customer of the conference nor am I beholden to marketing for or advocating against it. That said, I’ve been writing Ruby and using Rails for over twenty years at this point so I feel like I’m adequately qualified to have some opinions on the event content.
The Good 👍
The Beurs van Berlage and overall organization
The venue was gorgeous and easy to navigate—talks started and ended on time, signage was clear, and the staff and support crew were excellent.Day Two talks
The Day Two talks were on the whole a bit more technically in-depth than the first. In particular, I found Snehal Ahire’s performance optimization talk, Radan Skoric’s Hotwire talk, and Jason Meller’s passkeys talk to be engaging and educational. Aaron Patterson’s closing keynote was also a highlight.Omarchy looks fun
I admit I’m a sucker for the late 80s/early 90s aesthetic and a specific overemphasis on TUIs and gratuitous visual effects. I’m not yet convinced 2025 is finally the Year of the Linux Desktop but perhaps it warrants playing around with it on a Raspberry Pi when I get home.DHH’s keynote
DHH is a character, he’s got some good ideas and some bad ones, and it’s just entertaining to put him on a stage and see what kind of nonsense he gets up to.
The Bad 👎
The Cult of Personality
I think one of the more problematic things about the deification of people like DHH is that you start to think that their opinions must be good as a function of who they are, rather than assessing the quality of those opinions on an individual basis. I worry the degradation of precision engineering and our collective descent into vibe-driven development is being hastened by an endless stream of rapid fire hot takes issued from a golden calf of our own making.Day One talks
There were effective and engaging talks on Day One, to be sure, but on the whole I found most of the ones I went to to be either a bit too high-level to be meaningfully enlightening, or too focused on self-evident best practices.Hotwire Native
Hotwire Native is just straight up a bad idea. Shimming web views is a bad idea in 2025, and it was a bad idea in 2008 when it was called PhoneGap. The whole point of the mobile form factor is the opportunity for some independence from the cloud, and while service workers may solve part of that problem, you’re still left with queueing offline requests and resolving sync issues. Mixing native code and web views can actually make your on-device data flows more complicated because some of your UX can be backed directly by device stores like CoreData, while other parts are “locked” inside Rails land and its associated database. And beyond the technology itself, the Day One closing keynote was an uninformative, plodding, ham-fisted attempt to disguise a sales pitch for books and consulting services as a revelation of the most worthy successor to sliced bread.
Takeaways 📝
Especially in the world of MCPs, keep your business logic out of your controllers. If you have a web UX interacting with your data, perhaps a JSON API providing CRUD operations on those same data, and now a set of MCP tools and resources as a third vector for accessing and mutating things, you don’t want your business logic creeping outside your models/service classes. One liners in Rails controllers, Gruf code, MCP tools, etc. should be the goal.
Ractors (Ruby actors) are a powerful tool for concurrency in Ruby (or at least they will be in Ruby 3.5). They allow us to take some of the guesswork out of the parallelization of potentially IO- or CPU-bound requests. Important caveats to remember:
Ractors can’t share mutable data—use
Object#freeze
orRactor::make_shareable
instead.Any Ractor can write to any port, but only the Ractor that created a port can read from it.
Upgrade to Ruby 3.5 as soon as you can. Object allocation is 70% faster than in 3.4.
Good talks do five-ish things:
Does what it says on the tin
There’s a narrative arc
Know thy audience
Involve thy audience
No shilling
Don’t be a merchant of complexity. The work we do as technologists should make hard things easy, complex things simpler, and we should take care not to get mired in the minutiae of decomposed complexity, lest we lose the forest for the trees.