The anti-pattern pattern

John Bocook
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

--

--

John Bocook

Driven by ADHD and passion. Developer turned CIO that still knows how to write code and deploy systems.