Think of the design process as involving first the generation of alternatives and then the testing of these alternatives against a whole array of requirements and restraints.