Talks
Opening Keynote

Opening Keynote

by Jeremy Daer

The video features a keynote address delivered by Jeremy Daer at RailsConf 2016, introduced by David Heinemeier Hansson (DHH). The main theme revolves around the evolution and future of Ruby on Rails, particularly as it approaches the release of Rails 5. Daer reflects on his long tenure in the Rails community since 2004, celebrating both the technical innovations and the collaborative spirit of open-source development. Key points include:

  • Rails 5 Features: Daer discusses exciting new features in Rails 5, such as Action Cable, which integrates WebSocket connections into Rails, Active Job enhancements, and a new start page for newly created Rails applications.
  • Community and Legacy: He emphasizes the importance of the Rails community and its welcoming atmosphere, highlighting the newly adopted Rails Code of Conduct aimed at fostering a respectful environment for all contributors.
  • Personal Reflections: Daer shares anecdotes from his career, including his experiences at Basecamp and his journey in software development, noting how Rails has been integral to his professional growth.
  • Technical Insights: He touches on the challenges of legacy applications and the significance of staying current with technology, mentioning Basecamp's ongoing support for older Rails applications while pushing for innovation.
  • Benefits of Open Source: The talk underscores the value of the collaborative community around Rails, fostering knowledge sharing and support among developers.

In conclusion, Daer encourages the audience to embrace Rails 5 not just as an upgrade but as a means to enhance their digital projects and to recognize the continued growth and evolution of both the framework and the community surrounding it.

