The anti-pattern pattern
2 min readAug 27, 2016
An anti-pattern is a repeated action, process or structure that appears beneficial initially, but ultimately produces negitive consequences.
More than a just a bad practice. Anti-patterns masquerade as a solution while conceling the extensive damage its doing for years. Once these patters surface it’s often with catastrophic concenquences.
Organizational anti-patterns
- Analysis paralysis: Devoting disproportionate effort to the analysis phase of a project
- Design by committee: The result of having many contributors to a design, but no unifying vision
- Matrix Management: Unfocused organizational structure that results in divided loyalties and lack of direction
- Stovepipe or Silos: A structure that supports mostly up-down flow of data but inhibits cross organizational communication
- Vendor lock-in: Making a system excessively dependent on an externally supplied component
Project Management anti-patterns
- Groupthink: During groupthink, members of the group avoid promoting viewpoints outside the comfort zone of consensus thinking.
- Software bloat: Allowing successive versions of a system to demand ever more resources
- Waterfall model: An older method of software development that inadequately deals with unanticipated change
Software Design anti-patterns
- Big ball of mud: A system with no recognizable structure
- Database-as-IPC: Using a database as the message queue for routine interprocess communication where a much more lightweight mechanism would be suitable
- Gold plating: Continuing to work on a task or project well past the point where extra effort fails to add value
- Input kludge: Failing to specify and implement the handling of possibility of invalid input
- Magic pushbutton: Coding implementation logic directly within interface code, without using abstraction
- Stovepipe system: A barely maintainable assemblage of ill-related components
Programming anti-patterns
- Accidental complexity: Introducing unnecessary complexity into a solution
- Boat anchor: Retaining a part of a system that no longer has any use
- Busy spin: Locking a page and consuming CPU while waiting for something to happen, usually waiting for a task to finish processing.
- Error hiding: Catching an error message before it can be shown to the user and either showing nothing or showing a meaningless message
- Hard code: Embedding assumptions about the environment of a system in its implementation
- Lava flow: Retaining undesirable (redundant or low-quality) code because removing it is too expensive or has unpredictable consequences
- Magic numbers: Including unexplained numbers in algorithms
- Spaghetti code: Programs whose structure is barely comprehensible, especially when misuseing code structures
Methodological anti-patterns
- Copy and paste programming: Copying (and modifying) existing code rather than creating reuseable solutions
- Improbability factor: Assuming that it is improbable that a known error will occur
- Not Invented Here (NIH) syndrome: The tendency towards reinventing the wheel (Failing to adopt an existing, adequate solution)
- Tester Driven Development: Software projects in which new requirements are specified in bug reports