Summarized using AI

The History of Rails in 10 Blog Posts

Joël Quenneville • July 10, 2025 • Philadelphia, PA • Talk

Overview

"The History of Rails in 10 Blog Posts" by Joël Quenneville, presented at RailsConf 2025, offers a time-travel-inspired tour through the evolution of the Ruby on Rails community, focusing on ten particularly influential blog posts from the past two decades. Using engaging metaphors like a bus tour through "Rails Land" and references to the 17th-century "Republic of Letters," Joël highlights the enduring impact of community-shared writing on software development.

Main Theme

The talk's central theme is how influential blog posts have shaped Rails best practices, philosophies, and community thinking, similar to the way early scientists advanced knowledge by letter-writing.

Key Points and Examples

  • Fat Model, Skinny Controller (2006, Jamus Buck):
    • Emphasized logic should live in the model layer, sparking ongoing debates about MVC boundaries.
  • Waiting for a Factory Girl (2008, Joe Ferris):
    • Critiqued global fixtures in tests; introduced a library (now FactoryBot) to make test data more local and readable—shaping Rails testing culture.
  • Seven Patterns to Refactor Fat ActiveRecord Models (2012, Bryan Helmkamp):
    • Proposed patterns like value objects, form objects, and service objects to address the growing complexity of model layers, moving Rails toward more sophisticated OO practices.
  • Rails Macacas (2012, DHH):
    • Argued for opinionated frameworks; sticking to Rails defaults often yields the best results.
  • The Wrong Abstraction (2016, Sandi Metz):
    • Introduced the influential idea that “duplication is cheaper than the wrong abstraction,” endorsing pragmatic decision-making over premature abstraction.
  • 12 Factor App (2011, Adam Wiggins):
    • Outlined principles (like explicit dependencies, environment separation) for building deployable, environment-independent apps; underpins modern Rails deployment strategies.
  • Thread and Process Tuning (2017, Nate Berkopec):
    • Spotlighted performance improvements via server/thread/process configuration, reflecting ongoing priorities in Rails operational best practices.
  • Monoliths First (2015, Martin Fowler):
    • Advocated starting with monolithic architectures before moving to microservices, a philosophy widely adopted by modern Rails teams.
  • The Wear of Service Objects in Rails (2023, Jason Swett):
    • Warned against overuse of service objects; promoted more nuanced application of object-oriented models and boundaries.
  • Should You Use Hotwire or a Frontend Framework? (2024, Radon Skoric):
    • Positioned Hotwire as ideal when shared state is the chief concern and front-end frameworks (like React) when visual interactions dominate; identified HTML-over-the-wire as an effective blend for Rails apps.

Conclusions and Takeaways

  • Rails’ evolution has been heavily influenced by community writing, echoing the intellectual exchange of the "Republic of Letters."
  • Core lessons include pragmatic emphasis on productivity, careful handling of abstractions, and preference for opinions embedded in Rails defaults.
  • The Rails community is depicted as thoughtful, fun, and balanced between idealism and practical concerns.
  • Attendees are encouraged to participate in the ongoing story of Rails by writing, blogging, and sharing ideas.
  • The "one-person framework" ethos persists—Rails' focus on productivity serves both solo developers and teams effectively.

Final Reflection

The talk concludes with encouragement to contribute to the Rails community’s living tradition, drawing a throughline from historical scholarly collaboration to present-day Rails blogging and development.

The History of Rails in 10 Blog Posts
Joël Quenneville • Philadelphia, PA • Talk

Date: July 10, 2025
Published: July 23, 2025
Announced: unknown

Calling nostalgic veterans and newbies alike! We're traveling through time on a tour of some of the most influential blog posts to hit the Rails community over the past two decades. With stops at iconic locations including in testing, service objects, and JavaScript, you won't want to miss it! Bring your chrono-passport and see you in 2003!

RailsConf 2025

