<?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: Arnaud Debray</title>
    <description>The latest articles on DEV Community by Arnaud Debray (@arnaud_debray_fd15d2f7fad).</description>
    <link>https://dev.to/arnaud_debray_fd15d2f7fad</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%2F3900600%2F9d5452d8-7346-4d5f-a736-484d88d4312c.png</url>
      <title>DEV Community: Arnaud Debray</title>
      <link>https://dev.to/arnaud_debray_fd15d2f7fad</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arnaud_debray_fd15d2f7fad"/>
    <language>en</language>
    <item>
      <title>A reviewer's attention is a fixed budget</title>
      <dc:creator>Arnaud Debray</dc:creator>
      <pubDate>Tue, 08 Sep 2026 14:38:12 +0000</pubDate>
      <link>https://dev.to/arnaud_debray_fd15d2f7fad/a-reviewers-attention-is-a-fixed-budget-3454</link>
      <guid>https://dev.to/arnaud_debray_fd15d2f7fad/a-reviewers-attention-is-a-fixed-budget-3454</guid>
      <description>&lt;p&gt;&lt;em&gt;The PR size grew significantly this year. But a reviewer can still only pay attention to a finite number of changes. For the past months we have been interviewing the tech leads who review AI-generated code for a living, and tinkering with our own review surface around what they told us. These are our conclusions so far.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PRs are now larger. Human attention hasn't grown&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every quote below is verbatim from the people we interviewed for &lt;a href="https://dev.to/arnaud_debray_fd15d2f7fad/we-talked-to-100-dev-teams-about-how-they-use-ai-here-are-some-things-we-learned-1g6b"&gt;our last post&lt;/a&gt;: four months, more than 100 tech leads, architects, and senior engineers, on how their teams actually use AI.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Now that you remove the bottleneck of writing the code, we've just moved the bottleneck to reviews."&lt;br&gt;
— an engineering manager&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The surge of coding agents has created strong control concerns for tech leads. Many try to limit this loss of control by reviewing as many PRs as possible. But that is where the bottleneck appears. What makes this a losing battle is that it isn't only a question of time. It's a question of cognitive capacity. No matter the skill level, no matter how much of a superhero you are, nobody is built to build a global understanding of a 2000-line AI-generated PR touching 100 files. The human attention window is limited.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Three problems with the GitHub PR review interface for AI-generated PRs&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Every file has the same weight and is presented in simple alphabetical order.&lt;/li&gt;
&lt;li&gt;It shows what changed and not why. As reviewer, you must reconstruct the reasoning from the code, one file at a time.&lt;/li&gt;
&lt;li&gt;Not everything is in GitHub. You must keep GitHub open to comment, then have a local Claude Code session in another window, then your IDE again in another window. You constantly switch from one to the other.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In the rest of this post, we'll describe what we built to address these 3 problems that came up again and again in our interviews. We're being fully transparent about what worked, what didn't, and what we still want to test. And of course, we're very open to feedback.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Triage by criticality
&lt;/h2&gt;

&lt;p&gt;In &lt;a href="https://dev.to/arnaud_debray_fd15d2f7fad/we-talked-to-100-dev-teams-about-how-they-use-ai-here-are-some-things-we-learned-1g6b"&gt;the last post&lt;/a&gt; we said that industry-standard code, a boilerplate integration or reading a CSV in Python, is easy for a model, and that as models commoditize, that kind of code commoditizes with them. This is the first point towards deciding what we should review and what we should not. The seniors we sat with already split their reviews in two, although they do not do it consciously.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Risky code gets read first, every time.&lt;/strong&gt; Depending on the profile of the reviewer, their definition of risky code changes. For a backend, the data model, the APIs, the contracts between services, auth, payments, anything that touches money or identity. This risky code is read first, every time. One CTO wrote their order down for us in a Slack message.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"1. Check we haven't dumped [junk] into the data models. 2. Check we haven't modified contracts between micro-services 3. Then, once those parts are validated, I look at the coherence and readability of the code."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Boilerplate is skimmed over.&lt;/strong&gt; This type of code gets the last part of the review, when the reviewer is already not really paying attention anymore, e.g., the helpers, the tests, the connectors to a well-documented API. If it is not business critical, it is not your expertise, and it does not need to be non-standard; the model has seen the pattern ten thousand times and it will probably produce code that is good enough.&lt;/p&gt;

&lt;h3&gt;
  
  
  What we built
&lt;/h3&gt;

