<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: liangjiang0012-netizen</title>
    <description>The latest articles on DEV Community by liangjiang0012-netizen (@liangjiang0012netizen).</description>
    <link>https://dev.to/liangjiang0012netizen</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4168203%2F4e6a3708-6677-4e2c-b9c3-fc89517f3dcb.png</url>
      <title>DEV Community: liangjiang0012-netizen</title>
      <link>https://dev.to/liangjiang0012netizen</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/liangjiang0012netizen"/>
    <language>en</language>
    <item>
      <title>Why Code Review Suggestions Never Get Implemented</title>
      <dc:creator>liangjiang0012-netizen</dc:creator>
      <pubDate>Wed, 07 Oct 2026 08:33:58 +0000</pubDate>
      <link>https://dev.to/liangjiang0012netizen/why-code-review-suggestions-never-get-implemented-1cgd</link>
      <guid>https://dev.to/liangjiang0012netizen/why-code-review-suggestions-never-get-implemented-1cgd</guid>
      <description>&lt;h1&gt;
  
  
  Why Code Review Suggestions Never Get Implemented
&lt;/h1&gt;

&lt;p&gt;Last month I caught myself saying the same sentence for the third time in a code review:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Let's not fix this now — we'll keep it in mind next time."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;First time was three months ago. Second time was last month. Third time was now.&lt;/p&gt;

&lt;p&gt;Every time: "next time." Every time: nobody remembered. Including me.&lt;/p&gt;

&lt;p&gt;So I went back and looked at the review comments from the past six months. The result was sobering: &lt;strong&gt;most suggestions were never implemented.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not rejected. Not debated. Just... forgotten.&lt;/p&gt;




&lt;h2&gt;
  
  
  "Next time" is a polite way of saying "never"
&lt;/h2&gt;

&lt;p&gt;Let's take that sentence apart:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Let's not fix this now — we'll keep it in mind next time."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It sounds courteous. It keeps the meeting civil. But it does three things at once:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It gives the other person &lt;strong&gt;permission not to act&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;It gives &lt;em&gt;me&lt;/em&gt; &lt;strong&gt;a reason not to insist&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;It &lt;strong&gt;erases the suggestion entirely&lt;/strong&gt; — no record, no owner, no deadline.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So the practical meaning is: not now, not next time, not ever.&lt;/p&gt;

&lt;p&gt;I call this &lt;strong&gt;politely useless&lt;/strong&gt;. Everyone feels fine. Nothing gets fixed.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why verbal reminders can't work
&lt;/h2&gt;

&lt;p&gt;Think about what has to happen for a review suggestion to actually get implemented:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;What actually happens&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Suggestion is raised&lt;/td&gt;
&lt;td&gt;Said out loud in a meeting&lt;/td&gt;
&lt;td&gt;No artifact&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;It's recorded&lt;/td&gt;
&lt;td&gt;Nowhere, or in someone's head&lt;/td&gt;
&lt;td&gt;Usually lost&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;It's assigned&lt;/td&gt;
&lt;td&gt;No owner, no deadline&lt;/td&gt;
&lt;td&gt;Nobody's job&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;It's tracked&lt;/td&gt;
&lt;td&gt;Nobody looks again&lt;/td&gt;
&lt;td&gt;Dies quietly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;It's implemented&lt;/td&gt;
&lt;td&gt;Depends on good intentions&lt;/td&gt;
&lt;td&gt;Depends on the day&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Every one of these steps is broken.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If any single link fails, the suggestion is dead. And with verbal reminders, &lt;em&gt;no link is connected at all&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The deeper problem: &lt;strong&gt;we're using human memory as a task queue. Human memory has never been good at that.&lt;/strong&gt; A sentence like "next time" survives maybe ten minutes in your head.&lt;/p&gt;




&lt;h2&gt;
  
  
  The most common excuse: "No time, the sprint is tight"
&lt;/h2&gt;

&lt;p&gt;The analysis above is a bit idealized. The version you actually hear is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I know it needs fixing, but we're underwater on this sprint. Let's revisit it later."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I'll grant that this is &lt;em&gt;partly true&lt;/em&gt;. There are deadlines, quarters, OKRs. A "style" problem that doesn't affect functionality will always sort to the bottom.&lt;/p&gt;

&lt;p&gt;But here's the thing: &lt;strong&gt;"later" never arrives.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The typical lifecycle of such a suggestion:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;th&gt;State&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Review day&lt;/td&gt;
&lt;td&gt;"Noted, I'll fix it later"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One week later&lt;/td&gt;
&lt;td&gt;Shipped something, firefighting, forgotten&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One month later&lt;/td&gt;
&lt;td&gt;Fully forgotten; code is in production, so fixing is now riskier&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Three months later&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;The same person writes the same mistake again&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That last row is the real cost.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"No time to fix it" doesn't make the problem go away. It makes it reappear later, in more places, at higher cost.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The half hour you saved today will come back at ten times the price — and not just once.&lt;/p&gt;

