Skip to content
On this page

Solving problems

Always think from first principles.

  1. What are you trying to solve? Define the problem well.
  2. Break the problem down to essential and smaller parts.
  3. Prioritize order of solving the parts. Do necessary research.
  4. Work on solving each part one by one. No distractions. Get rid of parts that are non essential.
  5. Optimize. Document. Share solution.

1. What are you trying to solve? Define the problem well.

I use Height for all my project and personal tasks/ideas I work on.

In there I clearly define the subtasks and all the necessary information. Just lay it all out. If something is not yet clear, think it through alone or with like minded friends in Excalidraw. High level diagrams.

For personal tasks and keeping my brain fresh of memorizing things, I use 2Do, GitHub issues and TODO:'s in the code. Write anything that comes to mind that's of value, always! Don't keep non directly actionable things in your brain RAM. Only thing you should keep in your brain RAM is the actual problem or subtask of the big problem you are solving.

Going on walks or having naps and even relaxing with friends whilst still having the problem at back of your mind is super useful as your brain is actually processing the problem in background and can give you novel insights.

Just try to be clear of what you're solving and why!

2. Break the problem down to essential and smaller parts.

As mentioned, I use Height for this now and its subtasks feature is lovely. Want to build a Height like app that sits on top of GitHub issues soon as that would be even better.

Example task with subtasks

Month view of things to do for a project

Most important part in this step is just to make sure that subtasks are all actionable. Sort by priority and then go at it, one by one.

I like breaking things down more visually in Excalidraw or MindNode.

Can look like this. Here LA and epictools are two tasks/projects with subtasks.

MindNode lets you focus in on one of the nodes for better focus.

Can also use arrows with descriptions for more high level views. Above is example of one brainstorming session.

Often times I don't need to go this deep into sketching everything out. And just working in the code editor and outlining the task in Height/GitHub is enough. Or 2Do (as note).

FigJam and Excalidraw are amazing as they allow you to collaborate on brainstorming together.

If through this process, you find some part of solving the task, not useful or unneeded, remove it! Why Tesla removed Radar and Ultrasonic sensors is nice overview of this in action.

Minimal viable working thing first!

3. Prioritize order of solving the parts. Do necessary research.

In this part, assuming you have things in order and well defined (as much as possible). Do necessary research. Is this problem already solved by someone? Can we just use it or integrate?

For research, I do Google searches. Search Reddit, HN, Twitter for convos around the topic/problem. Note things.

4. Work on solving each part one by one. No distractions. Get rid of parts that are non essential.

If there are no viable solutions already for the problem. Do the work to solve it!

Each subtask, one by one. No distractions during work focus sessions.

I use great tools to make the process of solving tasks as smooth/fast as possible.

Know how to effectively ask questions so as to respect other people's time and maximize chances of getting a good answer.

Often times I reach out to authors of certain libraries directly, sponsor them for their work and ask for help on my issue. GitHub sponsors are great for bringing attention to certain issues.

5. Optimize. Document. Share solution.

Once you have your first working solution that solves the thing. You can start optimizing the solution, if you actually need the optimization!

Then document everything related to it, hopefully you also documented the process of building too. Especially why certain key decisions were made in certain parts of design/solution.

And share it! Most fun part as you can then get even more feedback. Can also start sharing early to get early feedback or help with the research part of solution seeking.

--

As far as knowing how to prioritize on what to work on. Minimizing regret is always a good mental model for choosing problems to solve. Will I still be worried about this a year from now? If so, it's probably important and worth worrying about and solving. If not, let it go and move on. Better side on making decisions and reversing in light of new knowledge than falling victim to fear or risk.

Notes