An entity that has grown so large or long that it can't be effectively handled
Too much code in one method
Classes that have too many fields (instance variables), i.e., store too much state
Use of primitive types when an object is needed, e.g., array, Money, Data, etc.
Too many parameters
Bunches of data that always hang around together
Where code does not fully exploit the possibilities of object-oriented design
Most switch statements should be replaced by polymorphism
Field which is only set/used in certain situations
Subclass doesn't use all the inherited methods or data
Classes that are similar on the inside but differ on the outside
Hinder further changing or developing the system
One class is commonly changed in different ways for different purposes (i.e., feature changes)
When a change is made to a system, lots of little changes have to be performed in many classes.
Every time you create a subclass in one hierarchy, you have to create a subclass in another hierarchy
Code or classes that should be removed
A class that is not doing enough
Classes with fields, getters, and setters, but nothing else
Program entity (class, method, parameter, code fragment, statement, variable) that is unused in the system.
Code that was over-generalized in an attempt to predict future needs
Lowering coupling, and problems that you get when trying to do so
One method is too interested in other classes
Two classes that are too tightly coupled to each other
A class needs data from another class and has to go through a long chain of calls to get to it
A class exists just to delegate to another class