Skip to Main Content
Software system design-especially design of large, complex, distributed systems-is inherently difficult to learn and to teach. The received view in software engineering is that truly exceptional designers evolve through practice and that much of the knowledge they employ in design is implicit or tacit in their modes of work. One problem is the lack of well-established theories and axioms for software design and the challenge of showing the relationship between those axioms that do exist and the activities evident in design practice. Another is the challenge of imparting to students an appreciation for the human, organizational, and social factors that affect the design process. We believe that some of the knowledge required for competent design may be surfaced and reified through deliberate reflection on the nature of software design questions, the options identified in response to these questions, and especially the criteria that are identified and applied to selection of a design option. This paper describes an approach that uses design questions, options, and criteria (QOC) as a vehicle for software system design education.