Practice catalogue updated Mon, Aug 10, 2026

Debug the signal.
Ship the fix.

Production-shaped debugging labs across APIs, config, concurrency, and infrastructure. Reproduce the failure, follow the evidence, and prove the smallest safe change.

Ready labs138playable now
Quick starts99under 20 min
Avg. time18minper lab
OSS labs4public history
01Reproducemake the failure visible
02Tracefollow the evidence
03Patchchange the smallest thing
04Verifyprove it holds
Featured labBuglyst · Caching & Performance

Cache stampede without coalescing

Concurrent cold-cache callers each kick off their own expensive compute, overwhelming the worker.

Hard25 minJavaScript#track#caching-performance#stampede
all labs · ready to play

Choose a failure mode.

Search by symptom, then filter by source, status, or difficulty. The featured lab is highlighted at the top so you always have a strong place to start.

press / to search
Shown14/ 138
14 of 138 labs · "Database"ready labs · catalogue order
#LabDifficultyTime
07The N+1 That Wasn'tDB load explodes, but the query count looks normal.3 attempts · 1 solved · 1 discussionsMed.26min16The stale confirmationA successful update is followed by an old value.1 attempts · 1 solved · 0 discussionsMed.18min27The Query That Loaded the WorldOrders list endpoint returns every tenant's rows and times out under load.0 attempts · 0 solved · 0 discussionsMed.15min29The Config That Swallowed ProdProduction boots with the dev database URL and debug flags.3 attempts · 1 solved · 0 discussionsMed.15min62Cache invalidation skipped on writeWrites update the database but the cache is never told, so reads keep returning the old value.0 attempts · 0 solved · 0 discussionsHard28min68The Wallet That Let It SlideTwo concurrent transfers from the same account both succeed and the balance goes negative.0 attempts · 0 solved · 0 discussionsEasy14min69Two For One EmailConcurrent registrations for the same email both succeed and create duplicate accounts.0 attempts · 0 solved · 0 discussionsMed.18min72The Phantom ReadA read inside a transaction does not observe the same transaction's pending write.0 attempts · 0 solved · 0 discussionsMed.18min106Inner join drops comments from soft-deleted authorsA LEFT JOIN needs an INNER JOIN — or vice versa — and rows silently disappear from the listing.0 attempts · 0 solved · 0 discussionsEasy15min107Count that missed the where clauseA dashboard count helper ignores its filter and reports the wrong total.0 attempts · 0 solved · 0 discussionsEasy12min108N+1 that silently drops rowsA per-row fetch helper filters on a property that does not exist, so every caller sees an empty result.0 attempts · 0 solved · 0 discussionsMed.20min109Pagination skips rows on timestamp tiesCursor-based pagination drops every row whose updated_at equals the boundary timestamp on the previous page.0 attempts · 0 solved · 0 discussionsMed.22min110Pseudo-unique constraint leaks duplicate accountsAn index assumed unique is queried by the wrong column, so duplicates slip through signup.0 attempts · 0 solved · 0 discussionsHard28min138Idempotency key ignoredThe payment endpoint validates an idempotency key but drops it before the database call.3 attempts · 1 solved · 0 discussionsMed.20min
discussion · public Practice

What are developers debugging?

Questions, dead ends, and useful investigation clues from real public Practice threads.

latest threads
Loading discussion threads…
real activity · public practice

What developers are doing.

Recent public activity from developers who chose to share their Practice work.

Loading recent public activity…
keep building the loop

More ways to practice.

Move from a focused drill to open-source history or company-style patterns when you want a different kind of debugging pressure.