Agile Glossary

AntiPattern

What is AntiPattern?

Antipatterns are common solutions to common problems where the solution is ineffective and may result in undesired consequences. An antipattern is different from bad practice when:

  • It is a common practice that initially looks like an appropriate solution but ends up having bad consequences that outweigh any benefits
  • There’s another solution that is known, repeatable, and effective.

The concept of antipatterns was inspired by the concept of design patterns, which indicate common effective solutions to common problems.

Antipatterns were initially applied in the context of software development, but have extended to other aspects of software engineering, organizations, and project management.

Coaches and consultants like to invoke antipatterns as a way of pointing out behavior they often see in teams they coach and as an avenue of suggesting better patterns.


Also Known As

The term has a variety of spellings which, at this writing, seem to be equally prevalent in use.  Those include anti patterns and anti-patterns.

These are also known as “bad ideas”, but antipattern is considered a kinder label.

Other terms used include code smells and design smells.


Origins

1995 Andrew Koenig originally coined the term antipattern in the March – April 1995 edition of the Journal of Object Oriented Program: “An antipattern is just like a pattern, except that instead of a solution it gives something that looks superficially like a solution, but isn’t one.”

1998 Linda Rising reprints Keonig’s definition of antipattern in the The patterns handbook: techniques, strategies, and applications.

1998 The book AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis popularized the term.


Further Reading

The Wikipedia entry on Anti-Patterns contains a list of commonly referenced antipatterns.

Template for describing antipatterns similar to the patterns template from the C2 Wiki

AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis by William J. Brown, Hays W. McCormick, Scott W. Thomas and Thomas J. Mowbray

AntiPatterns and Patterns in Software Configuration Management by William J. Brown, Hays W. McCormick, and Scott W. Thomas

AntiPatterns in Product Management by William J. Brown, Hays W. McCormick, and Scott W. Thomas

Join us today!

Agile Alliance offers many online and in-person events and workshops for our members. If you’re not currently a member, you can join now to take advantage of our many members-only resources and programs. LEARN MORE >

Get the latest Agile news!

  • This field is for validation purposes and should be left unchanged.

By subscribing, you acknowledge the Agile Alliance Privacy Policy, and agree to receive our emails.

Additional Agile Glossary Terms

Scrum is a process framework used to manage product development and other knowledge work. Scrum is empirical in that it provides a means for teams to establish a hypothesis of how they think something works, try it out, reflect on the experience, and make the appropriate adjustments. That is, when the framework is used properly.
Collective code ownership is the explicit convention that every team member can make changes to any code file as necessary: either to complete a development task, to repair a defect, or to improve the code's overall structure.
Members of an Agile development team normally choose which tasks to work on, rather than being assigned work by a manager.
The product owner is a role on a product development team responsible for managing the product backlog in order to achieve the desired outcome that a product development team seeks to accomplish.
Backlog grooming is when the product owner and some, or all, of the rest of the team refine the backlog on a regular basis to ensure the backlog contains the appropriate items, that they are prioritized, and that the items at the top of the backlog are ready for delivery.
The daily meeting is one of the most commonly practiced Agile techniques and presents opportunity for a team to get together on a regular basis to coordinate their activities.
In an Agile context, Incremental Development is when each successive version of a product is usable, and each builds upon the previous version by adding user-visible functionality.

Help us keep the definitions updated

Ready to join Agile Alliance?

Unlock members-only access to online learning sessions, Agile resources, annual conference discounts, and more! And when you join, you’ll be supporting our member initiatives, regional events, and global community groups.

Privacy Preference Center

IMPORTANT: We have transitioned to a new membership platform. If you have not already done so, you will need to SET UP AN ACCOUNT on the new platform to establish your user profile. Your previous login credentials will not work until you do this set up.

When you see the login screen, choose “Set up Account” and follow the prompts to create your new account. You can choose to log in using your social credentials for either Google or Linkedin (recommended), or you can set up your account using an email address.