Write It Out

January 04, 2019  |  Comments

I taught myself how to code when I was 30. I am 37 now and have had many days where I got my ass kicked. In the beginning, I got my ass kicked more days than I kicked ass. At some point the tide turned, and I started kicking ass more than I got my ass kicked. At some point you just absorb something called intuition and you can figure things out much quicker than you were able to before, like driving a car I suppose.

One tool I found along the way that I really, really value is a very simple technique for solving challenges that anyone in any profession can use. In the software industry this technique we use is called Rubber Duck Debugging. The concept is that you get yourself a cute rubber duck (or a BIG one), put it wherever you can make eye contact with it.

Yellow Building Sized Rubber Duck floating on a river near a small city with medium sized skyscrapers in the background

Rubber Duck Project 2009 by kazuma jp CC-BY 2.0 https://www.flickr.com/photos/kazuma_jp/3928192219

And you talk to the Rubber Duck. You talk to the Rubber Duck out loud. You tell the Rubber Duck about your challenge. You explain the challenge, step by step, in detail to the Rubber Duck. You explain your challenge to your new friend, Rubber Duck.

How many times has the act of explaining something led you to the answer mid-sentence?

me: Hey Person McPerson, do you know where I put my …
me: Oh, nevermind, I just remembered where I put it.

That was a pretty glorified example but it illustrates a point. The person didn’t even respond, but you now have an answer. This has happened to everyone on the planet at least once.

You explain to Rubber Duck just like you would explain to your highly paid colleague whom has two input devices (ears) attached to a high-speed, functioning logic unit (brain) attached to an audible output device (mouth + vocal cords). When you are successful with a one-way dialogue with either your Rubber Duck or your Highly Paid Colleague you now have the answer and there are two differences between the two, the first is obvious which is cost, the second is independence, yup INDEPENDECE! You didn’t need to wait, you figured it out yourself, and you further strengthed your psyche that you can figure shit out, which is one of the better highs in this life.

The act of explaining your challenge out to Rubber Duck turns out to be extremly insightful and usually helpful and most importantly it is very effective. The Rubber Duck method has 100% of the time always produced progress for me. Sometimes challenges are hard and all challenges are solved with progress. Rubber Duck delivers progress, sometimes big gains, sometimes barely incremental progress, but it is progress.

I use Rubber Duck debugging daily but not how I explained earlier. I don’t actually have a Rubber Duck and I don’t talk actually talk out loud to my Rubber Duck. Instead… my Rubber Duck is a text document, a daily journal that I type my challenges into, the file isn’t even named Rubber Duck Diary or anything like that. I don’t care if it gets erased or saved past my current challenge. I just open a text document, I type my current challenge, then solutionize just below. I do not care about punctuation or grammar. I just start typing, listing out thoughts and action steps that usually lead to uncovering the next piece of the puzzle, continuously making progress. It is like a loose to-do list, just a flow of the mind, and I love that it produces progress, every time.

Rubber Duck = Progress.


Oh Rubber Duck, Rubber Duck
Let me tell you
I’ve got this challenge
That I just need you to see
Please let me type
My thoughts into you
Then tell me what you think
Oh whats that
You have a next step
Why thank you kind fellow
We shall meet again soon
Rubber Duck, Rubber Duck…

(loop until challenge solved)

Tags: programming engineering software development life problem solving