So stay out of rabbit holes!

cartoon graphic of a grabbit holeCreative problem solving and loving to learn about new technologies are best rabbit buddies.

One of the aspects of programming I get the most enjoyment from is creatively solving problems.  We are currently at point A, but want to be at point B.  So how do we get there?   Everything from the choice of hardware, software, languages, algorithms, design; these are all variables that need to be accounted for.  And for me, he more open ended the criteria, the more engaging I find the challenge.

Going hand in hand with this love of being creative in my problem solving is the desire to keep learning new skills and technologies.  The bigger my toolbox, the more options I have when coming up with creative solutions to problems!   These traits feed each other.

… but not always in a good way.

There is a dangerous aspect to these tendencies I’ll illustrate using a construction analogy.  Say I have two pieces of wood I need fastened together.  Easy enough, right?

I start going through my toolbox, looking at the general solutions I could use to approach the problem.  We have screws, glues, clamps, and joints.  And actually, there is this new pressure fusion method I’ve heard mention of… maybe I should Google that!   Now with this general list, we can break each one down even further.  There are a million different types of screws, made of different materials, different lengths, thread styles, heads, maybe even bolts.  Washers, nuts, etc.   For glues, we could use regular wood glue, super glue, crazy glue, some industrial stuff I have no knowledge of… hrmm.. back to Google.

You see how the options can quickly overwhelm, and we can find ourselves
heading down into a rabbit hole!

down_the_rabbit_hole_by_cyril_helnwein

It’s been my experience that all programmers have at least a little bit of the rabbit hole tendency.  But let me say this…

Stay out of rabbit holes.

As much as I love finding new creative ways to solve problems — using my time researching cutting edge technologies and software I’ve heard about — it’s not always an appropriate use of time.  Perhaps you’ve worked with someone where even the simplest task given to them turns into a giant complex overly engineered solution that took way too much time.  I have.  And honestly, it wasn’t until I started seeing this behavior in others that I was able to recognize it in myself.

If every time you asked your carpenter to attach two pieces of wood, he spent days or weeks researching new methods of fastening lumber, you’d probably be really frustrated.  That would be a shitty carpenter.  On the flip side, if a carpenter was constantly fumbling around with a bunch of clamps and off the shelf tools to attach your wood together in a very specific arrangement with substandard results… perhaps he should go dive down a rabbit hole and research a custom jig that might help speed things up!  A week spent up front doing researching, to possibly provide greater time savings in the long run…  not a bad idea.   There are times when rabbit holes are a good thing!  

The advice I’m trying to give here is a bit muddled, but basically, learn to recognize these programming rabbit holes, and do your best to stay out of them.  A bit of the old KISS acronym (keep it simple, stupid), a bit of emphasis on honing your time management skills, but most of all, being aware of what you are doing.  Recognize the rabbit holes.


gambler_lean

You’ve got to know when to hold ’em
Know when to fold ’em
Know when to walk away
And know when to run
You never count your money
When you’re sittin’ at the table
There’ll be time enough for countin’
When the dealin’s done

The Gambler – Kenny Rogers

Advertisements