Categories
Monocategorized

Orthogonal Thinking

I have spoken in the past about how I value the Serenity Prayer and how you should use strength, patience, and wisdom at work. There is one more fundamental tool in my problem-solving toolbox that I want to talk about.

I recall back at my first job in California having a real doozy of a technical problem for which I simply could not find a solution. It was about four-thirty in the afternoon and I realized that I was not going to power through and come up with a solution in the next thirty minutes. So I got up from my desk, packed up my laptop, went over to my bosses office and said “I am going to go home and go to sleep”.

That might strike you as an odd thing to declare to one’s manager before five o’clock. I will say that he clapped his hands excitedly and wished me a good evening. At this point I had worked there long enough and had done this enough times that he understood that sometimes the best way I solve a problem is to go and think about something completely different or perhaps think about nothing at all.

Welcome to orthogonal thinking. There are a lot of studies coming out about the nature of software development and knowledge work. I think more and more companies are learning that longer hours do not always yield better results. The longer you work creating software systems the more you realize it is not a completely linear process like building cars on an assembly line. Sometimes you need to make non-linear intuitive leaps in order to get to a fully finished product.

So why does orthogonal thinking work?

If you are creating software systems, you are generally managing a mixture of constraints and emergent complexity. There are things you learn in the process of building that did not manifest themselves in the process of design. There are constraints, platform issues, bandwidth limitations, and data quality issues.

The more you run into these, the more clever your software design needs to become. Sometimes there are non-obvious ways to simplify the systems you are building and it takes some time to absorb the new inputs in order to fully process the shape of a solution. The best thing you can do is park it in your subconscious and wait for that absorption to be complete, or perhaps wait for a leap forward that occurs during a moment of inspiration. The more intensely you work to solve a problemcommonly referred to as “tunneling” on itthe less likely you will be thinking about it in larger or more abstract terms. You will find that systems that do not benefit from this kind of emergent discovery will likely be the biggest source of pain in a large software project.

So what can we do to create orthogonal thinking opportunities? Here are some common things I do to mentally unlock a solution when I get stuck in a problem.

Rubber Ducking

Rubber ducking is a term by which you describe a problem to a rubber duck(real or otherwise) in the simplest terms possible. I know that sounds strange. Sometimes I will ask a coworker to be a rubber duck for me. I get extra mileage out of trying to explain a problem in simple terms to another person because they ask me lots of questions that I need to answer so they fully understand it from their point of view. Rubber ducking distracts you from staring at the problem too much and rat-holing due to your own perspective. Sometimes hearing people asking me questions about my problem will trigger a flash of insight and give me some great ideas.

Doing other work

Second to explaining the problem, sometimes I will just stop working on it entirely. It is like when you forget the name of an old TV show while talking about it to someone and then thirty or forty minutes later the name suddenly pops into your head. I could not speak to the science behind this but I know this works for me in solving problems. I park it in another part of my head and start something else while the gears of my subconscious grind away at a solution.

Turning it all off: First edition

There are a lot of flavors of this and I will talk about three of them. The first is to play a video game or open a book. I prefer getting away from the computer and reading an actual book when I need to disconnect and think about a problem, but popping open a game where you have some sort of sublime activity that puts you into a state of “creative flow” will also work. For me, that default computer game is Minecraft. I like to start a new world, find a really tall mountain, and fuse a multi-layered dwelling into it. It is a low-intensity, pleasurable cognitive project that lets me consider problems in the abstract.

Turning it all off: Second edition

The second thing you can do is to get away from your computer and go outsideideally taking a walk for more than half an hour. Getting physical separation and bombarding your senses with new inputs, sights, sounds, and smells will help get some separation from the problem. As an added bonus the exercise is probably good for you. I will sometimes pair this up with Rubber Ducking, either via a phone call or bringing someone along to talk to while walking.

Turning it off: Third edition

The third thing I do is to shut it all down and go take a nap or just flat-out go to bed early. When I have a difficult task where a novel solution is evading my grasp I will go to sleep thinking about it. It might sound weird to dream about work but I will wake up and have a pretty good solution most of the time.

I know this is a shorter article than most, but I think it is a powerful one. There are a lot of conversations about crunch in software development and how it is harmful to people. I do not think that enough people measure the impact of crunch on the product. I think that unmitigated crunch is unfortunate and also can create substandard software. I believe in cognitive diminishing returnsand taking a break from a problem is sometimes the best way to solve it more effectively.

The next time you find yourself stuck with a work problem, I encourage you to try out some of these approaches. You might find that some are better than others for you.

Thanks again for reading along! I hope you enjoyed this article or learned something from it. I am going to avoid asking for clicks, sneeps and twikbooks this week to see if you do it on your own. Thank you for indulging my anti-pattern and not making me ask for some sort of social reciprocity.

By jszeder

This space intentionally left blank.

Leave a Reply