[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,[Introductory Music] Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Welcome everybody. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Before I go into my talk about the Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,patterns of Basecamp's Application Architecture Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,A little announcement Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,about an hour and twenty minutes ago Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,we released release candidate one.\N[Audience applause and cheers] Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,As well as branched for rails/4-0-stable. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,So, we're really close to having 4-0 done\Nand shipped. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,And it would be awesome if everybody who's here Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,who is going to work on Rails code during Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,the next four days could try it out. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Because that's the best way for us to Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,figure out what's still missing, or bugs, or\Nwhatever else, have you. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,We sort of have, almost, this pattern of \Nputting out betas and release candidates Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,and then we ship the final version and\Nfifty tickets come in with obvious defaults Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,or things that are broken. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,So it'd be great if 4-0 could come out \Nand for the first week or two at least Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,we wouldn't have to ship an update. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,So, if you guys can help us do that\Nthat'd be amazing. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,So, the story of Rails is in many\Nways intertwined with the story of Basecamp. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,This is a screenshot of the very first \Nversion of Basecamp we released in 2004. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I started working on Basecamp in 2003, before\NI had any aspirations of working on Rails.\N Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Before I had any ideas that was I going\Nto work on was going to turn into a framework. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,So, the whole approach with Basecamp\Nand with the creation of Rails was that Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I was interested in an application.\NI was interested in building something. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,The fact that I had to build my own tools\Nto get there was sort of secondary. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,It's certainly wasn't the primary objective. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,And that led to, in some ways unique\Nstyle of working, I think. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,That we've really embraced as a community,\Nand in Rails core. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,That, frameworks are not inventions,\Nthey're extractions. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,We don't sit down and try to come up with\Nfeatures that we could need, or would want. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,We build applications, things that actually\Nhave to run in the real world. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Things that actually have to matter to somebody.\NNot example code. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,And from there we see, what are the pieces\Nthat we keep using over and over again? Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,For me, that's why Basecamp is so important. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Because -- just about, for sure, every \Nsingle good feature I've put into Rails Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,have come from Basecamp, or Basecamp\Nderivative. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,A few bad features came exactly\Nwhen I thought I could invent good frameworks. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,It -- it never really worked. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,The question we're asking ourselves is not Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,what would someone, somewhere, might \Nwant to do with Rails? Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Because that sort of speculative development\Nstyle -- we've had to work Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I've had to work with a lot of tools\Nthat were built like that. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Teams assembled just to make tools, with\N Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,influences of listening to people in various\Nplaces.\N Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,But the core motive to just build tools.\N Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,And that is what I was running away from\Nin many ways as it came to Rails. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I didn't want something built by somebody Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,whose sole occupation was just to build \Ntools for me. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Because those tools tended to never really Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,to match the expectations I had for real-world\Ndevelopment. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,So what we do instead is say:\N Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I'm not going to care about anybody else right now. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I'm just going to focus on building Rails Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,as the perfect framework for building Basecamp. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,That's my mental model. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,The side effect is that Basecamp, of course,\Nis not that special. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Most of the things it does is same kind of things Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,you want to do in a lot of different applications. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,But, because we attack the problems Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,from this sort of concrete approach Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,we get to extract something that just feels right. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Something that feels like somebody's actually Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,used it in anger. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I mean, I've sworn and cursed my fair amount at Rails at certain times. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,So I've certainly used it in anger, and have changed things in anger. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I find that that's really a lot of where a lot of the magic happens. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,When I'm so fucking annoyed that something Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,takes four lines of code when it really should Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,just take one, that's when good stuff happens. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,And it happens in sort of a different way Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,than that example code driven development style Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,that you often run into when people do this for full-time living. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Because it's very easy to make pretty examples. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,We have lots of this in Rails where -- for example Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,the standard scaffold for a long time Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,it looked like it was not very DRY. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,It had a lot of duplication, right? Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,People would often come to Rails and they would say, as the first thing: Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,"Well this code you're generating it's verbose, I could optimize it in all these ways" Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,A few people have tried, with various gems. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,And what you find is, yes, you can make example code Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,really pretty by making a certain set of choices. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,But those same set of choices are usually the ones Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,that makes it horrible for actual real web development. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,So, 2003, 2013, I've been working on Ruby on Rails Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,and Basecamp for 10 years now. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,That's about a third of my life. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,So, I don't think it's any stretch to say Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,this is my life's work, at least up until this point. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,And, it's funny, because in some ways, it feels familiar. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,When I looked at Rails code today, it looks and feels and smells Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,very much like the Rails code I wrote ten years ago. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Of course it changed in a myriad of different ways Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,but it's much, much better now. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,But the kernals and the principles are very Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,much still the same. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,And that's interesting to reflect on Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,when you compare it to the things that changed. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,In 2003, this was a state of the art phone.\N[Audience Laughs] Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Seriously. Flip phones was really back then. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,It's so funny because that seems so far away, right? Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I mean, flip phones? Seems like another era. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Which it is in many ways Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,because many parts of technology move very fast. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,It's interesting that we're here today and we're still Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,working with and discussing and debating and improving a framework Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,that is from the time of flip phones. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,So, that's sort of like the form factor of actually Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,a lot of people interfacing with our applications today go through phones. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,If we look at other parts of technology Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,just sort of the hardware we were on Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I looked up these prices yesterday Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,and, it's like, half a gigabyte costs $50. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Now you can just 16 times as much RAM for almost half the price. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,That's more than an order of magnitude change. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Which is just, it's one of those things that's also Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,interesting in terms of what does that change Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,in how we approach things? Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Often times, people will almost lock their concept Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,of what hardware costs and how it runs to the time Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,they entered programming. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,If something was scarce, and expensive Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,at the time they got into programming they'll Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,think that's how it's going to be forever. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Which, of course, this shows you can get Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,8 gigabytes for $29. How much RAM do you use? Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Probably it doesn't matter as much as Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,a lot of other things. Which is funny Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,to me because that's always been -- Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Matz, back in 1993, 20 years ago, 20 years ago Matz started working on Ruby. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,He had to care far -- I should've actually looked up Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,what RAM cost back in 1993. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,But I'm sure it was fucking expensive. \N[Audience Laughs] Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Yet, he sort of had the foresight to think Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,well, I don't know if he had the foresight, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,but it turned out, that the thoughts Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,that he was thinking about, how we should Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,make programming languages, and development environments, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,like, I can make something now that -- ok, it's going to take more memory, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,it's going to be slower, and it's not going to matter Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,because those things are going to improve Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,drastically over time. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,What's not going to improve is programming brains. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,They're pretty much as mush as they were back in 1993. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,So we need to optimize for that. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,So, that's sort of the hardware side, that that moves really fast. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Ok, not that -- we know that, Moore's Law, and all, right? Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Also funny to look at the things from 2003. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Java was actually a real thing that people non-ironically wrote. \N Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,[Audience Laughter and Applause] Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,This was actually -- when Rails first came out, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I was talking to a lot of Java programmers Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,and they were serious. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,[Audience Laughs] Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,And it's just funny to think back about this sort of battle, or whatever Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,that we had in the beginning. And this was the relevant foe. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,This was who were trying to sort of say, there's a better way to implement Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,a lot of the good ideas that you have. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Because that was the second funny thing of course. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Because Rails is from 2003, and the bulk of the Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,thinking of how to structure, and create nicely Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,factored web applications, and those Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,types of applications came from the Java world. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,It's just that they were trapped inside that beast Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,and we had to liberate it. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,So, there are still people programming Java. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Of course, the JVM lives on and it seems like Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,that has a long and prosperous future. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,And people are putting it to much better use Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,than the Java language itself. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,The other thing, struts, that was actually Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,a serious framework at that time that we were Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,sort of trying to convince people why this was better Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,why XML situps and so on, were not something you should to do. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,It's really interesting to think about all of these things Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,that have changed, and how much the world Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,of technology has changed in the 10 years Rails has been around. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I've been trying to reflect on why that is. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Why are we still here? Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Why didn't Rails go the way of Struts? Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Why wasn't it just a footnote in sort of a progression of things? Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Where were all these other things that were supposed Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,to come afterwards. I certainly never Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,thought, when I started working on Rails Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,that I'd be here 10 years later and talking to Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,1,500 people at a sold-out conference. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,That's a pretty measureable success. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,That's surprising I'd say in technology. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Just like the flip phone is not here anymore Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,and Struts, thankfully is neither. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,You should've thought that Rails would've gone away, right? Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I think the stuff I talked about last time -- or last year Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,that pioneering spirit, I think is what makes the Ruby community Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,and the Rails community unique. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,We are willing to continue west. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,We don't just stop when we find a comfortable resting place. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,There's a lot of other communities that value Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,stability far higher than we do. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,That's not to say that stability is bad, it's just Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,a trade-off. If you look at say, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,the Python guys, and how long they've taken Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,to get on Python 3, they're not there yet, by the way. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,They're still going, and it's been years, right? Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,How long did it take the Ruby community to move Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,from 1.8 to 1.9 to 2.0? [Snap, snap, snap] Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,And it wasn't because it was painless. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,How long did it take the Rails community to move Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,from Rails 1, to 2, to 3, to now 4? Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Again, it wasn't painless. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Anytime you want to make progress like this Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,it's going to hurt. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,But we as a community are willing to take that hurt. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,That makes the community unique. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,We're willing to sacrifice for progress. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I think what's interesting about that, the pioneering spirit, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,that we're willing to continue west. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,We don't just stop halfway and say, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,"Ah, fuck it, Kansas is good enough" Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,[Audience Laughs] Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,A lot of people just -- they stop in Kansas. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Like that's just like, things are fine Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I've got my cows and the sun comes up in the morning, great. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I mean, although, some Rails people have stopped in Kansas. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,[Audience Laughs] Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,There are still a few people still running. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,This is the half-life of Rails where we are now. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,It came out in 2009, that's 4 years ago. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Anyway, if you're still in Kansas, keep Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,going west. California awaits you. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,The west coast awaits you, Portland I should say actually, my bad. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,We've continued west. We've gotten closer and closer Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,to this sort of promise of the west coast. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,And I think as we've gotten closer and closer to that Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,and it's taken years and years, because again Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,it's a painful journey. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,It's a perfectly legit thing to say, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I'm just not interested in any more progress, we're stopping in Kansas. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,And I will go on, and I will do Rails 2.3 for the next 4 years. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,A lot of people did and it wasn't like they were necessarily Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,miserable. I mean people do lead good lives in Kansas. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,But, I think that there is something more important here Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,to keep on pressing on, and not just because Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,we keep our own interests and this is still interesting to go to Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,if we had just stopped as a community and said Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Rails 2.3, that's our final resting place. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Ruby 1.8, what did we end up at? Ruby 1.8.9? 1.8.8? Whatever it was. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,That's the final resting place, that's where we're gonna stop, right? Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,That's just where we are going to park our ambition and say, that's good enough. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I don't think we would be here because then these things would just be tools. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Nothing wrong with just being a tool.\N[Audience Laughs] Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,There's just something more inspiring about pressing on and going further. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,About this whole notion of pressing on and going further, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Joel Spolsky, in 2001, had this great essay: "Good Software Takes Ten Years, Get Used To It" Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,At the time I read that, it was funny, I read that Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,and was like "what a fucking jackass" Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,[Audience Laughs] Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I can make something in fucking six months Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,that's going to blow the doors off whatever you've been Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,working on for ten years.\N Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,But I think he actually had the long end of something. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,You can build something that's good for you in six months Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,and it could be "good software". Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,If you want to build something that has the kind of impact Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,on community, on the programming community, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,on the world, for lack, for less sort of grandious vision. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,It does take a long time. We've slowly but surely built this up over time. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,That goes both for the work that I've put into Basecamp Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,and the work that I've put into Rails. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,These things compound slowly over time if you keep investing in them. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,You can see the sort of progression of investment that we've had with Rails Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,and the people who've been flowing into it on this chart. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,New contributors with their first commit to Rails. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,2004, first time I opened the code base and accept patches and let other people commit to it, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,a few people, 40 people I think had a patch go into Rails in 2004. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,The very next year, big boost, 280 people or whatever. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Then we sort of had like, I don't want to call it flat face Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,because this is all new people coming into the community Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,and starting to add something. But, for a long time Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,we had sort of a steady rate of new people Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,joining the community. And then something interesting Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,happens. In 2009 there's a small dip. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Everybody thinks the world is going to end and Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,everyone is getting fired and alright, I understand Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,and then after that, what happens? Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,There's a massive jump. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,And this is actually funny. So in 2009, our Kansas, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,so there's a baseline there, alright? We keep pushing. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,And people respond. A lot of people are interested Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,in pushing on with us, interested in joining the caravan and continuing on. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Which is really just sort of interesting to see just Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,sort of the phase we can go through. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,By 2009 I've been working on Rails for 6 years. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,And we've had this steady inflow and then Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,all of a sudden lots of people get interested Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,in getting involved, awesome. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,If you look at the same chart, just compounding Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,all of the committers, you can see it's more Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,of a steady climb, but the same pattern is there, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,from 2009 and onwards, lots of new people got involved Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,because we kept pressing through. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,We kept pressing through the comfortable phase. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Even though, the funny thing is, when you Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,do that you're sort of -- we have this Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,saying with Basecamp were you shouldn't be afraid to let customers go. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Sometimes customers are going to outgrow you. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,They're going to think, well you no longer represent what they need in a Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,project management application, right? Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,A natural reaction to a lot of people, or for a lot of people Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,is to look, "Shit, we can't let that happen, no customer can leave, lock the doors" Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,"We will do whatever we can to take them happy" Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,We had that moment in 2009, where we could've said, let's just lock the doors. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Let's just improve things for people who are already here. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Big enough community, we're comfortable, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,we could be self-sustaining for a long time, that could be fine. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,We instead said nope, we're going to keep the doors open. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,What that's going to mean is that there are going to be some people who are unhappy. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I've heard people say Rails 2.3 is the best version of Rails ever made. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,[Audience Laughs] Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Which is, it's sort of one of those funny nostalgic things of Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,you just sort of lock your timezone, like the 80's that's when music peaked. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,[Audience Laughs] Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,It's just a funny phenomenon, and it's real, and I think Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,that's where a lot of technology circles an ecosystem, they stop. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,And then they just stay there for the rest of life. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Anyway, we pushed on. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Here are the stats for the last 12 months running. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,More than 1000 people were part of more than 8000 commits Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,to rails/rails GitHub repo. That is fucking amazing. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,1000 people working, and this is just the people who get commits in. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,We have so many more people doing all sorts of Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,other stuff around the codebase. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,This is just the people who got a commit into rails/rails itself. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,That is really and truly astounding. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,And I think that that shows and validates Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,the approach, the uncomfortable approach that we have Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,to keep pushing and to keep getting better Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,even if it will ruffle the feathers of the people we already have. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,The customers, the developers, who are already using Rails Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,that are somewhat uncomfortable with whatever new direction we have. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,It's also a funny match to Roger's Innovation Adoption Curve Idea. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,This is sort of an analysis describing how products are adopted. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,So obviously, from the beginning we had a lot of innovators. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,People who would use Rails even though there were Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,a lot of things that were broken or didn't do whatever in the beginning. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Small slice of the overall market of developers. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Okay, we've got the early adopters. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I think that's sort of our first crest. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,And you sort of hit this point where you have to Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,make the jump from early adoptors to the Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,early minority. I think that's exactly what that point in 2009 shows us. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,We did make that jump. We are now on sort of the next ride up. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Which is, which is pretty cool. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,And I think it's also interesting for me in -- the original reason Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I got into open source, the original reason Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I wanted to release Rails was two-fold, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,first, I wanted to give back. I had been Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,using Ruby, I had been using Linux, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I had been using MySQL, I had been using Apache Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I'd been using all these open source projects Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,so, when I had something myself to share Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I felt like, dude you're a dick if you don't release Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,something like this that other people could find value in, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,when you've used all of their stuff. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,So there's that. Don't be a dick. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,The second part is, I'm having a lot of fun Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,doing this stuff. Ruby is really a great programming language Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Rails enables me to use Ruby to build Basecamp. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,There's going to be a lot of other people out there Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,who could benefit from Ruby so let's Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,get as much programming joy out there in the world. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,So that's why this stuff is interesting because Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,we've having a bigger impact, we're getting Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,more people involved with enjoying their work. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,And not being stuck in Struts, or whatever painful torture instruments of the time. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Anyway, so I think that's all great. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,And it's great to see there are more people getting involved. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,But you're also sitting there and have to stop Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,and say okay, what are we actually doing here? Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,What is the purpose? Why are we still working on this? Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,What is the improvement path? Who are we? Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Who do we want to be? Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,So, I think a while back, decided we want Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,to have a big tent. There should be room Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,for a lot of different people in the Rails community. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Jugglers, musicians, clowns and elephants all invited, come on. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,And we pulled some things in, we did Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,with Rails 3, we had a influx of good new ideas Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,from, at the time, a competing framework Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,called merb, which was sort of a Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,good reflection of okay, it can be a big tent. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,We can have room for a lot of people in here Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,who might not agree on everything, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,they might not all want to build Basecamp Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,but we have a general principle, a general purpose Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,that this is where we're going, and Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,we agree on these things. And once we Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,sit down and actually work on code together Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,we realize we share more opinions than we don't. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,So, even so, even if you have a big tent Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,and you have room for jugglers, and elephants and so forth Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,and you're having fun, you're not a ferris wheel. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,There's got to be something you're not. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,You have to sort of define it in some sort of opposition Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,there's limits to what this is, because if Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,you try to be everything to everyone all the time Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,you're nothing to nobody none of the time. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Second, the title of this talk is "Patterns of Basecamp's Application Architecture" Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,The whole idea of patterns is that you see a problem Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,and there's a solution, but there's a third element, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,there's a context. There's a context in which Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,that problem arises. Because you can encounter Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,the same problem in two different contexts Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,and you're going to want two different solutions to that. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,So, what is the context? What is the context of Rails? Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Of the work that I'm doing on Basecamp? Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,For me, that context is Dynamic hypertext documents. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,What does that mean? Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,It means that this is sort of what I'm trying to produce. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,It's funny because when you see HTML it looks like Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,it's such a good, there are books like Learn HTML in 4 Days, right? Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,It seems like such a low-level thing, it seems like such a simple thing, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,like sort of beneath us, kind of thing, we are "serious programmers" who do "serious work", Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,like, all we're doing is just generating HTML, that's -- I mean, c'mon, that's for HTML monkeys, right? Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Like, I need something more grand. Well, to me Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,the grandness is in embracing the simplicity. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Is embracing what the web is, and not just what Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,the web and HTML as the delivery mechanism, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,sort of the web and HTML as sort of a lot of Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,side effects that are neat, in term of software deployment and development, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,don't have to install software, you just get it from one place. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,You could deliver a lot of different kinds of software where Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,you just use HTML as a delivery mechanism. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,But, when I've been revisiting and going back through the Basecamp code base Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,and especially the work I've done with the new verison of Basecamp. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I realize that it's deeper than that, that this is not just a delivery mechanism. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,That the actual structure of HTML, the approach to the context of Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,software development as a document is profound. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,That profound approach is not something we should try to escape. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,It's something we should try to embrace. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,So, you can think about a lot of different applications that are being delivered on the web Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,on sort of on a contiuum. On the one end Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,you have something that is basically purely document based Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,and on the other hand you could have something that's Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,almost like a GUI using HTML as a delivery mechanism Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,but you certainly wouldn't describe it as a document. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I think if you look at that sort of continuum from document to GUI and nothing falls perfectly at either hand. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Perhaps these two, I mean Wikipedia is just a collection of documents. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,It's a pretty good to, I think, my vision at least of Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,what I'm interested in, the kinds of applications Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I'm interested in, and thus, the kinds of tools Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I'm interested in building. I want to build tools Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,for a document based web. That approach to software development is quite Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,different from all sorts of other approaches that went before. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,If you look at software from before the web Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,it looks different. I've been struggling to find a word to Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,describe that style of applications, GUI is the best Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I can come up with, even though of course the web is a GUI, too. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,You sort of know what I mean. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Maybe it's easier if you look at an example. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,If you look at Google maps for example, that doesn't feel Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,like that's a document. That feels like Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,this is using HTML as a delivery mechanism for Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,the application that it provides. It doesn't mean Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,it's not a great application. It's a great application. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,It just means that what we're trying to do is optimize for Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,a version and vision for web applications that is more Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,document based, this is not the primary thing Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,we should optimize for. So, if you're trying to Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,write the next Google Maps, maybe Rails, at least as Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,a whole package, as a full-stack framework isn't Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,the natural fit. You can pick parts out and you can have Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,a good HTTP processor and you can do all sorts of Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,other things that's interesting. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,So, if that' 100% the camp that you're in, the Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,sort of not related to documents at all, maybe that's not it. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Then it becomes interesting, because as I said, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,a few things are either one thing or another thing completely. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,If you look at Basecamp for example, we have this Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,calendar there, that doesn't feel very much like Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,a document. It doesn't feel like it fits HTML, what's the section Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,what's the header, what's the paragraphs here? Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,It feels like we're using HTML as a delivery mechanism. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,But it's a minority thing part of what we do Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,so we try to fit it in and it should be possible, but it's Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,not the main thing. The main thing is more Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,stuff like this. Where it actually does look and Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,feel like a document. This looks and feels Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,like something you would not have before the web Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,this would not be like what an application looked like. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Because this is, that native development style of the web. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,If you look at something like GitHub, same thing, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,it feels like a document, it feels like a document that's decorated with some dynamic behavior Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,and that's great, but the key part of it, it's essence and it's being, is the document itself. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,It's not just a delivery mechanism. That's the, the slice, and the part of information technology Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,that I'm interested in. These kinds of document focused Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,applications are not a bad thing. It's not something Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,we should be trying to escape, the constraints Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,that it puts on us to develop an application Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,in this style, they're liberating. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,They're not bad. We don't want to start Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,with an empty canvas and have to draw everything Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,from scratch. The fact that HTML is there, and gives us Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,a sort of semantically relevant containers to put Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,certain things in, is a benefits, it's great. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,And, that's where, I guess, the insight for me is Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,why is it that I was never interested in Java Applets? Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,It wasn't just because it was Java, it's horrible enough in itself, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,but it was the notion that this was just a blank canvas, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,you could draw whatever you want, there are no limits here, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,you don't have to fall in line to some predescribed notion of a document. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Or set GUI elements for a document, forms and so forth. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,You can do whatever you want. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I don't wanna do whatever I want. I want a container, a base to put my ideas in. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,That's when I find, that they flourish. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,So, with that insight in mind, and with the insight in mind Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,that the web is the most successful software development platform of all human history, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,that leaves me to think that it's not acutally that big a surprise that this failed. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Because, the architects of this sort of canvas-base, let's Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,use the web as a sort of delivery mechanism for Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,the same application architecture that we had on the desktop Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,they're wrong. That's not the part of the web that's interesting. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,It's not just these accidental properties of oh, it's easy Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,to update software because it runs on my server. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,The things that brought the web to it's prominence with users Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,and developers alike, we're the constraints. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Was the fact that that style of interfacing with information technology is Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,really user-friendly, really development-friendly, it's different. Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,Not in a worse way. And that's usually what I -- Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,I had conversation, I think it was Rails Conf, maybe 7, or something, Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,and some Microsoft guy was coming up and he was going Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,to tell me about serverlite, and the pitch was Dialogue: 0,9:59:59.99,9:59:59.99,Default,,0000,0000,0000,,"I'm finally going to free you from HTML"