13 October 2005

You can't put ten pounds of shit into a five pound bag

-- Anyone who has tried

When Kent and I wrote Planning Extreme Programming, we included this whimsical quote to help get the essence of what planning is about.

One of the big problems with software development is that people have little sense of what can actually be done in finite time. Too often we see lots of functionality rammed into a bag with no understanding about whether it will fit. Human desires being what they are, the bag is usually too small. One of the things I really liked about Kent's planning approach was the simple mechanism to try to deal with this.

The principle is really very simple. You divide up the project's time into iterations. You divide up the requested functionality into features (or stories, as XP likes to call them). You estimate how much work each feature takes to do. You keep track of how much you get done in each iteration, and you don't put more features into an iteration than will fit. XP's release planning is about deciding which features go in which iterations.

Like many things, this is a human process. At a recent conference talk my colleague Tim Mackinnon described co-locating a few traders with the development team made a huge difference in helping them get a realistic sense for what could be built. The traders still did their trading full time, but the informal communication that happened through co-location made all the difference.

People often characterize agile methods as being anti-planning. Yet it was the quality of the planning that was one of the most impressive things about Extreme Programming when I first came across its larval state. In particular the simple nature of the plan made it hard to slip extra features into the project without having to face their consequences. This is the essence of the adaptive planning of agile methods - the plan changes frequently but in a controlled manner. If you want to add a feature you always have to ask 'what do I take out to make room?' So if you see features added to an agile project without that thinking, without space being made for them; you can safely conclude that the planning is being done badly.