The bottleneck moved

For decades the cost of software was typing it out: translating an idea into syntax. AI collapses that cost toward zero. But producing code was never the hard part of engineering — knowing which code is correct, maintainable, and safe was. AI does not remove that work. It concentrates it.

Generated code is a draft, not an answer

A model will hand you something plausible, well-formatted, and confidently wrong in a way that compiles. It invents a library method that does not exist. It handles the happy path and silently drops the error case. It writes a query that works on ten rows and melts on ten million. Treat every generation as a junior engineer's first draft: useful, fast, and requiring review.

Review the assumptions, not just the syntax

The shallow review checks whether the code runs. The real review asks what the code assumes:

  • What happens when this input is empty, huge, or hostile?
  • Does this match the patterns already in the codebase?
  • What did the model not do that the task actually needed?
// The model wrote this. It works — until name is undefined.
const slug = name.toLowerCase().replace(/\s+/g, "-");

// Judgment adds the case it skipped.
const slug = (name ?? "").trim().toLowerCase().replace(/\s+/g, "-");

Stay the author

It is tempting to accept code you do not fully understand because it passes the test you happened to write. That debt compounds. If you cannot explain why a block is correct, you cannot maintain it, and neither can the next model you ask to change it. Use AI to draft, to explore, to handle the boring parts — but remain the engineer who decides what ships.

The skill that grows

In an AI workflow, the rare skill is not writing more code. It is taste: knowing what good looks like, spotting the quiet bug, and rejecting the plausible-but-wrong. That judgment is still entirely yours to build.