Bugs that look like real work
Build debugging instinct with recognizable failure patterns in Python, JavaScript, SQL and six more languages — not riddles disguised as engineering.
Choose a language, follow a realistic failure from symptom to cause, check your fix and see exactly where your reasoning holds. Start with the core challenge loop for free.
Nine verified programming languages. The interface and feedback support five languages, while editorial documentation initially publishes in English and Brazilian Portuguese.
PythonPractice now →JavaScriptPractice now →TypeScriptPractice now →JavaPractice now →C#Practice now →SQLPractice now →KotlinPractice now →SwiftPractice now →C++Practice now →Interface and feedback: English, Português, Español, العربية, 한국어. Published docs: EN / PT-BR.
One real pattern from the practice library. Here, fetchUser(id) returns a Promise that resolves to a user object with a name.
async function loadUser(id) { const user = fetchUser(id); return user.name;}fetchUser returns a Promise that resolves to the user object. Without await, user holds that Promise, so user.name is undefined. Use const user = await fetchUser(id) before reading user.name. The public challenge walks this sequencing pattern step by step.
Build debugging instinct with recognizable failure patterns in Python, JavaScript, SQL and six more languages — not riddles disguised as engineering.
Check your solution and get contextual feedback on the bug, the expected behavior and the edge cases that matter.
See attempts and solutions separately, follow skill growth and let challenge difficulty respond to your results.
Review editing patterns, hint use and session signals as inspectable insights—not a hidden score controlling your rating or difficulty.