Critical Thinking for Developers 
Tags: productivity
Published: 2021-04-27 06:54:42

I am positioning myself as a professional problem solver. I am usually able to figure out most of the problems thrown my way in a reasonable time and with the more or less optimal solution. Problem-solving is a skill like any other and you can work on improving it. The big part of problem-solving is something called critical thinking.

## What is critical thinking?

There are a ton of [definitions](https://en.wikipedia.org/wiki/Critical_thinking#Definitions) out there so that you can pick the one you like. But essentially all of them are describing it as a process to process the information before you to get an answer or conclusion. 

Adopting critical thinking should lead to relying on the process when solving problems instead of leaning on assumptions (correct ones or bad ones). 

## Why is it important for me? 

Problem-solving/critical thinking is one of those things that make a good developer the best one. The ability to solve unexpected issues as they come, the ability to challenge your requirements to make improvements. 

We spent most of our days doing stuff on autopilot (showering, eating, etc..) and we tend to do the same when working. We get a ticket to add some feature, we do it not thinking if it makes sense. Etc... Applying critical thinking makes us better developers. 

## The way of the critical thinker

There is a lot of ways you can approach critical thinking. It's not an exact science. I will sum up the most important point below but it's up to you to decide what works best for you. 

### Ask questions

Whatever you do, this is the most important one. Always ask questions. Question everything. Start with the most basic questions. You would be surprised how often those are the ones that will give you the right answer. The most elegant solutions are elegant because they are simple, not because they are the most complex solutions available. 

There are some examples you can start with:

- Why are you doing this?
- Is this really necessary?
- What do you already know?
- How do you know that?
- What is your exact goal?
- What are you overlooking? 
- Can I look at this differently? 
- How do I know I succeeded? 
- Who would be affected by this? 

This is not a definitive list. You can add/remove questions however you want.

You do not need to have an answer to every question you ask yourself. Discuss those points with your manager/business owner/customer. The important thing is you need to understand what problem are you solving, why, and possibly if this does not introduce more problems elsewhere. 

Always ask in such a way so that you can constructive feedback. Sending a list of questions to a person via email, without explanation, etc.. will not get you very far. 

### Do not assume

This is related to the first point. I cannot count how many times the wrong assumption took me on a wild chase. If you assume something it's always better to verify. Often you will find out that your wrong assumption is held by more people than you. Do not let that scare you. The biggest innovators of their time often found a wrong assumption held by the general population. 

Related to assumptions is intuition. Often you look at an issue and intuitively know what to do. That is fine. It usually works out for you, especially after you get more experience on the matter. But be careful here, do not waste too much time if your intuition does not lead to success immediately. Go back to the process when there are first signs of issues. 

### Do not reinvent the wheel

It's easy to get away and start to implement awesome new solutions on greenfield, you can do what you want, write as much code as you want, etc... For most situations, this is not a very good or responsible solution. There probably is already made solution. Search for it. Do your research. 

I worked for a company that wanted to implement CMS with a bit complex publishing system. We did our research and did not find any product that would fit our needs. We decided to implement everything from scratch. That was a very bad solution to the problem. We wanted a complex publishing solution. We should have a focus on that. We did not need to implement editor, UI for front-end developers, UI for copywriters. We ended up with middle-the-road CMS experience, our publishing pipeline had issues years after because we did devote enough resources to it. It was just a part of the project. We should have bought state-of-the-art CMS and focus our work on the publishing system. That would be the smart thing to do. Without reinventing the wheel. 

### Think for yourself

Do not forget you have an opinion as well. It can be the fact that you spent most of your time with research, it can be that someone on your team is louder than you even tho you are not agreeing with them. Voice your opinion. Do not present it as a fact or sure thing, but voice it.

### No one is perfect

Nobody can apply this 100% of the time (unless you are Sheldon from Big Bang Theory) this is a tool that should be used when you need to solve problems or decide on important decisions. 

---

Follow me on [Twitter](https://twitter.com/pavel_polivka) to get more awesome content like this.