Notes & opinionsAI can move code fast; layered review is how you keep the system honest

AI can move code fast; layered review is how you keep the system honestI write these notes and own the ideas here. I also use AI to tighten wording and structure so they read more clearly for more people.

I have been spending a lot of cycles on assisted coding: tight prompts, short iterations, and an experienced engineer in the loop who owns architecture, naming, and when to say no. Ruby on Rails has been a comfortable surface for that pairing because conventions are explicit, paths are well trodden, and “the Rails way” gives the model guardrails instead of inventing a new framework every file. The output can be impressively quick. The open question is never raw speed; it is whether the change still matches the product story, the edge cases, and the years you plan to live with the code.

That is where review energy starts to feel scarce. If generation is cheap, every line still carries operational and cognitive cost: consistency across features, behavior under odd inputs, and the context QA needs so they are not discovering intent only after merge. I do not find the answer in “relax reviews” or “review everything like a security audit on every PR.” I find it in being explicit about what each change is supposed to do, what is out of scope, and which risks are real for this diff versus generic style nits.

What I am actually running in practice is a stack, not a single gate. I read the diff myself before the PR exists, and I ask the same when someone else opens one: own the change before it becomes collective debt. Then I run a second pass in a fresh assistant chat with a deliberate prompt, so the model is not anchored to the happy path I already believe. CI gets an automated reviewer pass on top of tests and linters, and I treat that as another consistency check, not a substitute for humans. After that, a senior still looks at the result with full authority to reject or reshape.

The goal is not to make review slower for sport. It is to keep assisted velocity from outrunning shared understanding. If the layers are clear, you can move fast where conventions hold and still protect the long arc of the codebase, the QA contract, and the next person who reads the diff without your chat history.