An anti-pattern in
software engineering
Software engineering is a systematic engineering approach to software development.
A software engineer is a person who applies the principles of software engineering to design, develop, maintain, test, and evaluate computer software. The term '' ...
,
project management
Project management is the process of leading the work of a team to achieve all project goals within the given constraints. This information is usually described in project documentation, created at the beginning of the development process. Th ...
, and
business processes
A business process, business method or business function is a collection of related, structured activities or tasks by people or equipment in which a specific sequence produces a service or product (serves a particular business goal) for a parti ...
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
Joshua Andrew Koenig (; August 17, 1968 – February 16, 2010) was an American character actor, film director, editor, writer, and human rights activist. He was known for his role as Richard "Boner" Stabone in ''Growing Pains''.
Early ...
, was inspired by the book ''
Design Patterns
''Design Patterns: Elements of Reusable Object-Oriented Software'' (1994) is a software engineering book describing software design patterns. The book was written by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides, with a foreword ...
'' (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" b ...
s in
software development
Software development is the process of conceiving, specifying, designing, programming, documenting, testing, and bug fixing involved in creating and maintaining applications, frameworks, or other software components. Software development invol ...
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 benefi ...
'' 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/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
An anti-pattern in software engineering, project management, 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 An ...
(lack of) design; the
God Class (where a single
class
Class 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 differentl ...
handles all control in a
program
Program, programme, programmer, or programming may refer to:
Business and management
* Program management, the process of managing several related projects
* Time management
* Program, a part of planning
Arts and entertainment Audio
* Progra ...
rather than control being distributed across multiple classes); 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 components based on software forming part of a computer system (a combination of hardware and software). It "consists of a number of separate programs, configuration files, which are used to se ...
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), and e-mail Is Dangerous (situations resulting from ill-advised e-mail messages).
See also
*
Code smell
In computer programming, a code smell is any characteristic in the source code of a program that possibly indicates a deeper problem. Determining what is and is not a code smell is subjective, and varies by language, developer, and development meth ...
– symptom of unsound programming
*
Design smell
In computer programming, design smells are "structures in the design that indicate violation of fundamental design principles and negatively impact design quality".Girish Suryanarayana, Ganesh SG, Tushar Sharma (2014). "Refactoring for software des ...
*
Dark pattern
Darkness, the direct opposite of lightness, is defined as a lack of illumination, an absence of visible light, or a surface that absorbs light, such as black or brown.
Human vision is unable to distinguish colors in conditions of very low lu ...
*
List of software development philosophies
This is a list of approaches, styles, methodologies, philosophies in software development and engineering. It also contains programming paradigms, software development methodologies, software development processes, and single practices, principl ...
– approaches, styles, maxims and philosophies for software development
*
List of tools for static code analysis
This is a list of notable tools for static program analysis (program analysis is a synonym for code analysis).
Static code analysis tools
Languages
Ada
*
*
*
*
*
*
*
*
*
*
*
C, C++
*
*
*
*
*
*
*
*
*
*
*
* ...
*
Software rot
Software rot (bit rot, code rot, software erosion, software decay, or software entropy) is either a slow deterioration of software quality over time or its diminishing responsiveness that will eventually lead to software becoming faulty, unusabl ...
*
Software Peter principle
The Software Peter principle is used in software engineering to describe a dying project which has become too complex to be understood even by its own developers.
It is well known in the industry as a silent killer of projects, but by the time t ...
*
Capability Immaturity Model
Capability Immaturity Model (CIMM) in software engineering is a parody acronym, a semi-serious effort to provide a contrast to the Capability Maturity Model (CMM). The Capability Maturity Model is a five point scale of capability in an organization ...
*
ISO/IEC 29110
ISO/IEC 29110: Systems and Software Life Cycle Profiles and Guidelines for Very Small Entities (VSEs) International Standards (IS) and Technical Reports (TR) are targeted at Very Small Entities (VSEs). A Very Small Entity (VSE) is an enterprise ...
: Software Life Cycle Profiles and Guidelines for Very Small Entities (VSEs)
*''
The Innovator's Dilemma
''The Innovator's Dilemma: When New Technologies Cause Great Firms to Fail'', first published in 1997, is the best-known work of the Harvard professor and businessman Clayton Christensen. It expands on the concept of disruptive technologies, a t ...
''
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 to accompany the Portland Pattern Repository website discussing software design patterns. The name ''WikiWikiWeb'' origi ...
{{Authority control
Software architecture
Design
Industrial and organizational psychology
Organizational behavior
Anti-social behaviour
Workplace