ATRIUMsearch → argument graph
ClaimAudio · 106:09 — 107:39

I would not have been doing any of this work if it hadn't been for my pleasure — I continue to be involved in Rails because I'm enjoying it, not because of obligation or defending some legacy.

DHH closes the interview by emphasizing that his decade-plus commitment to Rails is driven purely by enjoyment and fun, not obligation, and invites listeners to follow him on Twitter and Signal vs Noise. ✦ AI generated

David Heinemeier Hansson · The Changelog · 2015-03-06 · original ↗

plays this moment only · 106:09 — 107:39

I wouldn't have been doing any of this work if it hadn't been for my pleasure. And it certainly has been, and it continues to be. I continue to be involved in Rails because of enjoying it, not because of obligation, not because defending some legacy or something else, simply because I'm having a lot of fun and I'm enjoying myself a bunch.

verbatim transcript · starts at 106:09

Transcript · around this moment

(00:00:10) Welcome back, everyone. This is The Changelog, and I'm your host, Adam Stachowiak. This is episode 145, and today, Jared and I are talking to David Hannemeyer Hansen, DHH, as he's better known. He's one of the most influential software developers out there, and crazy as it might be, (00:00:27) We've never had David on this show before. 145 episodes into the changelog, several years into the changelog, and this is the first time we're having David on the show, but we had him on the show for a big show. One hour and 45 minutes of nothing but me, Jared, and David talking about 10 plus years of Rails, a fantastic show today, you're gonna love it. We had some awesome sponsors, CodeShip, Toptal, and CodeSchool. We'll tell you about Toptal and CodeSchool later on the show, but our friends at CodeShip released (00:00:55) a new feature called Parallel CI, and if you want faster tests, you have to run your builds in parallel. With Parallel CI, you can now split up your test commands into up to 10 test pipelines, and this lets you run your test suite in parallel and drastically reduce the time it takes to run your builds. They integrate with GitHub and Bitbucket, you can deploy to cloud services like Roku and AWS, and many more. You can get started today with their free plan, it includes 100 builds a month, (00:01:23) and five private projects, or you can use our offer code, the Changelog Podcast. Again, that offer code is the Changelog Podcast, and you'll get 20% off any plan you choose for three months. Head to codeship.com/thechangelog to get started. And now onto the show. So we got Jared on the line. Jared, say hello. What's up? Excited to be here. (00:01:50) This is, Jared, this has been a show in the making for us. David, you don't know this, but we've had the idea of doing this show since roughly around the 10th anniversary, well, I guess probably the tail end of last year. So around October, November, I was like, Jared, we should do a show called 10+ Years of Rails with DHH. And so that's what we're doing here today. So this has sort of been, it's February, so tail end of February, 2015, so we're finally there. (00:02:17) I expect you to be impeccably prepared then. We are impeccably prepared. Well, we haven't been preparing that long. We've just been talking about it. Well, speak for yourself. Maybe our notes don't reflect a date, start date prior to today, but our thoughts have definitely been there, so. Excellent. You know, I can say that I take back my history to the beginnings of Ruby and the beginnings of Rails. (00:02:44) I can remember first working on it in 2006. I think it was 2005, 2006. And so that's like forever ago to me. Let me look up the birthday of Rails. That was July 24th, 25 or 2005. 04. 04, 2004. So July 24th, 2000. (00:03:05) Oh, then I had it wrong then when I was looking at my notes. Which is really-- I mean, it's the release of Rails, the first public release of Rails. Which was 0.05, 0.5? 0.05. There was a 0.04, 3, 2, 1, and before I was counting that went before that, which started in 2003, the summer of 2003, really. That was when the first bits of Rails started coming together. (00:03:32) Now, I know you tend to walk into a situation like this, like a podcast, to have this conversation. You're typically known, but just in case there's a listener out there saying, Who the heck is this guy? Who are you? Sure. I am David Heinermeer Hansen. I'm the creator of Ruby on Rails, and I continue to be involved with the development of Ruby on Rails. I'm also a partner and the CTO of Basecamp, which is a project management tool, the original Rails app. (00:04:00) the app that Rails was extracted from. And I'm a Dane. I'm from Denmark originally, moved to the US in 2005. I could go on forever about-- Author, racer. Yeah. I'm super interested to see that you actually drive a race car. I mean, that's so cool. I try to drive a race car on the streets. It's called a Mustang, but whatever, you know? Yeah, on the track is a different animal altogether. (00:04:30) And really, it's a fantastic hobby. A great second way of getting to that magical state of flow, which is what I really love about programming, right? When it really works, when it really clicks, you get into the state of flow, which is the straightest path I've found to continued happiness, is to expose yourself to flow. And how difficult it is to get there sometimes is always the challenge. Absolutely. (00:04:59) So you say you extracted Rails out of Basecamp back in the day. To this day, that seems to be one of its virtues, is that it's had a large, very popular production app to track through time. Where did that initial insight come from? So when I started working on Basecamp, it was basically there that I decided that Ruby was going to be something I was interested in pursuing, because (00:05:27) Prior to Basecamp, I've been working on client projects and clients back in 2003 and earlier, they wanted PHP, at least for the contracting work that I was doing together with 37signals. And if it wasn't PHP, then it was Java. Those were the two big ecosystems that I was exposed to back in the day. And I was not happy with either of them, I was not finding the craft of programming itself (00:05:57) all that interesting. I was finding it interesting to get programs out of it, but working in PHP and working in Java was not exactly igniting my imagination. But I then discovered Ruby through a number of articles by various-- it's kind of funny to say this word because it's been mocked so much that people think you say it ironically now whenever you mention it. But thought leaders, I still think of it as that, even if that word is (00:06:26) Like who? Contained. Martin Fowler, Dave Thomas. I remember those two names from IEEE magazine and a couple of other software development magazines at the time, just mentioning and explaining their thought patterns using Ruby. And I thought, hey, here are all these very smart people who I look up to and learned a lot from, and if they pick Ruby when they're free to pick, (00:06:56) then why wouldn't I give Ruby a chance now that I'm free to pick? Which is what was the case with Basecamp. I was free to pick. It was just Jason and I saying, Hey, let's build an app to make it easier for us to manage client projects. And obviously, I didn't even ask Jason about like, Hey, what do you mind if I did it in Ruby? We just sort of, or I sort of just decided, I'm going to try Ruby for this. And that was the beginning. (00:07:25) To try Ruby for Basecamp, I obviously needed just to build some stuff because there just weren't a whole lot of people using Ruby back at that time. And the people that were using Ruby, not a lot of them were using it for web stuff. And I came in from having had most of my programming exposure to PHP and Java with a whole lot of things that I just assumed should be there. And I found that a lot of them just weren't there in Ruby, so I had to build them myself. Seemed to hit upon a lot of (00:07:54) Ideas that were avant-garde at the time, nowadays, you know, people new to web development, these are kind of, they're not cliches, but they're tried and true things that other frameworks have borrowed over time. I think a few shows back we had Taylor Otwell on of Laravel, the PHP framework, which was getting a lot of traction, and he mentioned you a few times as an inspiration in Rails itself. Some of those things, you know, convention over configuration, the opinionated software aspect of Rails, and (00:08:23) a few other things, where did those ideas come from? So I had been exposed to PTP and I had been exposed to Java, as I said, and that had obviously taught me a lot. And a lot of what it had taught me was things I did not want. I did not want to waste my time doing, we called it in the early days, XML situps. That was a stable of configuring any (00:08:51) web application in Java, that there was just a ton, a mountain of XML. I remember looking at applications and talking to people working on apps where the XML configuration files were larger than a working functional copy of Basecamp. And that was, of course, just crazy, right? But that was accepted at the time. People thought, Hey, what? 2000 line XML file? What are you saying? That's crazy. Like, that's decoupled. Now we have it in XML. That means it's magically good. (00:09:20) And I just looked at that and thought, no, it is not magically good. I need a framework that I can use myself as one programmer working spare time on Basecamp and be productive enough that we're making substantial progress, and I have to feel like that's a good use of my time. I could do all sorts of other things. If programming is going to be the thing that I spent my time on, it damn well better be awesome. (00:09:50) I need to have a good time. So I'm not going to sit there and just be subjected to frameworks and ideas that just make me feel like crap. And that's a bit of an overstatement. Of course, I wasn't feeling like crap all the time when I was programming in PHP or Java, but I was feeling like crap enough of the time that it just lit a fire, especially-- well, I shouldn't say it lit a fire. (00:10:18) It was sort of volatile elements that once I added Ruby to the mix, just combusted. Because Ruby was really the key trigger, I think. That here was a programming language that took such a radically different approach to what is a programming language. It redefined the question for me. Programming language is no longer just about how do you make the bits and the bobs go in the right order, it was about how does the programmer feel about it. (00:10:48) And that, to me, was just such a huge breath of fresh air that obviously no programmer would feel, oh, yeah, spending time on a 2000 line XML file is a good use of time. But it wasn't questioned because that wasn't the question, right? The question wasn't, how do we make the programmer feel good? The question was, how do we do all these other things that are sort of sympathetic to the machine? (00:11:15) sympathetic to the compile process, whatever else have you. They were not about how you make the programmer feel. And they were certainly not about how do we pick the human over the computer when the two are at odds, which very often happens. We do ludicrously inefficient things in Ruby and in Rails to this day because we pick the human. If we were picking the computer, we'd do things in a totally different way, but we're not. (00:11:44) That was really, that was that just aha moment that Ruby sort of gave me permission to think those lines of thought. Think differently. That I already had this discontent, but I didn't know where to take the discontent. I'm feeling like, , this is not great. I'm, oh, it's frustrating. I can't, why can't I get stuff done? Then all of a sudden Ruby comes in and says, Bing, let's turn on the light. And then all of a sudden I go, Oh, (00:12:15) That's possible. Well, I'm going to get on this horse, and I'm going to ride it fast. Go ahead. So that's where Rails came from with Basecamp then, basically, was your love and passion for a rethinking of how you can program, and the idea that you had this open abyss because Jason didn't care, and it was in your court to choose. So if you were choosing, you were choosing developer happiness. (00:12:41) You're building something, might as well do that. But at what point, though, when you were building Basecamp, did you really think that you were building something that was a framework? I think maybe halfway through. And halfway through, we started in the summer of '03, and we released something in, was it February of '04? I think it was February 1st, '04. So there was a process of about six months, maybe. (00:13:08) six months of part-time, I should say, because I was going in school at the time. And we also had other clients at 37 Signals that we were tending to. We didn't just abandon the entire consulting business to focus on Basecamp, like any, quote, unquote, proper startup would do, right? That's the startup law, abandon and risk everything. Anyway, so (00:13:32) There was this process of about six calendar months where I was working on it. And perhaps halfway through, I realized that I had just made a bunch of tools. I needed something to talk to the database. I needed something to create the templates. I needed some controllers. I needed a bunch of things. And I had started working on Active Support in a sense, too. I was extending Ruby such that it felt even better for creating web applications. And I just thought, hey, this is a good grab bag of stuff. (00:14:02) And this is the grab out of stuff that's making it possible and enjoyable for me to create Ruby or create Basecamp in Ruby. Maybe other people would enjoy it too. And I remember feeling this sense of actually obligation, which is otherwise a word I push back against pretty hard in a lot of context. But even at that time, I had already spent years working with open source software. Open source just struck me as just such an obviously (00:14:28) better idea. It's just such an obviously better paradigm for so much of the programming world that I felt obligated to contribute my part. And here I was sitting with a bunch of stuff made in Ruby that I could share. And I was also thinking at the time, man, I am having so much more fun programming in Ruby than I ever was in Java or PHP or anything else I had touched before. That'd be awesome if other people could have that same experience. (00:14:58) And I just, I remember thinking, yeah, they're probably not going to have that if they just come to Ruby as it looks today without any of this additional stuff, because there's just too much they had to cook from scratch. And while I was enjoying that path, I could totally see somebody like, Hey, I'm on a deadline here. I've got to make a project for a client. I'm not going to freaking reinvent every framework in the book just so I can deliver on this one thing. So I thought, Hey, (00:15:28) I can give them a jump start. I can give them enough cover and an excuse to pick Ruby, to learn Ruby, to fall in love with Ruby, perhaps, if I release this Rails bundle. You felt this sort of obligation to the open source community, and you had your Basecamp product coming out, and you decided to go ahead and make a framework of it. You also did something which, again, was, I think, unique back in 2004, and nowadays is just kind of (00:15:58) I don't know, compulsory for everybody who wants to get a framework or a project out there that has some good coverage is what you did a demo video, a 15-minute Rails demo. What'd you do, build a blog in 15 minutes? Yep, building a blog. That really seemed to work well. What made you decide to do that? So, given the fact that I'd already been an open source user for quite some time, I'd also observed open source and programmer behavior for quite some time, and one of the things that (00:16:27) always struck me as so very odd was this notion that programmers hated marketing, that marketing was sturdy, that you shouldn't have to sell your ideas. You shouldn't have to sell your open source packages. They should just be known as obviously good. If you build it, they would come. And I always thought, that's a load of crap. Like that does not work. If people do not know what you've created, it doesn't matter how great it is. They're not going to get any value out of it. Why wouldn't you (00:16:56) quote unquote, sell your ideas. If you think your ideas are worthy of releasing, you should also think your ideas are worthy of promotion. Right. So I just decided Ruby was not gonna fall into that category. I was not gonna put, sorry, Rails was not gonna fall into that category, and perhaps to some extent, it's Ruby too, that I was just gonna put it out there and then, hey, whoever wants to use it can use it, but that's kind of on their own volition, hell no. (00:17:24) this was going to be an advocacy job. And I wanted it to be an advocacy job because I worked with plenty of programmers who had the exact same feelings that I did about working in their respective ecosystems or domains. And that was dread, that they did not like the working environments of PHP or Java. And even for the people, I thought, who perhaps are not feeling that dread, I can still open their eyes. I can still show them that it does not have to be (00:17:53) terrible. Like, a lot of people just accustom themselves to acclimate to the environment that they're in, even if that environment is terrible. I thought, Hey, nope. You're not going to basically allow you to sit there and not know that there's a better way forward. Which I recognize that that sounds arrogant. That's the word. I remember from the early days of Rails advocacy that that was the... (00:18:19) insult that was most often swung at me, right? You're arrogant. You think you have a better way? What gives you the right to say so? And I thought, that is such a curious and peculiar argument. Of course, I think I have a better way. Why the hell else would I spend my time on it? Why would I invest so much of my free time and my interest and my passions in this thing if I did not think it was a better way? That doesn't mean there can't also be other good ways, but (00:18:47) I certainly came into programming Rails as a reaction to feeling things were not good enough. It was not just, Oh, let me try something alternative and different and see if it's fun. It was like, Damn, this is just too frustrating. There's gotta be a better way, and nobody else is gonna build it. I am. So of course I walk away from that experience thinking, Yep, I have a better answer, and I'm gonna tell you about it, which that really rubs, (00:19:15) a certain kind of programmer the wrong way. And I think that's just deeply entrenched in the whole scientific association with programming that scientists are not supposed to be promoters. We're supposed to just put out objective truths and then everything will work out in the end. Nope, that's not how it goes. It's not how it goes for the scientific community, it's not how it goes for programming. Yeah, it's a pure, it's an idealist idea that the cream always rises to the top. (00:19:45) I know my dad used to always say that to me. And he's a bit of a romantic as well. And I wish I could believe that, but I'm with you that you have to actually, you know, you have to put stuff out there and you do have to advocate, especially 'cause there's so much noise. You know, if you're gonna be heard through all the noise, you gotta speak up. And I can see how people will take that confidence as arrogance, but it worked. (00:20:12) Now see, I have a slightly different angle on this though, 'cause while I remember your charismatic ways and your ability to get an audience enthusiastic about what you're showing off, I also remember the whoops. (00:20:25) And I almost wonder if that was part of your marketing plea because you were just so, and maybe it's, you said you're a Dane, so you've got an accent, and maybe that's something people say differently over there, I don't know. (00:20:37) always remember that part being like the the virality I guess of what you were doing because you were like something that should be so easy was so easy in what you built and then the whoops just sort of added to it that's pretty funny because at the same time that's one of the things that rubbed other people the wrong way right especially back in I think the video recording is from 2004 I was going to ask you where were you at what were you doing to do this video it's funny because (00:21:06) One of the things I absolutely hate is repeating myself, which should come as no surprise to anyone working in Ruby that we all try to avoid that, right? (00:21:15) Well, I try to avoid it, too, in any type of public speaking. (00:21:20) That's why I don't do a lot of conference talks. (00:21:23) Even before conference talks were recorded on video, such that you basically couldn't give the same talk multiple times, I couldn't give the same talk multiple times because I would just get so terribly bored. (00:21:34) So the audio for that original 15-minute video actually came from a presentation I had made in Brazil. (00:21:42) So I had the audio from that because they had recorded it at the time. (00:21:46) And what I then did was I basically, I think I just played that audio in the background, and then I recorded a video to fit that, such that I didn't actually have to narrate the video one more time because, yeah, I don't know. (00:22:00) I just, like, that would be hassle. (00:22:02) So the whoops, the whole thing was not a well-practiced or edited sort of flow. (00:22:09) It was basically just a recording from me standing on stage in Brasil talking about rails. (00:22:13) And I think that's why it has that intensity of it. (00:22:16) And it's also why it's not a polished piece of marketing, which is funny because as I was just saying, well, I actually believe in sort of... (00:22:25) putting together a coherent marketing message. (00:22:28) And here I am, I released this video that was incredibly unpolished in all sorts of ways, but unpolished things sometimes have their own charm. (00:22:36) And I think perhaps that's what appealed to you and didn't appeal to others. (00:22:40) But yeah, that's at least the story. (00:22:43) I don't know if there was a lot of intent necessarily, except (00:22:47) I don't really want to narrate this again. (00:22:49) Can I just use the video from-- How do you like the fact, though, that Rails is-- I guess to the early, early adopters, the early visibility people that were sort of watching the space back then, it may not be so apparent if someone came into the Rails world in the last four or five years, maybe to stumble upon that. (00:23:07) But to those who have kind of been here along with you along the way, how do you like being that Rails is known for this video? (00:23:16) I think it's great. (00:23:17) I think it's great that, I think it's even greater that people don't even realize it today. (00:23:22) That to me is true progress. (00:23:23) When you can lift up the level of expectation to the point where the past seems obvious and that it's just not something we have to think about anymore. (00:23:34) These days, of course, a new open source framework or library should have a slick marketing page. (00:23:40) Of course, it should have advocacy. (00:23:43) These things were not true at that point. (00:23:45) But now they are, and the world is a better place, in my opinion, for it. (00:23:49) I don't care whether people remember that as how much did that video have to do with it. (00:23:55) I just care about today's better. (00:23:56) And that's really my primary motivation for a lot of things that I do. (00:24:01) I just want to make today and tomorrow better. (00:24:04) And once they are, who cares what the byline really said? (00:24:09) Well, open source has grown up quite a bit since then, and yeah, nowadays, who's not gonna ship a fancy marketing page and a video with their project? (00:24:18) Of course, there's also a lot of money floating around open source. (00:24:22) We know you have opinions on that. (00:24:23) We'll probably get to that a little bit later. (00:24:25) This video actually on YouTube, so anybody who wants to trip down memory lane, we'll link that up in the show notes. (00:24:30) You can watch it on YouTube, but I got to thinking. (00:24:33) You shipped this in 2004, but YouTube came around in 2005. (00:24:37) Man, I don't even know how you get videos on the internet in 2004. (00:24:40) Do you remember? (00:24:41) Yep, I FTP'd it to a server that I had, and it was in MOV container. (00:24:49) I don't even know what the recording itself was in, but it was just an MOV file. (00:24:53) And I think you could even play it on Windows. (00:24:55) or something. (00:24:56) I think the first version of whatever I uploaded to FTP could just be played on a Mac. (00:25:00) I seem to remember that people were bitching that, Hey, I can't play this on my Windows machine. (00:25:04) And then somebody re-encoded it or whatever. (00:25:07) But yeah, there were a lot of things that we take for granted today that just didn't exist 10 years ago. (00:25:13) That is so funny. (00:25:14) I remember talking about the internet as tubes and whether or not YouTube was clogging them. (00:25:19) That was crazy. (00:25:21) Which is funny because that's still the same conversation today. (00:25:24) Instead of YouTube, it's Netflix, right? (00:25:25) Yes, right. (00:25:26) Netflix is literally clogging the tubes. (00:25:29) And now a word from our sponsor. (00:25:32) Top Tile is the best place to work as a freelance software developer. (00:25:36) If you're freelancing right now as a software developer and you're looking for a way to work with top clients on projects that are interesting, challenging, and using the technologies you want to use, Top Tile might just be the place for you. (00:25:50) Working as a freelance software developer with Toptal, your days of searching for high-quality, long-term work and getting paid what you're worth will be over. (00:25:58) Let's face it, you're an awesome developer and you deserve to be compensated like one. (00:26:02) Joining Toptal means that you'll have the opportunity to travel the world as an elite freelancer. (00:26:07) On top of that, Toptal can help provide the software, hardware, and support you need to work effectively no matter where you are. (00:26:14) Head to toptal.com/developers, that's T-O-P, (00:26:18) tal.com/developers to learn more and tell them the change I'll send you. (00:26:25) You know, we were talking here a bit about, you know, beginnings and whatnot. (00:26:30) We talked a little bit about why you chose Ruby. (00:26:32) And I think another question that comes from maybe opening up this idea of 10 plus years of Rails is, did you intend to build a framework and did you intend to influence the open source community to sort of (00:26:45) begin building more frameworks and more boilerplates. (00:26:48) Jared and I talked in the pre-talk before about Java and other open source projects having frameworks, but it seems like if you go back in history, the spark of Rails sort of sparked this idea of, Wow, I can framework something and ship it as open source and do what David did. (00:27:06) I don't know if there was a big intent at that point, except there was some intent. (00:27:11) I don't know if that was the intent. (00:27:12) The intent for me was (00:27:14) I have a lot of good stuff. (00:27:14) I want to share it. (00:27:15) Ruby is a fantastic programming language that I'm having endless amounts of fun programming, and I want to share that with other people. (00:27:21) So let's make that happen. (00:27:23) Because let's also be fair, at least at the time, I was certainly heavily influenced by the Java frameworks. (00:27:29) Java was really the only environment that I was exposed to that had this notion of frameworks, but it was pretty well-developed at the time. (00:27:38) Struts was one of the major ones back in the day. (00:27:41) when I got started working, there was a couple of other things, but there was enough there for me to learn from. (00:27:47) So certainly by no means was Rails like an original ideas as sort of a framework. (00:27:54) Perhaps the thing that I tried to push and was sort of original at the time was the notion of the full stack. (00:28:00) That Rails would ship with the whole thing, the whole enchilada, it would not be this... (00:28:06) compilation of just loosely coupled ideas that you had to piece together and configure yourself, because that was one of the things I truly hated about the Java approach, right? (00:28:16) That every single project, when they started out, they had to spend a week just configuring the bits and selecting the bits even, which required researching the bits and contrasting the bits, and I just thought... (00:28:28) It didn't allow innovation, right? (00:28:30) I mean, you couldn't innovate in a situation like that, because you couldn't think on the fly and (00:28:34) and riff and iterate as Agile was becoming more and more practiced too? (00:28:41) I'm not sure I see that that's a dividing line. (00:28:44) What I did see was that it was slowing everyone down with needless decisions that they did not need to make, especially for this large category of applications where it just doesn't matter which of them. (00:28:56) thousand template languages you pick. (00:28:58) Let's just pick one that works for most people most of the time, and it's good. (00:29:02) And then, when somebody needs to start a new project, that's not a concern anymore, as we were just talking about, right? (00:29:07) Right, don't beat yourself. (00:29:08) Once Rails had, exactly. (00:29:11) Once Rails had gotten to this point where it showed, to some extent, or at least made more people aware that marketing (00:29:19) It was not a dirty word. (00:29:20) You could use marketing for open source, and marketing and advocating for your ideas was a good thing. (00:29:24) Now that's an assumption that everyone just takes for granted, right? (00:29:28) I wanted the same thing to happen for all sorts of other technical decisions. (00:29:32) I didn't want starting a very new project to begin with, oh, which template language should we pick? (00:29:38) Like, who the hell cares? (00:29:41) Like, that's just not an important decision for the vast majority of projects out there. (00:29:45) But those are our favorite decisions to make, right? (00:29:47) Like, we love to just sit around and twiddle our thumbs and talk about that stuff, right? (00:29:53) I mean... (00:29:54) Yes, which is why it cuts grants to grains. (00:29:56) Which is why, even to this day, Rails is one of the very, very few full-stack frameworks. (00:30:01) I mean, besides the fact that it's a... (00:30:04) very substantial amount of work to go full stack. (00:30:06) I think it's also deeply counter to the core of many programmers. (00:30:10) They want to believe that every single application is a unique snowflake, that they're so brilliantly unique too, and that their value comes from their careful selection of which template language, which data mapper, which whatever the hell it is in your stack, that they tailor that in this bespoke fashion. (00:30:31) to that specific application, right? (00:30:32) They derive a lot of jore from that, which is why the notion of the integrated system, the full stack system, dare I say it, the monolithic system, is so counter to what many programmers really feel is right. (00:30:46) Most programmers are enamored with this idea of loosely coupled bits, the Unix philosophy. (00:30:54) a variety of tiny focused tools that are endlessly configured together. (00:31:00) And yes, that works great for Unix and it works for a lot of other domains. (00:31:04) And in my contention, the web is one of those things. (00:31:07) And building web applications is certainly one of those things. (00:31:11) And Rails is a large argument trying to refute that idea that every programmer should sit and make these minutia decisions on technical (00:31:22) assemblies every single time on their own. (00:31:25) Now, Rael says we're going to start with a curated set of defaults that will work great for the vast majority of people for the vast majority of time. (00:31:37) And this is the important part too, of course, is that when it does not work, you're free to pick something else. (00:31:44) And all the other decisions you can still benefit from. (00:31:46) If you have a very particular affinity for, say, (00:31:49) I love riffing on this, so I'll do it again. (00:31:52) Rspec testing environment, you can slot that into Rails and it'll be great. (00:31:58) If you don't have a specific thing, like Rails ship with something great in the box with sort of a test unit style, and it'll work wonders for you, right? (00:32:06) And everyone can do that. (00:32:07) They can make sort of, there's tiny little substitutions, but they don't have to prepare the whole thing from scratch. (00:32:12) What we're giving you is not... (00:32:15) just a bunch of ingredients and saying, hey, here's how you mix it. (00:32:18) We give you a finished 21 course meal. (00:32:21) And then you can say, all right, I don't like shellfish. (00:32:25) So skip dish number seven. (00:32:28) But the other 20, the other 20 dishes, they're still designed on the menu because people sat down and thought, hey, what would make a good menu here? (00:32:38) And again, this is actually a contentious point, which is why I love it, because it gives, (00:32:44) Rails still a unique argument in the world. (00:32:47) This is one of the many things that rails have not won the majority mainstream argument on. (00:32:53) I'd say this is why rails is still an outlier as it comes to full stack assemblies, because most people just in their hearts, even if they sort of practically can recognize, Oh, I guess that rails kind of makes it easy to get going fast, but isn't that actually annoying? (00:33:10) But there's just something there that prevents (00:33:13) more programmers from going down that path. (00:33:15) And I think that's both curious and a little funny, that people on the one hand can realize, OK, I get a lot of good out of this. (00:33:23) But somehow, it's just so deeply at odds with the philosophy that allows them to produce that good that they just-- they can't kind of hold those ideas in their head at the same time. (00:33:33) It's gotten a lot easier to swap in, swap out the shellfish or whatever, to pick and choose pieces as Rails matured. (00:33:41) You know, over time, we'll talk about kind of the history of the framework. (00:33:44) But I do want to go back to the point you said about, you know, it works great for Unix, but it doesn't work for the web. (00:33:51) And I'm wondering why you think that is. (00:33:55) I think part of it is that the web and the web application follows more of a template form than the use of an operating system. (00:34:04) An operating system has to account for more different kinds of usage. (00:34:09) The web application (00:34:10) is a pretty well-defined space, at least for sort of that majority template that we're trying to present, which is controllers talking to a database, creating views. (00:34:22) Like it's a very templated approach to software development, right? (00:34:26) Like it's not sort of blue sky, like it's well-trodden domain. (00:34:32) And I think the more blue sky you're working in, the more novel the application you're working in, the lower level tools you need. (00:34:40) The more your application is just like everyone else's application, the higher level tools you can benefit from. (00:34:47) Yeah. (00:34:47) I think people have said that the closer your app is to Basecamp, as far as the way it is going to work, the better Rails is for a fit for your app. (00:34:57) Do you think that's fair? (00:34:59) It's funny because most people say that as a point of duration, right? (00:35:02) Yeah. (00:35:03) And I embrace it. (00:35:05) I agree with that point. (00:35:06) Yes, the closer your app is to (00:35:09) Basecamp, the closer you will be to having the same opinions than me on most things. (00:35:15) Now, the point of derision that I don't agree with, of course, is that Basecamp is so very unique. (00:35:20) That Basecamp is this special application that is unlike most other applications. (00:35:24) I believe... (00:35:26) that the first statement is true, that Rails is a better fit for you the more your application is like Basecamp, because I also believe that Basecamp is like most applications most of the time when it comes to the web. (00:35:38) In fact, I'll go even further than that. (00:35:39) I'll say that this is perhaps the point where we cross into arrogance. (00:35:44) is that more applications would be better off if they were more like Basecamp more of the time. (00:35:49) And I'm talking about that on a technical level, not necessarily on a UI level, although there is some bleeding going back and forth there. (00:35:56) I think that there's lots of applications out there that are trying to be needlessly novel in order to satisfy the egos of programmers who do not want to feel like they're working in cookie cutter domains, that they somehow attach their cell worth to, (00:36:13) how novel they're. (00:36:15) application is. (00:36:16) And then they create artificial novelness by picking technical stacks and so forth that are off the trot and paths such that they can feel special. (00:36:26) Like, that's a lot of- Yeah, I think that's- Third party remote psychoanalysis. (00:36:32) Yeah, I think there's probably some generalizations in there where- Oh, that's the only thing we can trade in when we talk about programmers as a mass. (00:36:39) Right. (00:36:40) And now, a word from our sponsor. (00:36:44) It is time to put the programming books away, put them away, put them down, and learn by doing with CodeSchool. (00:36:49) CodeSchool offers a variety of courses to help you expand your skills and learn new technologies such as JavaScript, Ruby, iOS, Git, HTML, CSS, and many more. (00:37:01) Code School knows that learning to code can be a daunting task. (00:37:04) They combine experienced instructors with proven learning techniques to make learning to code educational as well as memorable, giving you the confidence you need to continue past the hurdles. (00:37:15) They're always launching new courses on new technologies and offering deep dives on tried and true languages. (00:37:22) So if you don't see them, you need, suggest a course and they'll build it if there's enough demand. (00:37:27) Code School also knows that languages are a moving target. (00:37:30) always updating content to give you the latest and greatest learning resources. (00:37:35) You can even try before you buy. (00:37:37) Roughly one out of every five courses on CodeSchool is free. (00:37:41) This includes introductory classes for Git, Ruby, and jQuery which allow free members to play full courses with coding challenges included. (00:37:50) You can also pay as you go. (00:37:52) One monthly fee gives you full access to every Code School course. (00:37:57) And if you ever need a breather, take a break, you can suspend your account at any time. (00:38:02) Don't worry, your account history, points, and badges will all be there when you're ready to pick things up again. (00:38:09) Get started on sharpening your skills today at CodeSchool.com. (00:38:12) Once again, that's CodeSchool.com. (00:38:16) Let's get back to a little bit of history, I think. (00:38:19) 1.0, so December 13th, 2005, what was Rails at 1.0? (00:38:25) Was it just an ORM with an MVC? (00:38:28) What all was in there? (00:38:30) It had Active Record, it had Action Pack, Action Controller, and Action View, and it had, I'm pretty sure we had that extracted Active Support at the time, too, and we had Rails ties to bind it all together. (00:38:46) So we had talking to the bit database, having a controller layer, and having the view. (00:38:51) That was, as far as I remember, those were the bits. (00:38:55) So we did not have, say, Action Mailer. (00:38:57) We did not have, what else have we added? (00:39:00) We did not have Action Web Services, which was the framework that was for a time in Rails. (00:39:05) But the major components were there. (00:39:07) It's funny because I looked recently at an old Rails app, and it was surprising just how much I could recognize. (00:39:14) There's still a lot of (00:39:16) I'd say the vast majority of those ideas from back then, they're still there. (00:39:19) They're still present. (00:39:20) We've refracted them, we've made things better, we make it easier, and we've built on top of it and extended in all sorts of ways. (00:39:27) But that initial approach, initial architecture has helped surprisingly stable over the years, I'll say. (00:39:36) Yeah, it's funny, you have Basecamp, which is the de facto legacy Rails app, right? (00:39:41) It's the longest one that's been around. (00:39:43) It's also made the migration step by step. (00:39:46) Just to get a little bit of my background, I've been doing Ruby in Rails since about 2006, amongst other things. (00:39:54) But I still support a Rails app for a customer that's sitting on 116. (00:39:59) And by the time I inherited it, it had been too far gone to get it up. (00:40:05) And it's really a maintenance project, just change this, change that, make sure things don't go down. (00:40:10) But (00:40:11) That we just said kind of resonates because yeah, it's antiquated. (00:40:14) There's things that I'm missing that I go back to and I'm like, oh, this is death. (00:40:19) But the guts are still the same. (00:40:21) Like it's still a Rails app. (00:40:23) It's not too far gone than what we're working with. (00:40:28) What is it, nine years later? (00:40:30) Or 10 years later for 1.0. (00:40:32) I think that's the DNA. (00:40:33) You can recognize the DNA because the fundamental opinions about being a full stack framework and an integrated system and the idea of MVC as the basic skeleton and so forth, those decisions remain as valid today as they were back then for Rails. (00:40:51) So that's why you still recognize the DNA. (00:40:54) That we've had all sorts of change, but it's been (00:40:58) mostly evolutionary change, and it's been changed to deal with new problems that's been thrown at us, less sort of revisiting the core assumptions of the original framework. (00:41:10) And that's not by design. (00:41:12) Like, I don't feel any necessarily better about that. (00:41:15) There's a lot of people who are like, oh yeah, I said that like five years ago and it's still true. (00:41:19) Am I not awesome because of that? (00:41:21) And I was like, I don't give a hoot, like whether (00:41:25) Rails look the same at 1.0 as it does at 5.0. (00:41:28) That's not the important thing to me. (00:41:29) The important thing to me is that we continue to work with a framework that we love working with, and we're making it better, and we're making it the best it can be at all times. (00:41:38) That's really the core for me. (00:41:40) I would hate it if Rails was somehow tied to decisions 10 years back, if it meant stopping us from realizing the best Rails that Rails can be. (00:41:53) There might be lots of people who are like, oh, Rails is outdated, and they want to pick a different paradigm or whatever. (00:41:58) That's awesome. (00:41:59) But at least for me, I want to feel like Rails is the best it can be today because of what it is, right? (00:42:06) So that's sometimes hard. (00:42:08) Migration paths can be long and slow. (00:42:10) But I also think that after working on Rails for-- for me, it's close to 12 years now. (00:42:17) I have enough faith in it rolling out over time. (00:42:20) Okay, so here's a part of the framework I don't like. (00:42:24) We're going to deprecate it, and it's going to take a couple of versions, but in a year or two maybe, it's going to be better. (00:42:31) And I can maintain that that's okay, because we can have this... (00:42:36) long timeline because we know that the timeline up until this point, it turned out pretty well, right? (00:42:41) There's just some confidence you get from working on something for 12 years that eventually things will pan out if you keep moving forward, which that's really the key, right? (00:42:51) Like it's so easy to get stuck in the legacy. (00:42:55) It's so easy to get stuck with, oh, these are the past decisions we made. (00:43:00) We have to keep them going forward because it'd be too much work to change things and go back and so forth. (00:43:05) And (00:43:05) I've always retained that is not going to be how we roll, which sometimes creates work for people. (00:43:12) Well, I shouldn't say sometimes. (00:43:13) It creates work for people all the time, because when we do learn something new, when we have new and better insights, we change things which require you to update your application, which means that sometimes upgrading from one version to another takes work. (00:43:28) That's the trade, and that's the trade I'm exceedingly happy to make. (00:43:33) So early on, obviously it was just you making commits and curious if by 1.0 if you had contributors yet, but to date we see over 2,600 contributors. (00:43:44) It takes more than one guy to start a revolution, so to speak. (00:43:48) So obviously you weren't the only one involved, at least not after the video went viral. (00:43:52) Who were some of those early adopters that really jumped on board, started committing and helping out early on? (00:44:00) Sure, well, first of all, the 2,600, that's just on GitHub. (00:44:04) We actually track all the way back from when we were on SVN too. (00:44:08) And I think we even have some history from CBS and the full contributor count is, I think 3,800, which was that was the tweet I was tweeting earlier today, which is just a staggering number of people. (00:44:20) In any case, yeah, some of those early people. (00:44:23) We had a really quite early, quite quickly, (00:44:27) I realized when I started talking about Rails on the mailing list, that there were indeed other people who worked on web stuff in Ruby at the time, even though it didn't seem so, because it wasn't very visible. (00:44:40) Ruby as a thing was not very visible back in 2003. (00:44:45) But I started talking about it on the Ruby Talk mailing list. (00:44:48) And I got in touch with a number of people who were like, Oh, yeah, I'm also working on this. (00:44:52) Hey, could you send me the early version? (00:44:54) So even before 0.5 was released, (00:44:57) A number of people already had the Rails source code. (00:45:01) And some of those people were, I think Jeremy Kemper was one of the early ones. (00:45:05) Jeremy Kemper is next to me, the longest running Rails core team member. (00:45:11) He is all the way back from 2004, I think. (00:45:16) And Toby, for example, from Shopify, he was one of the very early members as well. (00:45:23) Thomas Fuchs, (00:45:25) Famous for Scriptaculous and he works on Freckle now and so on. (00:45:31) Let's see, what else do we have on the list here? (00:45:33) Rick Olson, I think he's still at GitHub. (00:45:36) Did a lot of cool work in the beginning. (00:45:39) AKB Techno Weenie. (00:45:41) What? (00:45:42) Techno Weenie, exactly. (00:45:43) Yeah, we still have those IRC handles on the core alumni list, which is kind of fun. (00:45:50) Well, some may know him a little less as Rick Olson and more as Techno Weenie, so. (00:45:53) Right, exactly. (00:45:55) And the same thing with Thomas Fuchs with Matt Robbie. (00:45:59) Sam Stevenson, who I worked with alongside Jeremy Kemper at Basecamp, to this day, was one of the very first core contributors as well. (00:46:10) He worked on the prototype library back in the day, and of course, continues to do all sorts of awesome open source stuff. (00:46:16) And perhaps some of those people are pretty well known. (00:46:18) There's a couple of other guys that were around in the early days that (00:46:24) perhaps the open source community, perhaps at least the Ruby open source community, you haven't heard from as much. (00:46:28) Scott Barron was one of the guys. (00:46:32) Florian Weber, who did a lot of the early work on Twitter, was on the list. (00:46:38) Nicholas Sekar, he did a bunch of the work for the router. (00:46:43) I remember the router is one of those things, I think, as we say, some things sort of have stayed the same for-- (00:46:50) 12 years, and the router's not one of them. (00:46:52) The router's probably one of the most rewritten bits of Rails. (00:46:56) We've gone through tons of iterations. (00:46:58) And Nicholas, I think, had generation two or generation three was sort of his masterwork. (00:47:06) Nice. (00:47:07) So one thing I want to just double back, a question I was thinking of asking when we were talking about the initial release and just kind of got lost in the stuff there was, (00:47:15) You obviously prepared and you had an advocacy of our marketers look at getting it out there. (00:47:22) Still though, were you surprised by how successful it ended up being? (00:47:29) Of course. (00:47:30) I think that would be the height of arrogance, I think, beyond even my capabilities. (00:47:37) I was just testing the waters. (00:47:39) I just said, yeah, what are you talking about? (00:47:40) Of course. (00:47:41) You sat in the three. (00:47:42) I knew that tens of thousands, if not hundreds of thousands of programmers would use Rails over the years. (00:47:46) I had them at whoops. (00:47:49) Yeah, there's no way that I think anyone could have foreseen that. (00:47:54) Yeah. (00:47:54) What I did foresee, though, was that it was going to be popular. (00:47:57) And the reason I knew this was it just felt so much better. (00:48:01) I knew... (00:48:04) pretty quickly into it that like, holy , this is not just like 10% better, 15% better than what I was doing before. (00:48:12) This is multiple times, if not an order of magnitude, better, and by better defined as enjoyable and productive and all these other things, at least for me. (00:48:23) And I thought, if I'm feeling an order of magnitude jump in productivity and enjoyment, well, (00:48:30) When I release it, maybe people won't get that order of magnitude, but maybe they'll get two times or three times, like they won't get 15%. (00:48:37) And I thought if you're sitting on that kind of leap, there's no way that's not going to have some uptake. (00:48:45) There's no way that people are just going to say, Yeah, I don't care. (00:48:49) So what if I could have like three times the amount of fun, be three times as productive? (00:48:54) And it's not a big deal to me, absolutely not. (00:48:56) But (00:48:57) It's still a huge, huge jump from that to where we are today. (00:49:03) So just on the note of not being, I guess, being surprised by the success, when we go back the line of the history of Rails, we also sort of indirectly parallel Basecamp, too, because they're sort of side by side to a degree in terms of existing, you know? (00:49:23) How did the success of Rails (00:49:26) lead into the success of Basecamp and not just so much the product, but the company of 37signals and just how you took that to Backpack and to Da and all the other things you've done over the years, whiteboards, writeboards actually, not whiteboards, writeboards. (00:49:43) How did the, you know, I guess the success of Rails bleed into the success of Basecamp? (00:49:48) So one of the things when we started with Basecamp was that we didn't have a lot of money, right? (00:49:52) We did not take any VC funding, we were funding the development of (00:49:56) Basecamp entirely off the consulting projects that we had at the time at 37Signals. (00:50:00) And as anyone know, if you have a four-person consultancy, you're not exactly swimming in cash. (00:50:06) So it was simply not an option for us to outspend any competition there may have been on advertising or anything else that was expensive. (00:50:17) The only thing that we had that we could do was we could share what we learned and we could use that as our marketing. (00:50:23) We could build an audience. (00:50:25) people who sort of were interested in what we had to say because we were sharing our techniques and thoughts about business, about technology, about programming, and then we were hoping that if they liked our thoughts on these matters, that they would give our product a try. (00:50:41) So that was our marketing strategy, very intently so. (00:50:44) And Rails, of course, played beautifully into that. (00:50:48) Basecamp was the original application, so anyone looking at (00:50:52) Rails, usually also you'd looked at Basecamp, because that was sort of the validation. (00:50:56) Yeah. (00:50:56) Eh, I don't know about this Rails thing, but I guess if it can make Basecamp, it's gotta, eh, it's worth a second look. (00:51:04) And I think that that's one of those things that are just so important about extractions, that frameworks invented out of thin air or rational idea, not through experimentation and sort of an empiricist approach. (00:51:21) tend to, at least for me, far more uninteresting. (00:51:26) Like, lots of people, they just look at what was made with this? (00:51:29) What can you make with this? (00:51:30) Which is, in some ways, it's a funny test to put up because everything is too incomplete. (00:51:36) You can make anything with anything, right? (00:51:38) Like, we could still be making websites with Visual Basic. (00:51:42) Actually, maybe for all I know, some people still are. (00:51:45) I'm sure there's a few. (00:51:46) Oh, okay. (00:51:47) And so you can make anything with anything, right? (00:51:50) So it's kind of a funny test, but I think it's also just a very primal one. (00:51:53) We want to see like, what was it up to? (00:51:57) And I think at the very least, it just leads credibility to the builders. (00:52:01) Like if the first app that was made with Rails was some crappy piece of crap that nobody wanted to use and it looked terrible and it didn't have any customers and so on, that would have made it harder to sell Rails. (00:52:14) Of course it would, right? (00:52:16) We had a similar conversation recently with Rob Eisenberg. (00:52:20) He created Durandal and then recently Aurelia, two JavaScript client frameworks. (00:52:25) And Durandal, the product he created with it, it had since failed, not so much because of the framework, but because of the business model or company or whatever. (00:52:35) I'm not really sure of the details, but I guess that's sort of unique to look at with Rails. (00:52:38) It sounds like what you're saying is that Rails may have had (00:52:43) some success because of the fact that you always had the great business behind Basecamp and you always had, you know, one shining object at least, you know, Shopify and many, many others, of course, not saying that Basecamp was the only one because there's plenty of other really good successes out there, but you can always depend on Basecamp to say Rails is good because Basecamp is good. (00:53:04) And there was this symbiotic relationship that Rails derived a lot of legitimacy from (00:53:12) being extracted from Basecamp. (00:53:13) And Basecamp got a lot of leads because people got interested in Rails. (00:53:17) I think sometimes people over sort of subscribe what sort of how much truly came out of that. (00:53:23) Like these days, if you ask the vast majority of Basecamp customers, do they know what Rails is? (00:53:28) I guarantee you that they'll say, what? (00:53:30) Yeah. (00:53:31) I don't know what that is, but in the early days it helped. (00:53:34) And it helped because (00:53:36) when you're sort of trying to get a business off the ground, you don't need millions of people. (00:53:40) You just need first a few hundred and then a few thousand. (00:53:44) And in those early days, I think the association with Rails was part of that larger marketing strategy that we were going to out-teach the competition. (00:53:53) We're going to share more than anybody else. (00:53:54) We're going to share more of our recipes and more of our technology. (00:53:58) Yeah, I think if nothing else, it probably helped on the talent side, help you get talent early. (00:54:03) I mean, you got Kemper and (00:54:05) Stevenson's still there today where it probably helped attract developers. (00:54:08) Do you think that's the case early on? (00:54:10) People that wanted to be working with Ruby? (00:54:12) Absolutely. (00:54:12) Yes, we got to cherry pick some amazing programmers because, not just because of Rails, but in the early days just because of Ruby. (00:54:21) Right. (00:54:22) Most people were just not being paid to do Ruby back in the day. (00:54:26) I recall that... (00:54:27) First RubyComp I went to back in 2004, and I recalled asking, Oh, so how many people are being paid to work on Ruby? (00:54:34) And literally, I think two hands went up out of the 40 people there. (00:54:38) Not exactly a huge sample in any case, right? (00:54:41) But just weren't people being paid to do Ruby. (00:54:43) And here we came along and we were paying people to do Ruby. (00:54:47) Well, paying people, that's even a big word. (00:54:50) The first other programmers beside me that we hired at Basecamp was in end of 2005, I think, James Buck. (00:54:58) But absolutely, James was working at the time doing Java at some university, if I remember correctly. (00:55:06) And here we were doing Ruby. (00:55:08) He was doing Ruby as a hobby side thing, but weren't able to use it at work. (00:55:12) And we were saying, come over here. (00:55:14) We'll give you a job doing Ruby. (00:55:15) And then, of course, even to this day, it still works. (00:55:18) It's still a great way of attracting people. (00:55:23) The weird place, the Basecamp is a place that is still active in open source, still shares and helps steer Rails. (00:55:29) And you're going to get to work on all that. (00:55:31) Of course, that helps. (00:55:33) Absolutely. (00:55:34) Let's move forward a little bit. (00:55:36) 2.0, we said, was in 2007. (00:55:38) Let's look at 3.0, which launched August 29th, 2010. (00:55:44) If I recall, that was the big MERB and Rails merge release. (00:55:48) Is that correct? (00:55:50) That's correct. (00:55:50) Okay. (00:55:52) Share a little bit on that. (00:55:53) We don't have to go too far into the MERB and Rails history, but kind of how that came about and how MERB affected Rails during that time. (00:56:01) Sure. (00:56:02) So at that time, one of the big Rails shops was Indian Yard. (00:56:08) They were doing hosting for Rails applications. (00:56:11) And Esra started MERB. (00:56:15) Initially, I believe, I'm a little fussy on the history, but (00:56:20) as a sort of, oh, well, if you have some performance issues with these parts of Rails, which was something that they were seeing in their deployments, you can use this smaller targeted thing. (00:56:31) It was kind of, at least as I saw it, it was started more as a sort of Sinatra kind of thing, like let's create some microservices for a few things. (00:56:38) And then it kind of just grew from there to the point where a lot of what was going into MERB was just, from my perspective, a bit of a re-implementation (00:56:48) of many of the things we had in Rails. (00:56:50) And when I looked at MERP, I didn't actually see a lot of philosophical differences. (00:56:54) I didn't see a lot of things that like, oh yeah, of course, this can't be in Rails. (00:56:58) I started wondering, this is great work. (00:57:02) Why do we not have these things in Rails itself? (00:57:05) Like if you're making, let's say, the router more efficient, why wouldn't we just make the Rails router more efficient? (00:57:10) So I started talking to people at Engine Yard, and I mean, (00:57:15) It was a little bit contentious at times. (00:57:17) I'm not going to lie. (00:57:17) Like there was a little bit of, obviously, Estra and the team around it, they sort of, they had a thing of their own, even if they were re-implementing a fair amount of Rails stuff that they had created, something standalone, and they had some affinity to that. (00:57:32) So it took a fair amount of talks, both with Estra and with Yehuda at the time to figure out, do we actually have a shared philosophical base? (00:57:43) Is there, (00:57:45) Are these divisions that we're currently perceiving between Rails and MERP, are they really there? (00:57:50) Or are we, what do you call it, violently agreeing? (00:57:55) And I think it turned out over a series of conversations that we were violently in agreement. (00:58:00) There you go. (00:58:01) The MERP group was focused on a number of real performance and other issues that (00:58:09) We just hadn't addressed. (00:58:10) It wasn't because we didn't want to address them. (00:58:13) It was just because nobody had done the work. (00:58:15) And here came a group that did the work. (00:58:18) So we found a way to make that happen together, that that work could happen in Rails and we could make Rails better. (00:58:25) Since there were no philosophical differences, why should we have two frameworks pursuing the same philosophical goal? (00:58:32) In my mind, competition is great when it's a competition of paradigms or it's a competition of... (00:58:39) different philosophical goals. (00:58:40) Like Sinatra is a great example. (00:58:42) Like Sinatra is so obviously not Rails, right? (00:58:44) It's trying to pursue a very different path that is tangential or sort of separate, not overlapping directly with what Rails is doing. (00:58:54) So that makes sense as its own thing. (00:58:56) MERC was moving in a direction that was far more like a re-implementation of Rails to large extents. (00:59:02) And we just did the re-implementation in Rails. (00:59:05) We spent the time and poured it over a bunch of (00:59:09) these MIRP advances in efficiency and so forth, and Rails turned out to be stronger for it. (00:59:16) And we got some new members on the core team, and we enlarged the community, and we didn't splinter the community. (00:59:22) I think some of the pains, for example, that Node is currently going through with Node and I/O, that split, we were able to (00:59:35) At least fold back in, right? (00:59:37) We didn't avoid it 100% because there was, I don't know, six months, perhaps, where there was some contentious debate back and forth and splitting of the community. (00:59:46) And we, in the end, we ended up folding it in. (00:59:50) Rails turned out to be better for it. (00:59:51) And everyone turned out to win because we now had one strong ecosystem that was even stronger. (00:59:58) And no doubt, the community bolstered and not divided as a huge win. (01:00:02) What were some of the technical wins in your mind of the merge? (01:00:07) Efficiency. (01:00:08) I'd say efficiency and extendability to some extent. (01:00:11) As we were saying, it was never-- there was a perception that the dish of rails, the 21-course meal here, was completely fixed and that the chef would accept no substitutions. (01:00:22) And that was not my opinion at all. (01:00:25) And it was a-- (01:00:28) My fault, obviously, for allowing that perception to be adopted out there. (01:00:34) But what I just said was substitution's a fine. (01:00:36) It's just not something I want to work on. (01:00:38) If you want to work on it, if you want to work on making it easier to swap in another testing framework, more power to you. (01:00:45) I'll totally welcome your work. (01:00:47) It's just not something I'm going to spend my time on. (01:00:49) And that was initially taken, and my fault, for not making that clear that (01:00:55) the position was just not one saying like, don't position me to do it because I'm not going to do the damn work. (01:01:00) You want to do the damn work? (01:01:01) Wonderful. (01:01:02) We'll get along swimmingly. (01:01:04) And so we did, right? (01:01:06) Like we erased some of those misconceptions that had arisen. (01:01:11) And we've got a lot of extendability. (01:01:14) in for it. (01:01:14) I think it was after Rails 3 where RSpec, for example, didn't require a lot of monkey patching to do its work because we had the hooks and extension points to make it possible. (01:01:24) And we got a bunch of efficiency gains. (01:01:26) I think the router was one of the things where a bunch of work went in. (01:01:30) And I think also in other places, they had just done some optimizations because Engine Yard's work on MERP arose from watching a lot of (01:01:41) people deploy apps on their platform and just falling over, right? (01:01:45) Because they had done something that either was inefficient or they exposed inefficiencies in the framework. (01:01:49) So they had a lot of data on where this went wrong, where I didn't have that data. (01:01:55) Like I was sitting on the data from Basecamp. (01:01:56) And when you were using Rails to build Basecamp, I wasn't hitting any of those things, right? (01:02:01) And that is the power and wonder of a broad tent, of a broad community, that everyone gets to bring (01:02:08) their improvements to the table, and they can improve things even if I do not hit those problems, right? (01:02:14) So I was not hitting a lot of these issues, and still Rails became better. (01:02:18) And maybe I was going to hit those issues three months later, and then I was thankful that they had done the work. (01:02:25) Just to clarify there, it sounds like MERB was created by Ezra and Yehuda when they were working at the Engine Yard. (01:02:32) because they thought that you wouldn't welcome, as the chef, wouldn't welcome the additions to the menu. (01:02:38) Is that right? (01:02:39) That's part of the reason, yes. (01:02:40) Okay. (01:02:41) Part of the reason. (01:02:42) And that is a failure of open source governance. (01:02:45) I think that one of the things I took away from that was it's very easy to cultivate this perception of elitism, that there is this hollow core, hallowed core, not hollow core, hallowed core of... (01:03:02) Rails developers, they make all the decisions, they take no input from anyone. (01:03:06) Anyone who posts contributions is going to be ignored. (01:03:10) And to be honest, some of that was true. (01:03:12) Some of that was true simply from a perspective of who's going to review these pull requests? (01:03:19) Like, I was not going to do it. (01:03:20) My contribution to Rails has always been, I'm going to put in my contribution to Rails. (01:03:24) I'm not going to spend that much of my time to review other people's contributions. (01:03:29) Again, that was taken as then, (01:03:30) Well, you don't want contributions. (01:03:32) No, I just said, I don't have enough hours in the day to man both Basecamp, run it as a business, program the application, and put all the extractions I take from that into Rails, and also do all the work on the pull request. (01:03:45) We need a larger team of more diverse interests where some people find great pleasure and value in doing the review of contribution work. (01:03:55) And we have that today, right? (01:03:56) Like that's basically what I was celebrating when we were talking about the 12,000 pull requests process. (01:04:01) There was no way that was going to happen back in the Rails two days, because we just didn't have the bandwidth as a community to adopt that and deal with it. (01:04:09) And we learned a lot from it. (01:04:10) I think that the path today for new contributors is a lot nicer and friendlier than it was back then. (01:04:19) And that's prevented us from running into the same issue (01:04:23) with the next splinter group who thought that their input wouldn't be valued. (01:04:28) And now, a word from our sponsor. (01:04:31) Hacker Newsletter is sponsoring the show this week. (01:04:34) In front of the show and a great companion to our newsletters, Hacker Newsletter is a weekly e-mail shipped on Fridays that includes the best articles on startups, technology, programming, and more. (01:04:45) All links are hand-curated from Hacker News by Kale Davis himself. (01:04:49) And one of the things I personally love about this e-mail is that its organization is phenomenal. (01:04:53) All the links are grouped into categories to make it easy to scan and find your favorite Hacker News posts like show HN, code, design, books, and more to an almost 30,000 subscribers and subscribe today to this e-mail at hackernewsletter.com. (01:05:12) So there are a lot of changes that went into 3.0 around the modularity and (01:05:17) Yet, I think 3.1 was probably a bigger deal as far as upgrade trouble. (01:05:22) I think GitHub famously stayed on the 2.3, I think, branch for years because of difficulties upgrading. (01:05:31) And most of that, I think, was around the asset pipeline. (01:05:34) Now, to me, the asset pipeline was like a great idea and somehow a terrible idea all at once. (01:05:40) Take us back to the time of the asset pipeline. (01:05:43) whose idea it was, how it was implemented? (01:05:46) Just give us a gist of how that rolled out. (01:05:48) Sure. (01:05:49) So first of all, I don't think that the upgrade trouble was from the asset pipeline. (01:05:53) The asset pipeline was an optional piece from day one, still is. (01:05:58) The difficulty was definitely from 3.0, because in 3.0, we just changed a bunch of APIs. (01:06:04) And we had to make those extendable points that people from the MERP camp wanted to bring to the table. (01:06:10) And some of the optimizations, they (01:06:13) they had API changes behind them too. (01:06:15) So we were changing a lot of internals and when we changed a lot of internals and we had a lot of changes like that, it just becomes harder to upgrade. (01:06:22) And especially it becomes harder to upgrade if you have a Rails 2.3 application where you've made a lot of... (01:06:30) modifications to the framework yourself, because those modifications no longer work. (01:06:34) If you were digging into the internals of the Rails setup, those internals just got blasted to smithereens. (01:06:40) The upgrade from 2.3 to 3.0 was not actually terrible if you had no extensions to the Rails framework, but they were brutal if you had deep extensions to the Rails framework because so much of the internal implementation changed. (01:06:55) And that's, of course, exactly what a lot of big shops have, because Rails 2.3 just didn't address as many concerns as Rails 4.2 does. (01:07:04) And a lot of people at the time, they were making do with their own attacks as those implementations, and they weren't necessarily pushing that back upstream. (01:07:14) So GitHub might have all sorts of extensions to, let's say, Active Record that dug deep into the bowels of how the query engine worked or something like that, and then if the query engine changes, (01:07:25) then those didn't work anymore. (01:07:28) So I think that was the core of it. (01:07:31) But I think the asset pipeline is still a good story, because it was one in a long series of adoptions that Rails has made that was not universally liked at the time. (01:07:44) Before that, it was rest. (01:07:46) And before that, pluralization is one of the earliest ones I can remember having controversy around. (01:07:52) Rails has a very long history of making (01:07:55) extensions to the framework and meeting resistance from certain camps that like, oh, this is not Rails's responsibility. (01:08:01) You should not address this. (01:08:02) Somebody can just deal with it in gems or elsewhere. (01:08:06) And the asset pipeline was certainly one of those things. (01:08:09) And I'm still a little fussy on what the actual core of the opposition was about. (01:08:16) Because at least as I saw it, the asset pipeline made it easier for us to (01:08:22) deal with JavaScript and CSS in a structured manner, instead of just dumping everything into public. (01:08:29) But I think the problem with the exit pipeline for a fair number of people were that it came a little too late. (01:08:35) It came a little too late in the sense that they had already tried to hodgepodge their own solution to the problem. (01:08:42) with their own in-house tool chain. (01:08:44) And now here comes Rails and puts this into the core, and all of a sudden, they have to change from their own internal tool chains to something else. (01:08:52) And that's kind of a little painful. (01:08:55) But there's that, that's a practical concern. (01:08:57) And then I also think that there was that philosophical concern, and we have that every day. (01:09:02) Almost every week, there's somebody in a pull request saying, Why does Rails need to do this? (01:09:07) Well, because it's better. (01:09:09) because Rails is better when it also addresses this issue. (01:09:12) Is the handling of CSS and JavaScript assets, is that not something that most applications need to do most of the time? (01:09:19) Of course it is. (01:09:20) And since it is, we should make that experience as painless as possible, which perhaps that is the third point. (01:09:29) The asset pipeline was a fair amount of work. (01:09:31) And as any fair amount of work, it didn't, it had rough edges, it had S cases, and people would hit those edge cases (01:09:38) that I hadn't hit, and other people working on the ACID pipeline hadn't hit, and they would think, Oh, it's broken. (01:09:44) Like they confused hitting a bug with, Is this a fundamentally good idea? (01:09:50) And that reminds me of another big schism we had in the Rails community, which was the adoption of Bundler. (01:09:56) I think actually the adoption of Bundler came with Rails 3.0. (01:09:59) I thought you were going to say CoffeeScript. (01:10:01) Well, that too, but... (01:10:04) That just follows the same pattern. (01:10:05) So to me, it's less interesting. (01:10:07) I think the Bundler one was even more interesting because parallels to the asset pipeline are even clearer. (01:10:12) To me, I think it was probably Yehuda that showed me this, or maybe it was in a conversation with Yehuda. (01:10:18) But very quickly after I saw Bundler, I thought, this is obviously the solution. (01:10:25) Obviously, there should be a way to declare your dependencies and have a way to resolve them. (01:10:32) that should not be checking in a copy of the engine you want to work with in your own source tree. (01:10:39) That's a solution. (01:10:40) But there was so much pushback around Bundler. (01:10:43) And a lot of the pushback came from Bundler was broken. (01:10:46) Yeah. (01:10:46) Because Bundler was early and Bundler is solving a substantial problem. (01:10:51) So there was just a lot of bugs in the beginning. (01:10:53) And someone would get bitten by two or three Bundler bugs and they'd think Bundler is a... (01:10:58) terminally flawed idea that cannot be trusted, rip that shit out, right? (01:11:04) And that's what they would take away. (01:11:05) I mean, it's funny because this was not just novice uses of rest that had this opinion. (01:11:13) I had epic debates with Jeremy Kemper over Bundler. (01:11:17) He did not see the underlying value in Bundler for a very long time. (01:11:22) There were some philosophical differences there too, which goes back to the debate of (01:11:27) Unix versus integrated systems, which was, I from the beginning said, I want, or I want, I desire the sort of Rails dependencies to work as a bubble. (01:11:38) Like when I declare that Rails, that my Rails app uses, let's say this plugin, it should just be available. (01:11:44) I don't want to use require. (01:11:46) Like that's otherwise one of the sort of, (01:11:49) underpinnings of most programming languages is that you're explicit about your dependencies at the individual subatomic level. (01:11:56) That in the individual file that uses a certain library, you include that specific library. (01:12:01) And I remember from my Java days, where you just see those-- Imports, like a bunch of them. (01:12:06) Imports at the top of the file, and they would just be like pages long. (01:12:09) And I thought, that is just retarded. (01:12:13) That's not how we're going to play this game over here. (01:12:16) And we didn't. (01:12:17) Like today in Rails, most Rails applications do not call require very much. (01:12:21) Like everything is auto loaded when it comes to your own models and controllers and helpers and so forth. (01:12:26) And even the default for bundler is to auto (01:12:30) required the gems such that it's loaded at boot, which I thought was a universal good. (01:12:37) Lots of other people did not at all think that that was a universal good. (01:12:41) So that took months, if not years, for that to become established practice. (01:12:45) And today, of course, it's a total non-issue. (01:12:48) Nobody is going back and saying like, oh, I wish Butler didn't exist. (01:12:52) I wish I manly had to assemble my dependencies and so forth. (01:12:56) The debate is over and we moved on. (01:12:58) And I think to (01:13:00) Large extent, the same is true for the asset pipeline. (01:13:03) There are still some holdouts who have their own build pipes. (01:13:06) But I think that the opposition moved on to a different spot, which is more around what should Rails do with client-side MVC, and how should it deal with that kind of stuff? (01:13:18) And now there are sort of new opposition there. (01:13:21) But the asset pipeline itself for the use case that Rails uses it for, that's no longer a point of controversy. (01:13:28) Right. (01:13:28) The controversy nowadays, as you said, is on how Rails handles fat JavaScript clients and how it plays nice in that ecosystem, which is becoming more and more popular as time passes. (01:13:42) So how does it play? (01:13:44) And how now and how in the future will it handle JavaScript? (01:13:48) So there's sort of two approaches to that. (01:13:51) One is some introspection about how large the Rails tent should be. (01:13:56) And (01:13:57) At various times, I've been flip-flopping back and forth on this issue. (01:14:01) Should the Rails tend to be so large that Rails is still a great fit for API-only servers, where Rails is not at all concerned with what the whole view aspect of things look like, which is kind of what the client-side MVC setup is, right? (01:14:17) Treating Rails just as an API server. (01:14:19) And for sometimes I thought, well, that would dilute what Rails is and what it stands for, I've changed my position on that. (01:14:25) I don't think that that's true anymore. (01:14:26) I think (01:14:28) Whether you're doing client side MVC or you're doing server side generated HTML with JavaScript sprinkles, which is another term I love because both sides see that as a, it's a point of derision and a point of sort of praise at the same time. (01:14:44) I love those terms. (01:14:45) I love when opponents of the same idea can agree on the term. (01:14:48) It's kind of like Obamacare. (01:14:49) Right. (01:14:51) that like both sides can think that's a good term. (01:14:53) So that's one of those rare moments I think is great. (01:14:56) But anyway, we're just saying, yo, that sort of the appreciation I've come is that we share far more than we differ. (01:15:04) So what if we don't generate the view in the same way? (01:15:08) Yeah. (01:15:08) To me, in many ways, that's kind of, it's a bigger point, but it's related to say, some people like Hamel and some people like ERB. (01:15:17) Okay, so some people are going to build their application in client-side MVC. (01:15:21) Why should we not collaborate on what the, on active record, on action mailer, on action controller? (01:15:29) Why should we not collaborate on those things just because we differ on how the view is generated? (01:15:33) The rails tent is large enough to fit people who want to build client-side MVC. (01:15:38) Of course it is. (01:15:39) And I can divorce that from my own personal opinions about how (01:15:43) Suitable or not suitable, client-side MVC is for a large swath of applications and whether I personally want to build my applications in that fashion. (01:15:51) I think that's a key foundation of why it whales is such a big success. (01:15:56) It's because we've found a platform where many people can collaborate, even if they disagree on some of the particulars. (01:16:04) We're not blowing up the community just because there are different opinions on the value of client-side MVC. (01:16:12) We share so much more than that. (01:16:15) And I think that that's some of the fragility of certain small tent open source projects where they consider like, this is the way, right? (01:16:25) This is the only way. (01:16:27) That's not how Rails is. (01:16:29) Rails comes with a set of defaults. (01:16:32) Those, I am far more particular about how they should be structured, but (01:16:39) As we just talked about, so what if you don't want dish number seven? (01:16:43) You like the rest of the menu, right? (01:16:45) We can agree on the rest of the menu, and we can still eat at the same restaurant and have a good time. (01:16:50) And that's what Rales is. (01:16:52) So I think going forward, we're gonna make it even easier for people who want to say, Rales, I don't give a hoot when you have to... (01:17:01) Actually, let me restrain that. (01:17:03) I don't give a . (01:17:05) what you have to say about The View, which is often the level of contentiousness that we have in these debates, right? (01:17:11) I can't give a whole show without that, right? (01:17:13) No, I don't give a about what you have to say on your opinions on The View. (01:17:18) It's just, I'm not going to follow that. (01:17:21) And we can still be friends. (01:17:22) We can still be friends. (01:17:23) And we're going to move towards that. (01:17:25) So with the practical matter of that is perhaps less than the cultural matter. (01:17:29) And the cultural matter is basically real saying, you guys have a home here too. (01:17:33) If you want to make a client-side MVC app where Rails does not generate any views whatsoever, fantastic. (01:17:40) Come over here and I'll pass you the salsa. (01:17:41) It's still going to be a good party. (01:17:44) And we can still work together on making Active Record better. (01:17:48) I love it. (01:17:49) So what does that look like? (01:17:50) Does it look like you flip a switch in a config and just a whole bunch of stuff gets turned off? (01:17:54) I think so. (01:17:55) I think it's like Rails new my app dash dash API or something like that, where it just does not include all those (01:18:03) bits and bobs that relate to view logic and generating of HTML and the asset pipeline. (01:18:09) Those things are just not relevant if you're treating Rails purely as an API server. (01:18:15) That sounds like a good idea to me. (01:18:17) I've built Rails API servers and enjoyed using Active Record and Action Controller and just not having a view layer rendering JSON. (01:18:26) It's nice, so I'm glad to see, I used the Rails API project, which is a slimmed down version. (01:18:31) So it's nice to see a lot of stuff's going to get into it. (01:18:32) That's basically, that's the foundation, that's the spike. (01:18:34) So maybe I apologize for a second. (01:18:36) If someone out there is working on a project that does what Merb did in the past, which maybe not has come to the table with the same opinion as you, they're doing something different that's an offshoot of Rails or a forked version of Rails that is better for an API, how could they come back into the fold? (01:18:53) I think... (01:18:56) Funny part is that the offshoot that we have is the Rails API project, which Yehuda and-- Steve Clapman. (01:19:03) Steve Clapman and a bunch of others were involved in. (01:19:08) That's probably going to be a large part of the foundation of it. (01:19:10) There's some-- I want to put a little bit of work into the serialization process project that they've been using. (01:19:18) One of the points of this agreement has been JBuilder versus (01:19:22) Active model serializers. (01:19:24) Yep. (01:19:24) Active model serializer. (01:19:25) And I think there's values to both of them. (01:19:28) I think JBuilder is probably a better fit when API is just one of the things that you're doing along with everything else. (01:19:34) And then I think the serialization project makes a lot of sense when you're just building an API and you always want the same representation in all your API setups. (01:19:43) And it works very well for, let's say, something that Ember expects. (01:19:47) So we'll figure that out. (01:19:50) There's no, again, there's no underlying fundamental philosophical differences here. (01:19:54) And I think that that's the key realization that you have to make to be able to have progress and stay in the same tent. (01:20:02) That's great. (01:20:02) So is that Rails 5 stuff or is that beyond Rails 5? (01:20:05) I'm hoping it's Rails 5. (01:20:07) Yep. (01:20:07) Awesome. (01:20:08) What else is Rails 5? (01:20:08) I saw on Twitter you're mentioning native WebSocket support. (01:20:12) Is that... (01:20:13) I'm working on a bunch of new stuff for new ideas in Basecamp, and a ton of stuff is spilling out from that. (01:20:19) And I'm super duper excited about putting that into Rails 5. (01:20:23) Rails 5, I think, in terms of breadth of features and what it's going to do, it's going to be one of the biggest upgrades in Rails history. (01:20:32) And I think at RailsConf, we'll probably be, I'll be ready to talk about that in more specifics, because I'm really just in the depths of (01:20:42) extraction right now, still trying everything out and figuring out. (01:20:46) So it's a little premature to kind of announce anything in particular. (01:20:51) Just to say that the things that I care about working on these days is the web application beyond the desktop. (01:20:57) That making a desktop web experience is just one facet today of any major application. (01:21:06) And any major application needs to address (01:21:09) mobile applications, native applications, and how can you do that in a way where you're most productive and having the most fun and so forth. (01:21:17) And we've done a ton of work there now. (01:21:19) And it's going to be great to be able to share that. (01:21:22) I mean, I've already shared a bunch of sort of the fundamental ideas, which is the notion of the hybrid app, where you have a native shell that works on a lot of WebView, HTML, (01:21:35) content that's being served straight from a Rails app, and it's basically just third, fourth, and fifth generation of that stuff. (01:21:43) And now, a word from our sponsor. (01:21:47) Coding is sponsoring the show this week, and they want you to say goodbye to localhost and code in the cloud with Coding. (01:21:53) Coding provides free VMs, an attractive and functional IDE with multiple language support, awesome shortcuts, and lots of color themes to choose from. (01:22:02) Terma comes with full root, pseudo access, and public IPs if you need them. (01:22:07) And you can develop in Go, Node, Ruby, Python, PHP, Java, C, C++, JavaScript, CoffeeScript, and more. (01:22:17) Or you can even play with Docker, WordPress, Django, Laravel, or create Android, iOS, HTML5 apps, all for free and all in your browser. (01:22:27) Coding is great for making your development environment crash-free and functional on any device (01:22:32) with a browser. (01:22:34) Coding is also Chromebook friendly. (01:22:36) The Linux terminal and the Chromebook can finally be together at last. (01:22:40) Terminal runs nicely inside your Chromebook, giving you the full power of coding on the go. (01:22:45) VMs are robust and carry with them the dependability that Amazon's cloud infrastructure is known for, which means you can even run advanced tools like Docker. (01:22:55) Join a 500,000 plus global developer community and sign up for free today at Koding.com. (01:23:00) That's K-O-D-I-N-G.com. (01:23:03) Once again, K-O-D-I-N-G.com. (01:23:07) And now back to the show. (01:23:10) RailsConf is April 20th and 23rd. (01:23:13) Well, 21st through 23rd this year. (01:23:16) So that's pretty close. (01:23:19) It's not that far away, but it's good because... (01:23:21) I don't get extracted. (01:23:22) We're also just at that point now where like, it's not like Rails 5 is gonna be released at that point, but it'll give me just enough time to collect my thoughts on the matters at hand and be able to present something cohesive. (01:23:36) And I think a lot of people are gonna be excited about it because I think, again, Rails is, or Basecamp is not a unique Snowflake. (01:23:43) Tons of other shops are hitting exactly the same problems. (01:23:47) We want to serve the web, and it should be a great experience on a desktop in a browser, but that's not enough anymore. (01:23:53) We have to deal with native applications and so on. (01:23:55) And how do we do that without getting, either ballooning our teams to have these mega departments that just make native applications, or is there a different way that could work for a lot of applications? (01:24:08) I absolutely believe that there's a different way. (01:24:12) I mean, if we're looking at the timeline of the releases, 4.0 was out June 25th, 2013. (01:24:20) So how far do you often do that? (01:24:23) Do you look back at like, well, we've got to release a new major release every two and a half years, three years? (01:24:28) Or do you just do it whenever it's sort of ready? (01:24:32) It's funny because it's pretty much yesterday's weather. (01:24:34) We came up with the internal clock that says we should make a new point release every six months or so, and we should make a new major release every two years and so. (01:24:42) And how did we come up with that? (01:24:44) We did not just sit down and see which way to exactly guess it. (01:24:48) We looked back at yesterday's weather and we realized, oh, that's how it's been turning out so far. (01:24:52) It's been roughly two years between major releases and roughly six months between point releases. (01:25:00) So let's just make that the policy since that's what we're doing anyway. (01:25:02) So that is thus the policy, which also means that Rails 5 is the next release. (01:25:07) That is what Rails Master is pointing at right now. (01:25:09) And it's turning out that that miraculously is a great fit now because we just have all this new stuff coming in. (01:25:15) And on top of that, of course, Ruby 2.2 came out and Rails 5 is going to be a Ruby 2.2+ exclusive. (01:25:25) So Rails is going to do its part to (01:25:28) to bring along the Rails community to use the latest version of Ruby. (01:25:33) Does Basecamp track master, or is it sitting on 4.2? (01:25:37) We have new developments for Basecamp that are tracking master. (01:25:41) Oh. (01:25:42) OK. (01:25:43) We'll see how that stuff takes. (01:25:45) Well, you're invited back on the show whenever you want, David. (01:25:47) So there's several offshoots to this conversation. (01:25:50) I'm sure we could have gone down, but we've been trying the best we can to kind of cling to this 10 plus years of Rails. (01:25:57) I mean, in 10 plus years, you've got so much to cover that we really had to restrain ourselves from going down too many rabbit holes. (01:26:04) But you're welcome back on anytime, anytime you can make time to come back and talk through some of these offshoots. (01:26:09) But one of the things I kind of wanted to talk through just real quick was just looking back at this 10 years, you've (01:26:16) You know, today, thank you for going through some of the, either accidentally or in preparation for this call, you know, mentioning 3,800 people contributed to the core, you know, CoreRails framework. (01:26:25) You talked about how many pull requests that have gone out there. (01:26:28) There's still 419 open, but there was 12,000 pull requests processed. (01:26:33) That wasn't the preamble. (01:26:34) We're gonna try and somehow get out there as an audio clip, but 12,000 pull requests, that's crazy. (01:26:41) We talked about the main hours behind that. (01:26:43) One specific thing that I think I want to ask you before we go into a couple of closing questions, and I think it's because you share so much wisdom because of this 10 years, 10 plus years, is you mentioned Node, you mentioned IOJS earlier. (01:26:59) We recently had Michael Rogers on who heads up IOJS, among many other people. (01:27:04) We've invited Scott Hammond on from Node, the CEO of Node to come on this show and talk about (01:27:11) Yeah, sorry, Joyant, not Node. (01:27:13) My bad. (01:27:13) You know what I'm talking about. (01:27:15) But we have invited him on the show to come on and talk about the Node Foundation, what that's going to be like. (01:27:20) But what advice can you give that community as it relates to what you've learned from the Rails and Merge and just in general this past 10 years when it comes to community and division and opposition and good competition, as you mentioned, Sinatra is not, you know, is not, is a Rails, is not exactly a competitor, but it's, it's a good, um, (01:27:42) You know what you said earlier. (01:27:43) Alternative. (01:27:43) Yeah. (01:27:43) You know what I'm talking about. (01:27:44) Alternative. (01:27:45) So what advice can you share to that community before we close into a couple other questions we have for you? (01:27:52) First of all, good luck. (01:27:53) I think it's incredibly tough. (01:27:55) I mean, even just the, or sort of the, I don't know, spat we have, perhaps you could call it, at the height of the Murban Rail stuff, it was tough. (01:28:09) And that was a very-- that included-- I mean, yeah, there were two communities, somewhat. (01:28:16) But the core actors in the thing, it was a very small group of people. (01:28:20) And yet, it was still very hard. (01:28:22) There was only one company involved, Engine Yard. (01:28:25) On the Rails side, there was no specific company. (01:28:27) It was just the Rails Core Group. (01:28:29) And that was still so hard. (01:28:31) And it almost didn't happen. (01:28:33) So to think, just the amount of sort of corporate enterprise-y (01:28:38) stakes that have been placed in the node camp, I mean, I cannot even imagine the complexity of that. (01:28:45) It's kind of like trying to peace broker, like, oh, let's have universal peace across Africa. (01:28:51) Let's invite all the sort of countries, sit down at the table and we'll figure it out. (01:28:55) I mean, damn, good luck. (01:28:57) That is (01:28:59) It's a very hard problem. (01:29:00) I'll say somebody that serves the Nobel Peace Prize, if they can bring that split back together, I don't think it's going to happen. (01:29:08) So good luck is what you're saying. (01:29:09) So you're predicting potentially that IO and Node will continue to be forked. (01:29:15) I think that that is the most likely outcome, yes. (01:29:18) And again, I don't have any particular insight into any of the organization short of observations of the (01:29:27) I mean, I gotta laugh just a little bit when the press release, I think it was for the Note Foundation came out and you got like, oh yeah, this is like Microsoft and PayPal and IBM and I don't know, was it Prudential or some financial institution or something? (01:29:41) And I just go like, hell, can you imagine sitting down for a meeting with that level of stakeholder enterpriseness and just go like, Jesus Christ, anyone who can sit through that is, (01:29:57) more veteran person. (01:30:00) Diplomat. (01:30:01) Yeah, that is what I want. (01:30:03) That was the word I was looking for, is a better diplomat that I would ever be. (01:30:07) I mean, it just seems like such a hard, intractable problem. (01:30:10) And I just don't see where the solution is going to come from in that. (01:30:14) But that also is not the end of the world. (01:30:16) Obviously, Node and IO, they have (01:30:20) I think it's not a technology problem. (01:30:21) It's a community problem they're dealing with, not so much a technology problem. (01:30:24) Oh, absolutely. (01:30:25) Absolutely. (01:30:26) It's it's about, as you said earlier, you slapped yourself and you said, I want. (01:30:30) And it's really about desires. (01:30:32) You know, both camps have different desires and both camps have different places where the money is coming from, which sort of. (01:30:40) So let's let me let me ask you this one quick question and summarize that. (01:30:43) So your advice is plain old good luck. (01:30:48) Well, that's not real advice, is it? (01:30:50) My advice is that there's not much I can offer to this. (01:30:55) You're going to be more likely to get advice out of a UN diplomatic envoy or something and how they've dealt with the intractable problems of world peace than you are with getting it out from my experiences. (01:31:08) They're just not even at the same scale. (01:31:10) You're not really giving advice, you're just sort of, you're sort of, meh, I can't really give much. (01:31:14) Commenting, yeah. (01:31:16) Okay. (01:31:16) It's accepting the limitations of my abilities and my abilities to solve a problem at that epic scale are truly limited. (01:31:25) And it's kind of like saying, hey, you once broke up a schoolyard bully fight. (01:31:32) Could you help out with the Palestinians and the Jews in Israel? (01:31:37) Like they could really use some mediation. (01:31:39) Like I'm just not qualified at all to deal with that level of mediation. (01:31:43) Well, let's talk about some things you are qualified. (01:31:45) We got two (01:31:46) core topics real quick. (01:31:48) I don't think they should be long at all. (01:31:49) Let's keep them as short as we can because we're really getting basically we're coming close to being over time. (01:31:55) But two things we can't leave this conversation without talking about, which is getting paid to work on open source since Rails has got so much breath and we just talked about, you know, node and enterprise level money being involved, things like that. (01:32:09) You've put out a couple of tweets recently that, you know, I kind of knew where you stood, but you've got a clear (01:32:16) opinion on getting paid to work on open source full-time. (01:32:20) The fact that, you know, I'm just pulling some quotes from recent tweets from you, so they're your own words, but Rails is obligation-free software, something you've said before. (01:32:30) You don't know anything to use Rails, and I don't know you anything to use Rails. (01:32:34) And you've had a couple of conversations recently, but you've got a clear opinion on getting paid to work on open source. (01:32:39) Can you kind of summarize how that's played out for Rails? (01:32:43) Sure. (01:32:43) So, first of all, my opinions stem from observing open source software largely within the web community. (01:32:53) Some of the opinions that I have do not extend to other domains of software, do not extend to other aspects of software even. (01:33:02) Some aspects of software and some domains of software actually work quite well with people being paid on open source. (01:33:08) I pull out (01:33:10) Security boundaries, as one example, that have worked quite well. (01:33:15) Paying people to find vulnerabilities in your software is an area where if you did not pay those people, those vulnerabilities often would not be found. (01:33:23) Right. (01:33:24) You're not taking something away that otherwise would have happened. (01:33:27) I think a lot of where I went sour on paid open source was watching much of the consulting business that sprung up around certain (01:33:40) particularly JavaScript frameworks and the complexity that came with that. (01:33:44) And seeing what happened to API design when the API designers were removed from working on things themselves and were only working on them by proxy, that they were either just helping out clients or whatever, but they did not have long-term stakes in particular applications, and I did not like what I saw. (01:34:06) And on top of that, I've been heavily influenced by (01:34:11) a variety of research on rewards. (01:34:15) There's a great book called Punished by Rewards by Cohen that deals with what happens to intrinsic motivation once you introduce extrinsic benefits, sticks and carrots. (01:34:29) And the answer is, it is not pretty. (01:34:33) that oftentimes money does corrupt things. (01:34:36) It also facilitates things, and it also has upsides. (01:34:39) But being blind to the downsides and being blind to what it does to intrinsic motivation, that's not going to do you any good either. (01:34:49) In certain domains, again, as I said, it doesn't matter, right? (01:34:53) If somebody's finding a security hole, (01:34:58) Do you really care whether they were intrinsically motivated or extrinsically motivated? (01:35:02) Perhaps not. (01:35:03) If you care about keeping a framework like Rails going for 10 plus years and not turning into consulting ware, you do care. (01:35:12) I care. (01:35:14) And that's why for all this time, we've rejected thoroughly that Rails was going to be driven by professional open source. (01:35:25) Again, (01:35:26) That doesn't mean we can't have and get value from some aspects of professional open source. (01:35:32) And professional open source, I mean, people who just work on open source. (01:35:36) We do have people. (01:35:37) We're getting paid full time to work on it. (01:35:39) I mean, Aaron Patterson, Tenderlove, has been paid to work on open source software for quite a while, and Rails is so much better because he is helping us. (01:35:51) being part of it, not just helping. (01:35:53) He's an integral part of Rails today, right? (01:35:56) So that's good. (01:35:58) I mean, with all respects to Aaron, I don't think Rails would be the Rails it is today if the core group consisted entirely of professional open sourcers. (01:36:08) I think that there are certain aspects of the professional open sourceness that work really well, and Aaron has done a superb job at improving implementation. (01:36:19) Right. (01:36:20) making things more efficient, making them better, making them clearer on the internal side of things. (01:36:27) Dealing with API design, which is a large part and perhaps the majority part of what makes Rails Rails, the DNA of Rails, is the API design. (01:36:39) That is an aspect I feel fares quite poorly in a professional open source context, where somebody is being paid full time to work on it. (01:36:50) What changes when you're being paid with your API design just because you have to answer to somebody? (01:36:54) There's that. (01:36:56) There's the fact that you get removed from sort of extracting problems. (01:37:01) You're not extracting your own problems anymore. (01:37:03) You're doing things on behalf of others. (01:37:05) You're isolated. (01:37:07) Well, I don't know if you're isolated, but it's just, it's different to-- Motivations change. (01:37:12) Motivations change, but even the specific of the design changes. (01:37:16) When you're making APIs where you're imagining what somebody somewhere might want to use, it's very different than when you're extracting what you actually did use and what you actually did need for that particular application. (01:37:29) So that's where those things are. (01:37:33) And the other thing too is it's a continuum. (01:37:36) I'd actually say the majority, actually, not the majority, all of the people who work in Rails Core, they are professional open sources to some extent, in the sense that they're being paid by their company to also put contributions into Rails, at least some of the time. (01:37:50) So it's not this hard line. (01:37:52) I think it's just, there's a place at the continuum where it tips, where you have too many people who are being paid (01:38:01) to work on the open source on behalf of other people instead of doing their own extractions from their own work. (01:38:07) And that's where things in my opinion tend to go. (01:38:11) You're really calling for balance. (01:38:13) Well, I am. (01:38:13) I am calling for balance. (01:38:15) And I think that that's also, this is the nuance we can discuss when we don't have to boil things down into 140 characters. (01:38:24) Yeah, exactly. (01:38:24) That's the one. (01:38:26) I mean, the two flip sides is sort of what happens to API design when you're being paid to work on behalf of somebody versus when you're working on your own stuff and extracting it. (01:38:35) And then secondarily, what happens to motivations, particularly around not that that's not so much the full time dilemma, I think, as it is a dilemma of Kickstarters and fundraising for individual projects, and sort of what that does. (01:38:51) And Cohen's book is (01:38:53) It's a great place to start for anyone who wants to look into sort of the psychology of that. (01:38:58) I found the link for that, so if you're listening, we're gonna put that in the show notes, so just camp out at the show notes, this is episode 145, so go to thechannel.com/145, you'll find show notes there, if not already in your podcast, listener catcher thingy or whatever you're listening to it. (01:39:15) And David, one more, one last question, we've had you for so long, we appreciate you taking the time to, (01:39:22) I mean, again, 10 plus years, you can't cover it quickly. (01:39:24) So it's kind of, don't wanna apologize too much, but you know what you were in for. (01:39:30) The one thing I wanna clarify here, and I'm really glad this question came up today because this is what I wanted to clarify before we close the conversation, which was to reinvigorate the community listening on leadership around Rails. (01:39:42) And the question came to you just haphazardly today. (01:39:45) Three hours ago, someone said, I remember running Rails 1.3 in production. (01:39:50) You know, so many hands had done good and bad in Rails, and it badly needs leadership again. (01:39:55) And your response was, I think Rails has never been in a better position regarding code, community, and leadership, broader and more engaged than ever. (01:40:03) So can you expand on that 140 that you had to condense it down to with regards to the leadership around Rails? (01:40:11) Sure. (01:40:12) I think the group that we have, both the core group, but more importantly, the contributors group, the (01:40:19) People who are invested and engaged and interested in working on Rails for more than just a single issue is richer, more diverse, broader, and more skilled than it's ever been. (01:40:34) I mean, when I look at the contributors channel, when I look at the activity that we have on the pull requests, when I look at the stats we have for processing pull requests, and finally, when I look at the result of the Rails framework that I am so (01:40:49) happy to get to use almost every day, it's just unescapable that it's never been better. (01:40:56) Of course, that's my opinion. (01:40:57) Somebody can have a different opinion. (01:40:58) But I would be the first, I guarantee you, to lambast if that was not the case, if I thought that things were heading in the wrong direction. (01:41:09) Rails doesn't owe me anything. (01:41:12) If I thought Rails was, as one famous (01:41:16) blog post put it in, I think, 2007, a ghetto, I just get the hell out of Dodge. (01:41:21) I mean, I don't need to continue to work on Rails. (01:41:24) I continue to work on Rails only because I enjoy it. (01:41:27) And I enjoy it in very large parts because of that community, because of that leadership group. (01:41:34) And leadership group is even, that's not even that interesting to me. (01:41:38) It's the collaboration group that's interesting to me. (01:41:41) You can have a strong leadership group, but if nobody wants to work with you, what are you leading? (01:41:46) If you're all chiefs and no Indians, then you're not going anywhere. (01:41:49) And that's not even a good division right here, because good ideas are good ideas, regardless of where they come from. (01:41:57) And what I see just is I see more good ideas flowing into Rails than ever have. (01:42:04) And that's why it was so shocking to me, actually, to see just the magnitude of that. (01:42:08) When we look at those 12,000 pull requests, when we look at the almost 4,000 contributors, that is just-- and (01:42:15) avalanche of good ideas, and one I am incredibly thankful still to be able to partake in. (01:42:24) And I also think that we've just learned a lot over those 10 years, that we have a much better process these days for having somebody show up at the rail store and say, Huh, I kind of like how this looks, how can I help? (01:42:40) Like that path today is much better than it's ever been. (01:42:44) What led to Mir was, I think, in large part, because that path was not clear at all. (01:42:49) It was not illuminated. (01:42:50) You could find it if you had a machete and you were willing to cut through the jungle. (01:42:54) Today, it's a freaking highway, right? (01:42:58) You drive on it, and then you just keep on driving. (01:43:01) And things just get better and better. (01:43:03) And I think you see that when you also look at the number of new contributors that continue to flow into rails. (01:43:10) The pull requests are not just being opened by the same people. (01:43:13) It's not the same group of 4,000 people. (01:43:16) We have every single month, if not week, we have new people who show up with their first pull request and say, hey, hey, guys, what can we do here? (01:43:26) How can we work together? (01:43:28) And that's great. (01:43:30) And I think we've just-- the process has just gotten so much clearer over the years. (01:43:35) errand out so many of the bugs in that. (01:43:38) It's friction of contribution is way, way down, which means that the flow of ideas is way, way up. (01:43:45) Awesome, David. (01:43:46) Well, we could probably keep you on the line all afternoon and just keep going down these different rabbit holes. (01:43:50) I know I could, but we're gonna let you go with one closing question. (01:43:54) We asked this to all of our guests. (01:43:56) In fact, I think a few past guests probably named you as their programming hero, so it'd be interesting to hear what you say here. (01:44:04) If you got one person or if you got a couple, that's fine as well that you look up to in the community, who's your programming hero? (01:44:10) Sure. (01:44:11) I definitely have to mention more than one. (01:44:14) I'd go back to those early days, 2003, who were my main influences. (01:44:19) And I'd say it's Ward Cunningham, Kent Beck, Martin Fowler, Dave Thomas. (01:44:26) That's a very good group, just sort of rattling up off the top of my head of people who really left (01:44:34) a very large impression on my work. (01:44:38) And I am ever grateful to have learned from and still be learning from these great programming heroes. (01:44:46) And it's satisfying, very satisfying for me to see that all of them are still taking heart and pushing out great ideas that I continue to be provoked, inspired, and motivated by. (01:45:03) David, like I said, we definitely appreciate you taking so much time out of your Friday, close to drinking time. (01:45:10) Well, I guess if you're in Malibu, it's not drinking time yet for you, but maybe, who knows? (01:45:14) You might have been having some wine during this call. (01:45:16) I had a kombucha just before we got on. (01:45:18) There you go. (01:45:19) Yeah, we definitely appreciate you taking so much time. (01:45:23) I mean, 10 plus years of Rails. (01:45:24) Congratulations to you and everyone who's been a part of Rails, both as (01:45:29) someone who's used to build an application, to someone who's contributed back to the companies that sponsored people being involved in that community. (01:45:36) You know, what a great legacy there is here, and I'm sure we're all excited about your talk at RailsConf here in April, and Rails 5 coming up, and all the stuff we've got to talk about today, but thanks again for so much you've put into it too, and just the time you've taken to come on the show today. (01:45:58) Is there anything you want to close with just on your side by any means? (01:46:02) Like, how people can find you, how people can follow you if they don't know, or anything you want to mention on the closing? (01:46:08) Sure. (01:46:09) So first of all, I'd say I wouldn't have been doing any of this work if it hadn't been for my pleasure. (01:46:14) And it certainly has been, and it continues to be. (01:46:16) I continue to be involved in Rails because of... (01:46:22) enjoying it, not because of obligation, not because defending some legacy or something else, simply because I'm having a lot of fun and I'm enjoying myself a bunch. (01:46:30) If you want to follow me, I guess Twitter @DHH will flood your timeline with all sorts of opinions on both matters of tech and politics. (01:46:45) So I think there's probably even people who've heard me on some tech podcast who (01:46:50) Then started following DHH and thought, hey, whoa, whoa, whoa, I did not sign up for your opinions on national security or whatever. (01:46:58) I everywhere. (01:46:59) Exactly. (01:47:00) Fair warning given if you choose to do so. (01:47:03) But that is the main place. (01:47:05) And of course, Signal versus Noise. (01:47:07) Signal versus Noise is where I continue to blog about new techniques and so on. (01:47:11) And it's SignalsBeNoise.com. (01:47:15) And finally, my own personal website is david.heinomaryhansen.com, which you can probably not spell. (01:47:22) So better click the link in whatever notes accompanied me. (01:47:25) We'll definitely link out to that for sure. (01:47:27) We'll link out to your... (01:47:28) Are you also DHH on GitHub or do you have to do something else for that? (01:47:33) Nope, I am DHH on GitHub. (01:47:34) But yeah, I guess that's a good place to follow me too. (01:47:40) It's mostly mouse commits, obviously. (01:47:41) Well, as GitHub makes the... (01:47:44) I guess the personal timeline of that you follow better and better over the years, it'll be more rewarding to follow you and see what you're commenting on and all that good stuff. (01:47:54) Well, David, again, thank you so much. (01:47:56) And to all the listeners, thank you for tuning in for such a long show. (01:47:59) It was a pleasure to have David on. (01:48:00) I know 10 plus years is a long road to go down, but thanks for keeping up this whole show. (01:48:07) And with that, let's say goodbye, everybody. (01:48:10) Goodbye. (01:48:10) Bye. (01:48:10) Thanks for having me.

Around this claim