veryard projects - innovation for demanding change

Design Pitfalls as Negative Patterns

Richard Veryard


Introduction

Many patterns can be expressed in negative form: avoid XYZ. Experienced engineers have a personal set of negative patterns (or design pitfalls) that they search for when evaluating or testing other people's designs. Some of these negative patterns have a corresponding positive pattern: "avoid XYZ, do PQR instead". If automated design tools could recognize such patterns, appropriate warnings and wizards could be provided.

The purpose of this document is to evaluate the usefulness of the concept of negative pattern. I shall identify some commonly occurring negative patterns (with hotlinks to pattern descriptions wherever possible), and will discuss general ways (also patterns) in which negative patterns in a given design may be identified and treated. It includes a tentative repository of negative patterns and guidelines for their use. Additional ideas and contributions are welcome.


Alexander

Let me start by identifying some negative patterns from Christopher Alexander's book. (Christopher Alexander et al., A Pattern Language: Towns, Buildings, Construction (New York: Oxford University Press, 1977). My feeling from reading Alexander's work, and from hearing him speak, is that he is often much stronger about the design forms he dislikes, than about those he likes. This idea can also be found in his first book: Notes on the Synthesis of Form.

Bedrooms make no sense. Bed Alcoves

Dressing Rooms

A building in which the ceiling heights are all the same is virtually incapable of making people comfortable. Ceiling Height Variety
High buildings make people crazy. Four Storey Limit
Outdoor spaces which are merely 'left over' between buildings will, in general, not be used. Positive Outdoor Space
Continuous sprawling urbanization destroys life and makes cities unbearable.

The surburb is an obsolete and contradictory form of human settlement.

The homogeneous and undifferentiated character of modern cities kills all variety of life styles and arrests the growth of individual character.

The artificial separation of houses and work creates intolerable rifts in people's inner lives.

City Country Fingers

Lace of Country Streets

Mosaic of Subcultures

Scattered Work

Some of Alexander's patterns identify a spectrum where there is something wrong with both extremes, and his pattern provides some guidance on how to achieve an appropriate balance between these extremes. Again, the main message that comes across is the need to avoid the extremes, rather than the rightness of a particular mid-point.

If a population of a region is weighted too far toward small villages, modern civilization can never emerge ... ... but if the population is weighted too far toward big cities, the earth will go to ruin because the population isn't where it needs to be, to take care of it. Distribution of Towns
Cars give people wonderful freedom and increase their opportunities. But they also destroy the environment, to an extent so drastic that they kill all social life. Local Transport Areas
People have a fundamental yearning for great bodies of water. But the very movement of the people toward the water can also destroy the water. Access to Water
Rooms which are too closed prevent the natural flow of social occasions, and the natural process of transition from one social moment to another. And rooms which are too open will not support the differentiation of events which social life requires. Half-Open Wall
Cooking is uncomfortable if the kitchen counter is too short ... ... and also if it is too long. Cooking Layout

Traditional Programming

Here are some of the negative patterns that were being preached at programmers around the time I started in the computer industry.

Avoid GOTO
Avoid executing data
Avoid hard-coding data into program

Entity Modelling

Information Modelling using entities and relationships can be subjected to several structural checks. Simple checks are performed by most data modelling tools. For example, the CASE tool Composer will issue warnings for certain data modelling anomalies. A tool called Validator has been brought to my attention, which checks a data model for more advanced negative patterns, but I haven't yet had an opportunity to test it out.

Distributed Systems Engineering

Avoid single point of failure
Cycles lead to deadlocks
Take no small slips

OO and Component-Based Development

Globals Considered Harmful (Desmond D'Souza)
Hyperspaghetti Objects and Subsystems Decoupling
Don't Interrupt an Interrupt  
Avoid inhibiting garbage collection Weakling, Weak Collection
Avoid excessive initialization overhead Lazy initialization

Organization Design

We can also find patterns that apply to the design of socio-technical systems or human organizations. Many of these come from James Coplien's work.

Don't make technical staff do documentation Mercenary Analyst
Unscrutinized relationships between roles can lead to undesirable coupling at the organizational level. Move Responsibilities
Avoid distractions (Sacrifice One Person)
Avoid retreat from boundaries. The Psychodynamics of Organizations (Larry Hirschhorn)
Adding resources to a project that is running late merely makes things worse. Mythical Man-Month (Fred Brooks)


Acknowledgements

This material was presented at two workshops during April 1997. Thanks to the participants for their input.

Back up to the poster index:

 

OT97 Main Web page:

Discussion board: [Click here to join in this discussion]


For related material, please visit the veryard projects home page.

This page last updated on May 2nd, 1997
using Netscape Navigator Gold.

Copyright © 1996, 1997 Richard Veryard

Please send feedback to the author.