Practice, with real examples
AI writes the code now. Your job is to catch what it gets wrong. Practice that here.
Read real plans and real code. Find what is wrong, then see how you did.
Spot the Gaps, also called Spec Evaluation
Try it: find what is wrong with this plan.
Read the requirements. Select what is wrong. See how you did, right here.
Which of these are defects?
Check each statement against the requirements.
The code is only part of the job.
Two more kinds of practice work the same way: a real example, a judgment call, and clear feedback.
// Request: show the user's name in the header.function headerName(user) {- const cache = new LruCache({ max: 500, ttl: 60_000 })- const formatter = createNameFormatterFactory(user.locale)- return cache.getOrCreate(user.id, () => formatter.format(user))+ return user.name}
Select one approach for each decision point.
Where should session state live going forward?
Read it. Question it. Understand it.
Find the Bug, also called Code Comprehension
You get a file of code you did not write, and a review an AI wrote of it. Find the real bugs, check what the AI said, weigh the design choices, and pick the fixes worth making. Inspired by the code comprehension rounds companies are piloting. Every attempt is marked the same way, with no live model.
Read the code. Find what is broken, then check what the AI said about it.
A results screen shows a long list one page at a time. paginate should return the items for a 1-based page number, the total number of pages, and whether there is a previous and a next page. Two helpers build the "Showing 11-20 of 47" label and the page numbers shown in the pager.
Suggested time: 10 min. This is a guide only: nothing is locked and your score is not affected.
Paginate a Results List
v0EasyClick a line or drag across lines to mark code you believe is defective; click a mark to remove it.
Mark the lines of the code that contain a defect. Marking lines that are not defective costs a point, and some code looks wrong but is correct, so mark only what you are confident about.
0 marked regions
Review by AI assistant review
Check each statement against the code. A wrong call costs a point; a statement left unjudged costs nothing.
0 of 6 statements judged
paginate throws a RangeError when pageSize is zero, negative or not an integer.
Page 1 returns the first pageSize items: the offset calculation matches the 1-based page numbers.
totalPages rounds up, so a final partial page is always counted.
A page number outside the valid range is clamped to the nearest valid page instead of throwing or returning an empty list.
describeRange is wrong: its start and end numbers disagree with the page that paginate returns.
I found no defect in this file that would show users the wrong items or the wrong page count.
0 of 2 questions answered
Choose the best answer for each question.
paginate clamps out-of-range page numbers instead of throwing. For a user-facing results screen, why is that a reasonable choice?
The list moves from memory to a database table with millions of rows that other users insert into while people browse. What is the main weakness of this offset-based approach, and the usual fix?
Select the fixes worth making. Some are unnecessary or risky, or add more than the job needs, and selecting one costs a point.
0 of 6 selected
This is a demonstration of the real challenge screen. Sign in to attempt it and see your score and explanations.
Try a challengeBefore you ship it,
see what a reviewer would catch.
One correctness check. One efficiency check. One list of what a reviewer would have caught.
Run it once, before you launch.
A sample of the feedback you get.
Run a pre-launch auditWhy this exists
AI made writing code fast. It didn’t make judging code any easier. ShipSpec is the practice ground for closing that gap, one challenge at a time.
No hiring pipeline, no black-box AI fluency rating. Just the work, and whether you got it right.
Ship the version with fewer surprises.
Start with one challenge. Find what doesn’t hold up. Build the judgment to catch it next time.
Try a challenge