Thanh's Islet 🏝️

Solving Problems By Writing Out Questions and Answers

Recently, I’ve been solving more and more complex problems. From working on those, I found a “strategy”/method that worked: to lay out the information needed as a bunch of questions, then answer them. I want to share the idea because I think it’s very useful in these ways:

The intended audience of this post is firstly myself in the past. Being a new software engineer, I can recall that when I got started with professional programming, coding itself was not hard, but mapping the code to the requirements and making it fit with what existed was tough. I couldn’t keep all the details in my mind, and explaining it to my boss then wasn’t easy. I wished someone would show me how to make things clearer. Now, I’m the one fulfilling the wish.

Other potential audience includes both newbie software engineers and experienced software ones. It’s obvious how newbies would benefit from the method I’m about to show. For experienced ones, I just feel like they’d have something similar to decompose tough problems, and we would benefit from exchanging ideas.

Now, the question is on how. The answer looks simple: write out the questions, then work on the answers, then actually do whatever’s left. Simple is not easy, however 2. The method itself is straightforward, but it’s not painless. The questions and answers are there, in plain sight, but to raise the right questions is hard sometimes, and finding answers is time-consuming. Even with the questions and answers laid out, the implementation details will still give us surprise detours.

To further illustrate the method, I’ll show starter questions that I apply to most problems I solve:

They morph quite naturally into the specific problems you have.

For example, with a bug fix, you would change the questions to:

For a new feature implementation task, assuming that you are clear on the desired state already, you would change the current state and the how questions to something like:

It surprisingly works for more complex and ambiguous things, like building a new software product 3. We’d change the questions to:

The best way to understand the method is to try it in your next task. Instead of jumping straight into writing code, take some time to write down a few questions about the task at hand. It might feel unnatural at first, but after a while, you’ll notice that tasks solving take less efforts, as the details you care about weren’t scattered anymore. It’s akin to

The correct way would help you swim farther (solve more complex tasks), with less energy needed (physically for swimming, mentally for programming).


  1. Most of us can only hold 4 items in our mind at once. A related article: https://www.livescience.com/2493-mind-limit-4.html ↩︎

  2. https://www.youtube.com/watch?v=SxdOUGdseq4 ↩︎

  3. I wanted to give an even more concrete “real-life” example (solving a real programming task within a real codebase), but found it hard to find one that is truly relatable to the readers and thus really explain the method, other than those somewhat vague examples I’ve shown. I still hope that it’s clear how to do it: write the questions and answers out as a way of “preparation” for the actual implementation. ↩︎