Some problems can be solved linearly, step by step, based on an initial careful analysis. They may be hard, but their difficulties are constant. Other challenges, so-called "wicked problems", are much tougher. A wicked problem loops back upon itself; just when it seems to have been grasped, it writhes and changes into something new. Wicked problems can't be understood without working through them, iterating, trying candidate solutions, and learning from failure. The key issues to be figured out are inextricably tangled together, so they can't be factored into sub-tasks and performed independently. Wicked problems are rarely solved completely --- they get wrestled with until there's no more time, or money, or patience ... or until a "good enough" resolution is found.
Most nontrivial programming tasks are wicked. So are most political and social issues, most interpersonal relationships, and most of the deep questions of life. We do the best we can, under the circumstances ... struggling against our shortcomings ... striving to recognize and concentrate on what's really important ... and, if we're lucky, accepting with good grace inevitable failures in the context of what limited success we may achieve.
Wednesday, September 08, 1999 at 06:10:41 (EDT) = Datetag19990908