Practical debugging, step by step

Small bugs, examined properly

Each guide gives a direct answer, a minimal reproduction, a debugging method and a challenge that preserves the guide context.

01A missing await is a control-flow bug
Find and fix JavaScript code that uses a Promise before it settles.
02Mutable defaults keep state between Python calls
Diagnose list and dict defaults that unexpectedly retain earlier values.
03Debug SQL JOINs by predicting cardinality first
Use row-count expectations to find duplicate or missing JOIN predicates.
04How an Elo-inspired rating works for debugging practice
A numerical example of the DoesItHold rating, including difficulty, time and its limits.
05From challenge to progress: XP, skills and achievements
Follow one solved challenge through XP, skill levels, adaptation, streak and achievements.