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.
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
|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
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|
Here are some of the negative patterns that were being preached at programmers around the time I started in the computer industry.
|Avoid executing data|
|Avoid hard-coding data into program|
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.
|Avoid single point of failure|
|Cycles lead to deadlocks|
|Take no small slips|
|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|
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)|
This material was presented at two workshops during April 1997. Thanks to the participants for their input.
|Back up to
the poster index:
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
Copyright © 1996, 1997 Richard Veryard