February 15, 2006

...Learn TDD with Codemanship

Shut Up And Play Your Guitar

Whenever I get together with a bunch of musicians I don't know, for an informal jam session or for something more formal like recording music or putting on a show, I find it can be quite uncomfortable.

Usually, we all have different backgrounds, different abilities, different styles, different tastes. And from that mish-mash music has to flow.

I've lost count of the times I've sat in bars talking with people about starting a band, or having a jam session, or putting on a show. And when we finally get around to trying to play something, it quickly falls apart as we realise just how far from each other we really are.

I find it can help enormously to play something straight away - in the first few minutes of meeting. It achieves three important things:

1. It forces the band to gel quickly - there's nothing better for building bands than trying to play in time and in harmony
2. It establishes the initial style - no matter what song you play, you'll play it your way
3. It quickly identifies any bullshitters - if you want to know if a juggler can juggle...

I want to dwell on these three points some more. Firstly, the whole point about playing in time and in harmony with each other. Practicing by yourself in your bedroom is one thing, but playing in a group builds a whole different set of skills. I've seen some very accomplshed musicians get together and produce a steaming pile of crap as a band (I know, I've done it). There is such a thing as group ability. Take my favourite band at the moment - Strapping Young Lad. Individually, none of the members of the band are especially brilliant musicians. Together they are the musical equivalent of being hit by a train. You never forget hearing Strapping Young Lad (one way or the other). Their uniqueness and brilliance is arguably the product of synergy. Synergy is what happens when ordinary people get together and produce works of genius. SYL have a very high group ability. They just gel, and it all snaps into place like magic. If you don't play together, this can't happen. The longer you put off playing together, the longer it will be before you know if you have group ability or not.

Secondly, whatever your band's group ability, it can improve with practice (as a group). Any style or ability you establish when you first play together is essentially your starter for ten. Over days, months, years your band will build its ensemble-playing muscles - perhaps to the point where you can almost "finish each other's sentences". A great example of a band that have reached this Nirvana of group ability are Dream Theater. Watch them live. No seriously. Watch them live!

Finally, if all the musicians in a band are crap, the band will be crap. Individual ability is still a component in group ability. You have to practice in your bedroom before you go anywhere near a band situation. You can think of the ability to play at all as table stakes in the band-building process. I've lost count of the times I've been massively disappointed when I finally get to hear a musician play after they've talked a good game in the pub.

And isn't all of this a bit like building a software development team? Developing as part of a team requires a different skillset to building software by yourself. Your timing has to fit in with their timing. If you check in once a month and Bill checks in twice a day, it could come to blows. Your code has to harmonise with their code. If Bill can't follow what you've written, and you can't follow what Bill's written, then you will have a problem if you need to work with the other's code. Anyone joining the team after you and Bill leave will have an even bigger problem maintaining the code.

Whatever development approach you choose to start with - eXtreme Programming, RUP, DSDM etc - every team does it in their own unique way. They have their own style, if you like. Whatever your team's initial style and capability, it will evolve and improve with team practice - at least, it should, at any rate. On a couple of occasions I've been blessed to witness the software development equivalent of Dream Theater, and it's a joy to behold.

And let's not forget the individual abilities of team members. If you can't write OO Java code at all, you'll be no use to man nor beast. The time to think about joining a development team is when you've mastered the basic chops that every developer has to know to produce working code.

I have found in recent years that the best way to build a development team is to get them to build something - anything. The simpler the better. You will quickly establish a basic rythym and harmony, find your initial team style and ability, and weed out any bullshitters before the blood has dried on their contracts.

One final thought. If you look at the pop charts over the last 40 years, you'll notice that there appears to be no relationship between how good a band is musically and how successful they are commercially. So I guess that's another close similarity to software development...
Posted 15 years, 2 months ago on February 15, 2006