An anti-pattern is any common but counterproductive solution to some class of problem. The term, coined in 1995 by Andrew Koenig, was inspired by the book Design Patterns which highlights reliable and effective software developmentdesign patterns.
Michael Ackroyd described anti-patterns in a paper presented at the 1996 Object World West Conference. The 1998 book AntiPatterns popularized the idea and extended its scope beyond software design to include software architecture and project management.
Other authors have extended it further to encompass environmental, organizational, and cultural anti-patterns.
An anti-pattern can be distinguished from a bad habit, bad practice, or bad idea by two traits. First, anti-patterns are commonly used processes, structures or patterns of action that initially appear to be appropriate and effective, but have greater drawbacks than benefits. Second, there is another way to solve the problem that is documented, repeatable, and effective where the anti-pattern is not.
Similar to patterns, a "rule-of-three" applies: to be an anti-pattern it should have occurred at least three times.
Documenting anti-patterns can help to analyze a problem space and to capture expert knowledge. While some anti-pattern descriptions merely document the consequences of the pattern, good anti-pattern documentation also provides alternatives ways to minimize harm.
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:
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.