December 10, 2004

Unordered Systems

At XP Day I was fortunate enough to hear Dave Snowden speak. One of his topics was the difference between ordered and unordered systems; I think the distinction is very important for software developer.

Developed software is an ordered system. It works in a completely predictive, deterministic way. It's like a factory, raw materials go in one end, flow through a predefined, repeatable process, then the end product arrives at the output. The software development team, however, is an unordered system. You cannot predict how it will behave in advance, and you cannot have a successful unordered system by treating it as if it were an ordered system (this is what I think Agile is really about).

In an ordered system the mechanism is known (or at least knowable) and explicit, so if there’s a problem you can objectively identify the problem, such as ‘a network failure means system 1 cannot communicate with system 2’. However in an unordered system, when you talk about problems, you risk ending up arguing about different perspectives. For example: 'Why did the Titanic sink?

Answer 1: They weren't looking hard enough for icebergs

Answer 2: The hull wasn't strong enough to withstand impact

Answer 3: Civilisation c1900 weren't using enough CFC deodorants, thus the ozone layer was intact, world temperatures were too low, and the icebergs hadn't melted.

Answer 3 might be silly, but objectively they're all valid peices of analysis.

Posted by timv at December 10, 2004 3:01 PM