As Kent Beck says, Code has smells. One interesting code smell I've run into is one I call "Model Without a Cause".
I ran into it while working at a car manufacturing plant 10 years ago. They had taken a course on object oriented programming and learned about inheritance. To design a system to manage car parts, they were embarking on a taxonomy of the parts that they would model using inheritance. They had superclasses like MetalPart, SteelPart, and concrete classes like BallBearing.
I asked them what methods they would have for BallBearing that would be different than CamShaft. What happens when you need an entirely new part that you don't have a corresponding class for? What are you using these classes for in the first place?
It turns out that they just wanted to hold user-defined data for each part. We simplified the whole design down to one Part class that held onto a Dictionary of its attributes and corresponding values. The elaborate model they had been trying to create was pointless. There was no different behavior between the classes - it was just an attempt to model the parts using classes but they didn't realize that it was the behavior that was important, not the classes. As I said, it was a model without a cause.