Site Archive (Complete)
Architecture Blog: The 7 Deadly Sins of Design
Architecture & Design
PATTERN LANGUAGE

Modeling, Managing, Making it Right.

by Jonathan Erickson
IF YOU BUILD IT

... Will they Come?

by Arnon Rotem-Gal-Oz
May 22, 2006

The 7 Deadly Sins of Design

Having just finished describing the 8 fallacies of distributed computing (which, by the way, you can get in a single PDF document), I thought I'd give you another list--the 7 Deadly Sins of Software Design.

(The first four can be found in Robert C. Martin's paper Principles and Patterns*)

  1. Rigidity. Make it hard to change, especially if changes might result in ripple effects or when you don't know what will happen when you make changes.
  2. Fragility. Make it easy to break. Whenever you change something, something breaks.
  3. Immobility. Make it hard to reuse. When something is coupled to everything it uses. When you try to take a piece of code (class etc.) it takes all of its dependencies with it.
  4. Viscosity. Make it hard to do the right thing. There are usually several ways to work with a design. Viscosity happens when it is hard to work with the design the way the designer intended to. The results are tricks and workarounds that, many times, have unexpected outcomes (esp. if the design is also fragile).
  5. Needless Complexity. Over design. When you overdo it; e.g. the "Swiss-Army knife" antipattern. A class that tries to anticipate every possible need. Another example is applying too many patterns to a simple problem etc.
  6. Needless Repetition. The same code is scattered about which makes it error prone.

And in closing the list, the 7th Deadly Sin of Software Design is (the obvious) "Not doing any".



* While I don't intend to expand on the sins I will be writing a few posts on the principles of good designs, many of which are described in this paper.

Posted by Arnon Rotem-Gal-Oz at 01:26 PM  Permalink




 
INFO-LINK


Related Sites: DotNetJunkies, SD Expo, SqlJunkies