HOME

TheInfoList



OR:

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. T ...
, 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, 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" boo ...
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'' 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 ...
(lack of) design; the God Class (where a single class handles all control in a program 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 ...
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 met ...
– 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 *
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 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 *
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''


References


What supports what


Sources

* * * * *


Further reading

* ** Later re-printed in: * * *


External links


Anti-pattern
at
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'' ori ...
{{Authority control Software architecture Design Industrial and organizational psychology Organizational behavior Anti-social behaviour Workplace