An anti-pattern is a solution to a class of problem which may be commonly used but is likely to be ineffective or counterproductive.[1][2] The term, coined in 1995 by Andrew Koenig, was inspired by the book Design Patterns which highlights software developmentdesign patterns that its authors consider to be reliable and effective.[3]
A paper in 1996 presented by Michael Ackroyd at the Object World West Conference described anti-patterns.[3] It was, however, the 1998 book AntiPatterns that both popularized the idea and extended its scope beyond the field of software design to include software architecture and project management.[3]
Other authors have extended it further since to encompass environmental, organizational, and cultural anti-patterns.[4]
According to the authors of Design Patterns, there are two key aspects of an anti-pattern that distinguish it from a bad habit, bad practice, or bad idea. First, an anti-pattern is a commonly used process, structure or pattern of action that, despite initially appearing to be appropriate and effective, has more bad consequences than good ones. Second, another solution exists to the problem that 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.[5]
Documenting anti-patterns can be an effective way to analyze a problem space and to capture expert knowledge.[6] 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.[7]
Examples
In software engineering
In software engineering, anti-patterns include:[7]
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 software entropy.
In project management
Project management anti-patterns included in the Antipatterns book include:[4]
Neill, Colin J.; Laplante, Philip A.; DeFranco, Joanna F. (2011). Antipatterns: Managing Software Organizations and People. Applied Software Engineering Series (seconded.). CRC Press. ISBN9781439862162.
Budgen, D. (2003). Software design. Harlow, Eng.: Addison-Wesley. p.225. ISBN0-201-72219-4. As described in Long (2001), design anti-patterns are 'obvious, but wrong, solutions to recurring problems'.
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. ISBN9783540764403.
Further reading
Koenig, Andrew (March–April 1995). "Patterns and Antipatterns". Journal of Object-Oriented Programming. 8 (1): 46–48.
Later re-printed in: Rising, Linda (1998). The patterns handbook: techniques, strategies, and applications. Cambridge, U.K.: Cambridge University Press. p.387. ISBN0-521-64818-1. An antipattern is just like a pattern, except that instead of a solution it gives something that looks superficially like a solution, but isn't one.
Laplante, Phillip A.; Neill, Colin J. (2005). Antipatterns: Identification, Refactoring and Management. Auerbach Publications. ISBN0-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. ISBN0-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.