October 2, 2008
By
Paul Graham
It's striking how often programmers manage to hit all eight points
by accident. Someone has an idea for a new project, but because
it's not officially sanctioned, he has to do it in off hours—which
turn out to be more productive because there are no distractions.
Driven by his enthusiasm for the new project he works on it for
many hours at a stretch. Because it's initially just an
experiment, instead of a "production" language he uses a mere
"scripting" language—which is in fact far more powerful. He
completely rewrites the program several times; that wouldn't be
justifiable for an official project, but this is a labor of love
and he wants it to be perfect. And since no one is going to see
it except him, he omits any comments except the note-to-self variety.
He works in a small group perforce, because he either hasn't told
anyone else about the idea yet, or it seems so unpromising that no
one else is allowed to work on it. Even if there is a group, they
couldn't have multiple people editing the same code, because it
changes too fast for that to be possible. And the project starts
small because the idea
is small at first; he just has some cool
hack he wants to try out.
Even more striking are the number of officially sanctioned projects
that manage to do
all eight things wrong. In fact, if you look at
the way software gets written in most organizations, it's almost
as if they were deliberately trying to do things wrong. In a sense,
they are. One of the defining qualities of organizations since
there have been such a thing is to treat individuals as interchangeable
parts. This works well for more parallelizable tasks, like fighting
wars. For most of history a well-drilled army of professional
soldiers could be counted on to beat an army of individual warriors,
no matter how valorous. But having ideas is not very parallelizable.
And that's what programs are: ideas.
It's not merely true that organizations dislike the idea of depending
on individual genius, it's a tautology. It's part of the definition
of an organization not to. Of our current concept of an organization,
at least.
Maybe we could define a new kind of organization that combined the
efforts of individuals without requiring them to be interchangeable.
Arguably a market is such a form of organization, though it may be
more accurate to describe a market as a degenerate case—as what
you get by default when organization isn't possible.
Probably the best we'll do is some kind of hack, like making the
programming parts of an organization work differently from the rest.
Perhaps the optimal solution is for big companies not even to try
to develop ideas in house, but simply to
buy them. But regardless
of what the solution turns out to be, the first step is to realize
there's a problem. There is a contradiction in the very phrase
"software company." The two words are pulling in opposite directions.
Any good programmer in a large organization is going to be at odds
with it, because organizations are designed to prevent what
programmers strive for.
Good programmers manage to get a lot done anyway.
But often it
requires practically an act of rebellion against the organizations
that employ them. Perhaps it will help if more people understand that the way
programmers behave is driven by the demands of the work they do.
It's not because they're irresponsible that they work in long binges
during which they blow off all other obligations, plunge straight into
programming instead of writing specs first, and rewrite code that
already works. It's not because they're unfriendly that they prefer
to work alone, or growl at people who pop their head in the door
to say hello. This apparently random collection of annoying habits
has a single explanation: the power of holding a program in one's
head.
Whether or not understanding this can help large organizations, it
can certainly help their competitors. The weakest point in big
companies is that they don't let individual programmers do great
work. So if you're a little startup, this is the place to attack
them. Take on the kind of problems that have to be solved in one
big brain.