|
There are a few things that I've come to think are fundamental to
how I see software development. If I had to pick one as my key to
software development it's that the critical element in a software
development effort are the people you have doing the work. The
productivity of the best developers is far more than the average,
much more than the difference in salaries. Therefore the most
important part of getting cost effective software development is to
hire the best team you can, even if the individual cost of the
developers is much higher than the average. A few high ability (and
expensive) people will be much more productive than many low ability
(cheap) developers. That productivity difference means that a few
high ability people will produce software more cheaply even if they
cost more on a daily rate. A lot of people say this, but few people seem to do it. Many just
give up saying "you can't have a team of A players" as if there's
some law of nature that prevents it. I don't agree with this. I do
think it's hard to build such a team (let alone a whole company,
which is what ThoughtWorks is trying to do), but the benefits are
worth the trouble. Why is it so hard? For a start you have to create an environment
where high ability geeks are comfortable. This involves doing many
things that don't make sense to many accountants and managers -
which is why I came to believe that IT organizations inherently can't
do it. It's this fundamental assumption that made me join
ThoughtWorks. Here I think there is a company that's prepared to do
the hard stuff to make this kind of software development environment
work. Recently something else has struck
me. Most writers, including myself, talk about this stuff and stress
the ability of the people is really important. While that's true it
misses out the fact that it's not just about ability - it's also
about collaborativeness. One of the things that makes ThoughtWorks
such a good place is that everyone is so thoroughly pleasant to work
with. That's no accident - ThoughtWorks does a lot to foster and
encourage that in its culture. That's not easy to do and it's yet
another reason why I think most big companies find it so hard to build this kind
of organization internally. It's interesting that this has become more conscious to
me recently. I remember clearly a decision I made early in career,
just as I went independent. I decided then that I wouldn't work with
unpleasant people, however capable they might be. I wouldn't fight
them, just avoid them. I decided that whatever the advantages it
would bring to hang around with able jerks, it just wasn't worth the
hassle. I've never regretted that decision, but it kind of floated
deep into my axiomatic base and I lost sight of it. Even when I
joined ThoughtWorks I didn't consciously notice that as part of my
reason to join - focusing again on the ability issue. Yet it was
clearly part of the reason for joining and for some
reason I've now become much more aware of it. Whenever I talk like this, I think it's important to remind
everyone that ThoughtWorks still has a way to go before it becomes the
kind of organization I think it should be. I'm here because it's not
enough just to hold an opinion on the right kind of software
organization - I believe I also have to help to try to build it.
|