Skip to content

How the questions are made

Every question passes two checks before it goes live: each bug is proven by a test, and a separate reviewer solves the question without seeing the answer key. Some questions come from bugs caught in real projects.

Where the questions come from

Yusuf Irmalı has AI agents write the code in his projects; a separate testing agent (QA) then checks the delivered code independently. Bugs caught at that stage are the source of the questions labeled “Real project (anonymized)”.

No code in these questions is copied from the real project. The same bug pattern is rewritten from scratch as a small example, and no project or client is named. Which finding a bug came from is kept only in an internal record that isn't published. If a bug came from one of Yusuf's own products, the product may be named.

Questions labeled “Fictional” were written for this site and aren't based on a real case. Their code is also the output of an AI model.

Every bug is proven by a test

Every bug has a proof test. It fails on the original code and passes on the fixed code. That shows the bug is real and that the fix removes it.

Only one of the test options in a question catches the bug; the others pass on the original code too. This is also checked by tests.

All proof tests can be run from the repository with a single command.

Blind solve

Every question is solved by a separate reviewer who hasn't seen the answer key. The aim is to make sure no real bug is left besides the defined ones. If the reviewer finds another bug, the question is fixed.

The testing agent (QA), separate from the agents that wrote the questions, does this review; every question is also solved once by a different AI model. Each blind solve is recorded with its date.

How the result is worked out

Each bug has a defined line range. If at least one of your marks is inside it, the bug counts as “found”. A mark outside every bug's range is a “false alarm”. The same marks always give the same result.

Neither an AI nor any other system grades your reason; you compare it yourself with the sample interview answer and the checklist.

Severity scale

  • CriticalData loss, a security hole or lost money
  • MajorThe user gets a wrong result in a case the task asks for
  • MinorA rare edge case outside the task, or readability

In the Testing topic, severity is set by the effect of the broken implementation the test doesn't catch.

What gets saved

There are no accounts. Your progress, marks, reasons and checklist ticks are kept only in this browser; you can delete them on the Progress page.

When you submit an answer, only this goes to the counter: which question, the interface language, how many bugs were found and how many the question has, how many false alarms, whether a reason was written (not the text), and whether the test choice was right. The counter doesn't record identity, cookies or IP addresses; your reason text never leaves your device.

Details are on the Data page

License and source code

The site's code and all of the questions are open under the MIT license. The source code, proof tests and question files are in the repository.

Adding a question doesn't require touching the app code: the README shows the question file format with an example. New questions also go live only after passing the same two checks.

If you think a question is wrong or debatable, use the “Report a problem” link on any result screen.

Typefaces: Source Serif 4, IBM Plex Sans and IBM Plex Mono (SIL Open Font License 1.1).

Not in this version

Every snippet has at least one bug; there are no bug-free questions. The code is in TypeScript, JavaScript and Python. There's no timer, ranking or badge.

Made by

Yusuf Irmalı · GitHub