&lt;p&gt;So "the sprint is tight" is not a reason to skip it. &lt;strong&gt;It's the reason to let a machine handle it:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rely on people → always behind the sprint, always "no time"&lt;/li&gt;
&lt;li&gt;Rely on the build → it blocks at commit time, &lt;strong&gt;takes zero human time&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If a machine can fix it automatically, don't spend a human's sprint time on it.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  A deeper problem: we review at the wrong time
&lt;/h2&gt;

&lt;p&gt;Everything above is about what happens &lt;em&gt;after&lt;/em&gt; a suggestion is made. There's a more fundamental issue.&lt;/p&gt;

&lt;p&gt;A common workflow is: &lt;strong&gt;write the code, then review it — and review the technical design in the same pass.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This sounds thorough. It's actually a process bug:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The design should have been settled before anyone wrote code.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In practice:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th&gt;What should happen&lt;/th&gt;
&lt;th&gt;What actually happens&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Requirements → Design&lt;/td&gt;
&lt;td&gt;Design review; architecture and key decisions settled&lt;/td&gt;
&lt;td&gt;Skipped, or a verbal "sounds good"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Design → Coding&lt;/td&gt;
&lt;td&gt;Implement against the design&lt;/td&gt;
&lt;td&gt;Design lives in one person's head&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coding → Review&lt;/td&gt;
&lt;td&gt;Verify implementation matches the design&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Design and implementation reviewed together&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;See the problem?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you're discussing the design while reviewing the code, the design was decided &lt;em&gt;in&lt;/em&gt; the code — and the code was already written.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Two consequences:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Design mistakes get held hostage by sunk cost.&lt;/strong&gt;&lt;br&gt;
Changing a design before coding means editing a diagram. Changing it after coding means rewriting. So people compromise: "it's already written, let's leave it." &lt;strong&gt;The mistake gets baked in permanently.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. One review, two goals, both done badly.&lt;/strong&gt;&lt;br&gt;
Design review needs divergence — debate, trade-offs, exploration. Implementation review needs convergence — check against a standard. Mixing them in one meeting means &lt;strong&gt;neither is done properly&lt;/strong&gt; — and whatever got missed becomes the next round of "next time."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The review is in the wrong place.&lt;/strong&gt; It shouldn't be the safety net for design &lt;em&gt;and&lt;/em&gt; implementation. It should answer one question: does the implementation match the agreed design?&lt;/p&gt;

&lt;h3&gt;
  
  
  The fix: review in stages
&lt;/h3&gt;

&lt;p&gt;Review shouldn't be a single event — it should be staged according to the size of the change:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stage&lt;/th&gt;
&lt;th&gt;What to review&lt;/th&gt;
&lt;th&gt;When&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Overall structure&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Once the skeleton exists, before filling in details&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Core logic&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Once the main implementation is done&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Details and conventions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Once it's functionally complete&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Why this works:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Problems get caught when they're cheapest to fix.&lt;/strong&gt; A structural problem fixed at stage 1 is a few class moves. Found at the end, it's a rewrite.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Each review has a single goal.&lt;/strong&gt; Stage 1 debates structure, not naming. Stage 3 polishes details, not architecture. Reviewers stay focused.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Large changes become executable.&lt;/strong&gt; Sometimes "next time" isn't laziness — the change is just too big to do in one pass. Staged review keeps each increment small.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Review cadence is itself a convention.&lt;/strong&gt; The bigger the change, the more stages it needs. Saving it all for one big review guarantees a backlog of "next time."&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The question isn't "do we fix this now?" It's &lt;strong&gt;"at which stage should this have been caught?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The root cause: we manage machines' work with human reminders
&lt;/h2&gt;

&lt;p&gt;Here's what I think the real problem is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;We use human processes for things that should be mechanical.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Review suggestions fall into two categories.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Category 1: machine-detectable (the majority)&lt;/strong&gt;&lt;br&gt;
Naming, method length, nesting depth, logging, layering violations (a controller calling a DAO directly), duplicated code, inconsistent exception handling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;All of this is automatable.&lt;/strong&gt; Yet we say it out loud, expect someone to remember it, and hope they'll fix it voluntarily.&lt;/p&gt;

&lt;p&gt;That's an enormous waste. A machine can do this ten thousand times a second. We do it with a meeting, three sentences, and one person's memory.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Category 2: not machine-detectable (the minority)&lt;/strong&gt;&lt;br&gt;
Whether a name reflects the domain, whether an abstraction earns its weight, whether logic belongs in that layer.&lt;/p&gt;

