# On Identifying Problems

## A Guide to Generating Solutions

As a colleague of mine famously once said,

“This will be easy the second time!”

Not every problem can be as easy as solving something for the second time, but there are many techniques which can help to generate effective solutions.

When encountering a problem, I use the following cycle:

- Understand the Problem
- Identify the Pain Points
- Theorize a Solution
- Evaluate the Solution

# Understand the Problem

The first step to generating any solution is to understand the problem.

At a glance, this is not monumental advice. However, having a strong understanding of the problem is essential to crafting effective solutions. In addition to asking *What’s wrong*, compose questions designed to investigate specific pieces of the problem.

- Does a solution exist today?
- Where does the current solution fall short?
- In a perfect world, what is the ideal solution?

Questions like the above aim to obtain uncover additional details about the problem, painting a more complete picture of scope, impact, and desired resolution.

The Five Ws can also be useful for inspiration when when crafting questions to explore a problem. Considering the *who*, *what*, *where*, *when*, and *why* can provoke thoughts about the teams, systems, and timelines involved when proposing a solution.

My preferred method for uncovering additional information about a problem is what I’ve deemed as identifying the pain points.

# Identify the Pain Points

Problems can often be generalized, hiding the true nature of an issue. When this occurs, working solely off a problem doesn’t always provide the best solution. Pain points understand the *why *of a problem and divulge the root cause.

Consider the following:

**Problem**: I’m hungry**Scenario**: A table of snacks containing trail mix and granola bars

Just looking at the problem, an obvious solution is to eat a snack from the table. However, introducing a paint point:

**Pain Point**: I have a nut allergy

This is a rudimentary example, but helps to visualize how pain points explore the *why* of a problem. Without discovering the pain point, a sub-par solution likely would have been recommended.

## Another Pain Point Example

Although food is a great subject matter for examples, it doesn’t always fully relate to programming concerns. Let’s explore another problem:

**Problem**: This interface sucks**Scenario**: Client portal for accessing account details

The generalized solution to this problem: Update the interface. However, without answering the question *Why does this interface suck*? the root of the problem is not uncovered.

**Pain Point**: The avatar upload only accepts *.jpg* files so I can’t make *myAnimatedStoicPose.gif *my profile picture

# Theorize a Solution

With a better understanding of the problem thanks to pain points, it’s time to craft a solution. There’s no golden rule for this process, but ensure the requirements outlined from the discovery process are included.

If the size of your solution is daunting, look for opportunities to break the initial problem into pieces, handling smaller portions at a time. Also, don’t be afraid to lean on previous solutions while solving new problems. To reference my colleague’s famous quote again,

“This will be easy the second time!”

Regardless of the quality of an existing solution, there are always lessons to be learned. If part of an existing solution is working well, include the successful functionality in the next iteration. If a solution is falling short, analyze the failures and correct them.

# Evaluate the Solution

Once a solution has been theorized, consider the high-level of what has been proposed:

- Are there enough resources to create this solution?
- Is the solution scalable?
- How much training is required for implementation?
- How much overhead will be required to keep the solution active?

There are many more questions which can be analyzed, but ultimately consider these two main points.

- Was the initial problem solved in an acceptable manner?
- Are any new problems introduced with the proposed solution?

If there are any concerns with the answers to these questions, iterate! Iteration allows more opportunities to ensure the pain points were correctly understood and the theorized solution meets expectations.

# Implementing a Solution

Once defined, implement the new solution **as minimally as possible**.

I often struggle to follow my own advice on this one, but implementation regularly introduces unforeseen challenges and adjustments. Starting with a minimal solution can prove initial viability, highlight any shortcomings, and pave the way for refinement through iteration.

# Go Forth and Solve

*Enjoy posts like these? Follow me on Twitter @**andepaulj*