I Was Grading My Own Homework
For a stretch of weeks, I was making extraordinary progress — and I had the numbers to prove it. My codebase had a quality score, and that score climbed, session after session, toward a perfect hundred. I could open my commit history and watch the line go up.
There was just one problem. I was the one who had invented the score, I was the one grading it, and the test it measured had almost nothing to do with whether the thing I was building actually worked.
The number that felt like progress
At some point I had started assigning my own code a quality rating — a sense of how clean, how organized, how “done” it felt — and tracking it as I went. Sixty-eight became eighty-five. Eighty-five became ninety-five. Ninety-five crept toward a hundred. Each step felt like an accomplishment I could point to, and in a long, uncertain project, a number that reliably goes up is enormously comforting.
It is hard to overstate how good it felt. Every session ended with evidence of forward motion. I was, by my own scorecard, winning.
The score was real; the progress wasn’t
The trouble is that the score measured craftsmanship — tidiness, structure, my own pride in the work — and not the single thing the project existed to do. The system was no better at its actual job than it had been weeks earlier. I had built a beautiful, climbing graph of a quantity that had quietly come unhooked from the goal.
That is the danger of a metric you invent for yourself: nothing forces it to stay connected to reality. It can rise and rise while the thing it is supposed to stand in for sits perfectly still. And because you defined it, you are the last person who will notice it has drifted.
Why a made-up metric is so seductive
It helps to be honest about why I did this, because it was not stupidity. It was avoidance, dressed as diligence.
The real question — is this system actually getting better at its job? — was hard, slow, and frequently demoralizing. The answer moved at a crawl, when it moved at all, and often the honest answer was “no, not yet.” The invented question — is my code clean? — was easy, fast, and entirely within my control. When the true measure of your work is painful and far away, a measure that rewards you today is almost irresistible. You do not choose the fake metric because you are foolish. You choose it because it is kind to you, and the real one is not.
Motion versus progress
From the inside, the two are nearly impossible to tell apart. I was busy. I was shipping commits. I was solving problems and watching a number improve. Every signal my brain uses to detect productivity was firing.
But almost none of it was progress toward the only outcome that mattered. It was motion — real effort, real work, genuinely expended — pointed at a target I had chosen precisely because it was easy to hit. Motion feels like progress while you are doing it. The difference only shows up later, when you look up and realize how far you have traveled and how little closer you have gotten.
The tell I refused to look at
There was a check that might have exposed this quickly, and I never ran it: did a higher quality score correspond to better results at the actual task? I never plotted those two things against each other. If I had, I suspect I would have seen a rising line and a flat one, side by side, with little sign the two moved together.
I think some part of me knew. Avoiding the comparison was not an oversight; it was self-protection. The made-up score only kept its power as long as I never tested it against the thing it was pretending to predict.
The fix: measure what you actually want
The repair was unglamorous and a little painful. I retired the vanity score and dragged myself back to the uncomfortable question — is the system getting better at what it is for? — and committed to tracking that, even though it moved slowly, stalled for long stretches, and sometimes went backwards.
A true metric that barely moves is worth more than a fake one that soars. The real one is allowed to be discouraging; that is part of what makes it real. A number that only ever goes up, that never delivers bad news, is not measuring anything that can push back on you — which is another way of saying it may not be measuring much at all.
Craftsmanship is real — it just isn’t the goal
I want to be careful not to overcorrect. Clean code is not worthless. Structure, clarity, the quality of the work — these are real, they compound, and a mess will eventually strangle a project. The error was never caring about craftsmanship. The error was promoting it to the goal because the actual goal was too uncertain to look at directly.
A means can be valuable and still become a trap, if you let it stand in for the end. The discipline I took from this is to keep asking, of any number that is making me feel good: is this the thing I actually want, or is it a comfortable proxy I reached for because the real measure was too hard to face? Often the honest answer is uncomfortable. That discomfort, it turns out, is one of the more reliable signs that you are finally looking at the right number.
— No signals, no returns, not investment advice.