&lt;p&gt;These genuinely need a human. But even these &lt;strong&gt;shouldn't be handled with "next time"&lt;/strong&gt; — they should become trackable items.&lt;/p&gt;




&lt;h2&gt;
  
  
  What actually works
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Rule 1: If a machine can block it, don't say it out loud.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Write every "we must remember this from now on" rule as a check, wire it into CI, and &lt;strong&gt;block the merge if it fails.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Formatting → auto-format on commit, fail the build if dirty&lt;/li&gt;
&lt;li&gt;Static analysis → quality gate, block merge if new issues exceed the threshold&lt;/li&gt;
&lt;li&gt;Architecture → encode rules like "no cross-layer calls" as executable tests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The key is not detection. It's blocking.&lt;/strong&gt; A check that only warns is equivalent to no check, because someone will click "ignore."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Warning without blocking is politely useless.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rule 2: If a machine can't judge it, make it a trackable item.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A "won't fix now" suggestion must immediately become a ticket with an owner and a due date. Otherwise it's just a compliment.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Every suggestion goes into the review system's comments — no more verbal notes&lt;/li&gt;
&lt;li&gt;Must-fix items become &lt;strong&gt;blocking&lt;/strong&gt;, and the merge is gated on them&lt;/li&gt;
&lt;li&gt;Won't-fix-now items &lt;strong&gt;create a linked ticket&lt;/strong&gt;, assigned, with a date&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Three months later, &lt;strong&gt;every suggestion has a traceable history.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rule 3: Repeated suggestions should be promoted to rules.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the most important one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you've made the same suggestion three times, the problem isn't the person — it's your process.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A suggestion raised three times should be promoted from "verbal advice" to "automated check." Stop reminding people. &lt;strong&gt;Let the machine say it for the hundredth time.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The quieter loss: handover wipes it all out
&lt;/h2&gt;

&lt;p&gt;Everything above assumes the person who raised the suggestion is the person who fixes it.&lt;/p&gt;

&lt;p&gt;But people leave. Teams reorganize. Modules change hands. &lt;strong&gt;When that happens, every problem above gets worse.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A verbal suggestion's fate during handover:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;What happens to the suggestion&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Same person, same team&lt;/td&gt;
&lt;td&gt;At least a chance of "next time"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Code handed to someone else&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Gone&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Handover + original author leaves&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;The rationale is gone too&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;First: suggestions don't transfer.&lt;/strong&gt;&lt;br&gt;
"Let's remember this next time" exists only inside that one meeting. It was never written down, assigned, or tracked. When the code changes hands, &lt;strong&gt;it isn't in any handover document.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The new owner doesn't even know the suggestion existed. That's not carelessness — &lt;strong&gt;the information was never captured.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Second: tech debt gets silently inherited.&lt;/strong&gt;&lt;br&gt;
Worse than losing a suggestion: the previous owner's debt gets inherited under the label "legacy." The new owner looks at confusing code and thinks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"There's probably a historical reason. I don't understand why it's written this way, so I'll leave it alone."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Then adds features on top of it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The debt isn't repaid — it becomes the foundation for new code. &lt;strong&gt;The longer it sits, the less anyone dares touch it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Third: the most expensive loss — rationale disappears.&lt;/strong&gt;&lt;br&gt;
The code is visible. &lt;strong&gt;"Why it's designed this way" lives only in the original author's head:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A cleaner approach was avoided because of a specific failure mode&lt;/li&gt;
&lt;li&gt;A seemingly redundant check was added after an incident&lt;/li&gt;
&lt;li&gt;A "needs refactoring" spot hides an unresolved problem&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;None of this is in the code. None of it is in the handover doc.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Two failure modes follow: someone &lt;strong&gt;tears out a design that had good reasons&lt;/strong&gt; and rediscovers the original bug — or &lt;strong&gt;preserves a broken implementation&lt;/strong&gt; believing it's best practice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code can be handed over. Intent, if it isn't captured, leaves with the person.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  AI closes the loop — but not how most teams think
&lt;/h2&gt;

&lt;p&gt;This methodology has always had one blocker: &lt;strong&gt;cost.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Writing checks is expensive, especially architectural constraints&lt;/li&gt;
&lt;li&gt;Turning suggestions into tickets is manual, and manual means forgotten&lt;/li&gt;
&lt;li&gt;Judging which suggestions deserve to become rules requires experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;These costs are why "make it a rule" stayed a slogan.&lt;/strong&gt; Writing rules is tedious. Saying it out loud is one sentence.&lt;/p&gt;

