Skip to main content

Design Principles

  • Chapter
  • 1854 Accesses

Abstract

One way to look at software problems is with a model that divides the problems into two different layers:

  • “Wicked” problems fall in the upper layer. These are problems that typically come from domains outside of computer science (e.g. biology, business, meteorology, sociology, political science, etc.). These types of problems tend to be open-ended, ill-defined, and large in the sense that they require much work. For example, pretty much any kind of a web commerce application is a wicked problem. Horst W. J. Rittel and Melvin M. Webber, in a 1973 paper on social policy,1 gave a definition for and a set of characteristics used to recognize a wicked problem that we’ll look at later in this chapter.

  • “Tame” problems fall in the lower layer. These problems tend to cut across other problem domains; they tend to be more well defined and small. Sorting and searching are great examples of tame problems. Small and well-defined don’t mean “easy” however. Tame problems can be very complicated and difficult to solve. It’s just that they are clearly defined and you know when you have a solution. These are the kinds of problems that provide computer scientists with foundations in terms of data structures and algorithms for the wicked problems we solve from other problem domains.

There are two ways of constructing a software design. One way is to make it so simple that there are obviously no deficiencies. And the other way is to make it so complicated that there are no obvious deficiencies. — C. A. R. Hoare

This is a preview of subscription content, log in via an institution.

Buying options

Chapter
USD   29.95
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
eBook
USD   39.99
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever

Tax calculation will be finalised at checkout

Purchases are for personal use only

Learn about institutional subscriptions

Preview

Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.

References

  • Conklin, J. Dialogue Mapping: Building Shared Understanding of Wicked Problems. (New York, NY: John Wiley & Sons, 2005.)

    Google Scholar 

  • Conklin, J. Wicked Problems and Social Complexity. Retrieved from http://cognexus.org/wpf/wickedproblems.pdf on 8 September 2009. Paper last updated October, 2008.

    Google Scholar 

  • Curtis, B., R. Guindon, et al. Empirical Studies of the Design Process: Papers for the Second Workshop on Empirical Studies of Programmers. Austin, TX, MCC. (1987)

    Google Scholar 

  • Davis, A. M. 201 Principles of Software Development. (New York, NY: McGraw-Hill, 1995).

    Google Scholar 

  • DeGrace, P. and L. H. Stahl Wicked Problems, Righteous Solutions: A Catalogue of Modern Software Engineering Paradigms. (Englewood Cliffs, NJ: Yourdon Press, 1990.)

    Google Scholar 

  • Dijkstra, E. “The Humble Programmer.” CACM 15(10): 859–866. (1972)

    Article  Google Scholar 

  • Fairley, R. E. Software Engineering Concepts. (New York, NY: McGraw-Hill, 1985.)

    Google Scholar 

  • Glass, R. L. Software Creativity 2.0. Atlanta, GA, developer.*. (2006)

    Google Scholar 

  • Lammers, S. Programmers At Work. (Redmond, WA: Microsoft Press, 1986.)

    Google Scholar 

  • McConnell, S. Code Complete 2. (Redmond, WA: Microsoft Press, 2004.)

    Google Scholar 

  • Parnas, D. “On the Criteria to be Used in Decomposing Systems into Modules.” CACM 15(12): 1053–1058. (1972)

    Article  Google Scholar 

  • Plauger, P. J. Programming on Purpose: Essays on Software Design. Englewood Cliffs, NJ: PTR Prentice Hall, (1993.)

    Google Scholar 

  • Rittel, H. W. J. and M. M. Webber. “Dilemmas in a General Theory of Planning.” Policy Sciences 4(2): 155–169. (1973)

    Article  Google Scholar 

Download references

Authors

Rights and permissions

Reprints and permissions

Copyright information

© 2011 John Dooley

About this chapter

Cite this chapter

Dooley, J. (2011). Design Principles. In: Software Development and Professional Practice. Apress, Berkeley, CA. https://doi.org/10.1007/978-1-4302-3802-7_6

Download citation

Publish with us

Policies and ethics