Anti-Patterns
Code smells and known failure modes — grouped by source edition.
Refactoring 1st Edition (Fowler)
Anti-pattern indicating need for refactoring
Anti-pattern indicating need for refactoring
Anti-pattern indicating need for refactoring
Anti-pattern indicating need for refactoring
Anti-pattern indicating need for refactoring
Anti-pattern indicating need for refactoring
Anti-pattern indicating need for refactoring
Anti-pattern indicating need for refactoring
Anti-pattern indicating need for refactoring
Anti-pattern indicating need for refactoring
Anti-pattern indicating need for refactoring
Anti-pattern indicating need for refactoring
Anti-pattern indicating need for refactoring
Anti-pattern indicating need for refactoring
Anti-pattern indicating need for refactoring
Anti-pattern indicating need for refactoring
Anti-pattern indicating need for refactoring
Anti-pattern indicating need for refactoring
Anti-pattern indicating need for refactoring
Anti-pattern indicating need for refactoring
Anti-pattern indicating need for refactoring
Anti-pattern indicating need for refactoring
Refactoring 2nd Edition (Fowler)
Code smell indicating the dangerous use of globally accessible mutable data
Code smell indicating modules trading data in excessive secret ways (updated from Inappropriate Intimacy)
Code smell indicating program elements that are not earning their keep (updated from Lazy Class)
Code smell indicating imperative loops that could be replaced with pipeline operations
Code smell indicating overuse of mutable state that makes reasoning about code difficult
Code smell indicating names that fail to communicate intent clearly
Code smell indicating repeated switch/case logic across the codebase (updated terminology from Switch Statements)
Clean Code (Robert C. Martin)
Anti-patterns related to build and development environment setup that create friction and complexity in the development process.
Anti-patterns related to function design including too many arguments, output arguments, flag arguments, and dead functions.
General code smells covering duplication, abstraction levels, dependencies, dead code, inconsistency, and other fundamental anti-patterns.
Anti-patterns related to naming that reduce code readability, searchability, and expressiveness.
Anti-patterns in test code that reduce test effectiveness, maintainability, and reliability.