00:00:20.320 tour of Rails Land. Get on board this bus.
00:00:26.480 Make sure you have your Chrono passports ready. We are traveling back in time to the early 2000s and you're going to need
00:00:32.320 this. I'm your tour guide, Joel Kenville. I've been doing this tour for over a decade
00:00:38.960 and I hope you have a good time. All right, everybody on board. Let's go
00:00:44.079 to the past. So, Rails is a really magical place, a place where people have
00:00:49.840 built together, have created community, uh have created something that's really magical. And in Railsand there are a lot
00:00:56.960 of buildings and Wait, what's that? Oh, the exit. What? What about the exit?
00:01:03.760 Oh, that was our exit. Oh, no. Oops. I think I just missed our exit to
00:01:10.640 Rails land. I'm sorry. I was so excited to tell you about it that I wasn't paying attention.
00:01:16.560 Um, I've got a little bit of bad news for you. On this particular time travel road, um, our next exit isn't going to
00:01:24.720 be until the 1600s. So, we've got to do a little bit of a
00:01:30.640 detour. I do apologize, but I am excited about Rails Land. On the flip side, the 1600s are kind of
00:01:37.439 an interesting period as well. Uh, sometimes I run tours back there. Uh, so I can share a few fun facts while we're
00:01:42.960 doing there. Don't worry, I'll turn the bus around. We'll make it to Rails Land.
00:01:48.479 Uh, something that's happening in the early 1600s. We've got uh some early scientists. Um, or at least that's what
00:01:55.680 we would call them. they would probably use the term something closer to natural philosophers. Science isn't really a
00:02:02.960 thing yet. Uh so when these three and others are doing some of their work,
00:02:09.119 they don't have any scientific journals to publish in. Instead, what they're doing is they share their ideas and
00:02:17.040 their experiments by writing letters. Some of these are uh letters directly to
00:02:22.400 each other. Some of them more open letters that get circulated. And that's how ideas spread.
00:02:30.000 Now these three in particular uh and uh another group around them describe that
00:02:35.200 sort of community that they have created for each other as an invisible college. It's not a real university but it's a
00:02:42.400 network of these early scientists writing to each other. And this invisible college will
00:02:47.680 eventually evolve into the British Royal Society which is one of the most prestigious scientific institutions uh
00:02:54.959 in the modern day. But this is not just a British phenomenon. uh we see this throughout
00:03:01.040 Europe that uh early scientists uh mathematicians, philosophers are writing
00:03:06.560 to each other to share their ideas and so much so that in the modern day
00:03:12.400 historians refer to this period as the Republic of Letters.
00:03:18.159 All right, we've got to our turnaround. Um sorry for the delay here and we're going to head to Rails Land.
00:03:26.159 So, as I was saying, the Republic of Letters was a time period where uh there
00:03:31.280 was a lot of exchange of ideas, but it was all this very informal just sharing
00:03:36.560 through writing. And you know, now that I think of it, that's not all that different than how the community of
00:03:44.400 Railsland was built. Um, there are lots of influential blog posts and talks. If
00:03:51.920 you were at the keynote this morning, you heard a lot about some wonderful keynotes that built up Rails Land. Uh,
00:03:57.120 and on this tour, what I want to do is I want to showcase a few of my favorite blog posts. Blog posts that were
00:04:04.000 influential on our community. So, jumping forward to the early 2000s,
00:04:11.439 here we are. Welcome to Rails Land. So, we're going to start here at the
00:04:18.320 Railsand Museum. Um, and we're going to get off this bus. This is a walking tour. And I think we've already had
00:04:24.560 enough issues with this bus. Clearly, I should not be driving.
00:04:29.840 So, the Rails Land Museum houses a lot of uh cultural artifacts that are important to uh the community of Rails.
00:04:38.320 Normally, I start the tour by taking you through the museum and showing you some of those artifacts. Uh because of our
00:04:44.160 little detour through the 1600s, we're going to skip that. But if you're ever back in town, I do recommend going in.
00:04:50.320 Uh it's worth the price of admission. So come with me. We're going to walk through town and we're going to head to
00:04:57.360 the central square. This is Pattern Plaza. We're going to
00:05:02.800 start on the north side. Now Pattern Plaza is a very central part of Railsland. It's the area where uh the
00:05:10.800 community gets together to debate structure, to debate patterns, to think about how we're going to build
00:05:16.880 applications that are easy to read, easy to modify, and easy to build on.
00:05:24.479 And our first uh building that we're going to look at is a 2006 construction
00:05:30.320 uh by Jamus Buck, Fat Model, Skinny Controller. This is a little bit of an older building that you can see. And
00:05:37.440 just to set the stage a little bit, uh give you some context.
00:05:42.560 This is a time where Rails has just come out. It's been 3 years. And the common way to do development
00:05:49.280 still is to write a single giant file of PHP and FTP it up directly to a server,
00:05:55.120 potentially via tools like FileZilla. Anybody remember FileZilla? Yeah, good
00:06:01.680 times. Or maybe not so good times. Um, this is the year that a very young
00:06:07.680 Joel is first getting his hands dirty with web development and it's also a time where people are
00:06:14.080 starting to build more serious applications. But a big question is coming up for the community and that is
00:06:22.720 as applications grow where should your logic go? And Rails
00:06:28.319 already kind of has an answer to that because of MVC, but the the boundaries are blurry.
00:06:36.319 So the big idea of Jameus's article is that all the logic or all the interesting logic should go into your
00:06:41.840 model layer. So Jamus suggests that it should not go into the view. Sort of like old school
00:06:47.440 PHP where it's effectively just one giant ERB file with everything from SQL
00:06:52.479 queries down. And that was pretty well accepted. But more controversially, it
00:06:57.840 should also not be in the controller. The controller should be a very thin layer that handles HTTP and makes
00:07:04.160 connections to the model. And instead, all the interesting logic,
00:07:09.199 the things that make your application your application probably need to live in the model layer.
00:07:15.840 And this was really impactful. It opened a conversation around where logic should go. And it opened the conversation. and
00:07:22.319 it did not open and close because that's a conversation that continues through the history of Rails land up to the
00:07:27.440 present day. It emphasized the model layers where things should go uh brought
00:07:32.960 in some terms that people still use that I've heard people throw around this conference even today and it helped
00:07:38.720 refine what MVC means in the context of Rails.
00:07:45.120 So, pull out your Chrono Passports. We'll add our first stamp there. Uh, and then I'd like you to look at another
00:07:51.599 building next door. This one's from 2008, uh, by Joe Ferris, Waiting for a Factory
00:07:58.400 Girl. The Rails community's always been big about testing. Uh, and the default way
00:08:04.800 to test in Rails is a system called fixtures. So with fixtures, uh, what you do is you
00:08:11.440 set up your data up front and then the entire test suite has access to it. So
00:08:16.960 you might have a user named Alice who's an administrator and maybe a user named
00:08:22.400 Bob who uh has been problematic and is now banned from the app and then your test could run assertions.
00:08:30.800 Now part of the frustration that Joe is feeling is uh the presence of mystery guests in tests and a mystery guest is
00:08:38.560 something in your test that just sort of comes from the global context that you can't tell just by looking at the test.
00:08:44.880 So you might see an assertion that says Bob does not have access to do these things and you're asking yourself who is
00:08:51.120 Bob and why does Bob not have access? Uh
00:08:56.160 and you'd have to just know the story of the fixtures to know oh that's the person who is banned.
00:09:02.800 And so Joe pitches a different idea. The idea that tests are more readable when setup is inline.
00:09:10.560 And Joe doesn't just pitch an idea. He also says, "Hey, I wrote a library to
00:09:16.000 make this style of testing easier. It's a library that most of you are
00:09:21.680 probably at least a little bit familiar with. Uh Joe introduces it as factory girl. Uh today we know it as factorybot
00:09:29.200 and it's probably in most of you all's gem files today.
00:09:36.000 And this has now become the sort of default community approach to testing, writing tests with setup that is local.
00:09:44.399 Now, this was only the beginning of a whole lot of debates about how do we want to handle test setup? If you're
00:09:50.080 using RSpec, um, is pulling setup out into a let or a before block still count
00:09:55.279 as local or is that adding mystery guests? What about shared context and examples?
00:10:02.160 And in more modern times, we've seen a bit of a return to the idea of fixtures because fixtures are faster and we all
00:10:09.120 want a faster test suite. So, we're reexamining some of the trade-offs and saying, is more speed worth the
00:10:15.760 readability costs. Or maybe there's some clever ways to square the circle. That conversation is still ongoing. You can
00:10:22.240 see there's a little bit of construction happening on the building right there.
00:10:27.760 I want to give a big shout out to the ThoughtBot blog which is where this article is published. Uh THBOT's blog
00:10:33.120 has been going on for two decades. There are thousands of articles on Rails and
00:10:38.320 web development articles that have really shaped our community. Uh and so big shout out to Thoughtbot for the ways
00:10:45.040 that they've invested and shared in building Railstown.
00:10:50.560 All right, let's put our stamp in our Chrono Passport and move on to the next one.
00:10:57.440 So, this is one where I was planning this tour and I was asking around what should be the stops on this tour,
00:11:03.920 everybody told me this is the one you've got to have. This was an incredibly
00:11:08.959 influential article. And you can tell by the title that's already connecting back to that first one uh by Jamus Buck.
00:11:17.680 And so, in a world where people have been moving all of their logic to the model layer, we're now encountering
00:11:24.000 another problem. models have gotten huge, sometimes thousands of lines and
00:11:30.959 hundreds of methods in the public interface.
00:11:37.040 And so Brian here introduces a big idea and that's that your model layer doesn't
00:11:42.079 have to be all active record objects. There are patterns beyond active record.
00:11:47.760 And if you're hearing that and you're wait active record pattern uh yes Rails
00:11:52.880 did not invent the idea of active record. If you were at Caleb's talk earlier today you would have heard a little bit more about the origin of that
00:11:59.839 but it is a pattern that Rails uh chose to implement but your model layer can be more than that. Now we don't have time
00:12:07.200 to look at all seven patterns today but I do want to showcase a few. Uh one here is a value object uh which
00:12:14.800 is commonly taking a primitive that has a lot of methods that operate on it and pulling it out of your model into its
00:12:20.880 own dedicated object. Um and value objects are not necessarily a thing that you have to build yourself.
00:12:27.760 There are some that are just built into Ruby and Rails itself. They're also form objects. Uh there's a
00:12:35.200 variety of uses for these, but one that Brian highlights is the ability to have something that behaves like a single
00:12:40.720 active record object, but is a layer over one or more uh writes to the
00:12:46.079 database. And finally, uh there's the service object where you sort of take some
00:12:52.240 logic, pull it out, just wrap it in a class, and expose it via a single method.
00:12:57.360 This one has a lot of caveats on it. Um here are the ones that Brian lists. uh the idea that your action has to be
00:13:04.000 complex, that it reaches across multiple models, that it's not a core concern of
00:13:09.519 any underlying model, and that there might be multiple ways of doing that action. Keep this in mind because this is
00:13:16.240 something that's going to come up later. But this article was talked about everywhere.
00:13:22.639 And these patterns were not just a thing back in 2012. They're patterns that we see in our apps still today.
00:13:30.160 It catalyzed a lot of conversations around the use of patterns in Rails apps. Uh exploring other things that
00:13:37.120 object-oriented development could offer us. Uh some ideas from domain driven design and even some like a little bit
00:13:44.560 more out there architectures like hexagonal rails that build on top of Rails.
00:13:50.639 So let's add our stamp to our Chrono Passports. Uh make sure we're all together and I'm going to take us to a
00:13:57.040 different part of town now. So join me. We're going to walk across down this street behind this building
00:14:04.959 to philosophy row. So unlike uh pattern plaza that's very
00:14:11.680 practical and thinking about how code should be structured, philosophy row takes a little bit more of a step back
00:14:17.920 and thinks through how should we think about code? How should we think about doing things on the web?
00:14:25.440 And our first stop here is a 2012 construction uh rail macas by DHH.
00:14:32.880 And this is a world where JavaScript is now becoming much more mainstream. It's fast. We've got jQuery now. Front-end
00:14:39.279 frameworks are starting to get started. And Rails has made some bold choices.
00:14:44.720 It's made a bet on coffecript. It's made jQuery its uh default library. And it
00:14:51.440 uses a thing called the asset pipeline. And some people aren't too happy about that. And there's a lot of push back and
00:14:57.279 suggestions that maybe we should be able to swap out different pieces or change a lot of the architecture altogether.
00:15:04.880 And DHH argues that a framework that has its own vision of the web is stronger.
00:15:11.519 It's something that can actually push a positive vision of where the web should be instead of just being reactive.
00:15:19.360 And this is sort of the context that the article's written. But the community has sort of taken this and interpreted it in
00:15:25.199 a slightly different direction. Um so the big idea here uh as often the
00:15:30.639 community interprets it is that using Rails defaults tends to give you be better results because it is an opinion
00:15:37.279 native frameworks if you stay close to where the framework wants you um you're going to have a better time
00:15:45.199 and the term has sort of entered the vocabulary. People don't tend to say vanilla rails, they'll say rails. And in
00:15:52.959 fact, there was a talk earlier this morning that had that in the title. Omic acron
00:16:03.440 passport. Uh, and there's one more I want to show you here in philosophy row, and that is 2016's the wrong abstraction
00:16:10.639 by Sandy Mets. Now remember when I mentioned that there was a lot of excitement around OO ideas
00:16:18.320 and patterns uh following the seven articles or the seven patterns article.
00:16:23.519 Uh so this is the context in which this is happening and people are exploring a lot of things trying a lot of
00:16:28.800 abstractions and Sandy had given a talk uh a few years earlier at Railscon titled all the
00:16:35.680 little things exploring a lot of these OO ideas. Now, as a side note, Sandy is one of the
00:16:42.000 best Rails speakers I've ever seen. Um, for those of you who are newer to the community, I really recommend go back,
00:16:48.000 find one of those videos, and watch it. Um, it might be life-changing.
00:16:54.480 But Sandy wants to take some ideas from that talk and turn them into a blog post. And there's one phrase that she
00:17:01.199 comes back to, the idea that duplication is cheaper than the wrong abstraction.
00:17:07.520 And this is a phrase that really connects with the community. The idea that sometimes it's better to sit with
00:17:13.199 the discomfort of duplicated code or maybe messy code and not abstract immediately and to wait until you can
00:17:20.319 find the right abstraction. And this is a phrase that 10 years later
00:17:26.959 we still hear in the community. I'm sure many of you may have even heard uh this
00:17:32.320 someone mention it on a pull request or maybe you're pairing and somebody says that to you. Maybe you never knew where
00:17:38.400 that phrase came from. You're like, "Wow, my senior developer is so full of wisdom. Has these great phrases." Uh
00:17:44.000 thank you Sandy for that. The real community is a community that I
00:17:49.840 think balances idealism and pragmatic concerns. We're a community that really
00:17:54.960 values productivity. And I think that this article embodies that.
00:18:01.919 All right, let's put a stamp in our Chrono Passport. Uh 2016 is a little bit later than all the other ones, so let's
00:18:07.440 put it on the the other page. I like sorting them by chronological order.
00:18:13.919 All right, now we're going to move to a slightly different part of town. Um this is Ops Alley,
00:18:21.200 and you'll notice it's a little bit more industrial. is uh maybe a little bit less polish on it. And this is a part of
00:18:27.840 town where people focus less on writing the code and more about shipping it to
00:18:33.520 production. And our first building I want to point out right here um maybe doesn't look
00:18:40.720 like much but you can see there's a lot that it's holding up. There's a lot building on top of it is the 2011 12
00:18:46.559 factor app by Adam Wiggins. So this is coming at a time where the
00:18:52.000 cloud is becoming more mainstream. Uh but many do custom setups on their own hardware still. We're still deploying on
00:18:58.000 our own boxes. And this article came out of work at Heroku. And I say article, but it's a
00:19:05.840 little bit more of a manifesto. You might even call it a micro site.
00:19:11.120 And there are 12 ideas of factors that make your app easier to deploy. And
00:19:16.640 again, we don't have time to look at all 12, but I want to highlight a few right here.
00:19:21.760 The idea of having par between development and production. The idea of
00:19:26.880 having explicit dependencies. And the example that the article gives is declaring which gems you depend on in
00:19:34.640 a gem file. Some of you might be looking at me being like, isn't that the only way? Why wouldn't you deploy without a
00:19:40.640 gem file? If you have your own server just SSH into a box, you can ask your
00:19:46.480 admin to gem install a bunch of stuff so that when you deploy your app, gems are already there and you just assume that
00:19:51.840 they're there. Now, if you want to deploy to a different box, your code's going to
00:19:56.880 crash. And so that's one of the reasons that uh 12actor uh suggests doing that
00:20:02.559 because now your code is much more portable uh from one box to another.
00:20:08.400 Similarly, the idea of environment-based coding. Uh if you see people who want to
00:20:13.440 put their configuration in environment variables, uh this is where it comes from. And again, the idea is that you
00:20:19.360 can deploy the same code to multiple different environments, production, staging, maybe a demo, maybe a QA, uh
00:20:28.000 and they can all be a little bit different while still all be running the same code.
00:20:35.200 I was trying to extract one big idea out of the 12 factors. And the best I could come up with was the idea that apps
00:20:40.880 should be environment independent. That idea that you can go to any of those different boxes and deploy the same code
00:20:46.320 and it should work. It should be easy.
00:20:51.520 Now, if the seven patterns is probably the most impactful article that most people have heard of, think this one is
00:20:58.080 the flip side. This might be the most impactful article that you've never heard of, but I guarantee you that your
00:21:03.679 deployment setup is built on ideas from that article. So, if there's one article to go back and read, this might be the
00:21:09.520 one. Also, this is an article from 2011. So,
00:21:14.799 we're going to put that stamp way back on the left side of our Chrono Passport.
00:21:20.960 All right, next one here in Ops Alley. This one here is uh a little bit of a
00:21:26.640 surprise maybe to some of you. This is a lessernown article and I picked it sort of standin for a certain movement within
00:21:33.679 the community. the idea that we can get more performance out of our apps, not
00:21:38.720 necessarily just by writing code, but by changing how we configure things, how we configure our servers.
00:21:46.240 And the big idea from this article from Nate Burkipek is that we can tune and
00:21:51.280 threads to get more performance out of our servers. If you've ever had conversations with
00:21:57.120 colleagues about what is the optimal amount of connections to have in your active record pool, how many concurrent
00:22:03.360 workers should we have to manage our queue? How many should we be focusing on threads or processes for our web server?
00:22:10.799 Uh these are all ideas that come out of this movement um and that are partly addressed by this article by Nate and a
00:22:17.200 lot of other work that Nate and others have done. So it's a 2017 article. We'll add that.
00:22:23.200 This is a little bit after Sandy's. So, we'll stamp that in our Chrono Passport and then move to a different part of
00:22:28.640 town. And I'm going to take you back to Pattern Plaza because that's my happy
00:22:35.760 place. I I love these things. Uh but now we're going to be on the south side, which is uh a little bit more modern.
00:22:46.720 And the first building I want to point out is a 2015 construction uh monoliths first by Martin Fowler.
00:22:53.679 This is a world where microservices are starting to become popular particularly after Netflix shared that they had a lot
00:23:00.720 of success with that pattern and so everybody wanted on
00:23:06.240 and the big idea from Martin's article is that monolith should be your default starting architecture. Not that
00:23:12.799 microservices are bad or that you can't do them in Ruby or that you shouldn't do them in Ruby, but they shouldn't be where you start. If you don't know your
00:23:19.840 needs, a monolith is probably what you want. And this is something that becomes
00:23:25.919 really compelling to the community. People accept this as best practice. And even today when people talk about
00:23:31.679 architecture in the Rails community, you'll often hear the suggestion, start with a monolith. You can break it up later if you need to. There's a cost to
00:23:38.559 running microservices. and don't pay that cost if you don't need to.
00:23:45.200 Now, something that's really interesting if you read the article, because I've seen it quoted a lot, is that Martin has
00:23:50.320 a very questioning tone. He lays out the argument in a way that's really convincing that then says, "This is the
00:23:56.559 argument I've heard. I'm still on the fence about it. I need more information before I make a recommendation one way
00:24:02.000 or another." But it's convincing enough that everybody quotes this article anyway.
00:24:08.320 All right, 2015. So, I'm going to put that in the top uh right of our Chrono Passport and we're going to move on.
00:24:16.640 Still in Pattern Plaza. Um this one is 2023, so much more modern. The wear of
00:24:22.480 service object in Rails by Jason Sweat. So, remember how I mentioned that uh in
00:24:28.559 the seven patterns, the service object was a sort of easy way to extract logic out. Um, and what has happened over the
00:24:35.679 decades since then is that it has become the pattern.
00:24:41.840 It's so easy to do because you don't have to think really about boundaries. You don't have to think about modeling. You can just take arbitrary chunks of
00:24:48.400 code, pull them into a method, put them in an object, and be done with it. And it is now sort of the way that everybody
00:24:55.120 handles extractions. And Jason argues that by doing that
00:25:01.440 service objects give up a lot of the power of object-oriented programming. Not that necessarily service objects are
00:25:08.559 bad, but that they shouldn't be our main uh solution when it comes to things.
00:25:13.919 There are other patterns. There are other solutions that we can use that will give us more value. But it also
00:25:19.919 means we have to take the time to think about things like boundaries and modeling. Uh, so it's a little bit more
00:25:25.120 upfront work than you'd get from a service object.
00:25:30.640 All right, let's stamp that in our passport. And for the last one, I'm going to take you to a neighborhood
00:25:36.880 that's a little bit different. Some of you might even feel slightly uncomfortable.
00:25:44.080 We're going to cross the river. We're going to JavaScript Junction.
00:25:50.320 This is a very colorful neighborhood. It's got a lot of character, a lot of individuality. Every building does
00:25:56.480 things a little bit differently. That's a great place to be. It's very eclectic.
00:26:05.440 And the one I want to highlight here is a 2024 construction by Radon Skoric. Should you use hotwire or a front-end
00:26:12.240 framework? And Radon has this thesis that applications on the front end are
00:26:18.559 solving sort of one of two main problems. If your biggest problem you're trying to
00:26:23.840 solve is shared state between the server and the front end suggests that hotwire
00:26:29.360 is the best solution. On the other hand, if the biggest problem that your app is trying to solve
00:26:35.679 is visual interactions, then a front-end framework like react might be a better fix.
00:26:42.000 What about something that falls in between? Roden is uh partial to hotwire
00:26:49.600 and kind of has this big idea that HTML over the wire is often the best balance between interactivity and effort. Again,
00:26:57.760 it's a very pragmatic take focused on productivity. And this has kind of been the story of
00:27:04.559 JavaScript on Rails for a long time. If any of you remember
00:27:09.600 unobtrusive JavaScript from the early 2010s, a lot of the same ideas just repackaged in uh a nicer framework with
00:27:17.840 Hotwire. So, let's put our stamp in there. Uh
00:27:23.039 congratulations, you've filled out your Chrono Passport.
00:27:28.159 So, the sun is setting. Uh I'm going to walk you all to the train station. Uh you're all taking the train home because
00:27:33.360 I don't think you trust me to drive you in a bus back to 2025.
00:27:40.720 While we're here at the train station though, um just want to think back on 10
00:27:45.760 big ideas from the Rails community that we've seen today on the tour. Hopefully you had fun. So the big ideas were that
00:27:52.880 most logic goes in the model layer. Tests are more readable when setup is in line. There are patterns beyond active
00:27:59.440 record. Using Rails defaults gives you the best results. Duplication is cheaper than the
00:28:06.240 wrong abstraction. Apps should be environment independent. Tuning processes or threads can yield
00:28:12.399 better performance. Monoliths should be your default starting architecture.
00:28:18.159 Service objects give up some of the benefits of the OO paradigm. And finally, HTML over the wire is the best
00:28:25.039 balance between interactivity and effort.
00:28:30.240 So looking at all those big ideas, is there a theme that we see over and over? maybe some sort of unified big idea from
00:28:36.720 the last 20 years of the Rails community. And as I was trying to synthesize this,
00:28:42.320 what came to mind is what's basically a modern Rails marketing slogan.
00:28:47.840 Rails is a oneperson framework. Not that Rails is made just for solo developers,
00:28:54.399 but its focus on both idealism to try to make things better, but also a very
00:29:00.000 pragmatic focus on productivity makes it a framework where you can be productive
00:29:05.039 as a solo developer. It's one where you don't need a team in order to be productive.
00:29:11.679 Also, while going through all of these, I just appreciate that the Rails community is really thoughtful and
00:29:16.880 funloving. I love you all. You're building a wonderful place in Railsand.
00:29:25.039 Now, you'll notice that there's a lot more buildings, right? I had to pick 10 for the tour. Um, I couldn't show you
00:29:30.399 all of them. So, if you have a favorite blog post, uh, please do come talk to me
00:29:35.520 afterwards. I'd love to hear about your favorite blog post, how it was impactful maybe for you or for your little corner
00:29:41.039 of the Rails community. And finally, as the sun is setting over Rails, I would like to point out that
00:29:48.640 there's still construction happening over here. The story of Railsand is not finished, and you can still be a part of
00:29:54.960 it. You can be part of building the next buildings in Railsand.
00:30:00.720 So, I would um I would encourage you get into blogging, share your ideas, uh
00:30:07.279 write. You'll be part of a tradition not just of Rails Land, but a tradition that goes all the way back to the 1600s to
00:30:14.559 the Republic of Letters. I've been your tour guide, Joel Kenville. Uh, thank you for attending
00:30:21.279 this tour. I'm a principal developer at THBOT and also a blog author on the THBOT blog. I co-host the Bike Shed
00:30:27.840 podcast at bikeshed.fm and you can find me online on X at Joelken.
00:30:35.279 Here's a list of all of the blog posts that I mentioned. Uh, I'll leave this up if you want to take a photo. And thank
00:30:41.440 you for coming.
Explore all talks recorded at RailsConf 2025
Ben Sheldon
Sam Poder
Rhiannon Payne
Joe Masilotti
Josh Puetz
Wade Winningham
Irina Nazarova
Tess Griffin
+77