{"id":5235,"date":"2026-10-06T10:13:55","date_gmt":"2026-10-06T10:13:55","guid":{"rendered":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/2026\/10\/06\/taste-discernment-and-judgment-have-become-must-have-engineering-skills\/"},"modified":"2026-10-06T10:13:55","modified_gmt":"2026-10-06T10:13:55","slug":"taste-discernment-and-judgment-have-become-must-have-engineering-skills","status":"publish","type":"post","link":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/2026\/10\/06\/taste-discernment-and-judgment-have-become-must-have-engineering-skills\/","title":{"rendered":"Taste, Discernment, and Judgment Have Become Must-Have Engineering Skills"},"content":{"rendered":"<div><img data-opt-id=1245564266  fetchpriority=\"high\" decoding=\"async\" width=\"770\" height=\"330\" src=\"https:\/\/devops.com\/wp-content\/uploads\/2026\/10\/AI-Code-Agents-770x330-1.jpg\" class=\"attachment-large size-large wp-post-image\" alt=\"\" \/><\/div>\n<p><img data-opt-id=554203407  fetchpriority=\"high\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/devops.com\/wp-content\/uploads\/2026\/10\/AI-Code-Agents-770x330-1-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail wp-post-image\" alt=\"\" \/><\/p>\n<p>Writing code stopped being the constrained step. <a href=\"https:\/\/devops.com\/a-simple-website-summary-just-exposed-the-limits-of-ai-coding-guardrails\/\" target=\"_blank\" rel=\"noopener\">Agents take a task<\/a>, read the repository, change files across a codebase, and iterate against the build and test feedback that already exists. What they cannot do is decide whether the result belongs in the system. That decision is where engineering expertise now sits, and it did not get easier when the typing did.<\/p>\n<p>I spent years at Uber on the parts of the system that decide whether anyone ships, the monorepo and the build and the CI queue, and later on training models against that same codebase. Making it cheaper to produce a change moves the pressure downstream onto everything that has to certify the change is safe. That is most of what happened to our industry in the last two years, and it arrived faster than anyone had planned for.<\/p>\n<h3>Taste is Your Standards, Written Down<\/h3>\n<p>Taste in engineering is not preference. It is knowing what makes a change fit the system it lands in, which is a different question from whether it satisfies the request. An agent will satisfy the request, but it will not know about the architectural constraint someone argued about for three weeks, two years ago, or the convention the team enforces in review and never wrote down, or the dependency direction that is not supposed to reverse. Nobody put any of that in a prompt. It is in people\u2019s heads.<\/p>\n<p>An agent cannot read a person\u2019s mind. So, the practical form of taste is writing the standard down where the code lives, as rules and review guidance under version control, sitting next to the service they govern. Kept there, the guidance gets reviewed like code, since it shows up in the same diff as the change it governs, in front of the person best placed to notice it has gone stale.<\/p>\n<p>Volume works against you. Hand a model forty pages of standards and it applies them about as well as a new hire would. The guidance has to be cut down to what applies to the change in front of it. Standards you cannot pick from are standards the agent averages out.<\/p>\n<h3>Discernment is the Line Between Proposing and Deciding<\/h3>\n<p>The failure mode is code that compiles, reads fine, and is wrong for this particular system, which is not a thing a diff shows you. Sonar\u2019s <a href=\"https:\/\/www.sonarsource.com\/the-state-of-code\/developer-survey-report\/\" target=\"_blank\" rel=\"noopener\">research<\/a> found 61% of developers agree AI often produces code that looks correct but is not reliable, and 53% said it has already hurt their technical debt. Those numbers describe a review problem rather than a generation problem, and they are not going to be fixed by a better model.<\/p>\n<p>The obvious failures are cheap. It is the expensive ones that get through, the change that solves the immediate problem and quietly leaves the system harder to test or operate, where every individual line reads fine and the damage only shows up if you already know how the pieces fit together. Catching that is discernment, and it comes from having run the system in production. Knowing the call paths and what the tests actually cover, which is never what the coverage number says. It\u2019s knowing how the service behaves at 3 am.<\/p>\n<p>We ended up building the same boundary into our own product, on the theory that a model is a bad place to keep a decision. The model proposes findings, the verdict is computed in code from the state of those findings rather than declared by the reviewer, and that one change removed an entire class of bugs where the reviewer would request changes on a pull request whose findings had all already been resolved.<\/p>\n<p>Resolution works the same way, as a deterministic check against the diff, and the model does not get to un-resolve what the diff settled. When several reviewers run in parallel, the arbiter can only drop candidates, never add one. An arbiter having a bad day costs us a miss rather than an invention. The rule underneath all of it is to give the probabilistic layer the jobs where being wrong is survivable and keep the state machine deterministic.<\/p>\n<h3>Judgment Decides What Ships, and What is Allowed to Ship Itself<\/h3>\n<p>Almost nothing at this level is right against wrong. You are picking which failure you would rather have. Take the migration now and eat a week of dual writes, or defer it and let the schema rot another quarter, and the engineer who has carried the pager for that service knows things about how it fails that never make it into a prompt.<\/p>\n<p>The judgment itself has not changed. Where it gets applied has. It used to be spent one pull request at a time, in review. Now most of it is spent once, in writing, on the conditions under which a machine may act without asking anybody.<\/p>\n<p>Teams get there in a predictable order. Detection first, then remediation, then approval under criteria they wrote themselves, then merge. Nobody jumps to the last step, and what moves them along is evidence out of their own codebase rather than a benchmark.<\/p>\n<p>Constrain by scope, not by instruction. Our agent cannot push a branch or merge a pull request on its own initiative, and that is blocked at the tool level rather than asked for in a prompt, since an instruction is a preference and a missing capability is a guarantee. Automatic approval can only approve, never request changes, and it fails open, so a broken judge costs a convenience instead of a merge. Scoping the objective matters as much as scoping the permissions, which is why a CI failure unrelated to the change goes down the retry path, instead of the fix path. \u201cMake the test stop failing\u201d is the objective you least want a capable agent pursuing.<\/p>\n<h3>The Bar Does Not Have to Drop<\/h3>\n<p>This part we can measure. Auto-approve and auto-merge leave us a cohort where our agent was the only reviewer on the pull request, and that share keeps climbing. Those merge much faster, which surprises nobody, and the changes in them run larger on average, which I did not expect and still cannot fully explain.<\/p>\n<p>The part worth reporting is what did not move. Changes get requested at about the same rate whether the reviewer was a person or our agent. The agent blocks slightly more often than people do, not less. And developers dismiss its findings less often than they dismiss findings from each other. Anyone would have predicted the speed. What I did not expect was that taking the second reviewer out would leave the remaining one behaving much the way it had before, and that is the part I would want another team to try to reproduce.<\/p>\n<p>It is correlational, and teams that switch autonomous merge \u201con\u201d are not a random sample of teams. These are also in-review signals rather than post-merge ones, since reverts and incidents take longer to attribute. It is still the only comparison group I know of.<\/p>\n<h3>Make the Expertise Repeatable<\/h3>\n<p>Nobody reviews their way out of this by hand once generated code is most of the diff. Enforcement belongs on the layer that behaves the same way every time. Whether a merge gets blocked should not depend on which model happened to be cheap that week. Quality gates, tests, security scanning and policy checks decide. Contextual review takes the judgment calls, whether a change does what it claims and whether it fits the codebase, and hands them over as evidence for a person to weigh.<\/p>\n<p>Auditability splits the same way. Identical reruns of a model are not a promise worth making, and an audit does not need them. What it needs is a record of what was reviewed, what was raised, and who decided. Every finding we produce is persisted and never deleted, only marked resolved or dismissed, so a pull request can be reconstructed a year later by someone who was not there.<\/p>\n<p>Businesses own the software they release regardless of who typed it. Accepting generated code without reading it buys delivery now and pays for it later, with interest. The teams that get the most out of coding agents will be the ones that scale their standards as fast as they scale generation, and keep the decisions that need context with the people who are accountable for them.<\/p>\n<p><a href=\"https:\/\/devops.com\/taste-discernment-and-judgment-have-become-must-have-engineering-skills\/\" target=\"_blank\" class=\"feedzy-rss-link-icon\">Read More<\/a><\/p>\n<p>\u200b<\/p>","protected":false},"excerpt":{"rendered":"<p>Writing code stopped being the constrained step. Agents take a task, read the repository, change files across a codebase, and [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":5236,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[5],"tags":[],"class_list":["post-5235","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops"],"_links":{"self":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts\/5235","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/comments?post=5235"}],"version-history":[{"count":0,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts\/5235\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/media\/5236"}],"wp:attachment":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/media?parent=5235"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/categories?post=5235"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/tags?post=5235"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}