- Long Method
- Large Class
- Feature Envy
- Case/Switch Statement
- High Fan-out
- Shotgun Surgery
- Divergent Change
- Long Parameter List
- Duplicated Code
- Uncommunicative Name
- Single Table Inheritance (STI)
- Parallel Inheritance Hierarchies
- Comments
- Mixin
- Callback
- Replace Conditional with Polymorphism
- Replace conditional with Null Object
- Extract method
- Rename Method
- Extract Class
- Extract Value Object
- Extract Decorator
- Extract Partial
- Extract Validator
- Introduce Explaining Variable
- Introduce Observer
- Introduce Form Object
- Introduce Parameter Object
- Use class as Factory
- Move method
- Inline class
- Inject dependencies
- Replace Subclasses with Strategies
- Replace mixin with composition
- Replace Callback with Method
- Use convention over configuration
- Introduce Visitor
- DRY
- Single responsibility principle
- Tell, Don’t Ask
- Law of Demeter
- Composition over inheritance
- Open/closed principle
- Dependency inversion principle