Real Design Issues: Diversification and Convergence
Lewis Carroll captured this dialog between Alice and the Cheshire cat in 1865:
"Would you tell me, please, which way I ought to go from here?"
"That depends a good deal on where you want to get to," said the Cat.
"I don’t much care where...," said Alice.
"Then it doesn’t matter which way you go," replied the Cat.
"...so long as I get SOMEWHERE," Alice added as an explanation.
"Oh, you’re sure to do that," said the Cat, "if you only walk long enough."
In many software projects, even those that appropriately deal with some key design issues such as concurrency, error handling, and data persistence, there is often an important design phase opportunity that is missed. If design is viewed as a problem-solving activity, it is best to choose a solution from a number of possible alternatives by applying the concepts of diversification and convergence.
In software, an approach is often selected after the project scope is specified, and we quickly move directly to the implementation phase. We are coding, so we’re finally being productive, right?
As Glenford Myers noted almost 30 years ago, "We try to solve the problem by rushing through the design process so that enough time will be left at the end of the project to uncover errors that were made because we rushed through the design process."