Menu
Home Explore People Places Arts History Plants & Animals Science Life & Culture Technology
On this page
Anti-pattern
Common response to a recurring problem that is usually ineffective or counterproductive

An anti-pattern is a common but ineffective response to repeated problems in fields like software engineering, project management, and business processes. Coined in 1995 by Andrew Koenig, the term was inspired by the book Design Patterns, which highlights reliable software development patterns. Koenig first introduced the concept in the Journal of Object-Oriented Programming, and it gained more attention following a 1996 paper by Michael Ackroyd. The 1998 book AntiPatterns popularized the term further, expanding its relevance beyond software design to include architecture and project management. Since then, the concept has grown to cover environmental, organizational, and cultural anti-patterns as well.

Definition

According to the authors of Design Patterns, there are two key elements to an anti-pattern that distinguish it from a bad habit, bad practice, or bad idea:

  1. The anti-pattern is a commonly used process, structure or pattern of action that, despite initially appearing to be an appropriate and effective response to a problem, has more bad consequences than good ones.
  2. Another solution exists to the problem the anti-pattern is attempting to address. This solution is documented, repeatable, and proven to be effective where the anti-pattern is not.

A guide to what is commonly used is a "rule-of-three" similar to that for patterns: to be an anti-pattern it must have been witnessed occurring at least three times.7

Uses

Documenting anti-patterns can be an effective way to analyze a problem space and to capture expert knowledge.8

While some anti-pattern descriptions merely document the adverse consequences of the pattern, good anti-pattern documentation also provides an alternative, or a means to ameliorate the anti-pattern.9

Software engineering anti-patterns

In software engineering, anti-patterns include the big ball of mud (lack of) design, the god object (where a single class handles all control in a program rather than control being distributed across multiple classes), magic numbers (unique values with an unexplained meaning or multiple occurrences which could be replaced with a named constant), and poltergeists (ephemeral controller classes that only exist to invoke other methods on classes).10

Big ball of mud

This indicates a software system that lacks a perceivable architecture. Although undesirable from a software engineering point of view, such systems are common in practice due to business pressures, developer turnover and code entropy.

The term was popularized in Brian Foote and Joseph Yoder's 1997 paper of the same name, which defines the term:

A Big Ball of Mud is a haphazardly structured, sprawling, sloppy, duct-tape-and-baling-wire, spaghetti-code jungle. These systems show unmistakable signs of unregulated growth, and repeated, expedient repair. Information is shared promiscuously among distant elements of the system, often to the point where nearly all the important information becomes global or duplicated.

The overall structure of the system may never have been well defined.

If it was, it may have eroded beyond recognition. Programmers with a shred of architectural sensibility shun these quagmires. Only those who are unconcerned about architecture, and, perhaps, are comfortable with the inertia of the day-to-day chore of patching the holes in these failing dikes, are content to work on such systems.

— Brian Foote and Joseph Yoder, Big Ball of Mud. Fourth Conference on Patterns Languages of Programs (PLoP '97/EuroPLoP '97) Monticello, Illinois, September 1997

Foote and Yoder have credited Brian Marick as the originator of the "big ball of mud" term for this sort of architecture.11

Project management anti-patterns

Project management anti-patterns included in the Antipatterns book include:

  • Blowhard Jamboree (an excess of industry pundits)
  • Analysis paralysis
  • Viewgraph Engineering (too much time spent making presentations and not enough on the actual software)
  • Death by Planning (similarly, too much planning)
  • Fear of Success (irrational fears near to project completion)
  • The Corncob (difficulties with people)
  • Intellectual Violence (intimidation through use of jargon or arcane technology)
  • Irrational Management (bad management habits)
  • Smoke and Mirrors (excessive use of demos and prototypes by salespeople)
  • Throw It Over the Wall (forcing fad software engineering practices onto developers without buy-in)
  • Fire Drill (long periods of monotony punctuated by short crises)
  • The Feud (conflicts between managers)
  • e-mail Is Dangerous (situations resulting from ill-advised e-mail messages).12

See also

What supports what

Sources

  • Neill, Colin J.; Laplante, Philip A.; DeFranco, Joanna F. (2011). Antipatterns: Managing Software Organizations and People. Applied Software Engineering Series (second ed.). CRC Press. ISBN 9781439862162.
  • Budgen, D. (2003). Software design. Harlow, Eng.: Addison-Wesley. p. 225. ISBN 0-201-72219-4. As described in Long (2001), design anti-patterns are 'obvious, but wrong, solutions to recurring problems'.
  • Ambler, Scott W. (1998). Process patterns: building large-scale systems using object technology. Cambridge, UK: Cambridge University Press. p. 4. ISBN 0-521-64568-9. ...common approaches to solving recurring problems that prove to be ineffective. These approaches are called antipatterns.
  • Jimenez, Edward (2006-04-24). "AntiPatterns". AntiPatterns. Retrieved 24 April 2006.
  • Demeyer, Serge (2008). "ObjectOriented Reengineering". In Mens, Tom; Demeyer, Serge (eds.). Software Evolution. Springer Science + Business Media. ISBN 9783540764403.

