|
How do you renovate a house you just bought?
As you know, knocking down walls, painting rooms or replacing infrastructure while living in the house isn't fun. These are "major changes", and you only want to occupy your home once "the significant elements have been correctly implemented". Sounds a bit like software, doesn't it?
But what if you have a two-month deadline, little knowledge about renovations, and money's tight?
This was my situation in summer 2003, three months before our twins were born. Having been immersed in XP for two years — and aware of the wild overruns and delays people encounter even with new houses and condos — minimalism and simplicity were front and centre in my mind.
Thus, when my wife and I imagined the changes we'd make, our conversations frequently featured the phrase "we're not going to need that".
Still, our initial list had only 22 work items, and the 5-figure cost estimate was double our budget. Sounds like software already?
To solve our conundrum, we mercilessly cut items from the list, and stopped other items when they got to the "good enough" stage.
Agile developers take a similar approach: they satisfy their customers' requests and avoid guessing the future. They legitimately ask each other, "do we really need to make this package well-rounded and generic?" They challenge their customers, "as appealing as feature X looks, how likely are you to use it significantly?"
Hard-core extreme programmers freely invoke the "You Aren't Gonna Need It" (YAGNI) principle because they truly believe it's in their customers' best interests. And because they sound cool. Their customers, however, don't always seem all that keen to hear that!
When you want something done, or invest the time to come up with a feature or enhancement, do you get a little attached to it? Isn't hearing "forget it, you don't need that" just a little disheartening?
Despite personal conviction, we can't truly say with 100% accuracy (and foresight) that something will never be needed.
What we can do, however, is suggest YADNIN: Ya Don't Need It Now. Suppose a person approaches us with a bright idea, a request from management, or sensible user feedback; saying "let's stick to our current iteration plan, and consider the new thing's priority at the next iteration planning" is less judgmental and more respectful.
Instead of butting heads over "will the thing ever get used?" we change the conversation to "is it worth developing now, soon, or much later?" That's basic Agile planning.
Our contractors executed 9 of our 22 renovation items (still, late and over budget). In 6 years' worth of hindsight, 4 of the postponed 13 items turned out to be YAGNI whereas the other 9 were eventually implemented.
Rather than cramming them into the initial project, or ruling them out altogether, treating these items as "we might do them someday" helped my wife and me (the customers) reach a common vision, contain our costs, and move into a pleasant home just in time.
Copyright © 2009, 3P Vantage, Inc. All rights reserved.
|