Friday, December 24, 2004

Bram on Architecture

Bram Cohen, author of the popular Python program "BitTorrent", recently had some interesting things to say about software architecture:
Half of these 'emotional' architectural decisions are dogmatically using a past practice in situations where it's inapplicable. The other half are working on interesting problems which have little or no utility in the finished product. Once decisions like these have been made, questioning them can become a political impossibility.
Guess I'm not the only Python developer out there with a bad habit of pointing out things that would be better left unsaid. :)

On a more serious note, this means that Paul Graham's advice to hire great hackers needs an additional admonition: hire the great hackers first, followed very quickly by the people who'll be building on the architecture and maintaining the system. Make it an absolute requirement that the hacker(s) be able to explain things to the people who'll be building on the architecture and doing maintenance, to ensure you don't get an architecture only a hacker could love or understand. And, ensure that the "hackers-only" parts of your architecture have sufficient tests and docs so that if they do need maintenance by a hacker, you can have another hacker step in. That way, you can get most of the cost benefits of hiring great hackers, coupled with the stability of not having a poor "truck number".

It's probably also worth pointing out that great-hackerness and business sense are orthogonal. There are great hackers with very good business sense, and there are mediocre programmers with lousy business sense, and vice versa. Which skill is more important depends on the specific organizational role you have in mind, but ideally a lead developer/architect should have both kinds in abundance. Eric Sink also points out that more often than not, you need developers, not programmers, which is another way of saying you need people who are focused on the business' success, not just sucessful programming. (This idea also ties back into things like not making the architecture focus exclusively on solving interesting problems!)

[Now that I've written this, it occurs to me that the folks I interviewed with last week might think that this is some sort of propaganda piece or has something to do with them, even though it's not and doesn't (i.e. personal blog == it's not about you, it's about me). So much for the idea that things would be simpler if I stuck to just writing technical articles here! I guess there's just no escape from the quantum observer interaction principle, unless I just lock this blog in a box with a radium atom and a vial of poisonous gas. (Yeah, I know, mixed metaphors, wrong theory, just a thought experiment, Many Worlds Interpretation, etc. etc. It's poetic license, so bite me if you can't take a quark... er, joke.)]