Thursday, June 05, 2008

Practice

The teams we typically think of as models of teamwork have one thing in common--they practice. Sports teams practice. Navy Seal teams practice. Firefighters practice. Sometimes it's called "training" but it still involves fictional scenarios and some transient effort that isn't being applied to the real world. Its designed to hone the team's skills and provide a safe way to screw up and learn from their mistakes when the game, mission, or lives are not on the line.

It's one of the injustices in our business that we're not allowed to practice. We hire people, then immediately put them on the job and demand that they write mission critical code on a tight deadline. What they write (we hope) will be shipped to real live customers tomorrow.

The result is junk code. When I see this code, "the guy was practicing" is the first thing that pops into my head.

We do have one way to give people an opportunity for practice. It's called prototyping. It goes way back to Fred Brooks' The Mythical Man Month. He said "plan to throw one away; you will, anyhow." Your first attempt is going to be wrong anyway. Use it as an opportunity to practice, to learn, and make sure you throw it away before the real deal.

When building a prototype, use the opportunity to make it a full dress rehearsal. Treat it like a real development effort so that the entire team, tools, processes, etc, are exercised. The analogy to sports, military, emergency services still applies. They practice in realistic scenarios in which the entire team is involved and they use as many props to simulate the real world scenarios as they can.

Don't look at the time spent building a throw-away prototype as a waste of money. Prototyping has long term value not just to the product, but to the entire team.

0 Comments:

Post a Comment

<< Home