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.