Peter J. Denning; George Mason University; pjd@cs.gmu.edu
Pamela A. Dargan; The Mitre Corporation; dargan@pacific.mitre.org
July 24, 1992
The central claim explored here is that the standard engineering design process produces a fundamental blindness to the domains of action in which the customers of software systems live and work. The connection between measurable properties of the software and the satisfaction of those customers is, at best, tenuous. We propose a broader interpretation of design that is centered on observing the work processes of a community of customers in a domain and connecting those processes to supportive software technologies. The skill that a designer needs to have to observe work processes and begin making the connections is here called ontological mapping. This skill can be learned and is the basis of a discipline of software design.
Engineers say that design is the dominant paradigm of engineering. They intend "design" to describe a staged process that begins with a problem statement, constructs a statement of requirements and then system specifications, builds a system (or artifact), and tests the system to demonstrate that it meets the specifications within given cost constraints. Like other engineers, software engineers have used the engineering design process to construct software systems; in this case the process is called the software life cycle model, the most common varieties of which are the waterfall model and the spiral model. Unlike other engineers, software engineers cannot claim that the engineering design process has been successful. They have not developed a systematic method of producing software that is easy to use, is reliable, and is dependable: they have not developed a discipline of software production. This failure is called the "software crisis", a term that was first introduced nearly three decades ago.
Many explanations have been proposed to explain this anomaly. The most popular ones center on the notion that software is "complex" and violates the continuity laws that we are accustomed to in engineering -- changing of a single bit in a program can produce drastic changes of behavior. Software is seen as a "radical novelty" for which our customary engineering analogies are misleading. While these explanations seem to make people feel more comfortable with software that does not work well, none of them has produced a practical means of systematically producing usable, dependable software.
Three key assumptions underlie the engineering design process:
Led by European software engineers, a new school has emerged called "user-centered design" that attempts to redress the shortcomings of "specification-oriented" or "product-centered" design. User-centered design attempts to understand the domain of work in which the user is acting with computers, and to design the computers to facilitate work. Anthropologists have played significant roles in this effort. Although, as we argue below, user-centered design is a significant step in a direction that may yield better software, it is not at a stage where its practitioners can systematically produce good software more efficiently than other software engineers. User-centered design may produce good designers through a process of apprenticeship, but it is not yet positioned to produce designers through systematic education and training.
We say this because the assessment of whether software is useful, reliable, or dependable is made by people in a community who are working together toward some common goal. By focusing on the system and its specifications, the traditional engineering process loses sight of the community, their common concerns, and their work; it cannot make a grounded assessment of quality because many of the factors influencing quality are not observable in the software itself. User-centered design, at least, does not lose sight of the community, but as presently constituted is not capable of systematically making grounded connections between user concerns and the structure of software.
Why is software design different from other engineering design fields such as architecture or bridge-building? Why haven't similar statements been made about those fields? Why do those fields appear as disciplines but not software engineering? The answers to these questions are not easy. The best answer we can give is, software is so intimately connected to the work processes of a domain, that shortcomings of the design show up immediately as (costly) interruptions of work.
To answer these questions, we asked, What software already exists that is widely acclaimed as intuitive and easy-to-use? What did its designers do? We chose a number of software packages for personal computers that have won several awards in the PC magazines for ease of use:
1. Understand the linguistic structure common to all domains of action, so that we can observe a particular domain for its basic distinctions, work processes, standard practices, standards of assessment, and driving concerns.
2. Know how to connect the linguistic structure of the domain to software structures that will assist in carrying out standard actions or in making standard assessments, and coordinate the implementation of those structures.
3. Know how to measure the productivity of people in the domain so that well-grounded assessments of their effectiveness in the presence of the software can be made.
Mapping is a powerful metaphor that connects these three elements. The purpose of a map is to allow its user to successfully navigate the territory. What is needed is a method of drawing maps of the linguistic structures of a domain and showing the linkage to software structures that assist those in the domain to carry out actions in each region of the territory. Although we do not yet have the means to construct such maps, we know what we would want from them. The same map should depict the domain structure (step 1), guide the software implementation (step 2), and help assess the outcome (step 3). The domain actors use it to navigate as they work (step 1); the software producers use it to navigate as they configure software systems (step 2); and managers or others it to guide their assessments (step 3).
Terry Winograd has argued that there is a strong analogy between architecture (constructing buildings) and the needed discipline of software design. The architect is a map-maker in the sense above. The architect must come to understand the ways in which the users of the building will work; this is represented as the blueprint. The same blueprint is used by the contractor to guide the construction of the building. The same blueprint is used later to make assessments of of the building after people move in, and to reconfigure portions of it if they demand changes.
In UNDERSTANDING COMPUTERS AND COGNITION, Terry Winograd and Fernando Flores discussed the framework in which design can take place. The common elements of every domain of action are:
The designers of the prize-winning software packages and systems had all become observers of these phenomena in the particular domains in which they were designing.
To engineers it might seem strange that scientific principles can be deployed to develop systematic competence at producing customer satisfaction. In his recent book, MANAGING FOR THE FUTURE, Peter Drucker gives an example that illustrates this possibility. In the early 1900s, Frederick Taylor proposed scientific management as a means of observing and optimizing the motions that constituted work in a factory. Taylor had proposed methods of observation that worked with diverse factories. With his methods, managers were able to systematically organize manufacturing plants that produced significantly more, significantly faster, and significantly cheaper than earlier plants. At the onset of World War II, Hitler assessed (correctly) that Germany but not the US, had great expertise in optics, needed for accurate bombsights, and (incorrectly) that it would take the US five years to build the same expertise. This assessment led Hitler to declare war on the US, a deadly miscalculation: Six months later, having applied Taylor's principles to training workers how to assemble optical systems, the US was producing bombsights the equal of Germany's.
Such a discipline is possible for software production.
We do not propose this interpretation as a final answer. It is a preliminary step. We offer it as an opening for a new direction in the investigation of software design.
Les Belady: "The desire to construct programs more out of components than out of statements."
Jim Horning: "OOP is a technology that has been gaining acceptance over the last 25 years (since Simula-67). Properly used, it is another tool in our arsenal for attacking complexity. So are modularity, abstraction, specification, etc. Just because none of them solves the entire problem doesn't mean that they aren't useful."
Jean Sammet: "I have been in this field a long time. I have seen numerous 'silver bullets' which were going to be the savior of the software field. Examples include structured programming, chief programmer teams, and numerous specific languages (e.g., COBOL, PL/I, Ada). There are lots of other examples of alleged 'silver bullets' ... Obviously none of these purported 'silver bullets' served in that role, or you wouldn't need to ask the question."
Bill Wulf: "In retrospect it's hard to believe, but there was comparable hype over the use of higher level languages, elimination of the 'goto', top-down design, etc. None of them was THE silver bullet, but the best of each has become woven into the fabric of the discipline. Taking the long view, a central problem of CS/SE [Computer Science / Software Engineering] is managing complexity, and certainly abstraction is a key tool for doing that. That aspect of OOP will certainly persist, but whether in the particular form seen in C++, for example, is problematical. Based on history, one would expect not -- simply because once the issues that OOP addresses are under control another set of problems will appear to be the most important and another type of mechanism will be needed."
Peter Wegner: "Object-oriented models determine abstractions that specify the domain-dependent behavior of real-world objects by their applicable operations. They determine the behavior of objects in a domain of discourse without any commitment to the execution of a particular task. Data is structured into encapsulated chunks whose behavior is determined by the operations that can act on the data. The focus on nouns rather than verbs as the basis for describing a domain of discourse makes it fundamentally declarative in the sense that it describes properties of a modeled world rather than particular computational processes."
Fred Brooks: "My answer, set forth in detail in 'No Silver Bullet', is that the next radical step forward in programming has to involve shifting the conceptual level at which one thinks and writes programs. The fundamental hope for OOP is that it permits one to move up a level by building a set of objects for the domain of discourse of the particular application area, hence allowing one to program within the intellectual context and using the elementary concepts of the particular application area. Most of today's programming languages are general- purpose, and work a level below this."