56 code smells in one place, cross-referenced so you can find the one you're thinking of.
Every named code smell in one place β classified, connected, and fixable.
56 code smells, each with its history, related smells, the problems it causes, and how to fix it. It's also a dataset: machine-readable content that researchers can extract with a single command.
Built as a companion to a Springer Nature publication and Master's thesis.
Browse it like a field guide. Each smell has a clear explanation, real code examples, and the refactoring techniques that fix it. You'll build intuition about what "bad code" actually means beyond "it doesn't work."
It's much easier to handle a code review discussion when you can drop a link to a well-described, named phenomenon instead of arguing about why something feels off. This catalog gives names to things you intuitively sense but struggle to articulate.
Data on code smells is scattered across decades of literature, and coverage is wildly disproportionate: some smells are studied constantly, others never made it past a single paper. This catalog tries to fix that. Consistent naming, traced origins, one taxonomy you can actually navigate.
The catalog is also a dataset. From the repository root:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -r data_scraper/requirements.txt
python -m data_scraper.mainUse python -m data_scraper.main -h to inspect the available flags. It parses the same markdown files into structured JSON, ready for analysis.
Boolean Blindness β when
trueandfalsecarry meaning only the original author remembers
Afraid To Fail. Wrapping everything in try-catch instead of letting errors speak.
Fate Over Action β classes that are nouns all the way down, with no verbs in sight
Fallacious Method Name. The name promises one thing. The body does another.
Clever Code β you were proud when you wrote it; nobody can read it now
There are 51 more. Browse the full catalog β
If you'd like to contribute, you're very welcome. Open an issue to start a discussion or submit a pull request directly. I'm deeply convinced that in a pile of stuff this size, I had to make mistakes, even just statistically speaking. π
The barrier is intentionally low: you don't need to know any programming languages. Found a smell we missed? Know a better example? Spot a typo? Each smell is just a markdown file in content/smells/. Edit it right on GitHub.
For Contributors
pnpm install
pnpm dev # local dev server
pnpm build # production build
pnpm test # unit + integration testsNote: supported build and release workflows assume a full
pnpm install --frozen-lockfilebefore running scripts.pnpm install --prodbeforepnpm buildis intentionally unsupported; if that requirement changes later, move all build-required packages together instead of changinggray-matteralone.
content/smells/ 56 smell articles (Markdown + YAML frontmatter)
src/ Astro application: layouts, components, pages, stores
scripts/ Build-time helpers (OG images, redirect generation)
data_scraper/ Python tool that parses content into JSON for research
tests/ Unit, integration, and E2E tests
- Astro 5: content-first, zero JS by default
- Preact for interactive islands (~4 KB)
- Tailwind CSS v4 for styling
- Nano Stores: shared state across islands
- TypeScript throughout
Jerzyk, M., Madeyski, L. (2023). Code Smells: A Comprehensive Online Catalog and Taxonomy. In: Studies in Systems, Decision and Control, vol 462. Springer, Cham. https://doi.org/10.1007/978-3-031-25695-0_24
@inproceedings{jerzyk2023codesmells,
author = {Jerzyk, Marcel and Madeyski, Lech},
title = {Code Smells: A Comprehensive Online Catalog and Taxonomy},
booktitle = {Studies in Systems, Decision and Control},
volume = {462},
year = {2023},
publisher = {Springer, Cham},
doi = {10.1007/978-3-031-25695-0_24}
}