A qualitative empirical study of software design decisions made by designers and small teams cognizant of agile practices or principles
This research presents a qualitative empirical study of software design decision making. Decisions are ubiquitous in software design and there are strong calls to examine decision making. However few empirical studies exist that describe how decisions are made in software design environments. This research addresses this limitation. A qualitative empirical investigation is performed consisting of 59 design decision case studies. The investigation employs interviewing, on-looker observations and participatory observations in its data collection. The investigation employs content analysis, explanation building and the development of case study summaries in its data analysis. These techniques are applied across three multi-case studies. Two main conclusions, a set of eight smaller results, and five design decision models are the result. The first conclusion is that software designers appropriate a solution to a design decision approximately as often as they strive for an optimal or boundedly optimal design solution. That is, they apply a solution to a design problem that “just fits” or is “suitable” approximately as often as they look for a good design solution in a pool of potential design solutions. The second conclusion is that the strength and openness of a designer's mental model affects the extent to which alternatives are considered in a design decision. The set of eight smaller results address the effect of time pressure, knowledge acquisition, and agile environments on design decision making, and provide a comparison of existing decision making theories to an empirically-based description of design decision making. The decision models summarize Appropriating, Reasoning and Explaining as 3 types of decision making scenarios addressing small, medium and large decisions. The activities involved in these decision making scenarios are Rationalizing, Implementing, Discussing, Searching, Comparing and Considering. This research impacts the software engineering community in four ways. First it addresses the debate between design as art and design as science. Second it addresses the gap between a top-down or a bottom up approach to studying design decision making. Third, it makes recommendations for decision support tools and software metrics that wish to support the inherent way that software designers work. Fourth, it makes a tangible contribution to qualitative inquiry in software engineering.