Change Course 20 Degrees
Sunday, July 29th, 2007
From Wikipdeia:
Parkinson’s Law states that “work expands so as to fill the time available for its completion.” A more succinct phrasing also commonly used is “work expands to fill the time available.”
Hofstadter’s Law states that: It always takes longer than you expect, even when you take into account Hofstadter’s law.
The principles don’t require our belief for them to work. I won’t spend time defending what does not need defending. I want to write about how one can incorporate acceptance of these two laws into planning. I think a good portion of Agile is directed at this. I also think that Waterfall struggles against these Laws and ends up broken on the Lighthouse rocks.
Principles are like lighthouses. They are natural laws that cannot be broken. As Cecil B. deMille observed of the principles contained in his monumental movie, The Ten Commandments, “It is impossible for us to break the law. We can only break ourselves against the law.” — Stephen R. Covey
Here is the basic formula for living in congruence:
Growth Driven + Time Boxing + Small Iterations + Value Driven = Success
Growth Driven
When something is grown, vs made, it is almost always in a useable state. When something is made it is almost never useable until it is finished.
Time boxing
Instead of trying to use cumulative task estimation as a lever for management decouple the deadline from the estimation.
Small Iterations
Keep the time boxes small.
Value Driven
Do the most important thing first.
In a short period produce as much value as possible, preferably the most needed value. Do it in a way so that what is produced can easily be added to.
Let’s take a look at the anatomy of this solution. The lynchpin is time boxing, everything else is there to support time boxing. How do you keep a task from taking longer than you expect? Stop having an expectation. When time runs out you have no choice but to go with what you have. Time is going to run out, there is nothing you can do about it. So it is best to have as much value as possible. How do you keep a task from getting to big? Don’t provide time for large tasks. This will prevent things like Student Syndrome and Coefficient of Inefficiency as well. How can you deliver when you are not sure what will be complete? Produce in a way that you are always ready to deliver.
I don’t feel the need to explain how Agile planning works. There are plenty of sources that talk about how Scrum, XP, Lean, Crystal, etc do it. What they share is the formula and an acceptance of the Law.
When a developer checks-in, TFS immediately calls CI Factory, triggering a build. A developer checks-in and cctray immediately shows the activity as building. This is a dramatic change from poll based triggers. Remember the clock starts ticking when the developer commits not when the build actually starts. This understanding can be a great lever. If the poll cycle takes 2 minutes this is a huge opportunity. The opportunity to remove 2 minutes from the build just by triggering the build on the commit.
I use it as a boost to get that much further than if I was going to set up all that stuff manually. I lean on the structure and naming convention to allow me to move scripts and snippets from one factory to another without much if any fuss. For the most part moving a script snippet will just work. In fact I was hoping that this type of portability would allow people to share in smaller units than a Package. I have already taken advantage of this portability to help diagnose issues reported in the user group. I send a snippet, ask the user to run it, and they send me back the output. It has helped immensely.