&lt;p&gt;The first thing we built is a change map. Every changed file gets a criticality tier, and the tiers are set per viewer rather than per repo: a backend reviewer marks the data model and the APIs critical and the frontend tests low; a frontend reviewer flips the same PR the other way. This is done by matching file paths with rules. Before reading a line, you see the shape of what you are about to spend attention on, and you discard what you will not open.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftfimx8rhvt7u5pvo1fgy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftfimx8rhvt7u5pvo1fgy.png" alt="the change map on a 93-file PR — 6 critical ; 22 high ; 5 medium ; 50 low ; 10 needs triage" width="800" height="339"&gt;&lt;/a&gt;&lt;em&gt;the change map on a 93-file PR — 6 critical / 22 high / 5 medium / 50 low / 10 needs triage]&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Where I'm losing time is I need to skim through the changes to see what is touchy in the PR, now I can just see in a minute. This PR has critical files touched, or it's just low impact."&lt;br&gt;
— a lead architect&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; we shipped the criticality ordering and triage first: you can discard files you don't want to read, then the diff is displayed with critical files first, noise last. Users do like it, although they feel a bit uncomfortable explicitly saying "I'm not reading this" at first. Our users asked for the alphabetical file tree to navigate as well, because that is what they are used to, so we provide both and they choose. Either you navigate via alphabetical order, or you navigate by criticality.&lt;/p&gt;

&lt;p&gt;This is not perfect yet. A one-line change in a utils file can be the whole blast radius, and a path rule will not flag it. Our belief is that those changes are being treated as the last part deserving attention and thus not read carefully anyway. The tiers do not make it worse.&lt;/p&gt;

&lt;p&gt;A way to improve would be to make the rules smarter and flag tiers based on the semantic meaning of the changes. Another addition we're looking at is a clean way to mark "this we did not really check, and that is fine according to our policy." We have not shipped that yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Show the why behind the changes
&lt;/h2&gt;

&lt;p&gt;The reasoning that used to live in a dev's head, or on a whiteboard when the feature needed some more design, the edge cases, the alternatives that were rejected, the constraints, now gets typed into a prompt before the agent writes a line. Recovering what the human thought about and determining if the logic is correct has always been the slow part of the review. Now the issue is that there are many more decisions in a single PR, and you do not know whether a change was backed by actual thinking from the developer or was an arbitrary choice by the agent.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I spend my time on PRs writing why, why, why [...] I'm forcing the devs to own their decisions."&lt;br&gt;
— a tech lead&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  What we built
&lt;/h3&gt;

&lt;p&gt;Hervé captures the developer's thinking (the prompts) and puts it next to the diff in each PR. That way, we can expose important decisions that were made during implementation, e.g., we cache X but not Y. Our first version surfaced all of it at the top of the page next to the PR description. That was too much, and a user told us so within a week:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The info at the top is just too much and I just skip it."&lt;br&gt;
— a CTO&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It felt like reading the PR twice. The second version keeps only what deserves the top of the page: the intent shifts, where the agent added or dropped scope against the spec it was given, and the undiscussed decisions, where the agent chose something on its own without asking the developer. Everything else is available on demand. Hervé can read the AI sessions behind the PR, so you can ask it whether the developer prompted for a given edge case, and it finds the answer in the session, or tells you it is not there.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuhoyz148pi9ot9c230ja.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuhoyz148pi9ot9c230ja.png" alt="an undiscussed decision card — the agent added a cache on its own, and no turn in the session asked for it" width="798" height="127"&gt;&lt;/a&gt;&lt;em&gt;an undiscussed decision card — the agent added a cache on its own, and no turn in the session asked for it&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;One thing that surprised us: the PR author finds it useful to read the undiscussed list, to see what the agent decided on their behalf.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The IDE feeling in the review surface
&lt;/h2&gt;

&lt;p&gt;Reviewing one PR today takes three tools. GitHub or GitLab, to read the diff and leave comments. An IDE on a local checkout, to navigate the code: go to definition, find usages, search for a symbol. And a local agent, to ask the higher-level questions about the change. Three applications for a single review.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I checkout locally on the PR to get the code in the IDE, asks questions via Claude-code, and make comments on Github. The worst is when I review multiple PRs in parallel, I start mixing the windows and do not know which is which anymore."&lt;br&gt;
— a lead dev at a startup&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  What we built
&lt;/h3&gt;

