What 'Done' Means

The debate continues on whether the various Agile methods bring anything new to the craft of software development. Working with XP these past few years, I have never doubted that there was definitely something new, but my focus on exactly what was most important has shifted over time.

My current feeling is that what is truly new is that Agilists view the word 'done' differently than those more accustomed to more traditional approaches to software development.

The difference is not -- as many on both sides of the debate claim -- that Agilists revisit work, while others do not. Iteration is not unique to Agile, and even the most Waterfall-esque processed projects will go back and change things in the light of new information.

Nor is it the frequency of this iteration that is unique (although XP's frequency is certainly a novelty in many places).

What seems to be truly different is how people feel about revisiting work. For Agilists its expected and ecouraged. Traditionally its seen as a failure.

Traditionally 'done' means "We won't have to work on that anymore - and if we do, somebody must've screwed up." For Agilists 'done' means "We have accounted for what is known. If the situations changes, we expect to revisit this work."

Thus the two approaches have different goals: One is to finish, the other is to keep pace with change.

Because the goals are different, what is valued is different: Traditionally, the highest value is placed on the ability to think of the most contingencies and possibilities, account for them and script out a plan (called the project schedule) while secondary emphasis is placed on being able to plan simply and effectively for the most likely cases, and then adapt easily to the contingencies as they inevitably arrive.

Having played & coached football (American) and been in the military, I know that in these dynamic situations, the empasis is reversed. The first skills are good, but the second are vital and all-important. IMO Agile methods attempt to bring this same emphasis to the dynamic (and often chaotic) practice of commercial software development.

In football, we practiced daily, scouted teams, learned their offensive and defensive formations, and even crafted a list of the first few plays we would likely run -- but all of this was clearly understood to be a guess. We didn't think twice -- and more importantly didn't consider it a failure -- when (and it was always when) we had to change things. We just did so, immediately. In fact, the only time we were considered to have failed is when we didn't adapt readily to these changes; when we failed to make the changes to our approach to account for the rapidly changing situation.

So, its not that Agilists don't plan, its not that only we iterate or change things. Its that we don't think of changing the plan as a failure, we see not changing the plan as a failure. And the skillful are those who can make those adaptations quickly and effectively.

In the search for what's different about Agile, This is what gets my vote.