One particular topic I haven’t seen addressed adequately in software design was brought home to me during my enforced design meditations at freeway bridge construction sites. Upgrading the design of a bridge is a story. First, traffic is diverted to one side, and then the other bridge is demolished and replaced. Traffic is diverted to the new bridge, the other side is demolished and replaced, and traffic is restored. This is the simplest scenario. Some changes require much more elaborate sequences of changes to accomplish.
The engineers clearly spend substantial time and effort planning the succession of changes required to get to the design. It’s not enough to imagine what kind of bridge you want to end up with, you also need to be able to get from here to there. Some potentially acceptable designs need to be discarded not because of any technical design fault, but simply because they violate the need for succession. You can’t get there from here. Design needs to be informed as much by the disruption of the change process as it is by the value of the end result.