Smells ( especially code smells ) are warning signs about potential problems in code. Not all smells indicate a problem, but most are worthy of a look and a decision.
Some people dislike the term smell , and prefer to talk about potential problems or flaws , but I think smell is a good metaphor. Think about what happens when you open a fridge that has a few things going bad inside. Some smells will be strong, and it will be obvious what to do about them. Other smells will be subtler; you won't be sure if the problem is caused by the leftover peas or maybe that Kung Pao chicken. Some food in the fridge may be bad without having a particularly bad smell. Code smells seem like that to me: Some are obvious, some aren't. Some mask other problems. Some go away unexpectedly when you fix something else.
Smells usually describe localized problems. It would be nice if people could find problems easily across a whole system. But humans aren't so good at that job; local smells work with our tendency to consider only the part we're looking at right now.