hitting the high notes

In Hitting the High Notes Joel Spolsky makes a compelling argument in favour of hiring only the best programmers. I agree with his conclusion, if not with his supporting arguments.

Joel presents tables of data showing huge variation in the times taken by many students on a series of programming exercises. He then goes on to imply that this means there’s huge variation in these programmer’s talents in general, and that therefore one should seek to hire only the “best” if one wishes to be successful. My problem is that I find that to be a very narrow – and possibly short-sighted – definition of “best”. So one programmer can pass the professor’s unit tests four or six times more quickly than another. Does that mean the faster feller will be a constructive team member? Or a good designer? Or that his code is more adaptable in the long term? I do agree that there is huge variation among developers. And I do agree that a successful team must comprise “the best” almost exclusively. But a good team must also be a good mix, and “the best” must therefore be defined more broadly than in terms only of programming speed.

As a case in point, I’ve long been concerned about the “first” XP project, C3 at Chrysler. To many, the project’s success was a result of the strict adherence to being “extreme”. But I suspect that any project would be likely to succeed when the staff include Kent Beck, Ron Jeffries and Martin Fowler. The AgileNorth group have discussed this question many times without a conclusion: does the success of XP depend on the presence of highly gifted individuals, or can a team of average developers make it work? I believe the former to be true, and it may be true in general of any software project, XP or otherwise. Which I guess is the point that Joel is also making.

One thought on “hitting the high notes

  1. I think the definition of best is important here…

    Where I work, the throughput of our software teams and the company in general is a hot topic. In our efforts to go faster, I have spent some time thinking about what is required to enable speedy development.

    Some of the things we are already quite good at. Some of the things we know about and understand – but we need to practice them. Some of the things we are still learning and discovering.

    As we have tried to better our practices, learn new things and introduce new ideas – I have found the biggest barrier to be the team dynamic. Do we have team players? Do we work together to introduce new practices? Do we all buy in to the new efforts and the new direction? Basically – do we have a real team?

    Of course it makes sense to say “you need the best programmers if you want to make the best software”. However, having a software team/company that understands what is required to improve throughput, and can work together to continually improve its throughput goes beyond programmers who can get unit tests passing in good time. It’s a team game.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s