Share your design smell experiences


We have been working on “design smells” for more than two years. In this journey, we have collected various design smells, categorized them, named them with our naming scheme, and cataloged them. Our initial work has been published in Journal of Object Technology in 2012 – “Towards a Principle-based Classification of Structural Design Smells”.

In order to strengthen our catalog of design smells, we started collecting experiences of developers/designers/architects/managers with the design smells in their projects. On this forum, we invite contributions from the software developer community to share their experiences with design smells. In your projects, if you have observed (or suffered by) any design smell, feel free to share your experience with the smell; you may describe various dimensions associated with smell - how you encountered the smell, problems brought in by the smell, how you refactored the smell, and what are the key take-away for you.

We classified design smells using four design principles i.e. Abstraction, Encapsulation, Modularization, and Hierarchy. Smells classified with each principles and a brief description associated with each smells can be found here

To help you in this process we have provided a sample experience below:

An experience with “Unutilized Abstraction”

During maintenance and refactoring, developers often refactor code bases which results in some of the old classes becoming obsolete. However, such code segments are often left in the code base (sometimes by mistake) making the source code bulge in size. Consider this documentation from the Java bug database for a set of classes in JDK source base (Check the original bug report “JDK-7161105: unused classes in jdk7u repository” here: http://bugs.sun.com/view_bug.do?bug_id=7161105):

“the ObjectFactory/SecuritySupport classes that were duplicated in many packages were replaced by a unified set under internal/utils. When the jaxp 1.4.5 source bundle was dropped however, it was a copy of the source bundle on top of the original source, therefore leaving these classes behind unremoved.” 
The left-over code was later removed from the source base. Lesson that we can learn from this event? During refactoring or maintenance, it is important to ensure that old code is deleted from the source base to avoid dead code and unused classes clogging the source base.


We understand that it is not possible to share the project/company name due to privacy reasons and we respect that; thus, it is perfectly ok to camouflage project/company details during the description. You may report your experiences with a proprietary project or any open source project.

You may share your experiences in the form of comment to this post or by mailing us at designsmells@gmail.com.