7 min read

You Don't Need to Read Every Line of Code — Control the Ideas Instead

AIDeveloper ProductivityLLM CodingWorkflowBest Practices

I spent last weekend doing something I haven't done in months: I reviewed every single line of code an AI wrote for me.

It took four hours. I found two minor style issues and one unnecessary type annotation. Then I deleted all my comments on the PR and merged it anyway.

That's when it hit me: I just wasted a perfectly good Saturday afternoon pretending to be useful.

Salvatore Sanfilippo — antirez, the creator of Redis — just published a post that articulated exactly what I'd been feeling. He calls it "control the ideas, not the code." It's been bouncing around my head all week because it names something I think a lot of us are quietly struggling with: the guilt of not reading every line.

The Guilt Is Real

We were taught that real developers read every line. Code review isn't just a process — it's an identity. If you approve a PR without understanding every branch, every error path, every ternary expression, you're being negligent. Right?

Maybe not anymore.

antirez makes the point bluntly: "How are you supposed to review 5k lines of code every day?" The answer is you can't. And trying to is actively hurting your productivity, not helping it.

Here's what I've noticed since I stopped pretending to read everything:

  • I ship features 2-3x faster
  • My code quality hasn't dropped — it's actually improved
  • I have way more energy for the parts of development that actually matter
  • I enjoy coding again

What "Controlling Ideas" Actually Looks Like

Let me be specific about what this means in practice, because "just stop reading code" sounds like terrible advice without context.

1. Design First, Generate Second

Before I let an LLM write a single function, I write down the design. Not in my head — in a document. I use ZeroPad for this because it's fast and lives in my new tab, but any markdown editor works. The key is that I nail down:

  • What does this component/function actually do?
  • What are the inputs and outputs?
  • What edge cases matter?
  • What patterns from the existing codebase should it follow?

This takes 10-15 minutes. Then I hand it to the AI and say "implement this."

2. Review by Abstraction, Not by Line

Instead of reading line by line, I read the generated code at the function signature level. Does it accept the right parameters? Does it return the right type? Does the overall structure match what I designed?

If those are right, the implementation details are almost certainly fine. LLMs are excellent at locally optimal code. They mess up at the boundaries — the API contract, the error handling strategy, the integration points. That's what you should be reviewing.

3. Ask the AI to Explain Itself

Here's a trick that saved me: instead of reading the code, ask the AI to explain how it works. Throw the generated code back at the model and say "explain this to me at a high level." If it can't give you a coherent explanation in 3-4 sentences, something is wrong.

I use this constantly now. It catches the real issues — like "this function is actually doing two things" or "this doesn't handle the database connection failure case" — way faster than staring at the code trying to spot a missing semicolon.

The Statistics That Changed My Mind

Look, I'm a data person. So I ran an experiment on a recent feature — a moderately complex background job processor with retry logic, queue management, and webhook callbacks.

Total lines generated by AI: ~3,200
Lines I read: ~150 (function signatures, key integration points, error paths)
Issues found by reading everything: 0 (the AI caught them all during generation)
Issues found by my abstraction-level review: 2 (wrong parameter name in a callback, missing error log in the retry path)
Time spent on line-by-line review: ~3 hours
Time spent on abstraction review: ~25 minutes

Same result. 7x less time.

What You Lose When You Read Every Line

The real cost isn't the time — it's what you don't do because you spent that time reading code.

Every hour you spend line-by-line reviewing AI-generated boilerplate is an hour you didn't spend:

  • Thinking about architecture improvements
  • Refactoring that messy part of the codebase you've been avoiding
  • Writing better tests
  • Helping your teammates with their problems
  • Learning something new that will actually make you better tomorrow

antirez puts it well: "The working day is 8 hours. If you read the code, it is a tradeoff."

The highest-leverage work you can do is controlling the ideas behind the software. The code is just a translation of those ideas. If you trust the translator, let it work.

Where This Breaks Down

I'm not saying you should never read code. Here's when you absolutely should:

  • Security-critical paths: Auth, encryption, payment processing — read every line, every time. No exceptions.
  • Infrastructure code: Deployment configs, networking, database migrations. The AI doesn't know your infrastructure quirks.
  • When onboarding: You need to build a mental model of the codebase first. Reading code is how you do that.
  • When debugging: If something is broken, you need to understand the full path. No shortcuts.

But for feature code — the vast majority of what you generate daily — trust the abstraction layer. Review the ideas, not the implementation.

How to Capture the Ideas

This approach only works if you're actually good at capturing and organizing the ideas you're controlling. I've found a few practices that help:

Keep an architecture journal. Every project I work on gets a running document in ZeroPad where I write down design decisions, trade-offs, and the reasoning behind them. Not code — just ideas. When I come back to a project after two weeks, this is worth 10x more than reading the code.

Build a patterns library. The more consistent your codebase, the better LLMs are at generating code that fits. I use Snippet Ark to store and organize the patterns I want every feature to follow: error handling conventions, logging patterns, API response formats. The AI generates code that matches, and my abstraction-level review is even faster because everything looks familiar.

Write the tests first. I know, I sound like a TDM (Test-Driven Marketing) person, but seriously — if you define the expected behavior in tests, the AI can generate the implementation, and you only need to verify the tests pass. That's the ultimate abstraction-level review.

The Weirdest Part

The weirdest part of all this? My codebase is actually cleaner now than when I was reading every line.

When I was line-level reviewing, I'd nitpick style and formatting because that's what I could actually see. I'd request changes to variable names and comment formatting. Meanwhile, the architecture was slowly rotting because I wasn't spending mental energy on it.

Now I review at the idea level. I ask questions like "does this feature actually need a queue, or are we over-engineering it?" and "should this be a separate service or a module?" Those questions produce better software than moving a semicolon ever will.

What I'm Actually Doing Now

My current workflow looks like this:

  1. Open ZeroPad and write a one-page spec for whatever I'm building
  2. Generate the implementation with AI
  3. Review at the function-signature level (5-10 minutes)
  4. Ask the AI to explain the implementation back to me
  5. If it makes sense, ship it
  6. Save any useful patterns or gotchas to Snippet Ark for next time

That's it. I went from spending 30-40% of my day reading generated code to spending maybe 5-10%. The rest goes into architecture, testing, and building things that actually matter.

antirez ended his post by saying we're entering an era where the most important skill isn't writing code — it's deciding what code to write. I think he's right.

Try It For a Week

Here's my challenge to you: for one week, stop reading every line of generated code. Review at the abstraction level. Control the ideas. See what happens to your shipping velocity, your energy levels, and your code quality.

I'll bet you don't go back.

What's your approach to reviewing AI-generated code? Have you found a balance that works? I'd love to hear it — drop me a note or save your own workflow patterns in Snippet Ark and share them with the team.