Let's explore this within the context of MetaphorsForNontechnicalAudience
Issue: Digging up plants by the roots and moving them around tends to damage or kill them. "I want that 50 foot tall pine tree moved just two foot further to the left" isn't a very practical request in gardening.
No, but "I don't like how those petunias look; I'll dig them up and plant something else." is very practical. XP isn't about moving the same old crap from place to place; it's about recreating things as necessary.
You don't really want to do that if you're gardening. Gardening is the ultimate in BigDesignUpFront. If you don't know what you're doing, the plants will either die or fail to blossom. If they blossom, they may do so weakly. You have to decide all of this before you start gardening, because not only do you want to generate a pleasing look to the garden, but the seed density, irrigation, fertilizer, etc. all must be right. The problem is that, unlike software, plants don't behave in repeatable rational ways. And it's very expensive to screw up too. Rose bushes aren't cheap. I know. -- SunirShah
While some may prefer BigDesignUpFront
gardening, I garden using IterativeDevelopment
. I move potted plants around the house and deck until I find the place they prefer. In the yard, as one example, I experiment with many different tomato varieties -- changing the mix each year to find out what grows the best and what tastes best to me. I have patience and no fear of failure ... FearIsTheMindKiller
. Of course, in the garden things take a lot longer than with software: one year iterations. PermaCulture
also comes to mind here.
If you but mow a single blade, you're gardening. Maybe not gardening deeply, maybe not gardening well, but you're gardening. But gardening may be a better metaphor for managers than for coders, since the subtle art of cultivation works better with living things. Oh, is your code a living thing? That's great. Spend a season just watching to see how it grows.
I have met some managers who seem to think that codes are like plants, you can tend as many plant as you want and they will all grow simultaneously, the growth rate of each plant is independent of how many other plants are there. He just put a task on a programmer's task list and it will automagically get completed on-time, even though the programmer already has other "full-time" tasks going on and is also swamped with unscheduled "urgent" tasks every day.
But plants are like that. If there's enough space, they don't impact each other too much, but once you run out of space to fit them, they kill each other. If you want a healthy tree, clear grass away from its base.
This reminds me of something CraigLarman
once told me in an aside while I was effusing over a GradyBooch
keynote at UmlWorld?
a couple of years ago; something about how he preferred a gardening or organic metaphor to the architecture metaphor that the ThreeAmigos
were pushing, pushing, pushing. Of course my memory of those events may be completely off. Something about mapping and spaces, or something. Oh well. --AllanBaruz
has a blog entry that uses this metaphor: http://pragprog.com/pragdave/Practices/DebugWeeding.rdoc
See also: WikiWatering