“You want ‘ravioli’?”
My toddler wanted ravioli, but didn’t exactly say it. I knew what she meant. I fix it, and she eats 80% of it.
Client says, “I want a video player like Viddler has. The comment feature is a way to ask questions.”
I assume the client means they want this to create a link to comments below, and the comments are threaded discussions like Stack Overflow. I explain this, and my client gives me the same look of “Ah kay” my 2 year old does (it’s over the phone, but I can read tones). I create it, and they like 20% of it.
My 2 year old does this too. Sometimes she’ll eat like 1 piece of ravioli, and ask for rice pilaf instead. I just wasted a lot of food, but dutifully fix her rice instead, 90% sure this’ll please her since she almost always eats rice or ravioli. This is worse at dinner, however, when I have 3 other mouths to feed, invest more work, and more resources. It can be quite costly if she doesn’t like it, and build up much frustration, sadness, and resentment. Same with larger software projects.
I’ve done enough video players to know what clients will dig, and dislike. I know if something doesn’t work, something else probably will. While my 2 year old ends up wasting food when I’m wrong, at least the client pays me for my, and their, time in figuring out what they really want.
What they both have in common is “seeing”. When my 2 year old “see’s” the food, I get a crystal clear understanding within 60 seconds of knowing whether she’ll eat it or not. There are no assumptions, just black and white answers. Sometimes I think she just likes me acknowledging her, so while she asked for ravioli, she meant rice. Since we appeared to be on the same page, I was surprised when she didn’t want what I gave her. Clients are the same way; when we appear to be on the same page, we’re both disappointed when I give them something they didn’t want.
This is the exact reason why I dislike “requirements” and “specs” for software. Time and time again they fail to deliver what the client really likes, work towards preventing what the client really wants, and puts a burden on someone to keep it up to date. The only thing they help is to solidify a contractual agreement between 2 parties to ensure 1 gets paid.
This is also why I’m a big fan of Iterative development; getting the client a working build of the software quickly to confirm whether you’re on the same page or not. I’ve taken it upon myself to show my 2 year old the ravioli can and the rice bag, and let her choose and be involved in the preparation more. Her majesty says that encourages them to want to eat it and helps the 2 year old independence thing. Showing a client a spec and getting them to sign off on it does very little to ensure the software I deliver is what they want. Showing them working, in progress software, does.
Even if my contract clients don’t actively do an iterative development style, I do it anyway. This ensures we’re on the same page and condenses all surprises down to weekly vs. a bunch of big ones after 2 months.
For my 2 year old, this significantly reduces wasting of food, ensures she & I are happy, and ensures she has more food later. This vs. me resorting to something weird she might not eat when we’re out of ravioli and rice. For software, this saves my client many hours of wasted work on my part, and makes the most of their money they are investing in me. Also, it ensures they get the best ROI with faster confirmation it was in fact a good investment or not.
Planes that travel from LA to Hawaii are constantly off course, but routinely correct to ensure they are on course. My 2 year old is constantly learning on how to communicate with me, and me with her. Iterative development constantly ensures what I’m building is what the client wants, and when my contract is up, they have working software. Over time, this results in better communication between my client and I. Like marriage/dating for a long period of time, you start to learn what your partner “meant” vs. what they “said”.
You can get away with Waterfall approaches in the ad agency world because the development cycles are so short. You can get away with Waterfall in consulting with large Enterprises by just “surfing the problem wave”, and just waiting for the money funnel to stop without worry of reprise. This doesn’t work in the Enterprise world where people pay attention, nor with startups.
This year, I endeavor to empower others to more easily get into Iterative development with their clients through software to help them.