DEV Community

Cover image for The Anatomy of a Problem
Akkarapon Phikulsri
Akkarapon Phikulsri

Posted on

The Anatomy of a Problem

I recently had the opportunity to attend a class called “Humanistic Architecture” by Mr.Chakrit Riddhagni. The class was about applying humanistic principles to software development.

Before I talk about what I learned, I want to share a little about my own perspective on software development.

Personally, I have a quote and a belief that I have carried with me throughout my career: software development is both a science and an art.

I see software development as something that has an artistic side, while being grounded in logic, with almost endless possibilities.

“Crafting software requires artistry, guided by imagination, grounded in logic, endlessly enduring.”

This quote has been one of my inspirations since I started working as a developer.

What I mean by this is that I have always liked thinking about software development as a kind of literature. We are not simply writing code. We are solving problems. We are developing and creating something to solve a problem that either we or our customers are facing.

Because of this, being a developer means that we naturally work with problems every day.

But… I never really thought much deeper about what a “problem” actually is.

Usually, when we work on a problem for a customer or develop software for them, we receive an issue or a scope of work and then start working on it. We know that something is a problem, so we focus on solving it.

However, we do not always stop and think about the structure of the problem.

Is this really the problem?

What is actually causing it?

And does the solution we are building really address the problem we are trying to solve?

That changed when I attended the “Humanistic Architecture” class.

One of the biggest things I took away from the class was a new perspective and a set of tools for defining what a “problem” really is.

We can look at a problem through the Anatomy of a Problem, which can be divided into three parts:

  • Current State — where we are now
  • Desired State — where we want to be
  • Gap — the difference between the current state and the desired state

The Gap is where we need to focus in order to move from the Current State toward the Desired State.

Beyond understanding the structure and components of a problem, another important thing I learned was how to find solutions that address the root cause of a problem as effectively as possible.

The class introduced ways of looking at problems through psychological models, which helped me understand that solving a problem is not always about simply fixing what we can see on the surface.

Sometimes, we need to understand the people, their behaviors, their expectations, and the reasons behind the problem before we can design a solution that truly solves it.

And I think this is a perspective that can be very valuable for software developers.

Because sometimes, the hardest part of solving a problem is not writing the code. It is understanding what the real problem is.

The Anatomy of a Problem

The first topic we learned was “The Anatomy of a Problem,” which is about understanding the structure of a problem.

A problem can be divided into three parts:

  • Current State > where we are right now
  • Gap -> the difference between where we are and where we want to be
  • Desired State -> where we want to go

Current State is the situation we are in at the moment.

Desired State is the situation or goal that we want to reach.

Gap is the space or difference between the Current State and the Desired State. It represents what needs to change in order to move from where we are now to where we want to be.

For example:

Current State: I cannot sleep.
Gap: I either do not sleep, or I try to sleep but cannot fall asleep.
Desired State: I can sleep well.

This way of thinking may look simple, but it gives us a useful framework for looking at problems.

Instead of simply saying “I cannot sleep, so I need a solution,” we can step back and ask:

Where am I now? Where do I want to be? And what is preventing me from getting there?

I think this is an interesting way to start understanding a problem before jumping directly into finding a solution.

Whenever we are not satisfied with our current state and have a place we want to reach, a gap will exist between the two.

That gap is exactly where we need to focus our effort to solve the problem, because the problem already exists.

Before learning about “The Anatomy of a Problem,” I started with an exercise based on a simple but interesting question

“What makes us, as human beings, get up and take action to solve a problem?”

From my perspective, human beings always have needs or wants that they want to fulfill in order to feel complete. When things do not go as we expect, we experience disappointment. As a result, we usually look for a method or a tool to fill that gap or solve the problem in a way that we believe is appropriate.

After learning about “The Anatomy of a Problem,” I started to understand and reflect on this idea more deeply.

“A problem is a thing or situation that we cannot handle or solve at that moment.”

Very often, when we solve one problem, new problems appear. In fact, there are often other problems hidden inside a problem.

“Every problem or solution can always create new problems.”

In other words, every problem has a solution, and every solution can bring new problems.

However, a problem may not exist if we are satisfied with our Current State. When we are satisfied with where we are, there is no Desired State that we need to reach. Therefore, there is no Gap between the two.

So, this leads me to the following understanding:

“The problem is the gap between the Current State and the Desired State.”

Top comments (0)