When I develop software I want to help someone solve a problem. Therefore, I know that the software I develop will not be effective if I don’t understand the problem. Consequently I need to explore the problem.

I know, from experience, that the problem itself is not necessarily self-contained or isolated. More often than not, the problem to be solved is part of something larger than what is initially perceived to be the problem. I find it helpful then to approach the problem as an activity of exploration. This activity need not last for hours or days.

Approaching the comprehension of a problem as an activity of exploration, I find that the problem slowly begins to reveal itself as I discover where the problem is situated in its context. Initially I may have thought of the problem as a tree, but after a single iteration of exploration activity I now see the problem no longer as a singular tree, but as a tree embedded in a garden. I now see things about the problem which I could not see before. This activity could be thought of as an *exploration of the problem space*.

Now that I have a better understanding of the problem, I am equipped with data about the problem I need to design a solution to solve the problem. Designing a solution is my next activity after the exploration of the problem space. What good would my design activity be without first having spent time in the problem space to comprehend the problem as holistically as possible?

Just as I explore the problem space I also need to strategize, with divergent thinking, about viable, desirable and feasible design options. I cannot do this by myself though else the design options will be a product of my thinking, my capacity and my skillset. How limiting! Collaboration really helps here to make solid design options for testing against a set of criteria. This activity could be thought of as an *exploration of the solution space, *in which I endeavor to design the best possible solution to solve a problem.

In the exploration of the solution space I can use the data about the problem, revealed during the exploration of the problem space, to create purposeful designs that solve the problem. These designs may be simplistic software prototypes for the sake of obtaining quick feedback from customers.

Oftentimes I may be tempted to jump quickly to the solution without first exploring the problem. This knee-jerk reaction has always yielded mediocre outcomes that missed the mark. Now that I understand that every problem can be approached as two activities: *problem space exploration* and *solution space exploration* I feel my software-development activities could yield more promising results for customers.

## Comments