&lt;p&gt;We built the IDE features the reviewer needs into the review surface: go to definition, find usages, symbol search, on the review page. That folds two of the three tools into Hervé. The third, the local agent/harness, we have not folded in yet. It comes with a subscription most developers already pay for, so one more question about a PR costs them nothing, and we have not found a way to do better or cheaper than that yet. For now, we have decided not to compete with it. Developers love their harness anyway. In fact, they're asking us to expose Hervé's features to their harness rather than trying to replace it for review. This is probably where we will be going.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;We are asking people to digest an amount of information per PR that is far more than a head was built to hold. The tooling has not caught up to the AI revolution. We have been coming at it from a few angles: criticality and ordering, so the attention goes where it counts; the captured intent, so less of it goes to reconstructing the why; the IDE features, so it stops requiring three windows for a single review. Some of it worked, some of it did not. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What caught your attention in our approach? Would you rather have a new review interface, or more information available through the CLI so your local Claude sessions can access the insights and the captured intent? &lt;a href="https://www.herve.review/?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=reviewer-attention-is-a-fixed-budget" rel="noopener noreferrer"&gt;You can try Hervé!&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>codereview</category>
      <category>agents</category>
    </item>
    <item>
      <title>We talked to 100+ dev teams about how they use AI. Here are some things we learned.</title>
      <dc:creator>Arnaud Debray</dc:creator>
      <pubDate>Tue, 01 Sep 2026 12:03:55 +0000</pubDate>
      <link>https://dev.to/arnaud_debray_fd15d2f7fad/we-talked-to-100-dev-teams-about-how-they-use-ai-here-are-some-things-we-learned-1g6b</link>
      <guid>https://dev.to/arnaud_debray_fd15d2f7fad/we-talked-to-100-dev-teams-about-how-they-use-ai-here-are-some-things-we-learned-1g6b</guid>
      <description>&lt;p&gt;&lt;em&gt;We spent four months talking to more than 100 tech leads, architects, and senior engineers about how their teams actually use AI. Review time is a real constraint. But the one they kept circling back to was harder to name: control.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The dominant story about AI and code review is a throughput story: agents write faster than any human can read, the PR queue backs up, and the fix is to review faster with better bots, more QA, more automation. Everyone we spoke to feels that pressure. But ask them whether humans are still needed and the answer is a &lt;strong&gt;firm yes&lt;/strong&gt;: people still own the moments that decide quality, setting up how the agents work, writing the spec, and reviewing what ships. It is that last one, review, where the deepest worry sits.&lt;/p&gt;

&lt;h2&gt;
  
  
  Humans didn't leave the loop. They moved to its edges.
&lt;/h2&gt;

&lt;p&gt;That yes has gotten more specific over the last six months. The fever that peaked after the late-2025 model releases (also known as the Saaspocalypse era) has cooled into a hangover: a few months of uncoordinated AI use that produced years of tech debt. Three moments came back again and again as irreducibly human.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The agentic software factory.&lt;/strong&gt; Before a line is generated, someone sets up the system the agents work inside: CLAUDE.md and AGENTS.md, the conventions, the rules, the specs format, the skills that standardize the workflows, the CI checks. Someone also keeps auditing the architecture and the codebase as the agents reshape it. It is the same job the tech lead always had, now aimed at agents instead of people. One finding was consistent: teams that let the agents run that structuring themselves backed off. Code files ballooned to thousands of lines, the layout scattered, and past a certain size the agents lost the thread of their own code. Keeping the system legible stayed a human job.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Writing the specification.&lt;/strong&gt; It is easy for an LLM to produce industry-standard code, such as a boilerplate integration or reading a CSV in Python. As LLMs commoditize, that kind of software commoditizes with them. That pushes the value into the business-specific details, where the prompter's domain expertise is what makes the software non-standard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reviewing and validating.&lt;/strong&gt; Early on we met a few believers, convinced they could get away without ever reading their code again. Almost no one we spoke to still believes they can hand off ownership of the codebase: &lt;strong&gt;roughly 80% still keep a human reviewing what ships&lt;/strong&gt;. AI is a tool, and a fast one. Speed without a gate has one destination: a Ferrari is a very fast way to get into a wall. Someone has to hold a model of what the codebase is becoming, because that is the person you will need the day it breaks.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"You get systems that look right but aren't, and when one thing goes wrong, you have no idea what happened."&lt;/p&gt;

&lt;p&gt;— a founding engineer&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The clean exception is the early-stage startup, where nothing matters except finding the market before the runway ends. Fair. But we heard the same bill come due later, once they scaled: the codebase turned unmaintainable, new hires could not ramp, and more than one team told us they paused growth to clean up or rebuild. The debt is fine to take. It just belongs in the plan.&lt;/p&gt;

&lt;h2&gt;
  
  
  Time is the real constraint. Control is the deeper worry.
&lt;/h2&gt;

&lt;p&gt;The review bottleneck is almost always framed as a time problem, and it genuinely is one. Addy Osmani's &lt;a href="https://addyo.substack.com/p/code-review-in-the-age-of-ai" rel="noopener noreferrer"&gt;Code Review in the Age of AI&lt;/a&gt; frames it that way, and so did our own &lt;a href="https://www.herve.review/manifesto/" rel="noopener noreferrer"&gt;manifesto&lt;/a&gt;. Agents outproduce reviewers, the queue grows, reviewers go underwater. &lt;strong&gt;About 2/3 of the teams we spoke with named review as their bottleneck.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But that is not what surprised us. Sitting next to tech leads while they reviewed, the concern underneath was not time. It was control: being able to say, with confidence, what a change does to the system they answer for. &lt;strong&gt;Around 40% named that loss of grip outright&lt;/strong&gt;; more circled it without quite having a word for it.&lt;/p&gt;

