Lazy class) – istnieją klasy posiadające bardzo mały zakres odpowiedzialności. Powielony kod (ang. Duplicated code) – ten sam fragment kodu powtarza się w kilku miejscach; utrudnia to wprowadzanie zmian (muszą zostać odnalezione wszystkie miejsca w kodzie, które realizują to samo zadanie). Wymyślna złożoność (ang. Contrived Complexity) – użyte zostały skomplikowane wzorce projektowe, gdzie zastosowanie znacznie prostszych byłoby wystarczające. Martwy kod (ang. Dead code) – zmienna, parametr, pole, metoda lub klasa już nie są używane.

Podział Mika Mäntylä w artykule A Taxonomy for „Bad Code Smells” dzieli brzydkie zapachy w kodzie na pięć kategorii: ang. The Bloaters – coś co rozrosło się do tak dużych rozmiarów, iż nie może być poprawnie obsłużone: duża klasa, długa metoda, obsesja typów podstawowych, długa lista parametrów, zbitki danych. ang. The Object-Orientation Abusers: – rozwiązania które nie wykorzystują w pełni możliwości programowania obiektowego: instrukcje switch, pole tymczasowe, odrzucony spadek, różne klasy z identycznym interfejsem. ang. The Change Preventers – utrudniają zmiany lub rozwój oprogramowania: poszatkowanie, równoległe hierarchie dziedziczenia, rozbieżna zmiana. ang.