What Makes Software Design Effective?
Total Page:16
File Type:pdf, Size:1020Kb
What makes software design effective? Antony Tang1, Aldeida Aleti Faculty of ICT, Swinburne University of Technology, John Street Hawthorn, Vic 3122, Australia. Janet Burge Computer Science and Software Engineering, Miami University 501 East High Street, Oxford, Ohio 45056, USA. Hans van Vliet Department of Computer Science, VU University Amsterdam, De Boelelaan 1081a, 1081 HV Amsterdam, The Netherlands. Abstract Software design is a complex cognitive process in which decision making plays a major role, but our understanding of how decisions are made is limited, especially with regards to reasoning with design problems and formulation of design solutions. In this research, we have observed software designers at work and have analysed how they make decisions during design. We report on how factors such as design planning, design context switching, problem-solution co-evolution and the application of reasoning techniques influence software design effectiveness. Keywords: Software design, decision making, design reasoning, design effectiveness 1. Introduction Software design is a highly complex and demanding activity. Software designers often work in a volatile environment in which both the business requirements and the technologies can change. Designers also face new problem domains where the knowledge about a design cannot be found readily. The characteristics and behaviors of the software and the hardware systems are often unknown and the complexity in user and quality requirements are high. Under such a complex environment, the ways design decisions are made can greatly influence the outcome of design. Despite such challenges, we understand little about how software designers make design decisions, and how and if they reason with their decisions. We also understand little between the decision making process and how it influences the effectiveness of the design process. The University of California, Irvine, prepared an experiment in which software designers were given a set of requirements to design a traffic simulator. Their design activities were 1 Corresponding author – Email: [email protected]; Tel: +61 3 92145469; Fax: +61 3 98190823 What Makes Software Design Effective-V1.4.Doc Pg 1 video recorded and transcribed2. This gave us the opportunity to study and compare design reasoning and decision making by professional designers working on the same problem. The primary goal of our study is to investigate software design from a decision making perspective. In particular, we want to understand software design decision making in terms of how software designers use reasoning techniques when making decisions. If different reasoning and decision making approaches are used, would they influence software design effectiveness? In this study, we analyse designer activities from three perspectives : • Design planning. Understand the ways software designers plan and conduct a design session and how they influence design effectiveness. • Design problem-solution co-evolution. Understand the ways designers arrange their design activities during the exploration of the problem space and the solution space. For instance, we want to understand if designers identify design problems before formulating solutions; and what would be the implications on design effectiveness. • Design reasoning. Understand the ways designers reason with their design decisions. For instance, would designers be more effective if they create more design options, or if they are explicit about why they make their design choices. We postulate that these perspectives in combination influence the effectiveness of design activities. Design effectiveness is defined in terms of requirement coverage and design time utilization. That is, given a certain amount of design time, how can one team address more requirements? Does one team solve a design problem more quickly than another team because of their design decision making activities? In this study, we carry out protocol encodings of the transcripts. We label each part of the designer conversations to identify the decision making and reasoning activities that went on during the design. The encoded protocols are analysed to create visual decision maps. We evaluate the results to investigate the factors that influence the effectiveness of software design. We have found that the ways decisions are made impact on the effective use of design time and consequently the derived solutions. 2. Prior works in design decision making and reasoning 2.1. Design planning Given a set of software requirements, designers must look at how to structure or plan a design approach. Zannier et al. has found that designers use both rational and naturalistic decision making tactics (Zannier et al., 2007). Designers make more use of a rational approach when the design problem is well structured, and inversely designers use a naturalistic approach when the problem is not well structured. Goel and Pirolli reported that on average 24% of statements made by the architects are devoted to problem structuring and this activity occurs mostly at the beginning of the design task (Goel and 2 The results described in this paper are based upon the videos and the transcripts initially distributed for the 2010 international workshop “Studying Professional Software Design”, as partially supported by NSF grant CCF-0845840. http://www.ics.uci.edu/design-workshop. What Makes Software Design Effective-V1.4.Doc Pg 2 Pirolli, 1992). Christiaans reported that “the more time a subject spent in defining and understanding the problem, and consequently using their own frame of reference in forming conceptual structures, the better able he/she was to achieve a creative result.” (Dorst and Cross, 2001). These studies show that design structuring or planning is an important aspect of design. 2.2. Design reasoning Designers are mostly not cognisant of the process of design decision making. Despite lacking the knowledge about how design decisions are made, which is fundamental to explaining the cognitive process of design, software practitioners and software engineering researchers continue to invent development processes, modeling techniques and first principles to create software products. In real-life, it seems that most of the software designers make design decisions based on personal preferences and habits, applying some forms of reasoning and ending up with varying design productivity and quality. This phenomenon can perhaps be explained by the way humans think. Researchers in psychology suggest that there are two distinct cognitive systems underlying reasoning: System 1 comprises a set of autonomous subsystems that react to situations automatically, they enable us to make quicker decisions with a lesser load on our cognitive reasoning. System 1 thinking can introduce belief-biased decisions based on intuitions from past experiences; these decisions require little reflection. System 2 is a logical system that employs abstract reasoning and hypothetical thinking, such a system requires longer decision time and it requires searching through memories. System 2 permits hypothetical and deductive thinking (Evans, 2003, Evans, 1984). Under this dual process theory, designers are said to use both systems. It seems that, however, designers rely heavily on prior beliefs and intuition rather than logical reasoning, creating non- rational decisions. Furthermore, the comprehension of an issue also dictates how people make decisions and rational choices (Tversky and Kahneman, 1986). The comprehension of design issues depends on, at least partly, how designers frame or structure the design problems. If the way we think can influence the way we design and eventually the end results of the design, then it is beneficial to investigate how software designers make design decisions. Rittel and Webber (Rittel and Webber, 1973) view design as a process of negotiation and deliberation. They suggest that design is a “wicked problem” in which it does not have a well-defined set of potential solutions. Even though the act of design is a logical process, it is subject to how a designer handles this wicked problem. Goldschmidt and Weil describe design reasoning as the relationship between contents and structure (Goldschmidt and Weil, 1998). They suggest that the process of reasoning as represented by design moves is “double speared” where one direction is to move forward with new design, another direction is to look backwards for consistency. As software design experience can be application domain dependent, it is different from other engineering design disciplines where the context of the domain is relatively What Makes Software Design Effective-V1.4.Doc Pg 3 constant. For instance, the issues faced by software designers working in the scientific domain are quite different to those working in the transactional financial system domain, so a software designer may use different decision making processes if s/he is faced with unfamiliar domains and technologies. Cross suggests (Cross, 2004) that expert designers appear not to generate a wide range of alternatives. We have found in an earlier study that experienced software designers intuitively rule out unviable design alternatives whereas inexperienced software designers can benefit from explicitly considering design options (Tang et al., 2008). 2.3. Design problem-solution co-evolution Although many have researched software engineering design, no studies address the cognitive aspects of the software designers that we are aware of. The studies that are