New: 100% Organically Farmed Software

The book The Mythical Man-Month pointed out the organic nature of software development in 1975

...The building metaphor has outlived its usefulness... If, as I believe, the conceptual structures we construct today are too complicated to be accurately specified in advance, and too complex to be built faultlessly, then we must take a radically different approach.

Let us turn to nature and study complexity in living things, instead of just the dead works of man. Here we find constructs whose complexities thrill us with awe. The brain alone is intricate beyond mapping, powerful beyond imagination, rich in diversity, self-protecting, and self-renewing. The secret is that it is grown, not built. So it must be with our software systems.

—Fred Brooks

The book The Pragmatic Programmer nicely compares software development to gardening in its section on Refactoring (in 1999, so maybe it's taking 25 years for the idea to take hold):

...Rather than construction, software is more like gardening—it is more organic than concrete. You plant many things in a garden according to an initial plan and conditions. Some thrive, others are destined to end up as compost. You may move plantings relative to each other to take advantage of the interplay of light and shadow, wind and rain. Overgrown plants get split or pruned, and colors that clash may get moved to more aesthetically pleasing locations. You pull weeds, and you fertilize plantings that are in need of some extra help. You constantly monitor the health of the garden, and make adjustments (to the soil, the plants, the layout) as needed.

—Andrew Hunt and David Thomas

Back when I programmed on an Apple ][, programming didn't feel organic. It felt solid. When my program ran, nothing else ran on that machine; my code was totally in control. There was no OS upgrade coming along next month to plan for. My programming language was in ROM, wouldn't change out from under me. Those programs I wrote were solid... solid and brittle.

Nowadays, we write software that bends instead of breaks. When things change, we bend our software to fit. But we don't always get it right. It fatigues. So we talk about an organic model, software that is meant to grow. We try to create systems that live. Occasionally, we get it right. Often it feels like we don't achieve living, flexible software—just something solid with a couple of hinges in it. We're still figuring this stuff out.

Labels: ,

Posted 2010-01-24