| date: | 2005-09-23 17:58:50 |
|---|---|
| category: | War Stories and Advice |
We know something is wrong or can be improved, but we lack the will to drill into details and write a problem statement. It isn’t a lack of ability, it is purely a lack of will.
A common source of serious issues with software comes from proposing a solution without a full definition of the problem. Lacking a crisp definition of the problem, we don’t really know when the problem has been solved. The most common symptom of this is scope creep.
Since we can propose solutions, we can identify problems. It’s not an ability or skill issue. Generally, it’s a willingness issue. Often, root cause identification involves some considerable embarassment to people who put it software that didn’t work and required work-arounds, or software that had to work-around the work-arounds, compounding an already bad problem.
There are several problem-identification techniques. You might want to look at Gause and Weinberg Are Your Lights On?: How to Figure Out What the Problem Really Is [Amazon ] for a very thorough treatment.
Here is an exercise that may help formalize the problem prior to attempting to specify an incomplete, over-engineered or mis-applied solution.
I’m sure there are many similar “structured brain-storming” exercises that can be used to ferret out the problem without discussing candidate solutions too early in the process. This one seems to present the core questions in a usable order.
An alternative is to attempt to solve the problem. We learn about the problem by observing failed solutions. This has a very rational appeal, but I believe that it can’t be managed successfully. I think there are several reasons why “discovery prototyping” is doomed from the outset.
I think that a “technical” approach to discovery is fraught with peril. I would suggest almost any “non-technical” approach is better. Particularly if you keep it well separated from premature description of a solution.