Теоретическая общность
Симптомы и признаки
Класс, метод, поле или параметр не используются.

Причины появления
Иногда код создаётся «про запас», чтобы поддерживать какой-то возможный будущий функционал, который в итоге так и не реализуется. В результате этот код становится труднее понимать и сопровождать.
Лечение
- 
Для удаления незадействованных абстрактных классов используйте сворачивание иерархии. 
- 
Ненужное делегирование функциональности другому классу может быть удалено с помощью встраивания класса. 
- 
От неиспользуемых методов можно избавиться с помощью встраивания метода. 
- 
Методы с неиспользуемыми параметрами должны быть подвергнуты удалению параметров. 
- 
Неиспользуемые поля можно просто удалить. 

Выигрыш
- 
Уменьшение размера кода. 
- 
Упрощение поддержки. 
Не стоит трогать, если...
- 
В случаях, когда вы работаете над фреймворком, создание функциональности, не используемой самим фреймворком, вполне оправдано. Главное, чтобы она была полезна пользователям фреймворка. 
- 
Перед удалением элементов, стоит удостовериться, не используются ли они в юнит-тестах. Такое бывает, если в тестах необходим способ получения какой-то служебной информации класса или осуществления каких-то специальных тестовых действий.