CodeBetter.Com
CodeBetter.Com
RSS 2.0 via Feedburner
           Do you Twitter? Follow us @CodeBetter

Jeremy D. Miller -- The Shade Tree Developer

Under the hood and working with .Net, TDD, Software Design, and Agile Stuff

Noah, I want you to build an Ark

Think about this for a minute, say your Noah, walking down the street, minding your own business, and a big voice booms out "Noah, I want you to build an Ark.  When can you ship?"  Here's the proper response -- "Right, what's an Ark?"  When the big voice says "it shall be 200 cubits by 40 cubits by 60 cubits" you respond with "Right, what's a cubit?"  And so on and so forth.  The point being that you cannot give an accurate estimate without a detailed understanding of the tasks involved to carry out the development work.  I don't think you can efficiently develop a "complete" list of developer tasks upfront, but you've got to get deeper than "build an ark" in release planning.  "Build the rudder" and "create the keel" and "attach the ramp" are much more actionable user stories.

My project has run into some difficulty in project and story management (in no small part because *I'm* sharing a bit of the pm hat).  Specifically, we as an entire organization, missed a lot of complexity and fine grained detail in going from a traditional functional and technical specification document to detailed user stories and tasks.  The warning sign that I (and everyone else) missed was vague, amorphous story titles like "Create a New Invoice" and estimating that story in release level planning.  That simple "Create New Invoice" CRUD screen has turned into a myriad of user defaults, cascading dropdown lists, about a dozen new fields, and a fair amount of branching logic because there is at least four different logical types of "Invoices."

I made a conscious choice early on in the project that we would move into coding as quickly as possible because I felt that it was more important to build up momentum early than run into analysis paralysis by trying to get the story list perfect upfront.  I knew that our user stories were vague and that there would be plenty of new stories spill out as we got an iteration or two into the project. 

What to Do?

  • Assume that your first estimate sucks and revisit it as you go.  Revise estimates early on as you learn more about the problem domain in the first iterations.  You always discover new stories as a result of early development.  Update the story backlog and communicate those changes to your management and customer as early as possible.
  • Every development task or need should be represented by a story card that is visible to the team and management.  My current client depends on developers "knowing" how to interpret requirements and apply them to their user interface.  That domain knowledge by their developers is a great thing, but those implicitly understood tasks have to be expressed explicitly in story backlogs so that the project can be accurately sized and controlled.  My team is all new to their organization and the dependency on implicit tasks has got us into trouble with our initial release planning.  In retrospect, we should have pushed harder upfront to understand the details
  • Get a "Domain Expert" on, or very readily available, to the development team.  Specifically, a domain expert who has a vested interest in your project succeeding.  I think this rule applies to any type of process or team.  The only difference compared to waterfall techniques is that iterative or Agile projects admit that fact.  The most successful project that I've ever been a part of had the business sponsor and team engaged on a daily basis (it wasn't an Agile project, it was the 20-something Jeremy works lots of hours process).
  • In release planning, get the Business Analyst(s) to walk through candidate stories, out load, in detail (basically, do a lightweight JAD).  Throwing a specification document over the wall to the downstream group and running away has to be the dumbest aspect of waterfall programming.  Face to face communication conveys much, much more information than spec documents.  I remember now how utterly moronic waterfall thinking can be.  Your project stands a much better chance of success if the developers, requirements folks, and testers interact on a daily basis and pull together for a common goal.
  • Write acceptance tests early in iterations.  We've found a lot of requirement needs by writing detailed acceptance tests with Fitnesse because it flushes out a lot of technical detail that isn't apparent at the "spec" level. 

The same problem exists for software designs, especially upfront design specifications.  I've seen too many teams create design specifications with no more detail than a single UML component diagram with a box for "the Invoice component" and an arrow pointing to the "shipping system."  I'm extremely dubious about the value of doing a *lot* of UML modeling upfront before coding, but it's even more ludicrous to say "we've got a design" in a waterfall shop just to check off a process step when you really don't know much of anything.

Geek points for whoever tells me what the title of this post is from.  Hint, he used to be really, really funny before the goofy rainbow colored sweater era.



Comments

Jon Stonecash said:

Bill Cosby

# December 6, 2006 9:15 AM

Sahil Malik said:

Jeremy,

I am sorry to inform you that INS denied Noah's H1b petition, so your Ark is screwed now.

SM

# December 6, 2006 11:12 AM

Sean Burgess said:

How long can you tread water?

# December 7, 2006 12:10 AM

Bil Simser said:

Bill Cosby? Maybe, but I thought it was Mel Brooks (wow, I just dated myself there).

# December 7, 2006 3:04 PM

Jeremy D. Miller said:

I was thinking of the old Bill Cosby standup routine.  "The Best of Bill Cosby" and whatever Weird Al tape had Dare to be Stupid were my first purchases at a record store.  

# December 7, 2006 3:08 PM

Rhonda Tipton’s WebLog Web Links 12.07.2006 « said:

Pingback from  Rhonda Tipton’s WebLog Web Links 12.07.2006 «

# August 19, 2007 5:01 PM

Jeremy D. Miller -- The Shade Tree Developer said:

About a year ago I hit a patch where I wasn't able to blog much (something about finding a new job

# October 18, 2007 9:21 AM

grundyhome.com » Blog Archive » [Preparation | planning | process] matters. said:

Pingback from  grundyhome.com  » Blog Archive   » [Preparation | planning | process] matters.

# February 24, 2008 9:57 AM

Leave a Comment

(required)  
(optional)
(required)  

Enter the numbers above:
Add

About Jeremy D. Miller

Jeremy began his IT career writing "Shadow IT" applications to automate his engineering documentation, then wandered into software development because it looked like more fun. Jeremy previously worked as a systems architect building mission critical supply chain software for a Fortune 100 company and learned agile development practices as a .Net consultant at ThoughtWorks, one of the pioneers of agile development. Jeremy is the author of the open source StructureMap (http://structuremap.sourceforge.net) tool for Dependency Injection with .Net and the forthcoming StoryTeller (http://storyteller.tigris.org) tool for supercharged FIT testing in .Net. Jeremy's thoughts on just about everything software related can be found on his weblog "The Shade Tree Developer" at http://codebetter.com/blogs/jeremy.miller, part of the popular CodeBetter site. Jeremy is a Microsoft MVP for C#. Check out Devlicio.us!

This Blog

Syndication

News

All opinions expressed here constitute my (Jeremy D. Miller's) personal opinion, and do not necessarily represent the opinion of any other organization or person, including (but not limited to) my fellow employees, my employer, its clients or their agents.

About Me

"Best Of" Compendium

StructureMap (Dependency Injection for .Net)

StoryTeller (Supercharged Fit)

Build your own Cab

TestDriven

MVP