Debugging guides, one bug at a time
Each guide takes one common bug, explains it in a minimal example, shows the fix and the wrong fixes, and then opens a matching free challenge so you can fix it yourself.
Browse the current guides
JavaScript The missing await bug in JavaScript async functions
A missing await makes JavaScript read a Promise as if it were the resolved value. See the failure, the one-line fix, and the wrong fixes to avoid.
Python Why a mutable default argument leaks state in Python
A list used as a Python default argument is created once and shared across calls. See why state leaks between calls and the None-guard fix that stops it.
SQL Why a JOIN duplicates rows, and how to fix cardinality
A one-to-many JOIN multiplies rows, so a customer with several orders appears many times. Learn to diagnose cardinality and aggregate to the right grain.
Ready to try it?
Start a free challengeRelated pages
Features
See how DoesItHold generates bug-hunting exercises, checks your fix, and adapts difficulty. Nine languages, guided hints, and progress you can see.
Docs
A plain-language walkthrough of the DoesItHold training loop: generate a bug, propose a fix, read the feedback, and repeat at an adapting difficulty.