NotVibesCoded
Craft Notes

What 'done' actually means: the boring parts AI skips

AI can write the feature. It can't decide the feature is finished. Here's the unglamorous checklist — tests, review, edge cases, rollback plans — that separates 'demo' from 'done.'

Published 3 min read

AI can write the feature. It cannot decide the feature is finished. That decision — done — is a judgment call, and it's where hand-crafted software earns its keep.

Here's the unglamorous checklist. Nothing on it is impressive. All of it is load-bearing.

1. The tests that embarrass the code

Not "does the happy path work" — the demo already proved that. Done means: what happens when the API is slow, when it's down, when it returns garbage? What happens with an empty list, a list of ten thousand, a list containing one hostile entry? Write the test that would embarrass the code, then make the code pass it. AI will happily write tests too — but only the ones you think to ask for. The test suite is only as adversarial as its author.

2. The review by someone with scars

Every line of consequential code gets read by a human who has been burned before. Not for style — for the things linters can't see: "this cache has no invalidation," "this retry has no backoff," "this query is fine at 100 rows and a disaster at 100,000." Review is pattern-matching against past pain. AI has no past pain. It has training data about pain, which is not the same thing.

3. The edge cases nobody demos

Empty states. Loading states. Error states. The user with a 3G connection and a phone from 2019. The admin who pastes a novel into the "name" field. The timezone bug that only fires during the one week of DST transition. Done means walking the perimeter of the feature and checking every fence post. Demos walk the garden path.

4. The rollback plan

Done means knowing how to un-ship it. Database migration with a down path. Feature flag, not a deploy-and-pray. A runbook entry for the 2 AM version of you. AI-generated projects almost never include an undo strategy, because "undo" requires imagining failure — and the prompt said "build me X," not "build me X and a dignified retreat."

5. The boring documentation

Not a novel. Just: what does this do, what does it depend on, what breaks if I touch it, who do I call. Future-you is a stranger; write for them. Six months from now, the difference between a codebase you can extend and one you want to burn down is usually a README and honest comments at the tricky parts.

6. The delete key

Done sometimes means deleting. The AI-generated helper that's used once. The dependency pulled in for one function. The abstraction that anticipates requirements nobody has. Done is not "it works" — it's "it works and there's nothing left to take away."

Why this matters now

None of this is new. It's the same checklist good engineers have used for decades. What's new is the volume: AI lets one person generate a month of code in an afternoon, which means the boring parts — review, tests, edge cases — are now the bottleneck. The industry spent 2025 celebrating generation speed and is spending 2026 discovering that speed without judgment just produces mistakes faster.

The studios and developers who thrive won't be the ones who generate the most code. They'll be the ones with the best definition of done.

Ours is above. It's not glamorous. It's the whole business.


If your project needs someone who owns the definition of done — that's the studio. Start a conversation.