Recently, I decided I’d teach myself programming. I’d always been curious about it, and I knew the knowledge would be of use to me. Upon researching online, I came across people saying it was challenging and time-consuming. I enjoy overcoming challenges, so that wasn’t a problem. I was only worried that it’d take my focus off of Psychology.
Then I came across a person who said that learning to code can help one become a better thinker and problem-solver. Of course, I wouldn’t miss an opportunity to become a better thinker and problem-solver. So I took the plunge.
Now, few months later, I’m halfway through a programming course and have already solved some challenging problems. Also, it didn’t take my focus off of Psychology. Instead, I gained key insights into solving problems and overcoming challenges.
These insights are consistent with what I’ve learned in over six years of blogging and two years of learning to play a musical instrument. So no matter what challenge you’re trying to overcome, these insights and general principles should hold.
In this article, I’d like to share those insights and principles with you.
What are challenges, anyway?
A challenge you’re trying to overcome is a complex problem you’re trying to solve. A complex problem you’re trying to solve can be seen as a goal or outcome you’re trying to reach. Achieving goals is all about moving from point A (your current state) to point B (your future state).
Some goals are easy to achieve. You can easily move from A to B. They’re not challenges. For instance, taking a walk to the grocery store. You know exactly what you need to do, and you’ve probably done it hundreds of times.
When the goal you’re trying to reach seems distant and you don’t know exactly how to move from A to B, you’re facing a challenge. A challenge is a complex problem with no solution in sight.
Overcoming challenges, thanks to their complex nature, often take considerable mental effort and time to solve. So the easiest and sane thing to do when faced with a challenge is not to expend all that effort- to quit.
Why we’re tempted to quit when faced with a challenge
Simply put, we humans didn’t evolve to solve complex problems that took a long time to solve. Throughout our evolutionary history, most of our problems needed solving in the here and now, as is the case with other animals.
No food? Find food now and eat now. Predator charging towards you? Run to a tree now and climb it now.
It’s not that we can’t plan or think long-term, but that the tendency to do so, being recently evolved, is weaker compared to dealing with the here and now. Also, we’re much more inclined to make long-term plans than to actually follow them through.
The result of all this is that we have a tendency to view problems as tasks that need completing right now, so we can gain instant positive feedback and gratification. If you can’t solve something right away, it’s probably unsolvable. You don’t believe you can solve it, and so your mind asks you to quit.
This is called negative feedback and animals have the mechanism too. If you give a fake, stuffed rat to a cat, she might smell it and try to eat it a few times. Eventually, she’ll quit because she can’t eat it. Imagine if the cat had no such negative feedback mechanism. She’d probably get stuck in the loop of trying to eat the fake rat.
That temptation to quit that we get when facing a challenge is just your mind saying, “This can’t be done. It’s not worth it. You’re not going to reach point B anytime soon”.
This tendency to solve problems in the now is also apparent in how people, when they face a difficult problem, often try to solve it one go. Ever heard of the one-track mind? Once people dive into a problem, they can’t seem to let go until they’re done with it, if they believe they can solve it.
If they find they can’t solve the problem because of its complexity, the rational thing to do then is to quit.
I hope it’s clear at this point why complex problems are hard for humans to solve. By their very nature, complex or wicked problems, as they’re sometimes called, require tremendous investments of time and effort, something that doesn’t come naturally to humans.
Yet humans have solved many complex problems in the past and continue to do so. While it may be difficult to overcome challenges, it’s not impossible.
Steps to overcoming challenges
In this section, I’ll discuss some key principles you need to be mindful of if you want to become a better problem-solver.
1. Understand the problem thoroughly
Someone has rightly said that ‘a problem well-defined is a problem half-solved’. Given that we have a tendency to solve problems right away, we’re tempted to jump right into them without understanding them thoroughly at first. Whenever you’re faced with a challenge, the first thing to do is to collect as much information about it as possible.
Why is this important? To get crystal clear about what you need to do. When we decide to solve a problem, we have this theory in our mind about how the problem can be solved. I like to call it initial theory. The better our initial theory, the more likely we are to solve the problem.
The only way to make our initial theory good is to clearly understand the problem and what we need to do. Some also call it ‘sharpening the axe’ before you cut a tree instead of smacking at the tree with a blunt axe endlessly.
Of course, to do this, you need to overcome that initial tendency to jump into solving the problem right away. If you don’t understand your problem thoroughly, your initial theory will be weak and who knows how long it will take you to cut down the tree or reach point B.
Note that your initial theory may not be perfect, but it needs to be strong. Of course, if the problem is solvable, there exists a perfect theory to reach point B that actually works. If you do this and this, you’re bound to reach B. Let’s call it actual theory. If there are multiple ways to solve a problem, multiple actual theories exist.
The gap between your initial theory and an actual theory will determine how long you take to solve the problem. By understanding your problem as much as possible, you reduce the gap between your initial theory and an actual theory. This increases your problem-solving efficiency.
Note that sometimes it may not be possible to come up with a strong initial theory. In such cases, you can jump into solving a problem with a weak initial theory. When you take action, your initial theory will get refined over time till it becomes an actual theory.
In this way, when you’re solving a problem, theory and action keep feeding each other until you solve the problem. You should sharpen your axe whenever you can.
2. Break the problem down into small steps
People jump into solving complex problems with weak initial theories, realizing the problem is harder to solve than they thought. Or they’re put off by the threatening complexity of their problem right away.
Once you’ve understood your problem thoroughly and have developed a good initial theory about how you can solve it, you’re in a position to break the problem down. Why is it important to break the problem down? Again, it’s because our minds like to solve small problems in the here and now.
By breaking the problem down into small, manageable steps, you change the threatening nature of your complex problem. Before, the problem was this enormous mountain you were attempting to climb, all in one go. Now, you only need to take the first step. Something you can easily handle.
Your mental resources are limited. It’s unrealistic to think you can throw a big problem at your mind that it’ll somehow be able to solve. We simply don’t have that many mental resources. You have to give your mind something it can work with. You have to solve your problem one small step at a time.
Eventually, when you find you’ve solved your problem, it doesn’t feel like you solved a big, scary problem. You solved a series of small problems.
4. Get clear on what you can and can’t do
Okay, you’ve understood the problem well, come up with an initial theory, and broken the problem down into steps. At this point, you have to assess your abilities to carry out the steps. You have to know what you can and can’t do.
Of course, it’s hard to know without trying. You can learn everything on your own or you can ask for help. If you’re pressed for time, it’s better to ask for help. However, if you struggle with the problem yourself, you’ll learn much more.
Running to people for help at the slightest inconvenience creates dependency on them. The ultimate goal should be to develop your own mind so you can handle your future challenges well. Only when you feel you can’t really do something and have exhausted all your options, should you seek help.
When you seek help from people, you get a chance to refine your initial theory. Who knows, someone who’s knowledgeable enough may say something that’ll close the gap between your initial theory and an actual theory. It could be just one thing that someone says, and it all starts to make sense. Every piece in the puzzle fits.
5. Keep testing and collecting data
A reliable way to close the gap between initial and actual theory is collecting data. When you set out to solve the problem with your initial theory, you’re bound to hit obstacles because your initial theory isn’t perfect. It isn’t an actual theory.
This is why it’s important to collect data and test whether your actions and solutions are working. Otherwise, how do you know you’re going in the right direction? Without feedback from data, you really have no way of knowing.
In programming, we get to test our actions every step of the way. In life, you can do that by collecting data.
To give you a simple example, say you need to solve the complex problem of losing weight. If you’ve tried several ways to solve this problem without success, it’s likely you jumped into solving this problem with a bunch of weak initial theories.
Say you tried a novel approach this time. You come up with an initial theory that diet X will help you lose weight. You believe you’ve done your research and that your initial theory is strong.
However, one month into following diet X, with everything else being constant, you see no changes in your weight. Your data just showed you that your initial theory was weak or wrong.
You do more research. You come up with a new initial theory- diet Y works. You test it out. It fails too. You do more research. You come up with a new initial theory- diet Z works. You test it out and it works! You notice significant changes in your weight in a month.
This time, you closed the gap between your initial and an actual theory. Your initial theory was perfect. Now, you can continue implementing it and reach point B- your desired level of body weight.
Data collection not only helps you refine your initial theory, it helps you track progress, and progress is motivating.
6. Taking a step back
When you’re solving a complex problem, you’ll often find that you’re stuck and can’t take the next step. Why does this happen?
Here, I want to introduce you to a concept called bounded awareness. It states our awareness is bounded by what we can see and what we know.
You came up with an initial theory, nice. When you try to solve the problem, you’ll see the problem from the lens of that initial theory. This is called bounded rationality. Bounded awareness leads to bounded rationality. Your rationale to solve the problem is limited by your initial theory.
When you’re stuck, you’ll keep doing the same thing again and again, or you’ll go into the hit-and-trial mode.
Hit-and-trial rarely works, and it’s a bad strategy. You’re basically throwing things blindly at a wall and seeing what sticks. In hit-and-trial mode, you drop your initial theory and you become desperate. A better strategy at this point is to take a step back.
To illustrate bounded awareness and bounded rationality, say you open a fridge and begin looking for an item. You search every shelf but can’t find it anywhere. You shout at your spouse, asking them where they’ve put the item. They yell back, saying it’s on the fridge. You take a step back and look on top of the fridge. There it is.
You could’ve found the item yourself if you’d taken a step back. But you didn’t because your awareness was bounded by the inner contents of the fridge. The only rational way to find the item was to search the inner shelves and containers of the fridge.
When you take a step back from your problem, you can see the problem with fresh eyes and gain new perspectives on it. You can try to link what you’re trying to do now with the bigger picture and see if it makes sense.
You can even leave the problem and do something else. Programmers do this often. This way, the problem marinates in your subconscious. Your subconscious will even work on the problem while you’re asleep, and you may find yourself waking up with new ideas that you can’t wait to implement.
Preserving the belief
This is perhaps the most important aspect to solving problems and overcoming challenges. Without this one piece of puzzle in place, you’re likely to quit.
Since our natural tendency is to solve problems in the here and now, we need to train ourselves to believe we can solve long-lasting, complex problems.
I know many gurus say you should ‘see challenges as opportunities’ but it’s easier said than done. You can’t really develop this mindset unless you actually prove to yourself that staying with problems longer is worthwhile.
In other words, you have to overcome a decent number of challenges to begin seeing challenges as opportunities for growth.
Einstein said, “It’s not that I’m so smart. It’s just that I stay with problems longer”. This quote highlights the importance of delaying gratification and overcoming the tendency to solve problems only in the here and now.
Once you develop the belief that you can indeed stay with problems longer and solve them, you need to preserve and solidify that belief by taking up more challenges.
Another effective way to preserve this belief is to watch other people do what you intend to do. When you see others overcoming the challenges you’re facing, you’re inspired and your belief that the problem is solvable is reinforced.