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 · "Concurrency"ready labs · catalogue order
#LabDifficultyTime
28The Event That Fired TwiceWebhook side effects run twice after every reconnect.1 attempts · 0 solved · 0 discussionsMed.15min34The Lock That Never Let GoAfter one failing job, every later attempt waits forever on the same lock.0 attempts · 0 solved · 0 discussionsMed.15min36Dedupe window too shortWebhook dedupe cache drops entries long before providers stop retrying, so duplicates get processed twice.0 attempts · 0 solved · 0 discussionsEasy14min38Event id mutated by middlewareThe dedupe fingerprint includes middleware-added fields, so the same webhook event is treated as a brand new event on every retry.0 attempts · 0 solved · 0 discussionsEasy14min43Async dedupe raceTwo concurrent retries of the same webhook event both pass the dedupe check and both run the side effect because the set is mutated after an await.0 attempts · 0 solved · 0 discussionsHard26min45Dedupe stuck on failureThe dedupe marker is written before the side effect runs and never rolled back on failure, so a transient failure permanently suppresses every retry of the same event.0 attempts · 0 solved · 0 discussionsHard24min70Lock Around the Wrong AxisReservations for distinct slots owned by the same caller serialize unnecessarily.0 attempts · 0 solved · 0 discussionsMed.18min74The Crossed WiresTwo concurrent moves between the same accounts deadlock because the lock order is inverted.0 attempts · 0 solved · 0 discussionsHard28min116Await Missing in Fire-and-ForgetBatch runner swallows async failures because the per-item call is not awaited.0 attempts · 0 solved · 0 discussionsEasy12min117forEach With an Async CallbackArray.prototype.forEach does not await async callbacks, so the batch reports success while per-item work is still running.0 attempts · 0 solved · 0 discussionsEasy12min118Loop Mutates the Source ArrayprocessJobs splices skipped jobs out of the input array while iterating, so the iterator drifts past subsequent entries.0 attempts · 0 solved · 0 discussionsMed.18min119Permit Released Twice on SuccesswithLock releases the permit in both the happy path and finally, so the semaphore silently over-credits.0 attempts · 0 solved · 0 discussionsMed.18min120Rejection Escapes Several Call Hopsprepare() drops the await on its inner load() call, so the rejection escapes past try/catch and runJob reports success.0 attempts · 0 solved · 0 discussionsHard25min133Duplicate webhook processingEach request registers another event listener, so later webhooks are processed multiple times.0 attempts · 0 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.