When code generation takes ten seconds, the scarce skill stops being writing and becomes deciding what to keep. Working code is now the cheapest thing in software; knowing what belongs is not.
The Details:
A passing test suite only proves a function works in isolation, not that it fits the system around it. Prompt-and-accept loops clear that low bar repeatedly, so a codebase can accumulate three different names for the same concept and inconsistent error handling across modules, because each piece was generated in a separate session with no shared context.
Three signals mark code that needs cutting rather than keeping. Parameters or config objects built for flexibility nobody requested, defensive checks guarding against states that cannot occur, and generic names like handleRequest standing in for something specific like parseInvoiceCSV. Each is the generator hedging against uncertainty about the actual domain.
Renaming before restructuring is the fastest way to expose those problems. Try narrating the code aloud using its current name; a vague name makes the description collapse into nothing, while an honest, specific name immediately reveals which parameters and abstractions never belonged there in the first place.
Standards written into a project file only work if they are concrete. A rule like errors bubble up, we do not catch and log at the leaf gives the model and the reviewer something to check against, unlike a vague instruction to keep code clean. Reviewing the diff instead of the finished file matters too, since a module can look coherent alone while speaking a different dialect than its neighbors, and diffs surface that mismatch first.
Bottom Line: Generation got cheap, so the entire competitive edge moved to the judgment that decides what survives the first draft.
Enjoy this article?
Listen to the Claude Code Conversations radio show or join the community.