Further reading

  • Koenig, Andrew (March–April 1995). "Patterns and Antipatterns". Journal of Object-Oriented Programming. 8 (1): 46–48.
  • Laplante, Phillip A.; Neill, Colin J. (2005). Antipatterns: Identification, Refactoring and Management. Auerbach Publications. ISBN 0-8493-2994-9.
  • Brown, William J.; Malveau, Raphael C.; McCormick, Hays W.; Thomas, Scott W. (2000). Hudson, Theresa Hudson (ed.). Anti-Patterns in Project Management. John Wiley & Sons. ISBN 0-471-36366-9.
  • Stamelos, Ioannis (January 2010). "Software project management anti-patterns". Journal of Systems and Software. 83 (1): 52–59. doi:10.1016/j.jss.2009.09.016.
Wikimedia Commons has media related to Anti-patterns.

References

  1. Budgen 2003, p. 225. - Budgen, D. (2003). Software design. Harlow, Eng.: Addison-Wesley. p. 225. ISBN 0-201-72219-4. As described in Long (2001), design anti-patterns are 'obvious, but wrong, solutions to recurring problems'. https://books.google.com/books?id=bnY3vb606bAC&q=%22anti-pattern%22+date:1990-2003&pg=PA225

  2. Ambler 1998, p. 4. - Ambler, Scott W. (1998). Process patterns: building large-scale systems using object technology. Cambridge, UK: Cambridge University Press. p. 4. ISBN 0-521-64568-9. ...common approaches to solving recurring problems that prove to be ineffective. These approaches are called antipatterns. https://books.google.com/books?id=qJJk2yEeoZoC&q=%22anti-pattern%22+date:1990-2001&pg=PA4

  3. Neill, Laplante & DeFranco 2011, p. 4. - Neill, Colin J.; Laplante, Philip A.; DeFranco, Joanna F. (2011). Antipatterns: Managing Software Organizations and People. Applied Software Engineering Series (second ed.). CRC Press. ISBN 9781439862162.

  4. Neill, Laplante & DeFranco 2011, p. 4. - Neill, Colin J.; Laplante, Philip A.; DeFranco, Joanna F. (2011). Antipatterns: Managing Software Organizations and People. Applied Software Engineering Series (second ed.). CRC Press. ISBN 9781439862162.

  5. Neill, Laplante & DeFranco 2011, p. 4. - Neill, Colin J.; Laplante, Philip A.; DeFranco, Joanna F. (2011). Antipatterns: Managing Software Organizations and People. Applied Software Engineering Series (second ed.). CRC Press. ISBN 9781439862162.

  6. Neill, Laplante & DeFranco 2011, p. 5. - Neill, Colin J.; Laplante, Philip A.; DeFranco, Joanna F. (2011). Antipatterns: Managing Software Organizations and People. Applied Software Engineering Series (second ed.). CRC Press. ISBN 9781439862162.

  7. Neill, Laplante & DeFranco 2011, p. 6. - Neill, Colin J.; Laplante, Philip A.; DeFranco, Joanna F. (2011). Antipatterns: Managing Software Organizations and People. Applied Software Engineering Series (second ed.). CRC Press. ISBN 9781439862162.

  8. Jimenez 2006. - Jimenez, Edward (2006-04-24). "AntiPatterns". AntiPatterns. Retrieved 24 April 2006. http://antipatterns.com/EdJs_Paper/Antipatterns.html

  9. Demeyer 2008, p. 102. - Demeyer, Serge (2008). "ObjectOriented Reengineering". In Mens, Tom; Demeyer, Serge (eds.). Software Evolution. Springer Science + Business Media. ISBN 9783540764403.

  10. Demeyer 2008, p. 102. - Demeyer, Serge (2008). "ObjectOriented Reengineering". In Mens, Tom; Demeyer, Serge (eds.). Software Evolution. Springer Science + Business Media. ISBN 9783540764403.

  11. Foote, Brian; Yoder, Joseph (26 June 1999). "Big Ball of Mud". laputan.org. Retrieved 14 April 2019. http://www.laputan.org/mud/mud.html#BigBallOfMud

  12. Neill, Laplante & DeFranco 2011, p. 5. - Neill, Colin J.; Laplante, Philip A.; DeFranco, Joanna F. (2011). Antipatterns: Managing Software Organizations and People. Applied Software Engineering Series (second ed.). CRC Press. ISBN 9781439862162.