{"id":23159,"date":"2026-08-08T14:31:15","date_gmt":"2026-08-08T14:31:15","guid":{"rendered":"https:\/\/scannn.com\/agentic-code-quality-by-addy-osmani\/"},"modified":"2026-08-08T14:31:15","modified_gmt":"2026-08-08T14:31:15","slug":"agentic-code-quality-by-addy-osmani","status":"publish","type":"post","link":"https:\/\/scannn.com\/lv\/agentic-code-quality-by-addy-osmani\/","title":{"rendered":"Agentic Code Quality - by Addy Osmani"},"content":{"rendered":"\n<div dir=\"auto\">\n<p><span>For much of human history, we\u2019ve evaluated code quality via code review: someone reads what you wrote and makes sure it\u2019s clean, thoughtful, fast, understandable, and tests well. For agents, that approach doesn\u2019t scale well; there\u2019s just too much code for anyone to read. As a result, more and more of our quality checks have to happen in the harness, environment, and operating system around the agent.<\/span><\/p>\n<p><strong><span>Software quality now depends on the constraints you set around your agents.<\/span><\/strong><\/p>\n<div class=\"captioned-image-container\">\n<figure><a target=\"_blank\" href=\"https:\/\/substackcdn.com\/image\/fetch\/$s_!yDtq!,f_auto,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d02ba83-d99f-4b3a-be6d-16aa97cdacb3_1920x1080.png\" data-component-name=\"Image2ToDOM\" class=\"image-link image2 is-viewable-img can-restack\"><\/p>\n<div class=\"image2-inset\"><picture><source type=\"image\/webp\" srcset=\"https:\/\/substackcdn.com\/image\/fetch\/$s_!yDtq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d02ba83-d99f-4b3a-be6d-16aa97cdacb3_1920x1080.png 424w, https:\/\/substackcdn.com\/image\/fetch\/$s_!yDtq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d02ba83-d99f-4b3a-be6d-16aa97cdacb3_1920x1080.png 848w, https:\/\/substackcdn.com\/image\/fetch\/$s_!yDtq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d02ba83-d99f-4b3a-be6d-16aa97cdacb3_1920x1080.png 1272w, https:\/\/substackcdn.com\/image\/fetch\/$s_!yDtq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d02ba83-d99f-4b3a-be6d-16aa97cdacb3_1920x1080.png 1456w\" sizes=\"100vw\"\/><\/picture><\/div>\n<p><\/a><figcaption class=\"image-caption\"><strong><span>Speaking of quality, agents are writing your code. <\/span><a href=\"https:\/\/fandf.co\/4fTA599\"><span>Sonar<\/span><\/a><span> gives you the quality gates to make it shippable.<\/span><\/strong><span> I had a coding agent build a slick app, then asked an agent to review it &#8211; twice. The reviews disagreed, and a re-run gave a third answer. You can\u2019t gate a merge on a coin flip. Sonar runs the same complete check on every commit: deep cross-file analysis, a map of where the risk lives, and a quality gate that holds every human and agent to one bar.<\/span><a href=\"https:\/\/fandf.co\/4fTA599\"><span> <\/span><\/a><strong><a href=\"https:\/\/fandf.co\/4fTA599\"><span>Try Sonar.<\/span><\/a><span> <\/span><\/strong><em><span>Sponsored by Sonar.<\/span><\/em><\/figcaption><\/figure>\n<\/div>\n<p><span>Constraints define what the system is allowed to do by throwing tests and deterministic constraints at an agent\u2019s proposals. It\u2019s by setting and maintaining these constraints that we build loops that reliably deliver high-quality production software, even when agents are creating hundreds of thousands or millions of changes every single day.<\/span><\/p>\n<div class=\"captioned-image-container\">\n<figure><a target=\"_blank\" href=\"https:\/\/substackcdn.com\/image\/fetch\/$s_!LIYS!,f_auto,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b1fb5a-7fb9-4dc8-ab2d-6dfa55535801_3840x2160.png\" data-component-name=\"Image2ToDOM\" class=\"image-link image2 is-viewable-img can-restack\"><\/p>\n<div class=\"image2-inset\"><picture><source type=\"image\/webp\" srcset=\"https:\/\/substackcdn.com\/image\/fetch\/$s_!LIYS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b1fb5a-7fb9-4dc8-ab2d-6dfa55535801_3840x2160.png 424w, https:\/\/substackcdn.com\/image\/fetch\/$s_!LIYS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b1fb5a-7fb9-4dc8-ab2d-6dfa55535801_3840x2160.png 848w, https:\/\/substackcdn.com\/image\/fetch\/$s_!LIYS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b1fb5a-7fb9-4dc8-ab2d-6dfa55535801_3840x2160.png 1272w, https:\/\/substackcdn.com\/image\/fetch\/$s_!LIYS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b1fb5a-7fb9-4dc8-ab2d-6dfa55535801_3840x2160.png 1456w\" sizes=\"100vw\"\/><img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/substackcdn.com\/image\/fetch\/$s_!LIYS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b1fb5a-7fb9-4dc8-ab2d-6dfa55535801_3840x2160.png\" width=\"1456\" height=\"819\" data-attrs=\"{&quot;src&quot;:&quot;https:\/\/substack-post-media.s3.amazonaws.com\/public\/images\/d8b1fb5a-7fb9-4dc8-ab2d-6dfa55535801_3840x2160.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:352841,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image\/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https:\/\/addyo.substack.com\/i\/209070908?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b1fb5a-7fb9-4dc8-ab2d-6dfa55535801_3840x2160.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}\" alt=\"\" title=\"\" srcset=\"https:\/\/substackcdn.com\/image\/fetch\/$s_!LIYS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b1fb5a-7fb9-4dc8-ab2d-6dfa55535801_3840x2160.png 424w, https:\/\/substackcdn.com\/image\/fetch\/$s_!LIYS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b1fb5a-7fb9-4dc8-ab2d-6dfa55535801_3840x2160.png 848w, https:\/\/substackcdn.com\/image\/fetch\/$s_!LIYS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b1fb5a-7fb9-4dc8-ab2d-6dfa55535801_3840x2160.png 1272w, https:\/\/substackcdn.com\/image\/fetch\/$s_!LIYS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b1fb5a-7fb9-4dc8-ab2d-6dfa55535801_3840x2160.png 1456w\" sizes=\"100vw\" class=\"sizing-normal\"\/><\/picture><\/div>\n<p><\/a><\/figure>\n<\/div>\n<p><span>We call these constraints quality gates, and they take many forms. They include conventional unit tests, property tests, and acceptance tests. They include mutation testing, where we generate variations of code, run it against the same tests, and make sure that people aren\u2019t sneaking bugs in that we\u2019re missing. They\u2019re metrics around code quality, such as cyclomatic complexity and line length, that help keep things readable. Constraints also play an important role in what proposals the system will accept and apply as code changes. By the time a change proposal moves from the interpreter running the agent to the agent controller and out to production, we\u2019ve done enough checks on it to be confident that it\u2019s safe to ship and the impact of its change is well within the scope of the agent.<\/span><\/p>\n<p><strong><span>An agent can propose anything. Your constraints decide whether a proposal is safe enough, correct, scoped, and useful, for you and your team to ship.<\/span><\/strong><\/p>\n<p><span>This model offers a lot, but also leaves out many pieces, and those omissions are worth thinking about today. One issue is <\/span><strong><span>autonomy<\/span><\/strong><span>; agents might apply their intentions well, but may fail when there\u2019s missing information or when what they try to do is ambiguous. That applies both to the task itself and to how it\u2019s parameterized by the harness, environment, and other components. Many of the reasons that humans fail to ship great code are shared with what agents might do: brittle environments that don\u2019t hold up under script-driven stress, nondeterministic builds, missing permissions, and weak tests. This motivates a better environment that gives agents trustworthy feedback, allows for low-damage failure modes, and makes it easier to progressively build up success.<\/span><\/p>\n<div class=\"captioned-image-container\">\n<figure><a target=\"_blank\" href=\"https:\/\/substackcdn.com\/image\/fetch\/$s_!rvbK!,f_auto,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05eeec2f-00ff-470c-bc96-9c8144d57feb_3840x2160.png\" data-component-name=\"Image2ToDOM\" class=\"image-link image2 is-viewable-img can-restack\"><\/p>\n<div class=\"image2-inset\"><picture><source type=\"image\/webp\" srcset=\"https:\/\/substackcdn.com\/image\/fetch\/$s_!rvbK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05eeec2f-00ff-470c-bc96-9c8144d57feb_3840x2160.png 424w, https:\/\/substackcdn.com\/image\/fetch\/$s_!rvbK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05eeec2f-00ff-470c-bc96-9c8144d57feb_3840x2160.png 848w, https:\/\/substackcdn.com\/image\/fetch\/$s_!rvbK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05eeec2f-00ff-470c-bc96-9c8144d57feb_3840x2160.png 1272w, https:\/\/substackcdn.com\/image\/fetch\/$s_!rvbK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05eeec2f-00ff-470c-bc96-9c8144d57feb_3840x2160.png 1456w\" sizes=\"100vw\"\/><img decoding=\"async\" src=\"https:\/\/substackcdn.com\/image\/fetch\/$s_!rvbK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05eeec2f-00ff-470c-bc96-9c8144d57feb_3840x2160.png\" width=\"1456\" height=\"819\" data-attrs=\"{&quot;src&quot;:&quot;https:\/\/substack-post-media.s3.amazonaws.com\/public\/images\/05eeec2f-00ff-470c-bc96-9c8144d57feb_3840x2160.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:304537,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image\/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https:\/\/addyo.substack.com\/i\/209070908?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05eeec2f-00ff-470c-bc96-9c8144d57feb_3840x2160.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}\" alt=\"\" title=\"\" srcset=\"https:\/\/substackcdn.com\/image\/fetch\/$s_!rvbK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05eeec2f-00ff-470c-bc96-9c8144d57feb_3840x2160.png 424w, https:\/\/substackcdn.com\/image\/fetch\/$s_!rvbK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05eeec2f-00ff-470c-bc96-9c8144d57feb_3840x2160.png 848w, https:\/\/substackcdn.com\/image\/fetch\/$s_!rvbK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05eeec2f-00ff-470c-bc96-9c8144d57feb_3840x2160.png 1272w, https:\/\/substackcdn.com\/image\/fetch\/$s_!rvbK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05eeec2f-00ff-470c-bc96-9c8144d57feb_3840x2160.png 1456w\" sizes=\"100vw\" class=\"sizing-normal\"\/><\/picture><\/div>\n<p><\/a><\/figure>\n<\/div>\n<p><strong><span>The environment we\u2019re after is one where an agent can do real work, get feedback it can trust, and fail without doing much damage.<\/span><\/strong><\/p>\n<p><span>The other important issue is trust. We can\u2019t credulously hand off intent to something even as smart and robust as a modern agent without checking for correctness. We start with trust, but it has to be hard-earned.<\/span><\/p>\n<div class=\"captioned-image-container\">\n<figure><a target=\"_blank\" href=\"https:\/\/substackcdn.com\/image\/fetch\/$s_!IcZM!,f_auto,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e4e2b4-720c-4c67-a954-5f9539d6491d_3840x2160.png\" data-component-name=\"Image2ToDOM\" class=\"image-link image2 is-viewable-img can-restack\"><\/p>\n<div class=\"image2-inset\"><picture><source type=\"image\/webp\" srcset=\"https:\/\/substackcdn.com\/image\/fetch\/$s_!IcZM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e4e2b4-720c-4c67-a954-5f9539d6491d_3840x2160.png 424w, https:\/\/substackcdn.com\/image\/fetch\/$s_!IcZM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e4e2b4-720c-4c67-a954-5f9539d6491d_3840x2160.png 848w, https:\/\/substackcdn.com\/image\/fetch\/$s_!IcZM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e4e2b4-720c-4c67-a954-5f9539d6491d_3840x2160.png 1272w, https:\/\/substackcdn.com\/image\/fetch\/$s_!IcZM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e4e2b4-720c-4c67-a954-5f9539d6491d_3840x2160.png 1456w\" sizes=\"100vw\"\/><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/substackcdn.com\/image\/fetch\/$s_!IcZM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e4e2b4-720c-4c67-a954-5f9539d6491d_3840x2160.png\" width=\"1456\" height=\"819\" data-attrs=\"{&quot;src&quot;:&quot;https:\/\/substack-post-media.s3.amazonaws.com\/public\/images\/95e4e2b4-720c-4c67-a954-5f9539d6491d_3840x2160.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:337546,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image\/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https:\/\/addyo.substack.com\/i\/209070908?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e4e2b4-720c-4c67-a954-5f9539d6491d_3840x2160.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}\" alt=\"\" title=\"\" srcset=\"https:\/\/substackcdn.com\/image\/fetch\/$s_!IcZM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e4e2b4-720c-4c67-a954-5f9539d6491d_3840x2160.png 424w, https:\/\/substackcdn.com\/image\/fetch\/$s_!IcZM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e4e2b4-720c-4c67-a954-5f9539d6491d_3840x2160.png 848w, https:\/\/substackcdn.com\/image\/fetch\/$s_!IcZM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e4e2b4-720c-4c67-a954-5f9539d6491d_3840x2160.png 1272w, https:\/\/substackcdn.com\/image\/fetch\/$s_!IcZM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95e4e2b4-720c-4c67-a954-5f9539d6491d_3840x2160.png 1456w\" sizes=\"auto, 100vw\" loading=\"lazy\" class=\"sizing-normal\"\/><\/picture><\/div>\n<p><\/a><\/figure>\n<\/div>\n<p><strong><span>Some constraints shape work before it begins. Others give feedback while the agent is working. Others decide whether its output can cross the production boundary at all.<\/span><\/strong><\/p>\n<p><span>There are a bunch of ways to model how we put a verification structure around a system.<\/span><\/p>\n<p><span>In my experience it helps to have a broader, but intentionally chosen, set of checks for your constraints instead of solely relying on unit tests. The idea is that each check has a distinct responsibility and that can range from type safety and performance to late-stage security scanning. Folks can define their own constraints too, including architecture rules that linting tools like ESLint can enforce. Many of these tools have built-in hooks that can be used to pull in agents, or humans, when things break.<\/span><\/p>\n<p><strong><span>For now, much of the difference between useful agent output and slop still comes down to the skill of the team operating the loop.<\/span><\/strong><\/p>\n<p><span>AI gives us high volume code generation and velocity, but this can also mean it gets harder for humans to review every single change. You have to instead be intentional with where their attention is going. If you put a human check into a system that otherwise moves at machine speed, don\u2019t be surprised if that impacts productivity. Human attention is scarce and valuable so we should proactively direct it to those most nuanced problems that require our judgment. Downstream humans should only be pulled in when the automated guardrails for constraints break.<\/span><\/p>\n<p><strong><span>Human \u201ccode review\u201d in the future is going to look very different<\/span><\/strong><\/p>\n<p><span>Correctness is one important dimension, but you may care about others as well, like maintainability, performance, security, efficiency, and comprehensibility. Just as correctness decomposes into many signal types, so does the rest of quality. And while it matters how many constraints we have in place, it matters more whether they\u2019re challenging enough to meet our bar for quality and production readiness.<\/span><\/p>\n<p><strong><span>Software quality isn\u2019t a single metric. Think of it as a collection of signals of varying importance to you and your team.<\/span><\/strong><\/p>\n<p><span>Back-pressure can be implemented through many tools: compilers rejecting invalid code, tests failing, security policies blocking bad practices, CI declining to deploy. Ideally it exists throughout the loop, not as a single review at the very end of all the work.<\/span><\/p>\n<p><strong><span>Constraints and back-pressure let agents catch bad work before its a problem<\/span><\/strong><\/p>\n<p><span>What happens if we can\u2019t apply the constraint because the volume of changes is higher than our tools can consume? We end up building a queue and relying on a verification system that moves at human speed. To scale, we want to push as much as we can into the verification loop throughout and not wait until the end. If we can scale within our automated checks, we can increase the speed and throughput of our entire delivery system. If we run out of room in the verification loop, we need to do one of several things. First, we can scale our verification system and create more capacity to constrain and push back on changes that come in. Second, we can reduce the rate at which agents generate new changes so that verification can catch up to the volume of work. Third, we can lower our quality bar so that verification doesn\u2019t push back as hard as it otherwise might. From a scaling perspective, we need to be ready to do all of these things. At the same time, we should not stop short of realizing that we could actually get more done by un-constraining in some directions. Maybe we can increase the speed of agent-generated changes by providing swarms of agent developers or automated software factories to create changes without waiting for us to review each of them.<\/span><\/p>\n<p><span>And in some places we might want to give them more freedom as long as we keep tighter constraints in others. By providing tighter constraints where we care the most, we can maximize our throughput without sacrificing quality. Throughout these decisions there are many options. Most obviously, we have to trade between different dimensions of quality. As we\u2019ve emphasized, security is very important, but we\u2019ve also had to trade between delivering security and delivering a product on time. There is a spectrum from innovation-focused at one end to quality-focused at the other. Somewhere along the way, we have to make choices about where we want to be on that spectrum.<\/span><\/p>\n<p><span>We want to send clear feedback from the environment and the system back to our agents or teams, so that people can focus on the more subjective concerns of taste, intent, and architecture. If we can help humans stay inside the safe range of constraints, we can avoid the need for them to work hard trying to figure out where things went wrong.<\/span><\/p>\n<p><span>Software quality includes more than just correctness. Software quality also means maintainability, good performance, security, efficiency, and being easy to understand. All the constraints that help us meet these standards and keep our production flowing create back-pressure in our delivery pipeline.<\/span><\/p>\n<p><span>We need to make deliberate decisions about where to apply strong constraints and where to remove or relax them. Apply strong constraints where they\u2019re serving both of these goals. Don\u2019t support them if they\u2019re not serving one or both. Be ready to raise or lower standards as the case may require. And remember these constraints at different points in the software system are what make software quality enforceable.<\/span><\/p>\n<p><span>We should apply strong constraints where they\u2019ll serve this dual purpose best and consider removing or relaxing constraints that aren\u2019t serving either purpose well. We should also be ready to shift quality bars up or down as needed. In effect, these constraints at various points in our software system are what give quality its teeth. In many cases, we can create more back-pressure and more constraints by deploying new tools or strengthening tools that are already in place. All of these things can be used to push back on most change requests. We want to build them throughout the pipeline. We don\u2019t want to wait until the end of the pipeline when our CI system will simply tell us that we\u2019re not allowed to deploy without fixing problems. We want to use these signals as early as we possibly can, through every possible pathway. The ultimate constraint in this system is the one we place on ourselves to stand behind the decisions and actions we\u2019ve taken to build the system and to operate it. But like all other constraints, we need to make thoughtful trade-offs about how much we want our own judgment to restrain, to back-pressure, and to act as a final check.<\/span><\/p>\n<p><strong><span>Quality is in the constraints that we place around our agents. So as you\u2019re thinking about quality for your own apps, take this problem statement and come up with your own constraint-driven plan.<\/span><\/strong><\/p>\n<p><em><span>This article was rated <\/span><a href=\"https:\/\/www.pangram.com\/history\/202b457f-9fbc-43f2-9778-70cb96c3a5b4?ucc=tUilR5ia5FA\"><span>100% human written<\/span><\/a><span> by Pangram 4. A reminder that if you\u2019re looking for a good starting point for setting up quality gates, <\/span><a href=\"https:\/\/fandf.co\/4fTA599\"><span>Sonar<\/span><\/a><span> offers a pretty good solution.<\/span><\/em><\/p>\n<div class=\"captioned-image-container\">\n<figure><a target=\"_blank\" href=\"https:\/\/substackcdn.com\/image\/fetch\/$s_!_7mu!,f_auto,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa341c00f-90bc-4354-abf4-e7a8914719ac_1376x768.png\" data-component-name=\"Image2ToDOM\" class=\"image-link image2 is-viewable-img can-restack\"><\/p>\n<div class=\"image2-inset\"><picture><source type=\"image\/webp\" srcset=\"https:\/\/substackcdn.com\/image\/fetch\/$s_!_7mu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa341c00f-90bc-4354-abf4-e7a8914719ac_1376x768.png 424w, https:\/\/substackcdn.com\/image\/fetch\/$s_!_7mu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa341c00f-90bc-4354-abf4-e7a8914719ac_1376x768.png 848w, https:\/\/substackcdn.com\/image\/fetch\/$s_!_7mu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa341c00f-90bc-4354-abf4-e7a8914719ac_1376x768.png 1272w, https:\/\/substackcdn.com\/image\/fetch\/$s_!_7mu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa341c00f-90bc-4354-abf4-e7a8914719ac_1376x768.png 1456w\" sizes=\"100vw\"\/><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/substackcdn.com\/image\/fetch\/$s_!_7mu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa341c00f-90bc-4354-abf4-e7a8914719ac_1376x768.png\" width=\"1376\" height=\"768\" data-attrs=\"{&quot;src&quot;:&quot;https:\/\/substack-post-media.s3.amazonaws.com\/public\/images\/a341c00f-90bc-4354-abf4-e7a8914719ac_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:535837,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image\/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https:\/\/addyo.substack.com\/i\/209070908?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa341c00f-90bc-4354-abf4-e7a8914719ac_1376x768.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}\" alt=\"\" title=\"\" srcset=\"https:\/\/substackcdn.com\/image\/fetch\/$s_!_7mu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa341c00f-90bc-4354-abf4-e7a8914719ac_1376x768.png 424w, https:\/\/substackcdn.com\/image\/fetch\/$s_!_7mu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa341c00f-90bc-4354-abf4-e7a8914719ac_1376x768.png 848w, https:\/\/substackcdn.com\/image\/fetch\/$s_!_7mu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa341c00f-90bc-4354-abf4-e7a8914719ac_1376x768.png 1272w, https:\/\/substackcdn.com\/image\/fetch\/$s_!_7mu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep\/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa341c00f-90bc-4354-abf4-e7a8914719ac_1376x768.png 1456w\" sizes=\"auto, 100vw\" loading=\"lazy\" class=\"sizing-normal\"\/><\/picture><\/div>\n<p><\/a><\/figure>\n<\/div>\n<\/div>\n<p><a href=\"https:\/\/addyo.substack.com\/p\/agentic-code-quality?utm_source=tldrnewsletter\">Source link <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>For much of human history, we\u2019ve evaluated code quality via code review: someone reads what you wrote and makes sure it\u2019s clean, thoughtful, fast, understandable, and tests well. For agents, that approach doesn\u2019t scale well; there\u2019s just too much code for anyone to read. As a result, more and more of our quality checks have [&hellip;]<\/p>\n","protected":false},"author":16,"featured_media":23160,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[143],"tags":[],"class_list":["post-23159","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai"],"_links":{"self":[{"href":"https:\/\/scannn.com\/lv\/wp-json\/wp\/v2\/posts\/23159","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/scannn.com\/lv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/scannn.com\/lv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/scannn.com\/lv\/wp-json\/wp\/v2\/users\/16"}],"replies":[{"embeddable":true,"href":"https:\/\/scannn.com\/lv\/wp-json\/wp\/v2\/comments?post=23159"}],"version-history":[{"count":0,"href":"https:\/\/scannn.com\/lv\/wp-json\/wp\/v2\/posts\/23159\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/scannn.com\/lv\/wp-json\/wp\/v2\/media\/23160"}],"wp:attachment":[{"href":"https:\/\/scannn.com\/lv\/wp-json\/wp\/v2\/media?parent=23159"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/scannn.com\/lv\/wp-json\/wp\/v2\/categories?post=23159"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/scannn.com\/lv\/wp-json\/wp\/v2\/tags?post=23159"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}