-
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"