&lt;p&gt;Recent progress in coding LLMs and agents has collapsed most of these costs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Rule generation is now nearly free.&lt;/strong&gt;&lt;br&gt;
Writing an architecture rule used to mean digging through APIs and debugging a test. Now you can say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Scan this module for controllers that depend directly on DAOs, and generate a CI-ready architecture rule."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The model understands your codebase and &lt;strong&gt;produces a runnable rule.&lt;/strong&gt; The "three strikes and it becomes a rule" policy is finally practical.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Agents make staged review automatic.&lt;/strong&gt;&lt;br&gt;
Staged review needs someone at every stage — and reviewers are busy. Agents fill the gap: structure and dependency direction at stage 1, boundaries and error handling at stage 2, naming and formatting at stage 3.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Most importantly: they separate "newly introduced" from "pre-existing."&lt;/strong&gt; The biggest problem with human review is that legacy noise buries new issues. An agent can look only at the diff and flag &lt;strong&gt;what this change introduced&lt;/strong&gt; — exactly what "next time" tends to miss.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Suggestions become actionable.&lt;/strong&gt;&lt;br&gt;
"This method is too long" is abstract. A model can tell you &lt;strong&gt;which methods to extract, what to call them, which call sites are affected, and what priority to assign.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggestions stop being reminders and become tasks.&lt;/strong&gt; Part of "no time to fix it" was that suggestions were too vague and too expensive to start.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. The best part: AI itself can be bound by your conventions.&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Feed your team's conventions to the model and it will follow them while generating code.&lt;/strong&gt; Instead of post-hoc checks, you get alignment at generation time.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;From &lt;strong&gt;blocking after the fact&lt;/strong&gt; to &lt;strong&gt;aligning before the fact.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  But AI does not replace process
&lt;/h3&gt;

&lt;p&gt;Many teams assume that adopting an AI code assistant automatically improves code quality.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It doesn't.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI raises a suggestion, &lt;strong&gt;and nobody tracks it&lt;/strong&gt; → still ignored&lt;/li&gt;
&lt;li&gt;AI finds a problem, &lt;strong&gt;and it doesn't block the merge&lt;/strong&gt; → someone clicks "ignore"&lt;/li&gt;
&lt;li&gt;AI raises it every single time, &lt;strong&gt;and nobody promotes it to a rule&lt;/strong&gt; → it'll raise it again tomorrow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;AI reduces the cost of &lt;em&gt;finding and solving&lt;/em&gt;. It doesn't reduce the cost of &lt;em&gt;executing&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;AI handles detect + generate + explain. Process handles block + track + measure.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You need both:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;People without AI → slow, incomplete, relies on goodwill&lt;/li&gt;
&lt;li&gt;AI without process → more suggestions, none executed, more noise&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI + process → rules generated, merges blocked, debt tracked; humans make the final call&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;A counterintuitive observation:&lt;/strong&gt; in the AI era, &lt;strong&gt;code review becomes &lt;em&gt;more&lt;/em&gt; valuable, not less.&lt;/strong&gt; Generation speed has gone up dramatically. The judgment of whether code &lt;em&gt;should&lt;/em&gt; be written that way still requires a human. &lt;strong&gt;The bottleneck moved from writing to reviewing.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The counterintuitive conclusion
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The value of a code review isn't finding new problems. It's finding conventions that should be automated.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A review that finds a problem, mentions it, and ends has near-zero value — &lt;strong&gt;the same problem will recur.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But a review that produces either &lt;strong&gt;a new automated check&lt;/strong&gt; or &lt;strong&gt;a trackable ticket&lt;/strong&gt; raises the team's floor permanently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The goal isn't to get this fixed once. It's to never have to say it again.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Where I'm still stuck
&lt;/h2&gt;

&lt;p&gt;Honestly, I haven't fully solved this. The methodology above is still expensive to run:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Writing checks costs effort; architectural constraints especially&lt;/li&gt;
&lt;li&gt;Turning every "next time" into a ticket requires tooling, or humans forget&lt;/li&gt;
&lt;li&gt;Rules end up scattered across CI configs, linters, and issue trackers — &lt;strong&gt;nowhere to see "which conventions have we actually fought about"&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My conclusion: &lt;strong&gt;there's a missing piece between "rules a machine can enforce" and "suggestions a human must track" — something lightweight that connects them.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I doubt I'm the only one.&lt;/p&gt;




&lt;h2&gt;
  
  
  How does your team handle this?
&lt;/h2&gt;

&lt;p&gt;If you're a tech lead or you run code reviews, I'd genuinely like to know:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Roughly what fraction of your review suggestions actually get implemented?&lt;/li&gt;
&lt;li&gt;How do you handle "won't fix now, but remember next time"?&lt;/li&gt;
&lt;li&gt;Is there a convention you've raised a hundred times and people still break?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Curious whether this is a universal problem or just my experience.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>productivity</category>
      <category>programming</category>
      <category>coding</category>
    </item>
  </channel>
</rss>
