Baseline, captured before anything was touched. 2,430 TypeScript errors. 1,751 hardcoded palette utilities across 63 files, heaviest in analytics at 182, then compliance at 106, dashboard at 81. Around 210 files carrying a use client directive. Zero declaration files shipping from the component package.
One of those numbers went to zero the same week. One of them's still there today, untouched, and I'm leaving it that way for a while yet. What follows is why that's one decision rather than two.
The one that looked enormous
2,430 errors reads like a rewrite. It reads like a quarter of work, a slide with the word migration on it, and a conversation about whether the whole thing was a mistake.
It was a publishing defect: the component package shipped no declaration files at all, so every consumer silently fell back to the bundled JavaScript and every prop on every component collapsed to any. Turning on declaration emit took it from 2,430 to 599 without touching a single line of application code.
The remaining 599 were one root cause. A service worker file opened with a reference directive setting no-default-lib. Because that file was inside the app's type-check, the directive stripped the DOM library from the entire program, and not just from the service worker. From everything. document, window, every DOM member access on every page, all gone at once, which accounted for about 535 of them. Excluding one file from one tsconfig took it to zero.
2,430 to 0, and the diff is a build flag and an exclude line.
I want to be honest about how that felt, because it wasn't triumphant. It was closer to that feeling when your gran discovers you've had the fire on three bars for the last hour and you have to sit there while she works out loud what that's costing her. The number was never describing the amount of work, it was describing one wrong thing, loudly, 2,430 times.
The one that looks mechanical
1,751 hardcoded palette utilities is the opposite shape, and it reads like a chore: find, replace, commit, done before lunch. Every instinct says get it over with, and there's a genuine satisfaction in watching a number that size go to zero in one pass.
It's an app-wide visual change to 63 files with no way to tell a fix from a regression while you're doing it. A sweep touches every screen at once, and the thing about colour is that wrong colour still renders. It doesn't throw and it doesn't fail a type check. It sits there looking completely deliberate until somebody who wasn't in the room notices the compliance page has gone slightly grey.
So it's staged: pilot a section, snapshot it, look at it with actual eyes, then sweep. Gated on visual regression rather than on my confidence. The reason it isn't done isn't that I haven't got to it. It's that the safe version takes longer than the unsafe one, and I'd rather have it slow than silently wrong across every screen in the product.
There's a second one deferred alongside it, same reason from a different angle. Extracting the shared code block and theme hook and props table across roughly 90 files is genuinely mechanical, but every call site has small differences and the whole thing hangs off a theme provider that's itself mid-unification. Doing it now means doing it twice. Churn on churn, and the second pass is always the one nobody reviews properly.
The actual skill
Both numbers are big and both look like work. One was a config line, and one is weeks of careful and boring and visually-verified staging, and you can't tell which is which by looking at the number.
That's the whole job, or at least the part of it I'd want to be judged on. Not how fast I can close a big number. Whether I can work out what the big number is actually telling me before I start swinging at it.
The 2,430 wanted diagnosis and got it, and then it wanted almost nothing else. The 1,751 wants patience, and it would happily take an afternoon instead, and it would pay me back for that afternoon over the following six months, in small wrong colours on pages I don't open very often.
A backlog item with a written reason is a decision. The same item with no reason is just a thing you haven't done.
So it's in the log with the rationale, and the rationale is the point. Anybody can list what they finished, and the list I find useful when I join something is the other one. What did you decide not to do, and what did you know at the time?