eng-benchmark-checklist
Skill23 starsChanged 11 days agoMITView on GitHub
Vet a performance measurement for limiter, tuning, limits, errors, repeatability, relevance, and whether the work happened before you report or act on it. Use when you run a benchmark or report a measured speedup or regression.
We split this skill into the rules it gives an agent
9 rules. About 0 are common, 8 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈8
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 8
Use this when you produce a performance number: a before and after, a regression claim, a tuning loop, or a library or config choice.
- Distinctive: line 16
Read the harness's flags. If its default target is a shared or production endpoint, point it at one you own.
- Distinctive: line 17
Write down the claim you expect to make, in the words you would ship ("export is 30% faster at p50 on the 60k-row dataset").
- Distinctive: line 18
Read the measurement script.
- Very specific: line 19
Check uptime and nproc. If the machine is busy, find out what is running.
- Distinctive: line 27
Does it reproduce?: Run each side at least 5 times, alternating A, B, A, B so warmup and drift favor neither.
- Distinctive: line 35
Call it inconclusive when you cannot name the limiter, a side ran untuned, or questions 4 and 7 could not be checked.
- Distinctive: line 36
Keep a PR body to one primary number.
- Distinctive: line 44
Every side tuned the same way production is.
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Benchmark checklist
Use this when you produce a performance number: a before and after, a regression claim, a tuning loop, or a library or config choice. Answer each question with evidence from a run, not a guess about the code.
For a quick ballpark the user asked for, one run is enough. Still check questions 4 and 7 and say it is one run. A choice between options is never a ballpark.
Repo facts (from AGENTS.md or CLAUDE.md, or a harness README): the repo's load and benchmark harnesses, their default targets, and the metrics endpoints to scrape during a run.
Before you run anything
- Read the harness's flags. If its default target is a shared or production endpoint, point it at one you own; never load production without explicit authorization.
- Write down the claim you expect to make, in the words you would ship ("export is 30% faster at p50 on the 60k-row dataset"). The questions test that sentence.
- Read the measurement script. Note what it times, counts, and ignores.
- Check
uptimeandnproc. If the machine is busy, find out what is running. If you cannot stop it, interleave the sides and say so.
The questions
- Why not double? Name the limiter. Profile in a run you do not report, because profilers slow the work. Use CPU per process (
top,pidstat), a runtime profiler (node --cpu-prof,py-spy,perf), I/O wait, and syscall counts (strace -c). Watch the load generator: if it saturates first, you measured it. If a change did not move the number, the limiter explains why. - Was it tuned? Run every side the way production runs it: release builds, production flags, batching, connection pools, realistic cache state, same versions and data. A limiter that is a setting (a commit per row, a debug build, a missing index) means that side is untuned. Tune it and measure again. If you cannot, do not pick a winner.
- Did it break limits? Do the arithmetic against disk and network bandwidth, core counts, and the share of time the changed piece took. Removing a piece that takes 10% of the run makes it at most about 11% faster. A result past a limit measured something other than the work.
- Did it error? Count failures and non-success responses, and check that outputs are correct. Rejections are fast, and timeouts and retries are slow. Add an error count if the script lacks one.
- Does it reproduce? Run each side at least 5 times, alternating A, B, A, B so warmup and drift favor neither. Report the median and range. A gap smaller than run-to-run variation is no measurable difference.
- Does it matter? Measure the end-to-end path a user waits on, with realistic data sizes and concurrency, and report the micro result as a share of the whole. For production paths, compare with tracing spans (
sentry-perfwhen the repo uses Sentry). - Did it even happen? Confirm the work ran inside the timed region: the request reached the server, rows were written, bytes were read, and the result was used. Lazy code and timeouts produce numbers for work that never happened.
Report
- Lead with the verdict: faster, slower, no measurable difference, or inconclusive.
- Give the number with its unit, run count, range, and limiter. For example: "p50 41 ms to 33 ms, median of 7 runs per side, range 32 to 35 ms after, bound by JSON parsing on one core."
- Call it inconclusive when you cannot name the limiter, a side ran untuned, or questions 4 and 7 could not be checked. Name the gap.
- Keep a PR body to one primary number. Link the runs and evidence.
Verify
For a ballpark, only the claim sentence and questions 4 and 7 apply, and the report says it is one run. Otherwise:
- The claim sentence was written before the runs.
- Limiter named from a profile, not from reading code.
- Every side tuned the same way production is.
- At least 5 alternating runs per side, with median and range.
- Errors counted and work confirmed inside the timed region.
In this repository31 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- agents-correctSkill
- agents-create-verification-skillSkill
- agents-reflectSkill
- agents-swarmSkill
- alchemy-infraSkill
- comms-howSkill
- comms-impactSkill
- comms-interrogateSkill
- comms-technical-writingSkill
- comms-unslopSkill
- comms-whySkill
- effect-boundary-validationSkill
- effect-seam-migrationSkill
- effectSkill
- eng-agent-dx-cli-scaleSkill
- eng-blast-radiusSkill
- eng-change-checklistSkill
- eng-cutover-verificationSkill
- eng-state-machineSkill
- eng-tddSkill
- eng-testingSkill
- gh-ci-triageSkill
- gh-pr-commit-reviewSkill
- gh-pr-feedback-loopSkill
- nix-darwinSkill
- sentry-bugfixSkill
- sentry-perfSkill
- svelte-shadcnSkill
- svelte-ui-deliverySkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

