How to Read AI Coding Benchmarks and Avoid Picking a Paper Winner
MarkdownWhat HumanEval and SWE-bench measure, and how to account for the agent wrapper, conditions, task freshness, variance, and cost when reading AI coding rankings.
Read full article
In short: the figure “solves 76 percent of tasks” says almost nothing by itself. What matters is which task set produced it, which model and agent wrapper were counted together, whether the tasks are fresh or old, and how much it cost. Without these conditions, the percentage is good for an advertising banner, but not for choosing a tool.
Next, I’ll explain in plain terms what the two main coding benchmarks measure, where the catch is hidden in the tables, and how to check any ranking in a minute before relying on it. Historical benchmark definitions are discussed below. No live paired leaderboard snapshot is reproduced here; a current score or cost comparison needs its own linked table, date, and configuration.
Read more about working with models in the Ailoot documentation.
What does an AI coding benchmark percentage measure?
Key takeaway
A benchmark percentage is the share of tasks from a specific set that a tool completed with a working result under specific conditions. Tasks are checked with automated tests: the code either passes the test or it doesn’t; the evaluation is honest and there is no “more or less.” But the task set is always narrow and known in advance, and the measurement conditions differ for everyone. So the figure answers the question, “How many of these tasks did this tool solve this way?” It does not answer the question, “Will it handle my work?”
A benchmark works simply. There is a ready-made list of programming tasks. The tool is given each task, sends back code, and the system runs automated tests to see whether the solution works. The share of tasks passed is the percentage shown in the table.
The strength here is that the evaluation is objective. A test is either green or red; nobody gives an “eyeball” score. In this respect, benchmarks are more honest than any reviews or testimonials.
The weakness is exactly the same. The task set is finite and known in advance to everyone, including those training the models. Each measurement has its own conditions. And the tasks in the set are almost certainly unlike what you do. That leads to all the traps I discuss below. The percentage describes a tool’s behavior on someone else’s closed list of tasks, and it does not transfer directly to your project.
What does HumanEval measure, and why can’t you choose by it anymore?
Key takeaway
HumanEval is an old set of 164 small Python tasks: models are given a function description, write the code, and automated tests check the task. When it was released in 2021, the first Codex solved 28.8 percent of tasks in one attempt. Today, strong models complete almost all of it, so it can no longer distinguish between them. Plus, the tasks are toy problems: one function from a description is far removed from working with a large, live project. A high HumanEval score in 2026 means almost nothing.
HumanEval was created at OpenAI and released in 2021 with the Codex model. It contains 164 small Python tasks: models are given a function description in words, write its body, and a set of automated tests checks whether it works correctly.
At the time, it was a good differentiator. In their own paper, the authors give this figure: the first Codex solved 28.8 percent of tasks in one attempt, while ordinary GPT-3 solved zero.
On HumanEval, our model solves 28.8 percent of the problems, whereas GPT-3 solves 0 percent and GPT-J solves 11.4 percent.
Since then, models have grown, and today the strong ones complete almost all of HumanEval. When everyone scores close to 100 percent, the table stops distinguishing anything: the differences between tools get lost. This is called benchmark saturation, and HumanEval has been in that state for a long time.
The second flaw is more serious. The tasks are tiny: write one function from a description. Your real work is different—it involves a large project with a history, where you need to understand someone else’s code, find a defect, and avoid breaking adjacent code. There is a chasm between “write a function from scratch” and “fix a bug in a live project.” So a high HumanEval score today is no longer a reason to choose a tool; it is more like a mark that “the basics are covered.”
What does SWE-bench measure, and how is it closer to real work?
Key takeaway
SWE-bench is built from real defects in popular GitHub projects: 2,294 tasks from 12 Python repositories. The tool is given a problem description, edits the code, and the system runs tests that failed before the change and should pass after the fix. This is much closer to real work than HumanEval, which is why it is used to compare serious tools. Its difficulty is clear from its history: the first simple approach solved fewer than two percent of tasks.
SWE-bench is fundamentally different, and therefore more interesting. It was built from real issues and pull requests in popular GitHub projects. According to its authors, it contains 2,294 tasks from 12 large Python repositories and was released in October 2023.
The evaluation logic is honest. They take a point in a project where there was a real defect and a set of tests that failed at the time. The tool is given the problem description and edits the code. Then those same tests are run: if they turn green, the task is actually solved; nobody here trusts verbal promises.
We collected 2,294 tasks by going through pull requests and issues from 12 popular Python repositories. Each task is based on a pull request that is linked to an issue and changes at least one test-related file.
The initial figures show how much harder this is than toy tasks. The first baseline approach scored just 1.96 percent on SWE-bench, and the first agent scored 12.47 percent. In other words, even getting close to real coding work was difficult, and the percentages grew later, but they started near zero.
So when you see large numbers in a ranking of AI coding agents today, they most often come from SWE-bench or its human-verified subset of 500 tasks, called SWE-bench Verified. It is a reasonable benchmark. But it too has conditions without which the percentage is misleading, and that is what I’ll discuss next.
Even the most honest benchmark in a table is not yet a result on your project. The outcome depends on how you work with the tool, and the top line of the ranking determines very little. Clean context moves your personal success rate much more noticeably than choosing a model from a table.
Why does the same model show a different percentage?
Key takeaway
Because the result depends on more than the model. At least three things are involved in any measurement: the model itself, the agent wrapper around it, and the reasoning level that was enabled. Changing the reasoning setting can produce different rows for the same model and agent wrapper. Without the harness name, revision, settings, and a dated source, those rows cannot support a numerical comparison. So you need to compare the full combinations, and the model brand alone does not determine much.
This is where the most common benchmark-reading mistake hides. People read a table as a model ranking: this model is two percent smarter than that one. But three things affect the percentage, and the model is only one of them.
First, the model itself. Second, the agent wrapper around it: a program that lets the model navigate files, run commands, read errors, and rewrite code. The same model in a smart wrapper and a simple one will show different results because the wrapper determines how the model works with the project. Third, the reasoning level—that is, how deeply the model thinks through each step. The longer it thinks, the higher the percentage usually is, and the higher the cost.
A reproducible comparison should preserve the full setup. Use this as a reporting template, not a measured leaderboard:
| Field | Run A | Run B |
|---|---|---|
| Model and exact version | Record the tested version | Same version for a controlled comparison |
| Agent harness and revision | Record repository and commit | Same harness and commit |
| Task set and scoring | Record subset and evaluation revision | Same task set and scoring |
| Reasoning setting | Record setting A | Record setting B |
| Result and evidence | Solved count, denominator, logs, date | Solved count, denominator, logs, date |
This lets you see what changed and whether the comparison actually isolates the reasoning setting. The earlier unlinked numeric example is not treated as a measured result.
Here’s the rule: a good ranking always specifies which model, which wrapper, and which reasoning level were used. If the table only has a model name and a percentage, with no wrapper specified, it is hard to trust: you don’t know what was actually measured. More about what makes up the “model plus wrapper” combination is explained in the article about the ranking of AI coding agents.
This also answers why a tool with a top score sometimes struggles for you. The benchmark measures a model inside someone else’s refined wrapper, on someone else’s tasks. Your wrapper, project, and the context you give the model are different. On your project, the outcome depends on context; the table row is secondary.
Why do tasks “expire,” and what is training data leakage?
Key takeaway
Models are trained on enormous amounts of text and code from the internet, and popular benchmarks are publicly available. If the tasks and their solutions made it into training data, the model may have memorized them and simply reproduce what it memorized during evaluation instead of solving them. This is called task leakage into training. The older and better known the set, the higher the risk: an old benchmark is more likely to show the model’s memory than its reasoning ability. Fresh and closed task sets are more reliable than old and public ones.
Here is the catch that is invisible in the figure itself but undermines it more than anything else. Models are trained on vast amounts of text and code collected from the internet. And nearly all coding benchmarks are publicly available: the tasks, tests, and reference solutions.
The mechanics are simple. If a task and its correct solution made it into the training data, the model may have memorized them. During evaluation, it is then not so much solving the task as retrieving a familiar answer from memory. It looks like a solution, but it is just memory. This is called training leakage or data contamination.
The older and more popular the task set, the higher the risk. HumanEval has been online since 2021; it has been rewritten, analyzed, and included in countless datasets many times over. It would be strange to expect a modern model not to have “seen it.” That is why task freshness is a separate quality indicator for a benchmark. A good set is either updated regularly or keeps some tasks closed so they cannot be learned in advance.
What should you do when reading a ranking? Check the date of the tasks and whether the set is updated. If a benchmark is built from fresh defects from recent months, it deserves more trust. If it is a set from five years ago, a high percentage on it says more about the model’s good memory than its ability to solve your new task. This exact effect is shown with a concrete example in the article about the fresh FrontierCode benchmark, whose tasks were deliberately new.
Why does a difference of a couple of percentage points often mean nothing?
Key takeaway
Benchmarks have variance: the same tool on the same tasks gives slightly different results in different runs because the model does not always respond the same way. Because of this, a one- or two-point difference between neighboring rows in a ranking is often lost in the noise and does not indicate real superiority. Also check the price separately: similar percentages can cost many times as much. Compare costs only when both complete setups, success rates, billing assumptions, and the cost denominator are stated.
Another thing that makes the top spot in a table misleading: a model does not respond the same way every time. For the same prompt, it may take a slightly different line of reasoning. So if you run one tool several times on one task set, the percentage fluctuates a little from run to run, and this fluctuation is called variance.
The practical takeaway is simple. When two rows in a ranking differ by one or two percent, that difference could easily be noise. Chasing a tool that is “two percent higher” is foolish: they can easily switch places on the next run. A difference is worth considering significant when it is noticeable and holds across a large set of tasks; a couple of points do not meet that bar.
And the last thing, which is almost always more important than the percentage itself, is the price. Similar results can cost very different amounts. A cost comparison needs both model-and-harness configurations and the full spend on the evaluated task set, including failed attempts. Divide by attempted tasks for cost per attempt, or by solved tasks for cost per solved task, and label which you use. This article supplies no sourced paired cost measurement. So always read a ranking row together with its price, because the percentage means little on its own. The article about the cost of one solved task explains how to compare tools by cost fairly.
How can you read any benchmark table in a minute?
Key takeaway
Before relying on a ranking, ask it seven questions: What task set? Are the tasks fresh or old? Which model? Which agent wrapper? Which reasoning level? What is the cost per task? How large is the variance? If the table does not answer at least half of these, you cannot trust it: it is probably an advertisement. Separately check whether the set’s tasks resemble your real work, because even an honest percentage on someone else’s tasks does not transfer to your project.
Let me condense everything into a short checklist. Open any ranking table and go through these seven points in order.
- What task set? HumanEval is weak today; SWE-bench is closer to real work. If the set is not named at all, there is no need to read further.
- Are the tasks fresh or old? A fresh or partially closed set is more reliable than an old public one that the model may have learned.
- Which model was measured? The exact name and version, not a vague “AI” or a model family name.
- Which agent wrapper? The percentage belongs to the “model plus wrapper” combination. If the wrapper is not specified, you don’t know what was measured.
- Which reasoning level? One model at different levels gives different percentages and different costs.
- What does a task cost? Similar results can differ by multiples in price. Read the percentage together with the cost.
- What is the variance? A one- or two-point difference between rows is often just noise.
There is an eighth question, and it is about you: Do the tasks in the set resemble your work? A benchmark of Python tasks says little to someone building a website or bot with a different set of tools. Even an honest figure on someone else’s tasks does not guarantee a result on your project. There is only one reliable way to check: run a couple of your typical tasks through the tool and look at the result yourself. The article on how to check AI-generated code explains how to tell whether the code works if you don’t program yourself.
So what should you look at in the end?
Key takeaway
Look at the conditions under the top line, not just the top line itself: the task set and how fresh it is, the “model plus wrapper” combination, the reasoning level, the cost per task, and the amount of variance. A bare figure without these conditions proves nothing. And remember that even an honest percentage on someone else’s tasks does not transfer to your project: the final word always belongs to testing with your own real tasks, and your result on them depends more on how you work with the tool than on its place in the ranking.
The main point of the entire article is short: a place in the ranking is a reason to take a closer look at a tool, but you will have to dig further yourself. A large figure only says that a tool did a decent job on a specific closed list of tasks under specific conditions. The percentage does not show whether those conditions match yours.
So read what is beneath the ranking row: which tasks, how fresh they are, which model-and-wrapper combination, which reasoning level, how much it costs, and whether the difference is lost in the noise. A table that does not answer these questions belongs on an advertising banner. The review which tool to code with in 2026 explains which tool to choose for your tasks in the first place.
And here is what matters more than any benchmark. Even the best tool in the ranking struggles with messy context and works well with clean context. Your personal success rate comes from what you feed the model and how you frame the task; the table row is secondary. The ranking helps rule out the clearly weak options, but you produce the result.
Sources
- HumanEval - dataset openai/openai_humaneval (huggingface.co) - set of 164 Python tasks, checked with automated tests
- “Evaluating Large Language Models Trained on Code” - OpenAI paper - Codex solves 28.8 percent of HumanEval tasks in one attempt, 70.2 percent in 100 attempts
For further work—Ailoot.
More details
Questions about How to Read AI Coding Benchmarks and Avoid Picking a Paper Winner
What must be recorded before comparing two benchmark rows?
Record the exact model, agent harness and revision, reasoning settings, task subset, scoring method, date, and direct result source. Without those fields, a score difference cannot be attributed to one changed setting.
Is cost per attempted task the same as cost per solved task?
No. Divide total evaluation spend by all attempted tasks for the first measure, or by solved tasks for the second. Include failed-attempt spend and label the denominator before comparing prices.