Based on the scope of the impact made by a smell, we may perceive smells in three categories – implementation smells, design smells, and architecture smells. Implementation smells have limited scope, typically confined to a class or file, have a limited local impact, and require relatively the least effort to refactor. Long method, magic number, and empty catch block are the examples of implementation smells. Design smells impact a set of classes and thus refactoring a design smell may introduce a change in a few classes. Examples of design smells are insufficient modularization (god class), multifaceted abstraction (divergent change), and broken hierarchy (refused bequest). Further, architecture smells span multiple components and have a system level impact. Let us understand various architecture smells that may arise in a software system.