Rubber Duck Problem Solving
codinghorror.comAfter reading Ridiculous Fish's version of this (http://ridiculousfish.com/blog/posts/The-app-that-was-fixed-...), I use a mental version of Dr. House.
It's worked out a couple of times... "How can the process have failed when the logs indicate success?" "Everybody lies." "Oh, so maybe the log is written at some point before the process actually finishes?" "Treat with steroids."
I very very often try mentally explaining problems to someone whose intelligence and opinion I respect. It doesn't really matter who, but it does have to be someone whose real world opinion I would value.
It's never hardware... except that one time that it was. [1]
[1] http://www.bit-tech.net/news/hardware/2012/03/06/coder-finds...
I've been the duck.
Years ago when I was doing tech support a fellow on Long Island would call up and start explaining his problem--at a rate of speech that made me get out of breath listening. Usually, about 3 minutes into the call he'd arrive at the answer that had been occurring to me, thank me, and hang up.
I sometimes do this while writing an essay. I simply imagine I'm talking to someone about the topic and when something good comes out of my mouth I write it down.
"If it sounds like writing, I rewrite it."
I remember reading the term for the first time in The Pragmatic Programmer by Hunt and Thomas. They give the experiences of one of the authors as the origin of the term, but I would really be interested where the term was used the first time. Personally, I'm sticking with the technique ever since. Although I've never managed to use it in an office environment with other people. I don't know if this is caused by the environment or if it simply feels too awkward to me.
When I'm working in a coffee shop or library or whatever, I do the same thing, but in an empty email.
Just writing out what I'm trying to do in a hypothetical email to someone who has no knowledge of the problem usually unties the knots in my brain.
In an office environment any co-worker can be a rubber duck for you. Of course, if all you can find are people who are knowledgeable about what you're working on, you may not need a rubber duck.
Please don't do this. If you can figure out the solution by explaining the problem to someone else, then you've just wasted the time of your co-workers.
At least take the time to sit down and write up a detailed explanation of the problem first. Do your due diligence before consuming the time of another developer.
I know a number of project managers who read Jeff Atwood's blog intently. I really hope they don't go out and buy stuffed animals and put them in meeting rooms so people can ask the animal questions. Unfortunately, I think some will.
The theory is definitely sound, but simply saying "phrase your question in an email to me, making sure to be detailed" should suffice. Talking to stuffed animals is probably unnecessary!