Practice the skill tutorials skip

Get better at finding bugs — not just writing code.

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.

From code to learning

Choose your first language

Nine verified programming languages. The interface and feedback support five languages, while editorial documentation initially publishes in English and Brazilian Portuguese.

  1. 1Choose a language
  2. 2Investigate the bug
  3. 3Check the solution
  4. 4Read explainable feedback
  5. 5Track your progress

Interface and feedback: English, Português, Español, العربية, 한국어. Published docs: EN / PT-BR.

Try the core move

Spot the fault before it ships

One real pattern from the practice library. Here, fetchUser(id) returns a Promise that resolves to a user object with a name.

Why does loadUser resolve to undefined?

async function loadUser(id) {  const user = fetchUser(id);  return user.name;}
Why does loadUser resolve to undefined?

Show the explanation

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.

Practice this challenge free

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.

A verdict you can learn from

Check your solution and get contextual feedback on the bug, the expected behavior and the edge cases that matter.

Progress you can explain

See attempts and solutions separately, follow skill growth and let challenge difficulty respond to your results.

A Learning Profile built from practice

Review editing patterns, hint use and session signals as inspectable insights—not a hidden score controlling your rating or difficulty.