Це нерідко призводить до необхідності вносити паралельні зміни до кількох скопійованих ділянок коду одночасно (що не відповідає принципам «DRY» (Don't Repeat Yourself) та «Copy And Paste is a Design Error»).
Підпрограма занадто довга.
Хоча питання, яку максимальну довжину може мати підпрограма, є досить суперечливим, однак загальноприйнятим неофіційним стандартом є написання підпрограм довжиною не більше, ніж один екран коду.
Цикл занадто довгий, або рівень вкладеності тіла циклу занадто великий.
Клас має багато обов'язків, слабо пов'язаних між собою.
В такому випадку краще розділити клас на кілька атомарних класів.
Інтерфейс класу не забезпечує достатній рівень абстракції.
Функція має занадто багато параметрів.
Потрібно одночасно змінювати кілька паралельних ієрархій класів.
Для вирішення цієї проблеми можна, наприклад, скористатися шаблоном «Міст».
Споріднені дані, які використовуються разом, не організовані в клас.
Клас не виконує ніяку роботу самостійно, а тільки передоручає обов'язки іншим класам.
Назва класу чи методу має ім'я, яке недостатньо точно відповідає змісту.
Клас має занадто багато відкритих (public) членів.
Нестатичний клас складається тільки з даних або тільки з методів.
В ланцюжку викликів методів передається багато зайвих даних.