Knowledge is knowing where the answers might lie. Solving problems is knowing how to apply the knowledge you have to solve a thing.
I like to be methodical when approaching and solving problems I have.
For me solving a problem usually involves going through these four steps:
- Find what the problem I want to solve is.
- Break the problem down to smaller parts I can solve.
- Work on solving the task and nothing else.
- Solve the problem.
1. Find what the problem is
Most often the difficulty of solving some task is simply due to it not being clearly expressed for me. I get the majority the tasks I work on from my task manager 2Do, GitHub issues and
TODO:'s in the code. And I make sure that I understand fully well what the problem actually is before solving it.
2. Break the problem down to smaller parts
Once I found and understand what it is I want to solve. I look into it more and see if I can try to break down the problem into smaller parts I can work on. Often times this might not be necessary and I can start working on the task immediately but in times when the task I need to solve is either hard or stated too vaguely, I break it down further into parts that I can pick up and work on individually.
Often times I do the decoupling of the task inside the app itself, be it a code editor, 2Do or Bee app. Other times I can use simple pen and paper or a white board or a MindNode mind map I made called Think. Which I use to brainstorm things and break down the connections between different things in a visual way.
I also sometimes use it as a way of breaking down further complex tasks. Like so:
I then simply try to go through each of the steps outlined and hopefully reach a working solution. Modifying and adjusting things in light of newly found insights.
3. Work on solving the task and nothing else
In order to make sure I do one task at a time and not get distracted I use this Alfred workflow I made. It lets me put any selected text or a task from 2Do, MindNode or Trello as my active TODO. I then display it on my mac TouchBar to always keep in my mind what it is I should actually be doing if I ever do get distracted. It looks like this:
4. Solve the problem
As mentioned in research, I mostly use Google for searching mixed in with DuckDuckGo. I heavily use Dash for documentation and Dictionary for searching the wiki. I also use IRC and various forums specific to the problem I am solving.
I often remind myself of how to effectively ask questions so as to respect other people's time and maximize chances of getting a good answer.
Sometimes I already know the answer given my past experience without conducting help outside and the only thing left is to apply the solution I have.
In some cases, a problem may be complex enough that it needs time thinking more about it. Researching various possible solutions and things you could use. And playing with possible solutions and ideas in your head until you reach something worthwhile you can spend time implementing. This talk by Rich Hickey covers this point quite well.