< Return to Video

Rails Conf 2013 Patterns of Basecamp's Application Architecture by David Heinemeier Hansson

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

more » « less
Video Language:
English
Duration:
01:05:49

English subtitles

Incomplete

Revisions