Project Scorecard
Twelve categories, scored 1–5 at the end of every project, with anchors defined for 1, 3 and 5. Scores 2 and 4 are interpolations.
Score down when unsure. A generous rubric is the one thing that guarantees this journey produces nothing. The purpose of the scorecard is not to feel good about a project; it is to find the category that is weakest so the next project can train it.
Table of Contents
- How To Score
- 1. First-Principles Understanding
- 2. Correctness
- 3. Implementation Depth
- 4. Code Quality
- 5. Systems Reasoning
- 6. Experimental Rigor
- 7. Benchmark Quality
- 8. Failure Analysis
- 9. Originality of Hypotheses
- 10. Communication
- 11. Reproducibility
- 12. Completion Discipline
- The Completion Gate
- Using the Scores
- References
How To Score
- Do the adversarial self-review first — eleven questions, one hour, one night after finishing. Scoring before that scores your own view of your work.
- Score after the report is written, not before.
Record with
python3 tools/scorecard.py record <project> --interactive. - For each category, name the evidence. A score without a cited artifact is a mood.
- If you are between two scores, take the lower one.
- Record all twelve in the report's self-assessment table.
- At each stage review, plot the trend. The trend matters more than any single score.
A realistic first project scores 2–3 across most categories. Scoring 4s in Stage 1 means the rubric is being read generously, not that the work is exceptional.
1. First-Principles Understanding
Can you derive the design rather than recall it?
| 1 | You implemented what a tutorial or paper described. Asked "why this constant?", you say "that is what the paper uses." |
| 3 | You can explain every major design decision and what it trades against. You derived at least one constant (e.g. the \(\sqrt{d_k}\) scale, the 10-bits/key Bloom default) rather than adopting it. |
| 5 | You designed a substantial part before reading the canonical solution, can explain why the canonical design differs from yours, and can construct the conditions under which your version would have been correct. |
Evidence: the notebook's section 4, and the report's section 3.
2. Correctness
Does it work, and how do you know?
| 1 | It runs on the examples you tried. Testing is manual. |
| 3 | A real test suite: property tests, invariants asserted in code, edge cases covered. You can state what is not tested. |
| 5 | Model-based or differential testing against a reference; fuzzing; invariants asserted continuously in production paths; deliberate fault injection. At least one real bug was found by a test rather than by observation. |
Evidence: the test suite, and a named bug that testing caught.
A 5 requires that a test found something you did not know. Tests that only confirm what you already believed are documentation.
3. Implementation Depth
Did you build the mechanism, or configure one?
| 1 | The core mechanism comes from a library. You wrote the glue. |
| 3 | The central mechanism is hand-written and complete. Peripheral concerns use libraries, and the boundary is explicit and defensible. |
| 5 | The mechanism is hand-written, and you also built at least one layer below the one required — a compiled inner loop, a custom allocator, a hand-vectorised kernel — with the improvement measured. |
Evidence: the permitted-library line from the project page, and what you did not import.
4. Code Quality
Could a competent engineer work in this codebase?
| 1 | One file, unclear names, no structure. Only you can navigate it. |
| 3 | Sensible module boundaries, meaningful names, comments that explain why, a README that gets a stranger running. |
| 5 | The interfaces are the kind another project can build on — and one did. Errors are informative. The code reads as an explanation of the design. |
Evidence: a later project importing this one without modification is the strongest possible evidence for a 5.
Note this is weighted lower than it would be at work. These are research artifacts. Beautiful code with no measurements scores far worse overall than workmanlike code with a falsified hypothesis.
5. Systems Reasoning
Do you know where the time and bytes go?
| 1 | Performance is a mystery. You changed things until it got faster. |
| 3 | You profiled, identified the bottleneck, and can classify it as computational, algorithmic, architectural, or operational. |
| 5 | You predicted the bottleneck before measuring and were approximately right; you decomposed a ratio into its independent factors (as in P02's algorithmic-vs-constant-factor split); and you can state what the next bottleneck will be after this one is fixed. |
Evidence: a prediction recorded before profiling, and a decomposition rather than a single ratio.
6. Experimental Rigor
Would the result survive a skeptical reviewer?
| 1 | One run, one configuration, no seed, no baseline. |
| 3 | Fixed seeds, repeated trials, one variable at a time, a stated baseline, uncertainty reported. |
| 5 | Predictions timestamped before runs; a negative control; sensitivity analysis over the parameters most likely to be doing the work; the setup validated before the experiment (independent variable confirmed to vary); and the measurement's resolution stated before any ratio is reported. |
Evidence: the commit timestamp on notebook sections 1–8.
The resolution requirement is specific. tools/bloom.py
demonstrates it: at 24 bits/key the predicted false-positive rate is ~10⁻⁵, so 200k
probes expect 1.2 events and observing 0 is noise, not a result. Reporting a ratio your
experiment cannot resolve is a 2, regardless of everything else.
7. Benchmark Quality
Do the numbers mean anything?
| 1 | Mean latency. No warmup. Unrealistic workload. Environment unrecorded. |
| 3 | p50/p95/p99, warmup separated, environment recorded, realistic and skewed workloads, raw samples saved. |
| 5 | Confidence intervals on the statistics; an honest "no measurable difference" verdict where the intervals overlap; adversarial and degenerate workloads included; and a comparison against a credible external implementation, reported honestly including where you lose. |
Evidence: tools/bench.py output, and an external comparison you
did not win.
Reporting a mean latency caps this category at 2.
8. Failure Analysis
Do you know how it breaks?
| 1 | You tested the happy path. Failures were fixed as encountered, not studied. |
| 3 | Deliberate fault injection with predicted and observed behaviour; degradation characterised; the overload behaviour known. |
| 5 | A fault-injection harness with replayable schedules; at least one failure diagnosed to a specific design decision with the causal chain written out; and the system's behaviour at its breaking point characterised rather than merely avoided. |
Evidence: the harness, and a failure analysis that names a line rather than a category.
9. Originality of Hypotheses
Are you asking questions, or following instructions?
| 1 | No hypothesis. You implemented and measured. |
| 3 | A falsifiable hypothesis with a stated falsifier, tested with a controlled experiment. |
| 5 | The hypothesis came from something you observed rather than from a paper; it was falsified or survived on evidence; and the generalization section makes a checkable claim about systems you have not built. |
Evidence: notebook sections 6 and 13.
A falsified hypothesis scores the same as a confirmed one. What is scored is whether the question was worth asking and whether the test could have answered "no". If every hypothesis you have ever tested was confirmed, this category caps at 3 — you are testing things you already know.
10. Communication
Can someone else learn from this?
| 1 | A README. The results live in your head. |
| 3 | A complete report: problem, design, method, results, analysis. Figures with units and captions. Someone in your field could follow it. |
| 5 | The "What I Expected And Did Not Get" section is substantial and specific; limitations and threats to validity are stated without prompting; and the report would survive being read by someone who wanted to find a hole in it. |
Evidence: the report's required sections 13 and 15.
An empty section 13 caps this category at 2.
11. Reproducibility
Can someone else get your number?
| 1 | It runs on your machine. Setup is undocumented. |
| 3 | One command to build, one to test, one to reproduce the headline benchmark. Versions pinned. Seeds fixed. |
| 5 | You followed your own instructions from a clean clone and got the number within tolerance; raw sample data is committed, not just summaries; the environment is specified precisely enough to explain a discrepancy. |
Evidence: the report's section 17, verified.
For P15 the bar is higher and absolute: a person who is not you must have reproduced the headline number.
12. Completion Discipline
Did you finish, on the terms you set?
| 1 | Abandoned, or drifted past its size class with no decision made. |
| 3 | Exit criteria met within the class ceiling. Scope cuts, if any, were deliberate and documented. |
| 5 | Finished within budget; the optional extension was correctly deferred rather than started early; and any scope cut was recorded with its reasoning at the time rather than rationalised afterwards. |
Evidence: the exit-criteria checklist, and the weekly logs.
This is the category most predictive of whether you finish the journey. A pattern of 3s here across five projects is a stronger signal than a pattern of 5s anywhere else. Watch its trend specifically.
The Completion Gate
Separate from the scores. A project is complete only when all eight are true:
- The essential mechanism works
- Correctness tests pass
- At least one baseline exists
- Meaningful metrics are collected
- At least one hypothesis was tested
- Negative or unexpected results are documented
- A technical report is complete
- The repository can be reproduced by another engineer
These are binary and they are not negotiable by scoring well elsewhere. A project with five 5s and no baseline is not complete; it is an impressive incomplete project, and recording it as complete is how a 34-month plan quietly becomes a 50-month one.
Note that the gate does not require the project to be good. It requires it to be finished and honest. A project whose hypothesis was falsified, whose implementation lost to the baseline, and whose report explains both, passes the gate cleanly.
Using the Scores
Per project: find the lowest category. Name the specific mechanic in the next project that will train it, and write that into the next project's weekly objectives. One category at a time — trying to raise all twelve is trying to raise none.
Per stage (stage reviews): run
python3 tools/scorecard.py stage <n> and trend, which plot all twelve across
the stage's projects. Three patterns to look for:
- A category that never moves. You are avoiding it. Failure analysis and originality are the usual suspects, because both require sitting with being wrong.
- A category that drops when projects get harder. Usually experimental rigor or communication — the things that get cut under time pressure. That is a scheduling problem, not a skill problem, and the fix is in the allocation.
- Everything rising smoothly. Suspicious. Re-read the anchors; you have probably started scoring against your own past work rather than against the definitions.
Across the journey: the categories you asked to develop map to specific ones. First-principles reasoning → 1. Low-level implementation → 3. Systems intuition → 5. Experimental discipline → 6. Performance analysis → 5 and 7. Original technical thinking → 9. Research-quality communication → 10. Those seven are the journey's actual objectives; the other five are the conditions that make them credible.
References
- Wiggins, G., McTighe, J. Understanding by Design, 2nd ed. ASCD, 2005. Rubric design: anchors at 1/3/5 with observable evidence, rather than adjectives.
- Ericsson, K. A. et al. The Role of Deliberate Practice in the Acquisition of Expert Performance. Psychological Review 100(3), 1993. Why identifying and targeting the single weakest component beats general practice.
- Blackburn, S. M. et al. The Truth, The Whole Truth, and Nothing But the Truth: A Pragmatic Guide to Assessing Empirical Evaluations. ACM TOPLAS 38(4), 2016. The source of several anchors in categories 6 and 7.
- Hoefler, T., Belli, R. Scientific Benchmarking of Parallel Computing Systems. SC 2015. Twelve rules; category 7's 5-anchor is rules 1–4.
- Kruger, J., Dunning, D. Unskilled and Unaware of It. Journal of Personality and Social Psychology 77(6), 1999. The empirical reason for "score down when unsure".