November 6, 2020

Practical Ways to Build Problem Solving Skills as a Developer (before you’re knee-deep in bugs)

Bekah Baker

Software Engineer

In the last post, we unpacked some basic steps you can follow for solving problems and discussed how important it is to practice when the pressure is lower.

It’s easy to assume that as you become a seasoned developer, you will run into less problems; unfortunately, that’s not really the case. In fact, as your skills grow, the complexity of the issues you face also grows— hopefully, your problem-solving skills and ability to move through them at a quicker pace is a part of that growth. 

But what does that practically look like in your day-to-day life as a developer? Here are three ways that you can strengthen your problem solving muscles starting today, right where you're at.

Practice solving problems when the stakes are lower

Sites like codewars, edabit, devchallenges and coderbyte are some great places to practice coding challenges. There are also great user-submitted issues in places like Reddit.

Keep in mind that the point is not to write the most mind-blowing one-line solution that has ever been written—the point is to get used to being presented with a problem and use the steps outlined above to solve it. 

As you solve the challenges, you will get faster at moving through the flow and the next time you are thrown a critical, time-sensitive bug—it won’t feel quite as daunting.

Contribute to open source

There is a great open-source guide on how to get started here. We all know there are plenty of benefits to contributing but for this article, the benefit is that you will get the chance to solve issues without pressure. (Someone else’s code has a problem, not yours!) It’s a good way to expose yourself to the ways that other people have solved issues and get feedback on your solutions. Again - practicing when the stakes are lower will make it easier for you to solve when there is pressure.

Offer to help others when they have problems.

Do not solve the problem for them, you are robbing them of their ability to learn.

Do listen, ask questions, help them break it apart, and ask them to explain it to you. This helps both of you. Offer to help even (especially) when you aren’t sure you know the answer. Often, people just need a new perspective.

Finally, there are a few concepts that are crucial to problem solving. They may seem trivial, but I assure you that these might be the three most difficult things to learn.

Ask the right question

This is frustrating to hear, but if you are going to page 2 in Google, chances are, you’re asking the wrong question. ‘Why isn’t [y] working’ is a bad question. 

This is why steps 1 - 3 of the previous section are so important.

‘Why isn’t [x] causing [y] to run’ is a much better question. Be specific and detailed—ask a question that is specific to the tools, frameworks, language, etc.

Be prepared to be wrong

Yikes. Not what you wanted to read, I know. But sometimes we can get so stuck on how we think things should be done, that we spend way too much time forcing something to work that just never will. Go into it with the willingness to see where you might have gone wrong, and keep an open mind to new solutions. If you’re going to need to scrap everything and start over, it’s best to do it as quickly as possible.

Know when to walk away

Seems counterintuitive but you will never solve a problem by staring at your screen for 16 hours. Take a walk. Take a nap. Sleep on it—just totally forget about it. 

This has to be one of the hardest things for a dev to learn, but I’d argue it’s also the most important. I’ve sat at my laptop for a full day begging my code to work and sometimes it does—but I’ve also solved a problem in my dreams (literally), and heard countless similar stories. Knowing when to take 5 minutes, break for lunch or get a coffee refill is a sign of a veteran problem solver.

Hopefully, this article has shown you that problems are to be expected, especially in technology, and while you can’t get rid of them altogether, you can learn to be better prepared to handle them when they [inevitably] come your way!