I’ve been thinking about systems in the abstract lately. One of the tutorials I attended at QCon was Systems Thinking and Methods by Michael Nygard. He applied systems theory to the real world, so I’ve been trying to apply the real world (and the systems I know) to systems theory.
Gall’s Law: “A complex system that works is invariably found to have evolved from a simple system that worked. The inverse proposition also appears to be true: a complex system designed from scratch never works and cannot be made to work. You have to start over, beginning with a simple system.”
This is the heart of the strength of agile over waterfall. People fluff it up with all sorts of language and ideas, but we’re just saying that it’s easier to improve a mousetrap repeatedly than to invent force fields for the sake of rodent control.
Recently Fog Creek had quite the buzz about it because we killed Wasabi. Hacker News was aglow with comments second guessing the sanity of the developers who created the hybrid Visual Basic language. Ultimately it was a series of small decisions, that are all far from insane, that led to the boondoggle of a domain specific language. I don’t begrudge them their decisions.
There are some very complex systems in our world like the phone network, the oil industry, and the US government. But if you trace them back to their roots then you’ll find that they all followed the pattern of 1) find a small problem, 2) solve it, 3) repeat. Next time you’re trying to build up a new system from scratch, learn from history and break your problem down until you can do the core of it in a weekend.