Professional Documents
Culture Documents
net/publication/276087136
CITATIONS READS
37 26,717
2 authors, including:
A. Terry Bahill
The University of Arizona
217 PUBLICATIONS 5,941 CITATIONS
SEE PROFILE
Some of the authors of this publication are also working on these related projects:
All content following this page was uploaded by A. Terry Bahill on 23 June 2015.
Abstract: This article presents dozens of fundamental • Identify things that are likely to change
principles of good system design that should help make a • Write extension points
product better. Not surprisingly, many of these same principles • Group data and behavior
will help make a product reusable in a new system and will • Use data hiding
help reduce redesign costs when requirements change. These • Write a glossary of relevant terms
principles apply to simple systems and complex systems. • Envelope requirements
These principles come from hardware, software, system, and • Create design margins
test design, but they are general and many can be applied in a • Design for testability
large variety of fields (even non-engineering fields). • Design for evolvability
• Build in preparation for buying
Keywords: System Design, Reuse, Requirements, Systems of • Create a new design process
Complex Systems • Change the behavior of people
D
esign is a creative activity—consequently, there is no Use models to design systems: System design can be
process that will guarantee good designs, but there are requirements based, function based, or model based. Model-
some principles that will increase the probability of based system engineering and design has an advantage of
getting a good design. This article presents dozens of fundamental executable models that improve efficiency and rigor. One of the
principles of good system design that should help make a product earliest developments of this technique was Wymore’s (1993)
better. Using these principles will also make a product more book entitled Model-based System Engineering, although the
reusable for future systems and it will help reduce redesign costs phrase “model-based system design” was in the title and topics
when requirements change. Of course, the customer may mandate of Rosenblit’s (1985) PhD dissertation. Model-based systems
or exclude the use of some or all of these principles. Some of these engineering depends on having and using well-structured models
principles are as follows: that are appropriate for the given problem domain (Bahill and
• Use models to design systems Szidarovszky, 2008). Bahill’s models start with the use cases.
• Use hierarchical, top-down design Use hierarchical, top-down design: Early on, translate the
• Work on high-risk items first customer’s needs into goals, capabilities, and functions; these
• Prioritize provide guidance for all future development. Work on high-
• Control the level of interacting entities level functions first because, although high-level functions
• Design the interfaces are less likely to change, when they do change, they force
• Produce satisficing designs changes in many other functions. Decompose systems into
• Do not optimize early subsystems, subsystems into sub-subsystems, etc. (Chapman
• Maintain an updated model of the system and Bahill, 1992). In software, this decomposition is called
• Develop stable intermediates layered architecture (Evans, 2004). Implementation is simpler
• Use evolutionary development if the dependencies and action initiations between these layers
• Understand your enterprise are unidirectional.
• State what, not how Work on high-risk items first: Work on high-risk items
• List functional requirements in the use cases first in order to reduce risk; in addition, high-risk items are more
• Allocate each function to only one component likely to change, thereby producing changes in other entities,
• Do not allow undocumented functions so working the high-risk items first will reduce the rework due
• Provide observable states to changing requirements. Furthermore, if it was impossible to
• Rapid prototyping satisfy the high-risk capabilities and the project was cancelled,
• Develop iteratively and test immediately you will have saved the money that otherwise would have been
• Create modules squandered satisfying low-risk requirements (Jacobson, Booch,
• Create libraries of reusable objects and Rumbaugh, 1999). The original spiral model of Boehm (1988)
• Use open standards advocated risk-driven development.
Maybe system of systems design should be top-down. But presently most system of systems design
Use hierarchical, top-down design is bottom-up, because usually the constituent systems (or at least their designs) already exist.
• Operational View (OV): A description of the tasks, activities, principle of “Develop iteratively and test immediately” could
operational elements, and information exchanges required confound the principles of “Use hierarchal, top-down design”
to accomplish DoD missions and “Work on high-risk items first.” But in a careful design, the
• Systems View (SV): A description of systems and high-level or high-risk items would be decomposed into smaller
interconnections supporting DoD functions modules that could be tested immediately. Similarly, “Design for
• Technical Standards View (TV): Standards and rules testability” and “Design for evolvability” are not contradictory,
governing arrangement, interaction, and interdependence of they are orthogonal. There are no other obvious interactions
system parts or elements, whose purpose is to ensure that a between these principles.
conformant system satisfies a specified set of requirements Some of these principles are just good design principles—
• All View (AV): Information pertinent to the entire they will help with reuse, changing requirements, testability,
architecture, AV products set the scope and context of and evolvability, whereas others primarily ameliorate changing
the architecture requirements, increase reuse potential, or enhance evolvability.
Exhibit 2 shows these principles and indicates for which facets
The DoDAF, however, is not a design process. It is missing they are most applicable; however, the Xs should not be crisp—
the following design artifacts: customer requirements, derived they should be fuzzy. The right column indicates principles that
requirements, system test, system validation, concept exploration, are likely to impact the short-term cost of the system, but, of
tradeoff matrix, sensitivity analysis, schedule, budget, technical course, the tradeoff between short-term cost and customer value
analysis, and risk management. Entities like these would have is a complex issue (Browning, 2003).
to be included in the design of the constituent systems, but it is The principles of good design that were presented in this
possible that they could be omitted (as suggested by DoDAF) for article were specific, concrete, low-level suggestions for design.
the design of a system of systems. We did not cover basic system engineering principles such as
stating the problem, discovering requirements, doing tradeoff
Design for Reuse studies (Pugh, 1991; Daniels, Werner, and Bahill, 2001; Smith,
We can design new systems better, faster, and cheaper if we correctly Son, Piattelli-Palmarini, and Bahill, 2007), configuration
reuse previously developed products. (Of course, this only applies management, sensitivity analyses (Smith, Szidarovszky, Karnavas
if you do the job correctly; i.e., you should not reuse computer and Bahill, 2008), etc. Of course, these other activities must
code, you should reuse software models.) These products might be done, but they are covered adequately in other publications
have been developed in-house or they might be commercial off (INCOSE, 2004). Examples of failures that result from violating
the shelf. There are several facets to design for reuse: (1) refining these system design principles are also given elsewhere (Bahill
customer needs and negotiating system requirements with the and Henderson, 2005).
customer, (2) selecting and evaluating potential reuse products, Most engineers and managers are probably familiar with the
(3) technology planning and insertion, (4) product lifecycle principles of good design that were presented in this article. We
planning, and (5) designing products so they are more reusable. think that presenting them all in one place can serve as a checklist,
This article concerns the 5th topic—design for reuse. Designing to make sure they are all considered in designing systems.
systems with increased probability of reuse is not free – it requires
extra effort and cost. This produces another facet of the design for Acknowledgment
reuse process—convincing your boss or customer that it is worth This article was supported by AFOSR/MURI F49620-03-1-
the extra cost to design a system for increased probability of reuse. 0377. We thank Bob Sklar and Greg Shelton for comments on
This facet is beyond the scope of this article. design margins.
Summary References
This article has presented dozens of principles of good design. Bahill, A. Terry, Rick Botta, and Jesse Daniels, “The Zachman
Of course they would not all be applicable on all programs. Framework Populated with Baseball Models,” Journal of
Surprisingly, none contradict each other. If care is not taken, the Enterprise Architecture, 2:4 (November 2006), pp. 50-68.
The uppercase X means the principle has a great affect, the lowercase x means the principle has a large affect, the dollar sign means using the principle
will cost money.
Changing
Principle Reuse Potential Evolvability Good Design Impact Cost?
Requirements
Bahill, A. Terry, and Steven J. Henderson, “Requirements published on paper 37:5 (October 2008), pp. 553-571.
Development, Verification, and Validation Exhibited in Boehm, Barry W., “A Spiral Model of Software Development and
Famous Failures,” Systems Engineering, 8:1 (2005), pp. 1-14. Enhancement,” Computer, 21:5 (1988), pp. 61-72.
Bahill, A. Terry, and Ferenc Szidarovszky, “Comparison of Botta, Rick, and A. Terry Bahill, “A Prioritization Process,”
Dynamic System Modeling Methods,” Systems Engineering Engineering Management Journal, 19:4 (2007), pp. 20-27.
DOI 10.1002/sys20118, published online (October 3, 2008). Botta, Rick, Zach Bahill, and A. Terry Bahill, “When are
Bahill, A. Terry, Ferenc Szidarovszky, Rick Botta, and Eric Smith, Observable States Necessary?” Systems Engineering, 9:3
“Valid models require defined levels,” International Journal (2006), pp. 228-240.
of General Systems, published electronically, iFirst 37: Botta, Rick, William Wuersch, and A. Terry Bahill, “The Need for
(March 2008), pp. 1-20, DOI: 10.1080/03081070701395807, Observable States Affects the Make-Reuse-Buy Decision,”
Appendix A One system with two subsystems and two functions, OK design:
Principles of Function Design A claw hammer pounds nails or pulls nails. A pencil makes lines
Functional decomposition is a popular system design technique. or erases lines. A teapot heats water and whistles. A clock radio
When using it, you identify the top-level function that the system wakes up people or plays music. A heating, ventilation, and air
must perform. Decompose that function into subfunctions. conditioning system heats a house or air-conditions a house.
Then decompose those subfunctions into sub-subfunctions. Computers do many things at the same time.
Continue this decomposition until you get functions that can One object with two functions, OK design: A drawbridge
be implemented with commercial off-the shelf products. When allows cars to move over the river or boats to move under the
performing this design task, creating the functions and allocating bridge. Female breasts attract males and feed offspring resulting
them to components should not be arbitrary or capricious. The from that. Mammal sex organs are used for reproduction and
functions should be designed and there are principles that can waste elimination. An air conditioner cools air and removes
help you design good functions. humidity from the air. A dog can guard the house or be a pet.
Allocate Each Function to Only One Component. Each One object with two functions, marginal design: Sports
function should be allocated to only one physical component, stadiums have been built to present both football and baseball
and, therefore, each function will have only one owner. If there games. Such stadiums are not popular now—they must not have
were two owners for a function, one might change his or her been very successful. A combination washer and dryer washes
requirements, and this would change the system for the other. In clothes and dries clothes (these are not currently popular). An
the object-oriented world, this would be phrased as, “Do not allow item with functions of create and operate the same object is a bad
multiple actors to have the same role” (Övergaard and Palmkvist, design (Evans, 2004). If you buy a new car and it needs service,
2005). If two actors are trying to assume the same role, generalize you do not take it back to the factory that manufactured it—you
them into one abstract actor. My wife notes that in a theater take it to a separate service center.
play it would also be mistake to allow two actors to assume the One function with two purposes, OK design: An oven cooks
same role. For some systems and customers, this principle may food and kills bacteria. It has one function (heat food) but two
be difficult to implement. Let us now look at some examples of purposes. A dishwasher cleans dishes and kills bacteria.
following and violating this principle. Make Functions Independent. Functions should not depend
One function allocated to two components, bad design: upon each other. If they are independent and one is changed, then
Violation of this principle is captured in the American proverb, the other one will not have to be changed. Normally I let my clock
“Too many cooks spoil the soup.” In the 20th century, the function radio wake me up with music. But if I am in a strange town, I use
of tracking terrorists was allocated to the FBI, the CIA, the the buzzer, just in case the radio station is off the air or the radio
NSA, the Pentagon, etc. Until 9/11/01, the results were mixed. is mistuned when I want to get up. Allowing the wakeup function
In a baseball game, if the runner on first base is likely to steal to depend on the play music function is dangerous, and I avoid it
second base, then the function of covering second is allocated by when the wakeup function is critical. Fricke and Schultz (2005)
agreement to the second baseman or the short stop, but never to present a technique to help keep functions independent,
both. This agreement prevents bad design. This principle may be A bad design: On most company telephones, dialing 9 gets
the reason back-seat drivers are so distained. an outside line, and then dialing 1 starts a long distance dial. At
One function allocated to two components—exceptions that this point if the 1 button is inadvertently hit again, then the caller
proof the rule: One valid reason for assigning a function to more is connected to 911, the emergency line. If you hang up quickly,
than one component would be that the function is performed by they send a policeman to save you.
one component in a certain mode and by another component in Limit the side effects: Functions should do what their names
another mode. For example, to decelerate an airplane, when the imply and nothing else. For example, in an automobile, the
wheels first hit the runway, reverse the thrusters on the engines. ignition switch turns off the ignition system, but it also has a side
Later, when preparing to move from the runway to the taxiway, apply effect of disconnecting electric power to the radio. Renaming
the brakes on the wheels. Another reason for assigning a function this switch the electric power switch would solve this side
to more than one component would be deliberate redundancy to effects problem.
enhance reliability—allowing one portion of the system to take on These principles apply to object-oriented design as well. In use
a function if another portion fails to do so, as on the Space Shuttles, cases, the functions are described in the Functional Requirements
which have five flight control computers. Another reason is truly part of the Specific Requirements section (Daniels and Bahill,
distributed functionality: you can decelerate a car with either front 2004). In use case diagrams, functions are associated with the
wheels or back wheels. For decelerating an airplane, the reverse roles. In activity diagrams, functions are the activities. In state
thrusters on the engines and the air brakes on the wings might be machine diagrams, functions are the actions and activities. In
for redundancy or distributed functionality. class diagrams, functions are the operations listed in the third part
Maximum
Module Target Weight Reserve
Allowable Weight
A 15 20 5
B 20 30 10
C 40 50 10