Saturday, March 06, 2010

Another Industry Coping with Wicked Problems

Software development is full of wicked problems:

“[A wicked problem is] a problem that is difficult or impossible to solve because of incomplete, contradictory, and changing requirements that are often difficult to recognize. Moreover, because of complex interdependencies, the effort to solve one aspect of a wicked problem may reveal or create other problems.” (http://en.wikipedia.org/wiki/Wicked_problem)

So I began to ask myself how other industries handle wicked problems. The root of the problem is uncertainty. It’s hard (impossible?) to be certain that the designs we’re generating are going to produce an elegant solution. One example I found was the healthcare industry. Here’s one coping strategy:

“If we are uncertain about the relative intrinsic merits of any [different]
treatments, then we cannot be certain about those merits in any given use
of one of them – as in treating an individual patient. So it seems irrational
and unethical to insist one way or another before completion of a suitable
trial. Thus the answer to the question, ‘What is the best treatment for the
patient?’ is: ‘The trial’. The trial is the treatment. Is this experimentation?
Yes. But all we mean by that is choice under uncertainty, plus data
collection. Does it matter that the choice is ‘random’? Logically, no. After
all, what better mechanism is there for choice under uncertainty?”

Ashcroft R. Giving medicine a fair trial. British Medical Journal 2000;320:1686.

This author’s antidote to uncertainty in medicine? Learning, trial, and experimentation.

We need to test the viability of the new ideas we come up with so we can choose the best one. If only there were only some way to apply this practice to software development!

2 comments:

Matt Casto said...

Interesting blog, but a tiny bit pretentious.

I agree up to the point where you suggest that Test Driven Development is synonymous with medical trials. TDD is about quality, not project management.

Steve Horn said...

@Matt

I agree that TDD isn't about project management.

My idea is this: Given a problem, n developers will produce n designs to solve that problem. How could you ever quantify those designs and choose the best one? So the point is...you don't choose one design. Instead conduct experiments and learn what the best possible solution is over time.