TL;DR: A Compilation of bad smells in code.
The code smells badly.
Let's see how to change the aromas.
In this series, we will see several symptoms and situations that make us doubt the quality of our development. We will present possible solutions.
Most of these smells are just hints of something that might be wrong. They are not rigid rules.
Code Smells
Code Smell 01 - Anemic Models
Maxi Contieri γ» Oct 20 '20 γ» 2 min read
Code Smell 02 - Constants and Magic Numbers
Maxi Contieri γ» Oct 21 '20 γ» 1 min read
Code Smell 149 - Optional Chaining
Maxi Contieri γ» Jul 16 γ» 2 min read
Code Smell 04 - String Abusers
Maxi Contieri γ» Oct 23 '20 γ» 1 min read
Code Smell 05 - Comment Abusers
Maxi Contieri γ» Oct 24 '20 γ» 2 min read
Code Smell 06 - Too Clever Programmer
Maxi Contieri γ» Oct 25 '20 γ» 2 min read
Code Smell 07 - Boolean Variables
Maxi Contieri γ» Oct 26 '20 γ» 2 min read
Code Smell 08 - Long Chains Of Collaborations
Maxi Contieri γ» Oct 27 '20 γ» 1 min read
Code Smell 10β-βToo Many Arguments
Maxi Contieri γ» Oct 29 '20 γ» 2 min read
Code Smell 11 - Subclassification for Code Reuse
Maxi Contieri γ» Oct 30 '20 γ» 2 min read
Code Smell 13 - Empty Constructors
Maxi Contieri γ» Nov 1 '20 γ» 2 min read
Code Smell 14 - God Objects
Maxi Contieri γ» Nov 2 '20 γ» 1 min read
Code Smell 15 - Missed Preconditions
Maxi Contieri γ» Nov 3 '20 γ» 2 min read
Code Smell 16β-βRippleΒ Effect
Maxi Contieri γ» Nov 4 '20 γ» 2 min read
Code Smell 17 - Global Functions
Maxi Contieri γ» Nov 5 '20 γ» 1 min read
Code Smell 18 β Static Functions
Maxi Contieri γ» Nov 6 '20 γ» 2 min read
Code Smell 19 β Optional Arguments
Maxi Contieri γ» Nov 7 '20 γ» 2 min read
Code Smell 20 - Premature Optimization
Maxi Contieri γ» Nov 8 '20 γ» 2 min read
Code Smell 21 - Anonymous Functions Abusers
Maxi Contieri γ» Nov 10 '20 γ» 2 min read
Code Smell 22 - Helpers
Maxi Contieri γ» Nov 12 '20 γ» 2 min read
Code Smell 23 - Instance Type Checking
Maxi Contieri γ» Nov 13 '20 γ» 2 min read
Code Smell 24 - Boolean Coercions
Maxi Contieri γ» Nov 14 '20 γ» 2 min read
Code Smell 25 - Pattern Abusers
Maxi Contieri γ» Nov 15 '20 γ» 2 min read
Code Smell 26 - Exceptions Polluting
Maxi Contieri γ» Nov 16 '20 γ» 2 min read
Code Smell 27 - Associative Arrays
Maxi Contieri γ» Nov 18 '20 γ» 2 min read
Code Smell 28 - Setters
Maxi Contieri γ» Nov 19 '20 γ» 2 min read
Code Smell 29 - Settings/Configs
Maxi Contieri γ» Nov 20 '20 γ» 2 min read
Code Smell 30 - Mocking Business
Maxi Contieri γ» Nov 21 '20 γ» 1 min read
Code Smell 31 - Accidental Methods on Business Objects
Maxi Contieri γ» Nov 22 '20 γ» 1 min read
Code Smell 32 - Singletons
Maxi Contieri γ» Nov 23 '20 γ» 2 min read
Code Smell 33 - Abbreviations
Maxi Contieri γ» Nov 24 '20 γ» 2 min read
Code Smell 34 - Too Many Attributes
Maxi Contieri γ» Nov 25 '20 γ» 1 min read
Code Smell 35 - State as Properties
Maxi Contieri γ» Nov 27 '20 γ» 1 min read
Code Smell 36 - Switch/case/elseif/else/if statements
Maxi Contieri γ» Nov 28 '20 γ» 1 min read
Code Smell 37 - Protected Attributes
Maxi Contieri γ» Nov 29 '20 γ» 2 min read
Code Smell 38 - Abstract Names
Maxi Contieri γ» Nov 30 '20 γ» 1 min read
Code Smell 39 - new Date()
Maxi Contieri γ» Dec 1 '20 γ» 1 min read
Code Smell 40 - DTOs
Maxi Contieri γ» Dec 2 '20 γ» 2 min read
Code Smell 41 - Regular Expression Abusers
Maxi Contieri γ» Dec 3 '20 γ» 1 min read
Code Smell 42 - Warnings/Strict Mode Off
Maxi Contieri γ» Dec 4 '20 γ» 2 min read
Code Smell 43 - Concrete Classes Subclassified
Maxi Contieri γ» Dec 5 '20 γ» 1 min read
Code Smell 44 - Magic Corrections
Maxi Contieri γ» Dec 7 '20 γ» 1 min read
Code Smell 45β-βNot Polymorphic
Maxi Contieri γ» Dec 7 '20 γ» 1 min read
Code Smell 46 - Repeated Code
Maxi Contieri γ» Dec 8 '20 γ» 1 min read
Code Smell 47 - Diagrams
Maxi Contieri γ» Dec 9 '20 γ» 2 min read
Code Smell 48 - Code Without Standards
Maxi Contieri γ» Dec 10 '20 γ» 1 min read
Code Smell 49 - Caches
Maxi Contieri γ» Dec 11 '20 γ» 1 min read
Code Smell 50 - Object Keys
Maxi Contieri γ» Dec 12 '20 γ» 2 min read
Code Smell 51 - Double Negatives
Maxi Contieri γ» Dec 24 '20 γ» 1 min read
Code Smell 52 - Fragile Tests
Maxi Contieri γ» Jan 4 '21 γ» 2 min read
Code Smell 53 - Explicit Iteration
Maxi Contieri γ» Jan 5 '21 γ» 2 min read
Code Smell 54 - Anchor Boats
Maxi Contieri γ» Jan 6 '21 γ» 2 min read
Code Smell 55 - Object Orgy
Maxi Contieri γ» Jan 17 '21 γ» 2 min read
Code Smell 56 - Preprocessors
Maxi Contieri γ» Jan 18 '21 γ» 2 min read
Code Smell 57 - Versioned Functions
Maxi Contieri γ» Jan 20 '21 γ» 1 min read
Code Smell 58 - Yo-yo Problem
Maxi Contieri γ» Jan 24 '21 γ» 2 min read
Code Smell 59 - Basic / Do Functions
Maxi Contieri γ» Jan 27 '21 γ» 2 min read
Code Smell 60 - Global Classes
Maxi Contieri γ» Jan 31 '21 γ» 2 min read
Code Smell 61 - Coupling to Classes
Maxi Contieri γ» Feb 4 '21 γ» 2 min read
Code Smell 62 - Flag Variables
Maxi Contieri γ» Feb 8 '21 γ» 1 min read
Code Smell 63 - Feature Envy
Maxi Contieri γ» Mar 23 '21 γ» 2 min read
Code Smell 64 - Inappropriate Intimacy
Maxi Contieri γ» Mar 27 '21 γ» 1 min read
Code Smell 65 - Variables Named After Types
Maxi Contieri γ» Apr 2 '21 γ» 1 min read
Code Smell 66 - Shotgun Surgery
Maxi Contieri γ» Apr 5 '21 γ» 2 min read
Code Smell 67 - Middle Man
Maxi Contieri γ» Apr 12 '21 γ» 1 min read
Code Smell 68 - Getters
Maxi Contieri γ» Apr 29 '21 γ» 2 min read
Code Smell 69 - Big Bang (JavaScript Ridiculous Castings)
Maxi Contieri γ» May 4 '21 γ» 2 min read
Code Smell 70 - Anemic Model Generators
Maxi Contieri γ» May 18 '21 γ» 2 min read
Code Smell 71 - Magic Floats Disguised as Decimals
Maxi Contieri γ» May 24 '21 γ» 2 min read
Code Smell 72 - Return Codes
Maxi Contieri γ» May 28 '21 γ» 2 min read
Code Smell 73 - Exceptions for Expected Cases
Maxi Contieri γ» May 31 '21 γ» 2 min read
Code Smell 74 - Empty Lines
Maxi Contieri γ» Jun 4 '21 γ» 1 min read
Code Smell 75 - Comments Inside a Method
Maxi Contieri γ» Jun 5 '21 γ» 2 min read
Code Smell 76 - Generic Assertions
Maxi Contieri γ» Jun 7 '21 γ» 2 min read
Code Smell 77 - Timestamps
Maxi Contieri γ» Jun 9 '21 γ» 2 min read
Code Smell 78 - Callback Hell
Maxi Contieri γ» Jun 11 '21 γ» 2 min read
Code Smell 79 - TheResult
Maxi Contieri γ» Jun 14 '21 γ» 1 min read
Code Smell 80 - Nested Try/Catch
Maxi Contieri γ» Jun 16 '21 γ» 2 min read
Code Smell 81 - Result
Maxi Contieri γ» Jun 19 '21 γ» 1 min read
Code Smell 82 - Tests Violating Encapsulation
Maxi Contieri γ» Jun 25 '21 γ» 2 min read
Code Smell 83 - Variables Reassignment
Maxi Contieri γ» Jul 14 '21 γ» 2 min read
Code Smell 84 - Max < Min (Javascript)
Maxi Contieri γ» Jul 20 '21 γ» 2 min read
Code Smell 85 - And Functions
Maxi Contieri γ» Aug 21 '21 γ» 1 min read
Code Smell 86 - Mutable Const Arrays
Maxi Contieri γ» Aug 25 '21 γ» 1 min read
Code Smell 87 - Inconsistent Parameters Sorting
Maxi Contieri γ» Sep 26 '21 γ» 1 min read
Code Smell 87 - Inconsistent Parameters Sorting
Maxi Contieri γ» Sep 26 '21 γ» 1 min read
Code Smell 89 - Math Feature Envy
Maxi Contieri γ» Oct 4 '21 γ» 2 min read
Code Smell 90 - Implementative Callback Events
Maxi Contieri γ» Oct 7 '21 γ» 1 min read
Code Smell 91 - Test Asserts without Description
Maxi Contieri γ» Oct 8 '21 γ» 1 min read
Code Smell 92 - Isolated Subclasses Names
Maxi Contieri γ» Oct 11 '21 γ» 2 min read
Code Smell 93 - Send me Anything
Maxi Contieri γ» Oct 13 '21 γ» 2 min read
Code Smell 90 - Implementative Callback Events
Maxi Contieri γ» Oct 7 '21 γ» 1 min read
Code Smell 95 - Premature Classification
Maxi Contieri γ» Oct 16 '21 γ» 2 min read
Code Smell 96 - My Objects
Maxi Contieri γ» Oct 25 '21 γ» 1 min read
Code Smell 97 - Error Messages Without Empathy
Maxi Contieri γ» Oct 27 '21 γ» 1 min read
Code Smell 98 - Speling Mistakes
Maxi Contieri γ» Oct 29 '21 γ» 1 min read
Code Smell 99 - First Second
Maxi Contieri γ» Nov 1 '21 γ» 1 min read
Code Smell 100 - GoTo
Maxi Contieri γ» Nov 6 '21 γ» 2 min read
Code Smell 101 - Comparison Against Booleans
Maxi Contieri γ» Nov 11 '21 γ» 2 min read
Code Smell 102 - Arrow Code
Maxi Contieri γ» Nov 15 '21 γ» 2 min read
Code Smell 103 - Double Encapsulation
Maxi Contieri γ» Nov 19 '21 γ» 2 min read
Code Smell 104 - Assert True
Maxi Contieri γ» Nov 21 '21 γ» 2 min read
Code Smell 105 - Comedian Methods
Maxi Contieri γ» Nov 23 '21 γ» 2 min read
Code Smell 106 - Production Dependent Code
Maxi Contieri γ» Nov 27 '21 γ» 2 min read
Code Smell 107 - Variables Reuse
Maxi Contieri γ» Dec 1 '21 γ» 2 min read
Code Smell 108 - Float Assertions
Maxi Contieri γ» Dec 3 '21 γ» 2 min read
Code Smell 109 - Automatic Properties
Maxi Contieri γ» Dec 7 '21 γ» 2 min read
Code Smell 110 - Switches With Defaults
Maxi Contieri γ» Dec 15 '21 γ» 2 min read
Code Smell 111 - Modifying Collections While Traversing
Maxi Contieri γ» Dec 19 '21 γ» 2 min read
Code Smell 112 - Testing Private Methods
Maxi Contieri γ» Dec 29 '21 γ» 2 min read
Code Smell 113 - Data Naming
Maxi Contieri γ» Jan 5 γ» 2 min read
Code Smell 114 - Empty Class
Maxi Contieri γ» Feb 12 γ» 2 min read
Code Smell 117 - Unrealistic Data
Maxi Contieri γ» Mar 3 γ» 3 min read
Code Smell 122 - Primitive Obsession
Maxi Contieri γ» Mar 17 γ» 2 min read
Code Smell 127 - Mutable Constants
Maxi Contieri γ» Apr 5 γ» 2 min read
Code Smell 128 - Non English Coding
Maxi Contieri γ» Apr 9 γ» 2 min read
Code Smell 129 - Structural Optimizations
Maxi Contieri γ» Apr 12 γ» 2 min read
Code Smell 130 - AddressImpl
Maxi Contieri γ» Apr 18 γ» 2 min read
Code Smell 132 - Exception Try Too Broad
Maxi Contieri γ» May 18 γ» 2 min read
Code Smell 133 - Hardcoded IF Conditions
Maxi Contieri γ» May 20 γ» 2 min read
Code Smell 134 - Specialized Business Collections
Maxi Contieri γ» May 22 γ» 2 min read
Code Smell 135 - Interfaces With just One Realization
Maxi Contieri γ» May 26 γ» 2 min read
Code Smell 137 - Inheritance Tree Too Deep
Maxi Contieri γ» May 31 γ» 2 min read
Code Smell 138 - Packages Dependency
Maxi Contieri γ» Jun 3 γ» 2 min read
Code Smell 139 - Business Code in the User Interface
Maxi Contieri γ» Jun 9 γ» 3 min read
Code Smell 140 - Short Circuit Evaluation
Maxi Contieri γ» Jun 13 γ» 2 min read
Code Smell 141 - IEngine , AVehicle, ImplCar
Maxi Contieri γ» Jun 18 γ» 2 min read
Code Smell 142 - Queries in Constructors
Maxi Contieri γ» Jun 20 γ» 2 min read
Code Smell 143 - Data Clumps
Maxi Contieri γ» Jun 22 γ» 2 min read
Code Smell 144 - Fungible Objects
Maxi Contieri γ» Jun 25 γ» 2 min read
Code Smell 145 - Short Circuit Hack
Maxi Contieri γ» Jun 30 γ» 2 min read
Code Smell 146 - Getter Comments
Maxi Contieri γ» Jul 2 γ» 2 min read
Code Smell 147 - Too Many Methods
Maxi Contieri γ» Jul 6 γ» 2 min read
Code Smell 148 - ToDos
Maxi Contieri γ» Jul 13 γ» 2 min read
Code Smell 149 - Optional Chaining
Maxi Contieri γ» Jul 16 γ» 2 min read
Code Smell 150 - Equal Comparison
Maxi Contieri γ» Jul 19 γ» 2 min read
Code Smell 151 - Commented Code
Maxi Contieri γ» Jul 22 γ» 2 min read
Code Smell 152 - Logical Comment
Maxi Contieri γ» Jul 24 γ» 2 min read
Code Smell 153 - Too Long Names
Maxi Contieri γ» Jul 29 γ» 2 min read
Code Smell 154 - Too Many Variables
Maxi Contieri γ» Jul 31 γ» 2 min read
Code Smell 155 - Multiple Promises
Maxi Contieri γ» Aug 3 γ» 2 min read
Code Smell 156 - Implicit Else
Maxi Contieri γ» Aug 6 γ» 2 min read
Code Smell 157 - Balance at 0
Maxi Contieri γ» Aug 10 γ» 2 min read
Code Smell 158 - Variables not Variable
Maxi Contieri γ» Aug 13 γ» 2 min read
CoDe SmElL 159 - mIxEd_cASe
Maxi Contieri γ» Aug 19 γ» 2 min read
Code Smell 161 - Abstract/Final/Undefined Classes
Maxi Contieri γ» Sep 2 γ» 2 min read
Code Smell 162 - Too Many Parentheses
Maxi Contieri γ» Sep 10 γ» 1 min read
Code Smell 163 - Collection in Name
Maxi Contieri γ» Sep 16 γ» 2 min read
Code Smell 164 - Mixed Indentations
Maxi Contieri γ» Sep 21 γ» 2 min read
Code Smell 165 - Empty Exception Blocks
Maxi Contieri γ» Sep 24 γ» 2 min read
Code Smell 166 - Low-Level Errors on User Interface
Maxi Contieri γ» Sep 28 γ» 2 min read
Code Smell 167 - Hashing Comparison
Maxi Contieri γ» Oct 9 γ» 2 min read
Code Smell 168 - Undocumented Decisions
Maxi Contieri γ» Oct 11 γ» 1 min read
... and many more to come.
Photo by RichΓ‘rd Ecsedi on Unsplash
Smells are certain structures in the code that suggest (sometimes they scream for) the possibility of refactoring
Martin Fowler
Software Engineering Great Quotes
Maxi Contieri γ» Dec 28 '20 γ» 13 min read
Part of the objective of this series of articles is to generate spaces for debate and discussion on software design.
Object Design Checklist
Maxi Contieri γ» May 25 '21 γ» 2 min read
We look forward to your comments and suggestions on this article.
Original Thread on Twitter

Top comments (0)