I’ve writ­ten about design pat­terns a cou­ple of times in the past, but today I dis­cov­ered anti-patterns: design pat­terns that “may be com­monly used but [are] inef­fec­tive and/or coun­ter­pro­duc­tive in practice”.

One of the “key ele­ments present to for­mally dis­tin­guish an actual anti-pattern from a sim­ple bad habit, bad prac­tice, or bad idea”:

Some repeated pat­tern of action, process or struc­ture that ini­tially appears to be ben­e­fi­cial, but ulti­mately pro­duces more bad con­se­quences than ben­e­fi­cial results.

The seven types of anti-pattern, with some examples:

  • Organ­i­sa­tional: Moral haz­ard, insu­lat­ing a decision-maker from the con­se­quences of his or her decision.
  • Project man­age­ment: Group­think, whereby mem­bers of the group avoid pro­mot­ing view­points out­side the com­fort zone of con­sen­sus thinking.
  • Analy­sis: Bystander apa­thy, when a require­ment or design deci­sion is wrong, but the peo­ple who notice this do noth­ing because it affects a larger num­ber of people.
  • Soft­ware design: Gold plat­ing, con­tin­u­ing to work on a task or project well past the point at which extra effort is adding value.
  • Pro­gram­ming: Cargo cult pro­gram­ming, using pat­terns and meth­ods with­out under­stand­ing why.
  • Method­olog­i­cal: Golden ham­mer, assum­ing that a favorite solu­tion is uni­ver­sally applic­a­ble (See: Sil­ver Bullet).
  • Con­fig­u­ra­tion man­age­ment.