&lt;p&gt;A senior dev carries a mental model of the codebase that lets them review a PR extremely fast: check the data-model changes, check the APIs, check the business logic, skim the rest. Done. That single act signs off the change and keeps the mental model current. That model is what makes them the right person to fix the thing at 2am when it breaks.&lt;/p&gt;

&lt;p&gt;That is the pass agents break. For as long as people wrote the code, review had a safety net: the author was a teammate you knew, and you could ask what they were thinking, which edge cases they weighed, why they went this way instead of the obvious one. Now the author is effectively a stranger who has already left the building. The reasoning that produced the change lives in the agent's session, not in the diff, so all the reviewer has is the code. Instead of skimming against a model they already hold, they read every change and try to infer, from the code alone, why it was made.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Now I have a 14,000-line PR. How the hell am I going to understand what happened? Can I trust it?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Review bots do not close the gap either. They flag individual lines, one more stream to read, while the question that actually matters goes unanswered: what is this change doing to the system? Push it far enough and the code is written by one model and reviewed by another, until people quietly learn to stop looking at that signal.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"In the end, it's just AI talking to AI."&lt;/p&gt;

&lt;p&gt;— a team lead&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The binding constraint moved from writing code to understanding it.
&lt;/h2&gt;

&lt;p&gt;New tools for writing code do not change what a software process is for. Thirty years of practice still holds. What changed is where the constraint binds: writing is cheap now, and reading a change, understanding it, and answering for it is the step that limits everything. That step still runs on an interface built for a diff a human could hold in their head. Watching reviewers work, we saw five things they used to do cheaply get expensive.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;The reviewer's job&lt;/th&gt;
&lt;th&gt;Before&lt;/th&gt;
&lt;th&gt;Under agentic development&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Hold the spec in your head&lt;/td&gt;
&lt;td&gt;PR description and a linked ticket; a whiteboard for the hard ones&lt;/td&gt;
&lt;td&gt;More spec than ever, in prompts, tickets, PRDs, ADRs, and repo docs, but none of it is easily accessible when you review the diff&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Find the poorly-built parts&lt;/td&gt;
&lt;td&gt;Scan a small diff; lean on conventions, tests, and CI&lt;/td&gt;
&lt;td&gt;Everything looks fine and well tested at a glance, across too many files. It takes GitHub, the IDE, and an agent to review a single PR: three interfaces for one review&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Confirm nothing exceeded scope&lt;/td&gt;
&lt;td&gt;Obvious on a scroll, if you know the codebase&lt;/td&gt;
&lt;td&gt;Buried in the hundreds of files changed, and "out of scope" barely means anything now: agents scope-creep by default, so it mostly slips through&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;See how the team actually works&lt;/td&gt;
&lt;td&gt;PR reviews, peer coding, lints, CI, conventions, DORA metrics&lt;/td&gt;
&lt;td&gt;You just see an LLM's output, with lints and CI enforced on it. No way to know which model was used, how the dev prompted, or which skills they used, and no obvious way to level the team or break the silos that leave it behaving like a pack of solo devs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;See every change&lt;/td&gt;
&lt;td&gt;Read every PR, top to bottom&lt;/td&gt;
&lt;td&gt;Impossible at volume; you have to focus on what matters, not the boilerplate&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Humans are necessary. They just don't have the right tools.
&lt;/h2&gt;

&lt;p&gt;None of this makes the reviewer's job automatable, and that is the point. Not because an LLM cannot summarize a change; increasingly it can. Because someone human still has to own the result and answer for it: to the on-call rotation, to the customer, to whoever asks why it broke. And owning a decision means understanding it. A better reading interface does not decide whether a change is right; it gives back the context to decide faster. It will not rescue a team that never wrote the spec down, and it will not turn a 300-file PR into a good idea.&lt;/p&gt;

&lt;p&gt;Humans are nowhere close to leaving the software development process. Their role is moving: from typing the code to owning the judgment about it, and to protecting the one asset agents erode fastest, a live model of what the system is becoming. We think the binding constraints of the SDLC have changed, and the tooling has to be rebuilt to adapt to them.&lt;/p&gt;

&lt;p&gt;That is the interface we are building &lt;a href="https://www.herve.review/?utm_source=devto&amp;amp;utm_medium=organic&amp;amp;utm_campaign=review-bottleneck-not-time" rel="noopener noreferrer"&gt;Hervé&lt;/a&gt; to be: a review surface that hands the reviewer the intent alongside the diff, so they can rebuild their mental model instead of reverse-engineering it from the diff.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do these observations resonate with you? What about you, how do you keep control over your codebase?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>agents</category>
      <category>codereview</category>
    </item>
  </channel>
</rss>
