Have you ever been moving along on a project and - BAM! - you hit a brick wall of a problem where it isn't obvious to you on how you should handle the problem?
I had that happen last night while I was working on a personal project. I had just read a post on codinghorror.com that mentioned a problem solving technique which involves asking a rubber duck whatever question you might have about a problem before you go to a teammate or boss. The idea is that if you take the time to formulate the question in an understandable way, and ask the question out loud, then you have a good chance of figuring out a solution to your problem by yourself.
I've had numerous times where I will start talking to a teammate about a problem I'm having and the solution will come to me while I'm explaining the issue. While it is really helpful to be able to talk to a teammate to work through the problem, it is a lot less distracting to others, and much more rewarding, to work through the problem on my own.
I thought it might look a bit awkward if I started talking to inanimate objects at the house with my wife and kids there, so I decided to talk through the problem with my wife instead. Of course it worked great! I spent 5 minutes (maybe less) talking about the problem, and the solution came to me. Next time I think I will go in the garage and talk out the problem.
I've also had similar success when going for walks. I will specifically not think about the problem at first. About half way through the walk I will start to think about the problem I'm having, and the problem will usually seem a lot less confusing.
In any case, rubber duck or no rubber duck - talking through problems is extremely helpful. You might look a bit crazy if you start talking to rubber ducks, but at least you will be able to get your work done.