# How to Find the Stinky Parts of Your Code

> 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

%[https://maximilianocontieri.com/code-smell-01-anemic-models] 

%[https://maximilianocontieri.com/code-smell-02-constants-and-magic-numbers] 

%[https://maximilianocontieri.com/code-smell-03-functions-are-too-long] 

%[https://maximilianocontieri.com/code-smell-04-string-abusers] 

%[https://maximilianocontieri.com/code-smell-05-comment-abusers] 

%[https://maximilianocontieri.com/code-smell-06-too-clever-programmer] 

%[https://maximilianocontieri.com/code-smell-07-boolean-variables] 

%[https://maximilianocontieri.com/code-smell-08-long-chains-of-collaborations] 

%[https://maximilianocontieri.com/code-smell-09-dead-code] 

%[https://maximilianocontieri.com/code-smell-10-too-many-arguments] 

%[https://maximilianocontieri.com/code-smell-11-subclassification-for-code-reuse] 

%[https://maximilianocontieri.com/code-smell-12-null] 

%[https://maximilianocontieri.com/code-smell-13-empty-constructors] 

%[https://maximilianocontieri.com/code-smell-14-god-objects] 

%[https://maximilianocontieri.com/code-smell-15-missed-preconditions-1] 

%[https://maximilianocontieri.com/code-smell-16-ripple-effect] 

%[https://maximilianocontieri.com/code-smell-17-global-functions] 

%[https://maximilianocontieri.com/code-smell-18-static-functions] 

%[https://maximilianocontieri.com/code-smell-19-optional-arguments] 

%[https://maximilianocontieri.com/code-smell-20-premature-optimization] 

%[https://maximilianocontieri.com/code-smell-21-anonymous-functions-abusers] 

%[https://maximilianocontieri.com/code-smell-22-helpers] 

%[https://maximilianocontieri.com/code-smell-23-instance-type-checking] 

%[https://maximilianocontieri.com/code-smell-24-boolean-coercions] 

%[https://maximilianocontieri.com/code-smell-25-pattern-abusers] 

%[https://maximilianocontieri.com/code-smell-26-exceptions-polluting] 

%[https://maximilianocontieri.com/code-smell-27-associative-arrays] 

%[https://maximilianocontieri.com/code-smell-28-setters] 

%[https://maximilianocontieri.com/code-smell-29-settingsconfigs] 

%[https://maximilianocontieri.com/code-smell-30-mocking-business] 

%[https://maximilianocontieri.com/code-smell-31-accidental-methods-on-business-objects] 

%[https://maximilianocontieri.com/code-smell-32-singletons] 

%[https://maximilianocontieri.com/code-smell-33-abbreviations] 

%[https://maximilianocontieri.com/code-smell-34-too-many-attributes] 

%[https://maximilianocontieri.com/code-smell-35-state-as-properties] 

%[https://maximilianocontieri.com/code-smell-36-switchcaseelseifelseif-statements] 

%[https://maximilianocontieri.com/code-smell-37-protected-attributes] 

%[https://maximilianocontieri.com/code-smell-38-abstract-names] 

%[https://maximilianocontieri.com/code-smell-39-new-date] 

%[https://maximilianocontieri.com/code-smell-40-dtos] 

%[https://maximilianocontieri.com/code-smell-41-regular-expression-abusers] 

%[https://maximilianocontieri.com/code-smell-42-warningsstrict-mode-off] 

%[https://maximilianocontieri.com/code-smell-43-concrete-classes-subclassified] 

%[https://maximilianocontieri.com/code-smell-44-magic-corrections] 

%[https://maximilianocontieri.com/code-smell-45-not-polymorphic] 

%[https://maximilianocontieri.com/code-smell-46-repeated-code] 

%[https://maximilianocontieri.com/code-smell-47-diagrams] 

%[https://maximilianocontieri.com/code-smell-48-code-without-standards] 

%[https://maximilianocontieri.com/code-smell-49-caches] 

%[https://maximilianocontieri.com/code-smell-50-object-keys] 

%[https://maximilianocontieri.com/code-smell-51-double-negatives] 

%[https://maximilianocontieri.com/code-smell-52-fragile-tests] 

%[https://maximilianocontieri.com/code-smell-53-explicit-iteration] 

%[https://maximilianocontieri.com/code-smell-54-anchor-boats] 

%[https://maximilianocontieri.com/code-smell-55-object-orgy] 

%[https://maximilianocontieri.com/code-smell-56-preprocessors] 

%[https://maximilianocontieri.com/code-smell-57-versioned-functions] 

%[https://maximilianocontieri.com/code-smell-58-yo-yo-problem] 

%[https://maximilianocontieri.com/code-smell-59-basic-do-functions] 

%[https://maximilianocontieri.com/code-smell-60-global-classes] 

%[https://maximilianocontieri.com/code-smell-61-coupling-to-classes] 

%[https://maximilianocontieri.com/code-smell-62-flag-variables] 

%[https://maximilianocontieri.com/code-smell-63-feature-envy] 

%[https://maximilianocontieri.com/code-smell-64-inappropriate-intimacy] 

%[https://maximilianocontieri.com/code-smell-65-variables-named-after-types] 

%[https://maximilianocontieri.com/code-smell-66-shotgun-surgery] 

%[https://maximilianocontieri.com/code-smell-67-middle-man] 

%[https://maximilianocontieri.com/code-smell-68-getters] 

%[https://maximilianocontieri.com/code-smell-69-big-bang-javascript-ridiculous-castings] 

%[https://maximilianocontieri.com/code-smell-70-anemic-model-generators] 

%[https://maximilianocontieri.com/code-smell-71-magic-floats-disguised-as-decimals] 

%[https://maximilianocontieri.com/code-smell-72-return-codes] 

%[https://maximilianocontieri.com/code-smell-73-exceptions-for-expected-cases] 

%[https://maximilianocontieri.com/code-smell-74-empty-lines] 

%[https://maximilianocontieri.com/code-smell-75-comments-inside-a-method] 

%[https://maximilianocontieri.com/code-smell-76-generic-assertions] 

%[https://maximilianocontieri.com/code-smell-77-timestamps] 

%[https://maximilianocontieri.com/code-smell-78-callback-hell] 

%[https://maximilianocontieri.com/code-smell-79-theresult] 

%[https://maximilianocontieri.com/code-smell-80-nested-trycatch] 

%[https://maximilianocontieri.com/code-smell-81-result] 

%[https://maximilianocontieri.com/code-smell-82-tests-violating-encapsulation] 

%[https://maximilianocontieri.com/code-smell-83-variables-reassignment] 

%[https://maximilianocontieri.com/code-smell-84-max-less-min-javascript] 

%[https://maximilianocontieri.com/code-smell-85-and-functions] 

%[https://maximilianocontieri.com/code-smell-86-mutable-const-arrays] 

%[https://maximilianocontieri.com/code-smell-87-inconsistent-parameters-sorting] 

%[https://maximilianocontieri.com/code-smell-88-lazy-initialization] 

%[https://maximilianocontieri.com/code-smell-89-math-feature-envy] 

%[https://maximilianocontieri.com/code-smell-90-implementative-callback-events] 

%[https://maximilianocontieri.com/code-smell-91-test-asserts-without-description] 

%[https://maximilianocontieri.com/code-smell-92-isolated-subclasses-names] 

%[https://maximilianocontieri.com/code-smell-93-send-me-anything] 

%[https://maximilianocontieri.com/code-smell-94-too-many-imports] 

%[https://maximilianocontieri.com/code-smell-95-premature-classification] 

%[https://maximilianocontieri.com/code-smell-96-my-objects] 

%[https://maximilianocontieri.com/code-smell-97-error-messages-without-empathy] 

%[https://maximilianocontieri.com/code-smell-98-speling-mistakes] 

%[https://maximilianocontieri.com/code-smell-99-first-second] 

%[https://maximilianocontieri.com/code-smell-100-goto] 

%[https://maximilianocontieri.com/code-smell-101-comparison-against-booleans] 

%[https://maximilianocontieri.com/code-smell-102-arrow-code] 

%[https://maximilianocontieri.com/code-smell-103-double-encapsulation] 

%[https://maximilianocontieri.com/code-smell-104-assert-true] 

%[https://maximilianocontieri.com/code-smell-105-comedian-methods] 

%[https://maximilianocontieri.com/code-smell-106-production-dependent-code] 

%[https://maximilianocontieri.com/code-smell-107-variables-reuse] 

%[https://maximilianocontieri.com/code-smell-108-float-assertions] 

%[https://maximilianocontieri.com/code-smell-109-automatic-properties] 

%[https://maximilianocontieri.com/code-smell-110-switches-with-defaults] 

%[https://maximilianocontieri.com/code-smell-111-modifying-collections-while-traversing] 

%[https://maximilianocontieri.com/code-smell-112-testing-private-methods] 

%[https://maximilianocontieri.com/code-smell-113-data-naming] 

%[https://maximilianocontieri.com/code-smell-114-empty-class] 

%[https://maximilianocontieri.com/code-smell-115-return-true] 

%[https://maximilianocontieri.com/code-smell-116-variables-declared-with-var] 

%[https://maximilianocontieri.com/code-smell-117-unrealistic-data] 

%[https://maximilianocontieri.com/code-smell-118-return-false] 

%[https://maximilianocontieri.com/code-smell-119-stairs-code] 

%[https://maximilianocontieri.com/code-smell-120-sequential-ids] 

%[https://maximilianocontieri.com/code-smell-121-string-validations] 

%[https://maximilianocontieri.com/code-smell-122-primitive-obsession] 

%[https://maximilianocontieri.com/code-smell-123-mixed-what-and-how] 

%[https://maximilianocontieri.com/code-smell-124-divergent-change] 

%[https://maximilianocontieri.com/code-smell-125-is-a-relationship] 

%[https://maximilianocontieri.com/code-smell-126-fake-null-object] 

%[https://maximilianocontieri.com/code-smell-127-mutable-constants] 

%[https://maximilianocontieri.com/code-smell-128-non-english-coding] 

%[https://maximilianocontieri.com/code-smell-129-structural-optimizations] 

%[https://maximilianocontieri.com/code-smell-130-addressimpl] 

%[https://maximilianocontieri.com/code-smell-131-zero-argument-constructor] 

%[https://maximilianocontieri.com/code-smell-132-exception-try-too-broad] 

%[https://maximilianocontieri.com/code-smell-133-hardcoded-if-conditions] 

%[https://maximilianocontieri.com/code-smell-134-specialized-business-collections] 

%[https://maximilianocontieri.com/code-smell-135-interfaces-with-just-one-realization] 

%[https://maximilianocontieri.com/code-smell-136-classes-with-just-one-subclass] 

%[https://maximilianocontieri.com/code-smell-137-inheritance-tree-too-deep] 

%[https://maximilianocontieri.com/code-smell-138-packages-dependency] 

%[https://maximilianocontieri.com/code-smell-139-business-code-in-the-user-interface] 

%[https://maximilianocontieri.com/code-smell-140-short-circuit-evaluation] 

%[https://maximilianocontieri.com/code-smell-141-iengine-avehicle-implcar] 

%[https://maximilianocontieri.com/code-smell-142-queries-in-constructors] 

%[https://maximilianocontieri.com/code-smell-143-data-clumps] 

%[https://maximilianocontieri.com/code-smell-144-fungible-objects] 

%[https://maximilianocontieri.com/code-smell-145-short-circuit-hack] 

%[https://maximilianocontieri.com/code-smell-146-getter-comments] 

%[https://maximilianocontieri.com/code-smell-147-too-many-methods] 

%[https://maximilianocontieri.com/code-smell-148-todos] 

%[https://maximilianocontieri.com/code-smell-149-optional-chaining] 

%[https://maximilianocontieri.com/code-smell-150-equal-comparison] 

%[https://maximilianocontieri.com/code-smell-151-commented-code] 

%[https://maximilianocontieri.com/code-smell-152-logical-comment] 

%[https://maximilianocontieri.com/code-smell-153-too-long-names] 

%[https://maximilianocontieri.com/code-smell-154-too-many-variables] 

%[https://maximilianocontieri.com/code-smell-155-multiple-promises] 

%[https://maximilianocontieri.com/code-smell-156-implicit-else] 

%[https://maximilianocontieri.com/code-smell-157-balance-at-0] 

%[https://maximilianocontieri.com/code-smell-158-variables-not-variable] 

%[https://maximilianocontieri.com/code-smell-159-mixedcase] 

%[https://maximilianocontieri.com/code-smell-160-invalid-id-9999] 

%[https://maximilianocontieri.com/code-smell-161-abstractfinalundefined-classes] 

%[https://maximilianocontieri.com/code-smell-162-too-many-parentheses] 

%[https://maximilianocontieri.com/code-smell-163-collection-in-name] 

%[https://maximilianocontieri.com/code-smell-164-mixed-indentations] 

%[https://maximilianocontieri.com/code-smell-165-empty-exception-blocks] 

%[https://maximilianocontieri.com/code-smell-166-low-level-errors-on-user-interface] 

%[https://maximilianocontieri.com/code-smell-167-hashing-comparison] 

%[https://maximilianocontieri.com/code-smell-168-undocumented-decisions] 

%[https://maximilianocontieri.com/code-smell-169-glued-methods] 

%[https://maximilianocontieri.com/code-smell-170-refactor-with-functional-changes] 

%[https://maximilianocontieri.com/code-smell-171-plural-classes] 

%[https://maximilianocontieri.com/code-smell-172-default-argument-values-not-last] 

%[https://maximilianocontieri.com/code-smell-173-broken-windows] 

%[https://maximilianocontieri.com/code-smell-174-class-name-in-attributes] 

%[https://maximilianocontieri.com/code-smell-175-changes-without-coverage] 

%[https://maximilianocontieri.com/code-smell-176-changes-in-essence] 

%[https://maximilianocontieri.com/code-smell-177-missing-small-objects] 

%[https://maximilianocontieri.com/code-smell-178-subsets-violation] 

%[https://maximilianocontieri.com/code-smell-179-known-bugs] 

%[https://maximilianocontieri.com/code-smell-180-bitwise-optimizations] 

%[https://maximilianocontieri.com/code-smell-181-nested-classes] 

%[https://maximilianocontieri.com/code-smell-182-over-generalization] 

%[https://maximilianocontieri.com/code-smell-183-obsolete-comments] 

%[https://maximilianocontieri.com/code-smell-184-exception-arrow-code] 

%[https://maximilianocontieri.com/code-smell-185-evil-regular-expressions] 

%[https://maximilianocontieri.com/code-smell-186-hardcoded-business-conditions] 

%[https://maximilianocontieri.com/8-lls-po-spq-sli] 

%[https://maximilianocontieri.com/code-smell-188-redundant-parameter-names] 

%[https://maximilianocontieri.com/code-smell-189-not-sanitized-input] 

%[https://maximilianocontieri.com/code-smell-190-unnecessary-properties]

%[https://maximilianocontieri.com/code-smell-191-misplaced-responsibility]

%[https://maximilianocontieri.com/code-smell-192-optional-attributes]

%[https://maximilianocontieri.com/code-smell-193-switch-instead-of-formula]

%[https://maximilianocontieri.com/code-smell-194-missing-interval]

%[https://maximilianocontieri.com/code-smell-195-yoda-conditions]

%[https://maximilianocontieri.com/code-smell-196-javascript-array-constructors]

%[https://maximilianocontieri.com/code-smell-197-gratuitous-context]

%[https://maximilianocontieri.com/code-smell-198-hidden-assumptions]

%[https://maximilianocontieri.com/code-smell-199-gratuitous-booleans]

%[https://maximilianocontieri.com/code-smell-200-poltergeist]

%[https://maximilianocontieri.com/code-smell-201-nested-ternaries]

%[https://maximilianocontieri.com/code-smell-202-god-constant-class]

%[https://maximilianocontieri.com/code-smell-203-irrelevant-test-information]

%[https://maximilianocontieri.com/code-smell-204-tests-depending-on-dates]

%[https://maximilianocontieri.com/code-smell-205-code-in-destructors]

%[https://maximilianocontieri.com/code-smell-206-long-ternaries]

%[https://maximilianocontieri.com/code-smell-207-dynamic-methods]

%[https://maximilianocontieri.com/code-smell-208-null-island]

%[https://maximilianocontieri.com/code-smell-209-side-effects]

%[https://maximilianocontieri.com/code-smell-210-dynamic-properties]

%[https://maximilianocontieri.com/code-smell-211-tab-over-spaces]

%[https://maximilianocontieri.com/code-smell-212-elvis-operator]

%[https://maximilianocontieri.com/code-smell-213-hoisting]

%[https://maximilianocontieri.com/code-smell-214-duplicate-parameter-names]

%[https://maximilianocontieri.com/code-smell-215-deserializing-object-vulnerability]

%[https://maximilianocontieri.com/code-smell-216-fat-interface]

%[https://maximilianocontieri.com/code-smell-217-empty-implementation]

%[https://maximilianocontieri.com/code-smell-218-magic-concatenation]

%[https://maximilianocontieri.com/code-smell-219-looping-from-index-0]

%[https://maximilianocontieri.com/code-smell-220-return-tuple]

%[https://maximilianocontieri.com/code-smell-221-missing-break-in-switch]

%[https://maximilianocontieri.com/code-smell-222-comma-operator]

%[https://maximilianocontieri.com/code-smell-223-racial-naming]

%[https://maximilianocontieri.com/code-smell-224-deodorant-comments]

%[https://maximilianocontieri.com/code-smell-225-pass-by-reference]

%[https://maximilianocontieri.com/code-smell-226-mixed-priorities]

%[https://maximilianocontieri.com/code-smell-227-cowboy-coding]

%[https://maximilianocontieri.com/code-smell-228-multiple-classes-per-file]

%[https://maximilianocontieri.com/code-smell-229-red-tape]

%[https://maximilianocontieri.com/code-smell-230-schrodinger-code]

%[https://maximilianocontieri.com/code-smell-231-redundant-data]

%[https://maximilianocontieri.com/code-smell-232-reusable-code]

%[https://maximilianocontieri.com/code-smell-233-collections-count]

%[https://maximilianocontieri.com/code-smell-234-long-circuit]

%[https://maximilianocontieri.com/code-smell-235-console-side-effects]

%[https://maximilianocontieri.com/code-smell-236-unwrapped-lines]

%[https://maximilianocontieri.com/code-smell-237-attribute-definitions]

%[https://maximilianocontieri.com/code-smell-238-entangled-code]

%[https://maximilianocontieri.com/code-smell-239-big-pull-request]

%[https://maximilianocontieri.com/code-smell-240-dead-store]

%[https://maximilianocontieri.com/code-smell-241-referential-transparency-violation]

%[https://maximilianocontieri.com/code-smell-242-zombie-feature-flags]

%[https://maximilianocontieri.com/code-smell-243-concatenated-properties]

%[https://maximilianocontieri.com/code-smell-244-incomplete-error-information]

%[https://maximilianocontieri.com/code-smell-245-exec-and-eval]

%[https://maximilianocontieri.com/code-smell-246-expiration-date]

%[https://maximilianocontieri.com/code-smell-247-javascript-replace]

%[https://maximilianocontieri.com/code-smell-248-unreliable-copy]

%[https://maximilianocontieri.com/code-smell-249-constants-as-numbers]

%[https://maximilianocontieri.com/code-smell-250-premature-memoization]
  
%[https://maximilianocontieri.com/code-smell-251-collections-empty]

%[https://maximilianocontieri.com/code-smell-252-nullcustomer]

%[https://maximilianocontieri.com/code-smell-253-silent-truncation]

%[https://maximilianocontieri.com/code-smell-254-mystery-guest]

%[https://maximilianocontieri.com/code-smell-255-parallel-hierarchies]

%[https://maximilianocontieri.com/code-smell-256-mutable-getters]

%[https://maximilianocontieri.com/code-smell-257-name-with-collections]

%[https://maximilianocontieri.com/code-smell-258-secrets-in-code]

%[https://maximilianocontieri.com/code-smell-259-testing-with-external-resources]

%[https://maximilianocontieri.com/code-smell-260-crowdstrike-null]

%[https://maximilianocontieri.com/code-smell-261-digicert-underscores]

%[https://maximilianocontieri.com/code-smell-262-not-replaced-constants]

%[https://maximilianocontieri.com/code-smell-263-squatting]

%[https://maximilianocontieri.com/code-smell-264-hanlons-razor]

%[https://maximilianocontieri.com/code-smell-265-linguistic-confusion]

%[https://maximilianocontieri.com/code-smell-266-collection-aliasing]

%[https://maximilianocontieri.com/code-smell-267-objects-aliasing]

%[https://maximilianocontieri.com/code-smell-268-ternary-metaprogramming]

%[https://maximilianocontieri.com/code-smell-269-low-level-addition]

%[https://maximilianocontieri.com/code-smell-270-boolean-apis]

%[https://maximilianocontieri.com/code-smell-271-the-hollywood-principle]

%[https://maximilianocontieri.com/code-smell-272-api-chain]

%[https://maximilianocontieri.com/code-smell-273-overengineering]

%[https://maximilianocontieri.com/code-smell-274-cascaded-returns]

%[https://maximilianocontieri.com/code-smell-275-missing-test-wrong-path]

%[https://maximilianocontieri.com/code-smell-276-untested-regular-expressions]

%[https://maximilianocontieri.com/code-smell-277-uppercase-acronyms]

%[https://maximilianocontieri.com/code-smell-278-dirname-and-file]

%[https://maximilianocontieri.com/code-smell-279-loop-premature-optimization]

%[https://maximilianocontieri.com/code-smell-280-spaghetti-code]

%[https://maximilianocontieri.com/code-smell-281-hashes]

%[https://maximilianocontieri.com/code-smell-282-bad-defaults]

%[https://maximilianocontieri.com/code-smell-283-unresolved-meta-tags]

%[https://maximilianocontieri.com/code-smell-284-encrypted-functions]

%[https://maximilianocontieri.com/code-smell-285-non-imperative-functions-names]

%[https://maximilianocontieri.com/code-smell-286-overlapping-methods]

%[https://maximilianocontieri.com/code-smell-287-unused-local-assignment]

%[https://maximilianocontieri.com/code-smell-288-unthrown-exceptions]

%[https://maximilianocontieri.com/code-smell-289-shy-visitor]

%[https://maximilianocontieri.com/code-smell-290-refused-bequest]

%[https://maximilianocontieri.com/code-smell-291-mutable-keys]

%[https://maximilianocontieri.com/code-smell-292-missing-return]

%[https://maximilianocontieri.com/code-smell-293-istesting]

%[https://maximilianocontieri.com/code-smell-294-implicit-return]

%[https://maximilianocontieri.com/code-smell-295-string-concatenation]

%[https://maximilianocontieri.com/code-smell-296-unhappy-to-the-right]

%[https://maximilianocontieri.com/code-smell-297-syntactic-noise]

%[https://maximilianocontieri.com/code-smell-298-microsoft-windows-time-waste]

%[https://maximilianocontieri.com/code-smell-299-overloaded-test-setup]

%[https://maximilianocontieri.com/code-smell-300-packet-hallucination]

%[https://maximilianocontieri.com/code-smell-301-database-as-parameter]

%[https://maximilianocontieri.com/code-smell-302-misleading-status-codes]

%[https://maximilianocontieri.com/code-smell-303-breaking-changes]

%[https://maximilianocontieri.com/code-smell-304-null-pointer-exception]

%[https://maximilianocontieri.com/code-smell-305-null-infinity]

%[https://maximilianocontieri.com/code-smell-306-ai-external-comments]

%[https://maximilianocontieri.com/code-smell-307-naive-time-assumptions]

%[https://maximilianocontieri.com/code-smell-308-not-polymorphic-return]

%[https://maximilianocontieri.com/code-smell-309-query-parameter-api-versioning]

%[https://maximilianocontieri.com/code-smell-310-vague-date-naming]

%[https://maximilianocontieri.com/code-smell-311-plain-text-passwords]

%[https://maximilianocontieri.com/code-smell-312-too-many-asserts]

%[https://maximilianocontieri.com/code-smell-313-workslop-code]

%[https://maximilianocontieri.com/code-smell-314-model-collapse]

%[https://maximilianocontieri.com/code-smell-315-cloudflare-feature-explosion]

%[https://maximilianocontieri.com/code-smell-316-nitpicking]

%[https://maximilianocontieri.com/code-smell-317-email-handling-vulnerabilities]

%[https://maximilianocontieri.com/code-smell-318-refactoring-dirty-code]

... and many more to come.

---

![richard-ecsedi-Wv9Bn8te3as-unsplash.jpg](https://cdn.hashnode.com/res/hashnode/image/upload/v1603577138164/btRuwlKSA.jpeg align="left")

Photo by [Richárd Ecsedi](https://unsplash.com/@icsike2) on [Unsplash](https://unsplash.com/@icsike2)

---

> Smells are certain structures in the code that suggest (sometimes they scream for) the possibility of refactoring

*Martin Fowler*

%[https://maximilianocontieri.com/software-engineering-great-quotes] 

---

Part of the objective of this series is to generate spaces for debate and discussion on software design.

%[https://maximilianocontieri.com/object-design-checklist] 

We look forward to your comments and suggestions on this article.

Original Thread on [Twitter](https://twitter.com/mcsee1/status/1297685140995551233)
