So I have been working with some folks to help develop our design process in Orcas.  (Check out the Channel 9 video on MQ) What I would like to talk (rant) about today is leaving formalized documents behind.  That is specs, design docs, test plans, etc.

In short:

Formalized documents make no impact on the product you are creating and as such should be avoided wherever possible.  Consider yourself a software factory.  Anything you make or do that isn't related to churning out software should be considered waste.

In depth:

There are many cases for creating specs.  No one ever says they spent too much time designing. The more clear the goal and direction, the easier it is to make progress on that goal.

So why abandon it?  Simply because the goal always changes.  Here is a good analogy: design me a bridge.  Simple: start with a plan, buy some steel, rivet for a while, done.  But what do you do if the gravitational constant changes?  What if your steel supplier told you that those struts you were using can only hold half the weight than originally thought?

The problem with software development is that unlike other engineering disciplines our requirements are much more fluid. Sure, planning ahead can help obviate a lot of problems but in the end odds are there is something you missed. 

The best you can do is to set yourself up to be more agile and capable of reacting to changes as they occur.  This doesn’t mean slipping the schedule; it means putting the work left to complete on the table, prioritizing, and realizing that something probably needs to be cut.

If something does need to go, why not get rid of all those needless documents you have to now update?