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