← Writing

AI reviews syntax. Humans review thinking.

May 12, 2026

Every pull request I open gets reviewed twice. First by a model, then by a person. The model always goes first.

We set this up when I went all-in on agentic tools in 2025: Claude Code writes the first draft, an AI review pass runs before any human looks at the diff, and Cypress tests get drafted straight from acceptance criteria. A year in, the division of labor is clearer to me than any org chart.

What the machine catches

AI review is excellent at everything that has a right answer.

  • Naming. The data that should be unreadStories, the boolean called flag.
  • The missing dependency in a useEffect, and the stale closure it would have caused.
  • The fetch with no error path. The promise nobody awaits.
  • Style drift — the one file that quietly stops matching the rest of the codebase.
  • Edge cases: empty list, null user, the timezone that isn't yours.

It catches these reliably, politely, and at two in the morning. This is the layer of review that used to consume most of a human reviewer's attention — and, honestly, most of their goodwill.

What it misses

In a year of AI-first review, no model has ever asked me why a component exists.

That's not a temporary gap. It's the shape of the tool. The model sees the diff; it doesn't see the roadmap, the on-call history, or the argument we had in planning. So the questions that actually decide whether code is good never come up:

  • Should this be a backend concern?
  • Will this survive six months of product changes?
  • What trade-off are we accepting, and did we mean to?
  • Is this solving the right problem, or the most convenient one?

Concrete example. A diff adds a component that pulls the full story list and filters it in the browser:

const eligible = stories.filter(
  (s) => s.completed && !s.premium && s.genre === genre
);

The AI comment: "Consider memoizing this filter, and handle the case where stories is undefined." Correct. Useful. Fixable in ninety seconds.

The question a senior should ask: "Why is the client downloading the whole catalog to throw most of it away? This belongs in the API — and the moment we want pagination or personalization, it has to move there anyway. Move it now."

The AI comment improves the diff. The human question deletes it.

The promotion

Here's the practical consequence: human review didn't shrink. It moved up.

When reviewers no longer spend their attention on naming and forgotten error paths, they spend it on architecture, product context, and second-order effects. The review conversation at Inkitt got more interesting, not shorter. Fewer comments per PR, heavier ones.

That's a promotion for reviewers, not a replacement. Nobody's best work was ever the comment that said "typo." Pretending syntax review was the valuable part of the job insults everyone who was good at the other part.

And the standard for merging never budged. We still ship multiple releases a week with zero downtime, and every diff still needs a human to say yes. The human just says yes to different things now — and no to better ones.

The bar for shipping didn't drop; the bottleneck moved, and it landed on the part of review that was always worth a human's time.

Questions about this one? The terminal twin has opinions — ⌘K