00:00:10.250 Hello everyone, this is David Heinemeier Hansson. I'm sorry I can't be with you all at RailsConf.
00:00:15.299 Kansas, this is a fantastic year to be at RailsConf, and I'm really sad to miss it.
00:00:21.000 We have Rails 5 almost ready to roll. In fact, maybe the release candidate will even drop during one of these days.
00:00:26.550 But in my stead, you have something perhaps even better: Jeremy Daer.
00:00:32.130 I've worked with Jeremy since 2004 on Ruby on Rails, the framework itself.
00:00:41.160 He is one of the few, actually I think perhaps the only person who's still around from the inaugural core team.
00:00:47.129 He has commits to the framework going back all the way to 2004.
00:00:53.520 So when people ask if you need 10 years or more of Ruby on Rails experience, Jeremy is one of the very few people who can say, "Oh yep, got it."
00:00:59.760 In addition to that, of course, I’ve worked with him at Basecamp for many, many years now.
00:01:06.030 It's been an absolute pleasure.
00:01:11.159 Jeremy is one of the very best programmers I know. Whenever there's anything I can't figure out, Jeremy is usually the person I tap and ask.
00:01:17.700 So, you're in for a real treat, and I hope you all have a fantastic RailsConf in Kansas.
00:01:23.820 I will see you all next year. Enjoy! Jeers, David.
00:01:41.270 Thanks! No pressure, right? Well, thank you, David.
00:01:50.659 He stole a bunch of the stuff I need to explain about why David's not here.
00:01:56.179 I’m not David, I’m Jeremy.
00:02:02.000 It has been ten years, and it's really kind of boggling to look back at that.
00:02:08.450 It was a city here in the conference room full of anticipation.
00:02:14.480 We had a company meetup last week with Basecamp, and we were also looking back at where we've come from and where we want Basecamp to go.
00:02:21.470 I think Rails has a lot of parallels with that.
00:02:27.079 I was feeling it was kind of interesting: what can you say about something like Rails?
00:02:35.150 My impulse—I mean, I work on Rails, I helped build Rails, I helped other people build Rails, and that's what I really love about it.
00:02:41.360 So my impulse is to talk about what's going into Rails, what's next for Rails.
00:02:46.700 I can give a litany of all the sweet things and features that we want for Basecamp.
00:02:53.660 But really, I love Rails itself, the community that's formed around it, the kind of business we've been able to build around it.
00:03:04.160 The kind of team that we run because we assume that software like this is normal.
00:03:09.829 Looking back, David in 2008 talked about the great surplus, and I'm going to talk about that some more.
00:03:15.709 We’re here for Rails 5, of course, and to me, it feels like Rails 5 already happened.
00:03:21.019 Basecamp 3 is running it.
00:03:23.470 We’ve been really pushing to make Rails 5 the best it can be for Basecamp, and I think it's also going to be the best for all of your apps.
00:03:31.790 David kind of tripped me up thinking about time with Basecamp.
00:03:39.319 I know a lot of you have also had similar tenure and experience with people you’re close to—coding partners, business partners, people you’ve seen come and go.
00:03:46.310 You may have been rejoined later. I remember back in the dot-com era, before Rails, depending on where you lived, you could recycle.
00:03:53.599 You’d see somebody that you had left and missed; you’d see them again six months or a year later.
00:04:02.270 There’s a kind of camaraderie in that, especially in the face of difficulties.
00:04:10.610 After Rail's emergence, it was the first time I really participated in an open-source way.
00:04:17.750 It’s something I wouldn’t have even known to look for, but it blossomed around me.
00:04:25.070 I learned to help others, which is what I came to enjoy about it.
00:04:33.169 But first, we've got to get back to a couple of misconceptions that David's already cleared up.
00:04:39.279 I'm not DHH, and you know the saying goes.
00:04:44.649 There are a few hard things in computer science: naming, caching, and concurrency.
00:04:51.849 So we can say that we hit a race condition.
00:04:57.999 David is racing in the six-hours of spa.
00:05:03.009 I don’t actually know how to say this because it seems like saying 'spa' would not be a thing.
00:05:09.749 Like, 'spa' is a place and 'spot' is a thing you get in this league.
00:05:16.789 But it’s a place he does these long endurance races.
00:05:23.660 If you're interested in cheering him along, you can find him on Twitter at DHH Racing.
00:05:30.660 He has a separate Twitter account because there's so much racing.
00:05:36.250 I'm sorry, Aaron, I warned you before, but this was the primo pun! And no more puns, I swear.
00:05:41.260 So, I'm here to dispense with this GitHub Twitter, and you may also notice.
00:05:47.150 You might have known me as Jeremy Kemper. I'm not Kemper anymore.
00:05:55.250 I got married to Renee Davis last year and we combined our surnames.
00:06:01.970 So now we're Renee Daer and Jeremy Daer. I give a shout out to the state of California and the Name Equality Act.
00:06:07.270 Reflecting again on Basecamp, I've been at Basecamp for nine years now.
00:06:14.230 You know, it seems like an eternity to me, and it really isn't.
00:06:21.570 You hear all the time about people retiring after a 35-year career doing something, and here my tenure is just a blip.
00:06:27.920 I don't even know how to think about that yet.
00:06:34.050 My first day still feels like yesterday, even though I can also start thinking about the details of what I did.
00:06:40.240 Those chunks of my career, the things I've forgotten, snowballed into what has become a career.
00:06:46.820 My first project was a search engine, using e-commerce software at the time.
00:06:52.910 And reflecting, I think it was something like five years later I was working on a search engine again.
00:06:59.080 What's happening here?
00:07:02.000 Ten years later, I’m going to avoid the search engines and focus on Ruby on Rails.
00:07:09.690 Something I don't really know how to synthesize or make sense of yet.
00:07:16.920 Because Ruby on Rails has been around now for going on half of my career as a programmer.
00:07:23.570 But okay, we're here to talk about Rails 5.
00:07:30.680 So here I am. You're all building Rails.
00:07:38.220 Most of you are on Rails 2.
00:07:44.980 Yes, there’s a big pain—a great discontinuity—the meteor strike was Rails 3.
00:07:50.100 And I will say that we still run Rails 2 apps at Basecamp.
00:07:57.520 That's part of our legacy, something we've chosen to fully embrace.
00:08:04.120 Even knowing the hue and cry about the real problems with running Rails 2 apps.
00:08:10.900 We run some apps on Ruby 1.8 and 1.8.7 REE.
00:08:17.600 So we take on a greater kind of responsibility for our legacy and their past.
00:08:24.410 But at the same time, we make our greatest efforts to stay current, especially with new development.
00:08:32.600 I'm not going to talk too much about Rails 5 right now.
00:08:38.930 This was my impulse; I made a talk that focused mostly on new features.
00:08:46.450 Let's get that out of the way: Action Cable is pretty cool.
00:08:53.810 I was initially a real Action Cable doubter because I thought, like WebSockets?
00:09:00.190 You know WebSockets, they were kind of cool, but I hadn't used them much.
00:09:06.420 But, HTTP 2—is this the leap forward? But the fact is WebSockets work great today.
00:09:12.950 They are at their sweet spot—the prime of their life—on their tech curve.
00:09:19.480 Trying to use them even two years ago was a total hassle.
00:09:27.140 Everybody was implementing it differently under various versions.
00:09:34.250 There were complex libraries to handle all kinds of fallback mechanisms.
00:09:42.240 You had a big split on whether to start with a simple technique and upgrade to more sophisticated ones.
00:09:49.520 But these days, in most browsers, most of the time, WebSockets totally work and do so for the things we need.
00:09:56.230 We designed mainly around being able to push and publish updates to people.
00:10:03.080 We’ve done it in past apps; it’s not a new idea.
00:10:09.470 The new thing is that this is part of the framework.
00:10:14.190 Working with these tools is like working with any other part of Rails.
00:10:20.370 You build a controller—it's what I know.
00:10:26.639 I think about my interaction with resources and how Action Cable integrates in the same way.
00:10:32.930 Rather than building one-off features, I now see opportunities to rely on it.
00:10:39.920 There are two other important features of Rails 5 that are selling points.
00:10:46.570 First is the Rails Code of Conduct.
00:10:53.720 We chose to adopt a code of conduct.
00:10:59.710 Reflecting on this, we see why it exists and the perspective of asking—why do this?
00:11:07.150 This should be a norm for the community.
00:11:14.130 As we made that decision, we took a step back to consider what it's like to work with Rails.
00:11:20.099 We should know what to expect as new contributors, especially when they submit their first pull request.
00:11:28.090 We’d really like to see this reflected throughout the Rails community.
00:11:34.500 It's huge—not just the Rails committers—but it’s the broader community.
00:11:41.490 Historically, the Rails IRC room has bucked the trend, creating a welcoming environment.
00:11:48.219 We’ve somehow set a tone to keep it a good place to learn.
00:11:55.029 You can read about the code of conduct online at ruby on rails.org/doctrine.
00:12:00.560 This is a first draft of the things that we value in working on Rails together.
00:12:09.130 We hope you do too.
00:12:16.200 The third feature is a new start page.
00:12:23.100 When you create a new Rails app, there's a redesigned start page.
00:12:29.220 I really should have put a photo here.
00:12:36.170 One of our designers at Basecamp, Jamie DeHenson, redesigned the Ruby on Rails website in time for Rails 5.
00:12:44.470 Timely for Rails Doctrine and for the code of conduct.
00:12:49.810 Thank you to him for redoing all of that for us.
00:12:57.230 If you start a new Rails 5 app, just wait for it.
00:13:04.830 I said I wasn’t going to get too deep into Rails 5 features.
00:13:10.740 I wanted to talk about the how land of Rails—how we got here.
00:13:20.070 This is the questioning I went there: 'How I Rails 5 my Rails?'
00:13:28.290 Last week, meeting up with everybody from Basecamp, we were remote, getting together every six months.
00:13:36.780 Also, had the opportunity to discuss why Basecamp, why Basecamp 3?
00:13:43.100 Now, okay, I've got this little splinter in my mind, so indulge me for a second.
00:13:50.200 Seriously, what's up with this? This is literally a problem I was pondering a couple of nights ago.
00:13:57.570 I thought about this before; it’s kind of a knowledge that stuck in my head.
00:14:05.370 What does Kansas City, Missouri, what did they move? Did the river like shift around and the border changed?
00:14:12.320 There’s gotta be a reason, right? Some kind of engineering solution.
00:14:19.800 So I looked it up—in case any of you have had the same splinter pitch here.
00:14:27.330 In the 1830s, Kansas was founded as a Missouri River port town.
00:14:34.310 The Missouri River blocked all of Kansas.
00:14:40.979 Kansas River comes in from the west, so let's call it Kansas after the river.
00:14:48.740 Cool story: Kansas didn't exist at that time; Missouri did.
00:14:54.730 The river was named after the native Kanza tribe, also known as the Kansas.
00:15:00.740 In 1854, Kansas Territory was established.
00:15:06.600 Okay, now we’ve got a town called Kansas and a territory called Kansas.
00:15:12.150 This got confusing for people in the town of Kansas.
00:15:18.600 So they renamed Kansas the City of Kansas to clarify that it’s different from Kansas.
00:15:24.499 When Kansas became a state in 1861, there was no problem and no confusion.
00:15:32.740 Kansas City of Kansas—Kansas Territory.
00:15:39.470 Okay, 28 years later, for some reason in 1889, we have Kansas City.
00:15:45.210 Who knows? Where's Kansas City now? So we have Kansas City on the Kansas River next to Kansas.
00:15:51.810 By the way, there’s a Kansas City in Kansas right across the river.
00:15:58.940 So now that we've cleared that up.
00:16:06.750 Okay, back to Rails 5.
00:16:12.090 This is a huge release. This is the release that launches Basecamp 3. It also launches Action Cable, Turbolinks 5, and brings Active Job.
00:16:28.600 Active Job has been around since Rails 4.2, but now it really comes into full bloom.
00:16:36.240 It changes the way you build apps, and you will probably reach for Active Job a lot more frequently.
00:16:45.080 Action Cable, in particular, is accepting a ton of connections.
00:16:53.440 What happens when you’ve got 10,000 connections in one process and you start trying to do stuff?
00:17:01.790 You’ll block everything that’s happening on that server.
00:17:08.680 The typical response is you want to offload any kind of processing as soon as possible.
00:17:14.820 The interaction you’re going to see with Action Cable channels is to give me a job instantly.
00:17:22.030 Otherwise, you’re going to be blocking everything that’s happening on your server.
00:17:28.480 This is also the Rails that introduces a full API mode.
00:17:37.170 This means the locus of chief of your control in your app.
00:17:46.540 If you want to move it to another service, if you want Rails to be a collaborator to another place.
00:17:54.130 If you want to implement something other than Rails, it works in the browser.
00:18:02.920 The way Rails works remains fundamentally the same; you're thinking in terms of resources.
00:18:11.400 You think restfully, and none of that changes.
00:18:18.370 This is particularly something true for some of our larger Rails businesses.
00:18:26.190 As they've grown, they’ve embraced other platforms, especially if they’re multi-team.
00:18:35.040 If you’re a medium-sized company that can accommodate iOS, Android, and decide to round the browser.
00:18:42.110 It’s almost isomorphic to having a client on other platforms.
00:18:50.200 Treating the browser as a platform in itself is probably the biggest change I feel in Basecamp 3.
00:18:57.430 It's a transition to Turbolinks 5, which is very personal to Basecamp and the way we work.
00:19:06.070 We couldn’t contemplate creating an Android app on top of what we're already building.
00:19:13.780 Or creating an iOS app on top of what we've built.
00:19:20.640 A team can only do so much and must make choices about what you do.
00:19:27.340 Especially a small team that feels the pressure to grow can face a lot of challenges.
00:19:35.080 So, after the pressure of maybe needing an app, how do you handle it?
00:19:41.790 Well, you grow into being a larger company or team to tackle those challenges.
00:19:47.540 We took a different path, and I think it’s something a younger Basecamp may not have done.
00:19:55.170 We second-guessed ourselves and doubted several times along the way.
00:20:02.540 Hitting some gnarly roadblocks while building partnerships.
00:20:09.050 Turbolinks team and our iOS and Android developers made it through.
00:20:15.110 Part of Basecamp 3 and Rails 5 is the paired release of Turbolinks 5.
00:20:22.270 Turbolinks 5 comes with iOS and Android bridges.
00:20:29.050 This allows you to build your Android and iOS hybrid apps on top of your mobile apps.
00:20:34.930 Think of your Rails app as a resource; you don’t need to build a complete separate experience.
00:20:40.980 If your team already has mobile development, this is a plus.
00:20:47.920 So enough about Turbolinks 5, how do we get here?
00:20:56.070 I’m thinking back on my rails.
00:21:02.690 Why Rails 5? Here’s my first thought: David's Circuit 2003.
00:21:08.920 Seems legit, right? David isn’t here to vet this.
00:21:21.720 So it’s not wrong, is it? But we can take a closer look.
00:21:30.240 There is an element of truth, but really, the story of Rails 5 is also the story of Rails 1.
00:21:37.070 The early days show us where we’ve been and the opportunities we have.
00:21:44.070 Take a look: David in 2003—it’s not just that we need to build Basecamp.
00:21:55.030 There’s a sense of opportunity, something that can be done.
00:22:03.440 A single person could create something incredible with ten hours of time a week.
00:22:11.250 Even thinking back, how does Basecamp form in XML?
00:22:18.640 Now we have Rails formed.
00:22:26.920 There's truth to this, and it's kind of glib.
00:22:33.270 Working with David over the years; it's not too far off interdisciplinary.
00:22:43.350 There’s a higher expectation—wanting to maximize tools.
00:22:50.760 Being impatient with roadblocks.
00:22:57.130 It’s recognizing that taking the longer-term view can lead to habitual problems.
00:23:04.640 It’s about more than happiness; it’s about fluency.
00:23:11.420 It’s love for the language and the community that has grown around it.
00:23:19.520 Ruby is my native tongue.
00:23:28.040 In a tech world where you’re supposed to be a polyglot, the specialness of Ruby feels like home.
00:23:37.030 I really feel it’s like developing another layer of personal relationship with our tools.
00:23:44.460 I like other languages; I love Ruby.
00:23:51.700 It's wonderful to write and read.
00:23:59.040 But it’s a different story than coming home and opening an editor.
00:24:06.940 What about the first step? Why Rails? It’s simple: Basecamp needed to be built.
00:24:13.250 But Basecamp started as a PHP prototype. David wanted a quick solution.
00:24:22.630 He got frustrated along the way and decided this wasn’t feasible.
00:24:31.400 So, he built Rails.
00:24:37.670 This is where my story with Basecamp and Rails joins.
00:24:44.370 I had my own story with Rails before Basecamp.
00:24:52.690 I was doing freelance work, dabbling with PHP and Java.
00:25:00.000 I liked Ruby, but I found it to be something special.
00:25:06.190 For fun, I would explore how I could implement projects in Ruby.
00:25:12.520 Often, the Ruby libraries felt like pale copies of other languages.
00:25:20.290 It felt like building in Java servlets but writing Ruby instead.
00:25:26.540 Then Rails came along.
00:25:32.560 It was an eye-opener, bringing together productive web development end to end.
00:25:40.510 It wasn’t just a vision; it was a way to create and use Ruby.
00:25:48.200 It's hard to deny that I could see myself in this vision.
00:25:55.720 I worked at CD Baby and had my own Rails moment.
00:26:03.370 I was looking for like-minded individuals who shared this passion for Rails.
00:26:10.160 Derek Sivers, the founder of CD Baby, reached out to me.
00:26:18.620 It was like manna from heaven