I've had problem-solving on the mind lately. Not for any specific problem, that is, but the concept in general.
For almost any task (or enduring set of tasks) I find myself thinking about them conceptually as problems that can be broken down. Problem solving as a concept has been with me since elementary school. Yet, when I encountered a problem, my approach was always just ... do it - use all my faculties at my disposal to, for lack of better words, attaaaaaaack. A throw spaghetti at the wall and see what sticks approach. I was a ball of energy that usually picked "brute force" as my approach.
I find it intriguing that these days I am applying the meta-thought of "problem solving" to break down a challenge and make it eaiser to be tackled piece by piece.
The ability to think this way has slowly been formed and trained as I've continued as a programmer in my line of work. And now, I'm seeing it start to move and be applied into other areas of my life. That might be budgeting, learning how to draw faces or fixing a broken brake on a bike.
And on top of all of that, I'm starting to have a growing conviction that what makes this easier and more possible is a series of accumulated experiences and exposure in which you are constantly out of your comfort zone.
I suppose I am writing this post to lament the emotional turmoil that I experienced in the past when confronted with a challenging problem. I think back to the times earlier in my programming career where I would hit a wall and I simply would stop and give up, or try and convince someone else to fix the problem for me. Sure, the brute force method helped me proceed without questioning myself or giving in to fear (what if Ic an't do this?) but I needed to learn more. Simply having an abundance of energy and curiosity was not enough.
It took time for me to learn to:
- a) stop and take a breath
- b) break down a problem (and stay on task while I'm at it).
- c) admit to not knowing something and that I need time to figure it out (still working on that)
- d) learn to take breaks when I'm stuck
Take a breath
It can be easy to get overwhelmed with a scary problem. If I could go back to some of the challenging problems I've faced, I would say some of these things to myself:
- When given the problem for the first time: "I don't need to know the answer / fix the problem right now — let's see what I can discover from it by looking at it from different angles for some time."
- When feeling like I have no idea where to start: "All I can do is try and take a step in the right direction to see if I can break this down into something more manageable"
- When feeling overwhelmed by the problem: "I feel overwhelmed, and that's ok. Feelings come and go. When the feeling passes, I'll think about how I can break this problem down to be less overwhelming."
- When the problem seems boring or to be a chore: "I wonder what I can learn from this opportunity?"
Breaking down a problem
Breaking down a problem depends on a few factors. For one, I think the person trying to break down the problem needs to be fairly confident and comfortable with the material that they're facing. If someone is asking you to build a bike from scratch, but you've never actually ridden a bike, you are going to have to rewind and work up to the initial problem.
Maybe that's not the best example but I'm trying to say I think a person needs to have enough domain knowledge to be able to approach a problem and decide if they can break it down into smaller sub problems or not. If you're confident that you are familiar with the domain at hand with this problem, I find the following to be useful:
- Write down the main goal at the top of a file / a piece of paper / etc
- Underneath, write down the anticipated sub problems and possible avenues to solve them.
To continue with my not-so-great-bike-examples, let's say I go outside one day and find my back brake on my bike is stuck. It's cold out so I figure it's frozen, but since I have partially hydraulic brakes (and I don't know how those work yet), I don't know if something more complicated might be going on. On my page I write:
Goal: Unfreeze my bike brakes so I can go use my bike
Sub problem: How do I fix this right now?
I'll take my bike in overnight and see if it thaws. If it does, there isn't something more nefarious going on that is seizing my brakes.
Sub problem: How do I avoid this in the future?
I don't know how to avoid this, but I have heard that water can get into brake cables and cause freezing. I go and google the above question and find this response on stack exchange:
Frozen cables happen because you've got moisture in the cable and housings. This can happen fairly often if you bring your bike inside after they've been wet and then have it back out long enough for that moisture to freeze. Two things can help. First, make sure your housing covers as much of the cables as possible. Second, use a cable lubricant, which will help keep moisture out.
The above example happened to me a few weeks ago.
Now, did I actually write any of this down piece by piece? No. That morning, the first thing I thought was "I guess I'll have to take it to the shop and it'll be in there for a day or two" (actually, the first thought I had was "Why isn't my brake working" as I approached a stop sign ಠ_ಠ) . I didn't think about it as a problem that I tried to break down, at least, not immediately.
After some time passed while riding, a more obvious thought occurred: "why not take it inside and see if that fixes it first?". A little embarassing - but not as embarassing as going to the bike shop (and potentially have to shell out a few bucks).
Admittedly, sometimes in a moment of frustration, bewilderment or surprise, the first thing we think isn't "how can I break down this problem". That's something I'm trying to keep in mind - that it takes time to be in the headspace when you can do the problem solving.
Admitting I don't know
I can't think of anything more empowering these days so much as simply saying "I don't know." In certain situations being able to say I don't know it's definitely a privilege that not everyone has (especially in the work place). But, when it's safe to do so, saying I don't know enables me to think curiously. If I can be curious instead of critical (I wonder how X/Y/Z works vs I'm not good enough/know enough/ at X/Y/Z to do this) I am setting myself up for a kind and gentle learning opportunity.
Besides, sometimes life gets boring. I think starting to chase down the things that make me say I don't know keeps things exciting.
Learning to take breaks
This one took me a while to learn as well. So many times did I hit my head against the wall while programming only to take a break, go to sleep, go for a walk, and then come back to it with a fresh mind. Sometimes that is all it would take for me to find a solution and move on.
I think taking a break is hard because it's possible to equate it with failure. In my mind it's easy to say "I should be able to do this right now," and then refuse to take breaks until I am absolutely out of gas. In reality, thinking of a task as a marathon and not a sprint is going to do me better in the long run (no pun intended).
Taking breaks can also be hard when you're working on something that is enthralling and using all of your focus. Sometimes working on a problem can be so fun that you get completely absorbed and don't realize that you're hungry or tired or even need to use the bathroom. While I would consider this to be something akin to being in flow, I think it's important to sometimes break out of that flow early so that you can maintain other systems if you know what I mean (much to the happiness of the people around you).
Those are just a few thoughts rattlin' around the ol' dome tonight. Thanks for reading!