The problem with problems

As a software engineer or developer, our main job is to solve problems. The solution may come in many forms like automation or abstraction but ultimately we are writing code, designing architectures and engineering solutions to solve problems.

Either because of our formal training or the engineering culture, we put too much emphasis on how we solve a problem than the problem itself. We are all on this quest to seek and ultimately build the holy grail solution. The solution that would end all problems.

Naturally, it is more exciting to talk about the solution of the problem rather than the problem itself. After all, we usually have more control over the solution compared to the problem. But in order to come up with a solution that works well, it is crucial for us to first understand what exactly we are trying to solve.

The first step towards solving a problem is not applying, designing or building solutions but to gather as much information you can about the problem. Only after you have a clear understanding of what you are trying to solve can you come up with a solution that works well.

The problem with problems is not the difficulty in solving them but rather the lack of understanding and clarity on what is it that we are trying to solve. If you can’t seem to wrap your head around the problem space, try asking some of these questions.

  1. Who are the stakeholders?
  2. Who is affected by this problem directly?
  3. What is the temporary measure for now if there’s any?
  4. How critical is the problem?
  5. How soon is the solution required?
  6. What are the edge cases of the problem?
  7. Is there any hidden requirements for the solution?
  8. If yes, can we drop some of them?
  9. If no, who can we talk to about those requirements?
  10. Is there a manual solution for this? 
  11. If yes, who’s doing it now?
  12. If no one is, should someone be doing it?

There’s a saying that the best line of code is the line not written. In this case, the best solution is the one not built. If you can render the problem obsolete simply by understanding it, you basically solved it without having to build anything. That is the real holy grail solution.