Beware the Freebie.
The milestones in the life of a story:- Creation: customer creates the story
- Estimation: the story is estimated by developers
- Selection: the story is selected for an iteration
- Specification: tests are written the story
- Implementation: the story is implemented to make the tests pass
- Acceptance: the customer acknowledges completion of the story after seeing the passing tests and witnessing the new functionality
It is unavoidable. Every story must go through these milestones of life in order. A story cannot be estimated if it has not been created. A story cannot be selected for an iteration if it has not first been estimated. You can attempt to specify a story before it has been selected but you run the risk of being wrong, for the system may change many times before the story is selected. Implementing a story before it has been specified will lead to false implementations. And accepting a story that hasn't been implemented is just plain silly.
It happens with some frequency, however, that a story gets implemented before it is ever selected, estimated, or perhaps even created. How? A developer may be look at a piece of code and think, "Hey, the customer mentioned he wanted to change this doohickey. I might as well change it now.". Or a developer may working on one feature and say, "You know, I bet the customer would really like it if I improved this thing-a-magigger". When this happens, the developer pridefully demonstrates the extra functionality to the customer and says with a smile, "You got a Freebie this iteration!".
BEWARE THE FREEBIE! A Freebie, by it's nature, has skipped at least one milestone in it's life. Most Freebies skip the Selection milestone. This is unfortunate because maybe the customer didn't really want that story after all. But that's small potatoes compared to the real danger... Almost all Freebies have skipped the Specification milestone.
Skipping the specification milestone is blasphemous. If a feature has not been specified with tests, how do you know it really works? Worse, how will you know if it still works 2 months from now. Very often Freebies break and nobody knows about it.
I've seen it over and over and it's regrettable every time. A perfectly innocent story is wronged by an overzealous developer. The poor story, out of sync from his peers, strays from the trodden path and becomes a Ghost Story. Becoming a Ghost Story is dreadful fate. They are those stories that were at one time complete, but have since become incomplete. You may never actually see a ghost story but they will surely haunt you. They cause users to have delusions of non-existant functionality and to make exclamations like "Hey! Why doesn't this stupid app work like it used to?" or "What happened to my favorite feature?". They keep customers up at night wondering if they actually selected the Ghost Story for an iteration of not. They torment developers forcing them to write code they've already written.
Avoid Ghost Stories by avoiding Freebies. Give every story a complete life with all it's milestones. The next time a developers shows you extra functionality and calls it a Freebie, say "That's nice. I'll consider selecting a story for that in a future iteration."
!commentForm -r
By skipping several stages, the freebie runs the risk of breaking something else. An assumption that doesn't carry throughout the entire system. Usually minor, so it doesn't show up for months. Then someone else has to rip their hair out. And declare that your parents were never married.
"The more innocuous the change, the greater the ramification."
"The more innocuous the change, the greater the ramification."
Micah Martin - If your parents are Preston (Tom) and Karen Martin of Proctorville, Ohio, then your dad was best man at my wedding in 1970. I'd like to get in touch. Are you that Micah?
gary@exprint.com
gary@exprint.com
Micah Martin - If your parents are Preston (Tom) and Karen Martin of Proctorville, Ohio, then your dad was best man at my wedding in 1970. I'd like to get in touch. Are you that Micah?
gary@exprint.com
gary@exprint.com
Indeed! I think you have hit on an interesting way to describe a whole family of dysfunctions. I have certainly seen stories selected before they are estimated. I have seen stories accepted before they are specified. I have seen stories implemented before they are created. Each of these dysfunctions has it's own particular set of symtoms and ramifications. What are they?
Well said, Micah. It's worth noting that 4 of the 6 milestones are customer milestones. As developers, we want to create the best software we create. We talk about it being a team effort (i.e. whole team, customers, developers, et al), but in the end it's not really our (developers) software. And how can we expect our customer to feel ownership of priorities if we arbitrarily take the their any (sometimes all) of their milestones?
Add Child Page to BewareTheFreebie