Categories

Thoughts

One of the things that we as a family love to do while on holiday is to get lost. We are often forced out of bed at a far too early time by our two boys, who are both eager for a new adventure. After quickly packing a picnic, we will choose to walk down a random street (asking our 4 or 2 year old where to go helps getting lost quickly too). We try and spot a few locals and ask them which coffee shop or bakery is their favourite. At the coffee shop, old men and women, who are always eager to talk and the only ones with enough time, will tell us stories of what this place used to look like; and where we should go next. It’s fun and one of the best ways to discover a new city, or indeed a place you have been to many times before.

Programming Adventures

I have tried to adopt this same philosophy in my programming journey recently. I have been lost in NodeJS caves and took a ride on the ruby Rails. I speak to the locals in these communities and ask them for advice: “How would they tackle this problem?” “What do they recommend?”. I am always surprised how helpful everyone is in every community.

I know the alleys and nuget packages of the .NET space quite well, but joining a .net open source community allowed me to talk to people from different countries and different experiences all together.

A beginner’s mindset

I feel like a complete beginner when I enter these foreign lands. It forces me to adopt a beginner’s mindset. It forces me to be lost for a while; and that’s a great place to be sometimes.

So…
be your name Buxbaum or Bixby or Bray
or Mordecai Ali Van Allen O’Shea,
you’re off to Great Places!
Today is your day!
Your mountain is waiting.
So…get on your way!
– Dr Seuss, Oh the places you’ll go

I spent two hours last night figuring out why a plugin for the treasure hunt app kept timing out. It worked in the emulator, on the web, but not on my phone! I scoured stack overflow, forums, documentation, trying numerous variations. I finally packed away my laptop in frustration and tried to get some sleep.

Today, I had to face the question, should I head down that rabbit hole again and dig even deeper? That’s what I, as a software developer, am destined to do: digging deeper to solve these difficult problems.

Pair programming with imaginary friends

In the past, this is when pair programming has helped me the most. I would be head down deep in a rabbit hole and someone on my team would join me.

P: “Where you at?”Me: “I have been trying to solve this now for THREE hours. Well you see this variable here, I cannot figure out why it is not getting a new value from our web service. Our codebase is so fragile! We should be doing this, that and the other. But there aren’t enough tests and [blah blah blah]. If only we had [shiny new framework] I would not have this problem!”P: “What problem are you trying to solve?”Me:”Ok […heading out the rabbit hole…]. I am developing this [ new feature description ]. When the user clicks on the button, this method is called and then this method will …. hmmm… OH that’s where the problem is! I have not done [stupid mistake here]!”.

Ever had this happen to you? Even though I did not have a pair programming partner join me, I talked it through with my imaginary friend (try a rubber duck, if that feels too weird 🙂 ).

Solving the wrong problem

In my case, it turns out, I was actually solving the WRONG problem and did not need that plugin in the first place. Last night, I was so deep in the rabbit hole and kept on digging deeper and deeper. I am glad I forced myself to take a break (mainly due to lack of sleep!) and backtrack out the rabbit hole again.

So, what problem are you trying to solve today*?

PS.
* Hat tip to Kevin Trethewey, who would always ask me: “What problem are we trying to solve?”. I have found that it’s one of the most powerful questions we can ask ourselves.

Day by day you have to give the work before you all the best stuff you have, not saving it up for later projects.

My natural instinct is to store up my energy and my creative thoughts for later projects that I will use one day. But it’s only when I go full steam ahead, being present in the moment, investing all of my talent and creativity, that I get any sense of achievement.