's recent post brought an interesting thought to mind.
What if we think of software like a forest. In a complex software system, there's lots of things going on. There's a basic platform (the landscape), but all sorts of different things grow (I just spelled that grough... interesting) from it, from large trees (major modules) to small flowers (interesting add-ons). Many different animals (users?) get different things they need from the forest.
Smokey the Bear aside, periodic fire is a healthy process in the life of a forest. Without periodic fires, the trees grow thick, the brush grows dense, and when lightning strikes, it's a serious problem. Similarly, complex software tends to grow over time. Hacks get added to work around kludges, new code must contend with old code (small trees must grow around the large ones). Old systems are difficult to adapt to new goals... I'm not quite sure how this fits in with forestry.
A lot of the time, a forest grows a few new trees at a time. But when a fire starts, it's a nightmare to manage. In recent years, much software development has focused on agile development. Agile development is like controlled burns. Instead of doing everything possible to avoid a forest fire, and then calling a state of emergency when one sparks, agile development preaches controlled burns. By declaring that all code could burn and be replaced by new and better-adapted code, agile development takes forest fires (which are called "refactoring") as an opportunity for growth rather than a crisis of death.
Originally, my company's goal was to produce "progress without breakage" products. The legacy table structure would remain the same, the new application would be interoperable with the old, and the main selling points would be that (1) it was in Java and (2) it wasn't 16-bit. After some time attempting that plan, as well as building a strong framework, we realized that the progress without breakage wouldn't allow for any significant progress. We didn't exactly start a forest fire (though there are some lingering burning arguments between the old and new code guardians). Instead, we planted another forest and came up with a way to move flowers and trees from their old home to their new home in an object-oriented platform-independent forest.
This post proudly written by the grandson of a graduate of the University of Idaho's Forestry Department.