An anti-pattern in
software engineering
Software engineering is a branch of both computer science and engineering focused on designing, developing, testing, and maintaining Application software, software applications. It involves applying engineering design process, engineering principl ...
,
project management
Project management is the process of supervising the work of a Project team, team to achieve all project goals within the given constraints. This information is usually described in project initiation documentation, project documentation, crea ...
, and
business processes is a common response to a recurring problem that is usually ineffective and risks being highly counterproductive. The term, coined in 1995 by computer programmer
Andrew Koenig, was inspired by the book ''
Design Patterns'' (which highlights a number of
design pattern
A design pattern is the re-usable form of a solution to a design problem. The idea was introduced by the architect Christopher Alexander and has been adapted for various other disciplines, particularly software engineering. The " Gang of Four" ...
s in
software development
Software development is the process of designing and Implementation, implementing a software solution to Computer user satisfaction, satisfy a User (computing), user. The process is more encompassing than Computer programming, programming, wri ...
that its authors considered to be highly reliable and effective) and first published in his article in the ''Journal of Object-Oriented Programming''.
A further paper in 1996 presented by Michael Ackroyd at the Object World West Conference also documented anti-patterns.
It was, however, the 1998 book ''
AntiPatterns
''AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis'' is a book about anti-patterns: specific repeated practices in software architecture, software design and software project management that initially appear to be benefic ...
'' that both popularized the idea and extended its scope beyond the field of software design to include software architecture and project management.
Other authors have extended it further since to encompass environmental, organizational, and cultural anti-patterns.
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:
# 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.
# 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.
Uses
Documenting anti-patterns can be an effective way to analyze a problem space and to capture expert knowledge.
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.
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
Class, Classes, or The Class may refer to:
Common uses not otherwise categorized
* Class (biology), a taxonomic rank
* Class (knowledge representation), a collection of individuals or objects
* Class (philosophy), an analytical concept used d ...
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).
Big ball of mud
This indicates a
software system
A software system is a system of intercommunicating software component, components based on software forming part of a computer system (a combination of Computer hardware, hardware and software). It "consists of a number of separate Computer progr ...
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:
Foote and Yoder have credited Brian Marick as the originator of the "big ball of mud" term for this sort of architecture.
Project management anti-patterns
Project management anti-patterns included in the ''Antipatterns'' book include:
* Blowhard Jamboree (an excess of industry pundits)
*
Analysis paralysis
Analysis paralysis (or paralysis by analysis) describes an individual or group process where overanalyzing or overthinking a situation can cause forward motion or decision-making to become " paralyzed", meaning that no solution or course of acti ...
* 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).
See also
*
*
*
*
*
*
*
*
*: Software Life Cycle Profiles and Guidelines for Very Small Entities (VSEs)
*
List of software anti-patterns
*'
References
What supports what
Sources
*
*
*
*
*
Further reading
*
** Later re-printed in:
*
*
*
External links
Anti-patternat
WikiWikiWeb
The WikiWikiWeb is the first wiki, or user-editable website. It was launched on 25 March 1995 by programmer Ward Cunningham and has been a read-only archive since 2015. The name ''WikiWikiWeb'' originally also applied to the wiki software that o ...
{{Authority control
Software architecture
Design
Industrial and organizational psychology
Organizational behavior
Anti-social behaviour
Workplace
1995 neologisms