{
  "source_file": "0930",
  "source_platform": "Dev.to",
  "author": "Debashish Ghosal",
  "title_listed": "AI Promoted Every Developer to Reviewer. Nobody Measured Whether We Got Worse.",
  "keywords": "",
  "domain": "机器学习",
  "content_type": "深度技术解析",
  "is_paid_flag": "否",
  "url": "https://dev.to/debashish_ghosal/ai-promoted-every-developer-to-reviewer-nobody-measured-whether-we-got-worse-1mkk",
  "publish_date": "2026-09-26",
  "corpus_stage": "",
  "notes": "",
  "id": "a79dee5d5f25",
  "collected_at": "2026-10-02T14:05:53",
  "title": "AI Promoted Every Developer to Reviewer. Nobody Measured Whether We Got Worse. - DEV Community",
  "body_markdown": "I review more code than I write now. I'm not sure I'm getting better at it.\nIt's a small, uncomfortable feeling, and I can't prove it either way. I catch the obvious stuff. I don't feel the muscle where the subtle stuff used to live. And nobody, including my org, is measuring whether that muscle got weaker. They just assume it's fine.\nAI made everyone a reviewer. That's a different job, and nobody trained us for it. If your review queue grew and your review judgment didn't, this one is for you.\nThe Job Changed Before Anyone Told You To\nEarly in my career, writing code was how judgment got built. You wrote it, it broke at 2am, you learned why, and the next time you didn't make the same mistake. The reasoning happened while you were writing, and it stuck to you. That was the whole apprenticeship, and nobody had a separate training for it, because it was free and attached to the work.\nNow a model writes the first draft and the human reviews it. The reasoning that used to happen while writing has to happen while reviewing. Or it doesn't happen at all. Nobody moved the training with the work, and nobody noticed, because on paper the job title didn't change. You're still a \"developer.\" Your ticket still says \"review.\" But the actual skill loadout is different, and it's the one part of the job with no metric, no on-ramp, and no way to tell if you're good at it.\nGeneration got cheap. Review did not. So the whole profession quietly shifted toward review, betting the entire workflow on a skill nobody was tracking.\nLet me make it concrete. Two years ago, my review day looked like this: I wrote the code, I broke it, I fixed it, and when I opened a PR I already knew where the weak spots were, because I'd walked through them. Review was short, because I was reviewing myself. Now the diff arrives with a few hundred lines I didn't write, and my brain has to do the thing it used to do while writing, but afterwards, and under deadline. The context I used to have for free is now something I have to reconstruct, and I'm getting worse at reconstructing it, and worse at knowing when I'm doing it badly. That last part is the part I can't measure, and it's the part that matters.\nI Built a Second-Opinion Engine and It Lied to Me\nI wanted to test the thing I suspected about my own reviews, so I built a two-LLM review engine:\nadversarial-debate\n, MIT, public. Two isolated models look at the same code. They either converge on a verdict or preserve their disagreement. Simple idea, right?\nThe first run was 89% theater.\nI want to sit with that for a second, because it felt fine at the time. The second model wasn't reviewing anything. It had already seen the first model's conclusion, and so it agreed, with a little variation. A second opinion that's seen the first opinion isn't independent. It's validation with extra steps. And it\nfelt\nexactly like review, because I was reading the pretty summaries, not the raw logs.\nIn the logs it looked like this: model A made a claim about the diff. Model B, one context later, made the same claim in different words, pointing at the same lines, with zero independent evidence. Two reviewers, one finding, dressed as two. A human reviewer anchoring on the first comment does the same thing, just slower and with more confidence.\nI nearly shipped that result as \"review is working.\" What saved me was opening the logs and watching the replay happen.\nWhat Worked Wasn't in the Prompt\nMy first fix was the obvious one: tell the second model, in the prompt, to be independent. Still theater.\nThe fix that worked wasn't in the prompt. It was in the architecture: isolated contexts, no shared conclusion, and a hard requirement to cite evidence for every claim. The moment \"be independent\" moved from a sentence to a constraint the model couldn't opt out of, the theater disappeared. It went from 89% to 0% across 217 debates.\nThat's the whole finding in one line:\nyou can't prompt independence into a model that has seen the answer. You have to remove its ability to see the answer.\nThe Numbers, and the One That Should Worry You\nOn 70 real public PRs, across 411 debates, the system matched human review claims 81% of the time. On the corrected 2,333-row dataset, an 88.7% binary match. Total cost for 360 reviewer runs: $0.42. The math is genuinely embarrassing, in the good way.\nBut the number that should keep you up is the one you don't see. Results that were partial or wrong clustered in narrative domains, incident reports, change proposals, and the miss rate there was 11.3%. Those are false negatives: the reviewer said \"looks good\" and the thing was actually broken.\nYou can build two independent reviewers and still have both miss the same thing, because they miss the same way. Two sets of eyes don't fix the eye.\nAnd here's the part I'll be straight about: I don't have industry data proving review quality declined. I have the structural argument, and my own experience of reviewing more and enjoying it less. That gap between \"review is harder now\" and \"review is worse now\" is real, and I can't close it for you.\nWhat I Got Wrong Along the Way\nTwo things, both my fault.\nThe first is the one I almost published: the 89% theater, looking like working review in the summary. If I hadn't read the raw logs, \"two independent reviewers\" would have been a lie with a green checkmark. Same failure mode as a test that asserts nothing.\nThe second is quieter and more embarrassing. A join bug collapsed the dataset from 2,333 rows to 359. Early numbers were reported against a 15% slice of the data, and nobody, including me, knew for a while. The fix was trivial. The lesson was not: report on a dataset only after you've proven the dataset is whole.\nThe Open Question\nHere's what I can't answer yet, and I don't think most of us can:\nhow do you measure review quality when you didn't write the code?\nWe measure test coverage. We measure flake rate. We measure PR cycle time. But \"did this review actually catch the thing that mattered?\" is a number I can't produce, and I'm not sure anyone can. We've bet the whole workflow on a skill we don't measure, and I'd rather name that than act like it's solved.\nWhat I\ncan\ndefend is smaller: independence has to be architectural, not prompted. And a clean verdict is weaker evidence than we act like it is, because the worst failures are the silent ones.\nHas your review quality gone up or down since AI wrote the first draft? I want your honest answer, not the polite one. I don't think any of us has a number yet, but I'd like to know what the field feels like.\nCode and receipts:\nadversarial-debate\n·\nv0.2.2 field test report\n·\nCHANGELOG\n— all MIT, all public.",
  "metadata": {
    "title": "AI Promoted Every Developer to Reviewer. Nobody Measured Whether We Got Worse. - DEV Community",
    "description": "I review more code than I write now. I'm not sure I'm getting better at it.   It's a small,... Tagged with ai, programming, testing, codereview.",
    "keywords": "ai, programming, testing, codereview, software, coding, development, engineering, inclusive, community",
    "author": null,
    "og:type": "article",
    "og:url": "https://dev.to/debashish_ghosal/ai-promoted-every-developer-to-reviewer-nobody-measured-whether-we-got-worse-1mkk",
    "og:title": "AI Promoted Every Developer to Reviewer. Nobody Measured Whether We Got Worse.",
    "og:description": "I review more code than I write now. I'm not sure I'm getting better at it.   It's a small,...",
    "og:site_name": "DEV Community",
    "og:image": "https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frmcjcvrt4keakm6mcoov.png",
    "twitter:site": "@thepracticaldev",
    "twitter:creator": "@",
    "twitter:title": "AI Promoted Every Developer to Reviewer. Nobody Measured Whether We Got Worse.",
    "twitter:description": "I review more code than I write now. I'm not sure I'm getting better at it.   It's a small,...",
    "twitter:card": "summary_large_image",
    "twitter:widgets:new-embed-design": "on",
    "twitter:image:src": "https://media2.dev.to/dynamic/image/width=1200,height=627,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frmcjcvrt4keakm6mcoov.png"
  },
  "paywall": {
    "listed_paid": false,
    "detected": false,
    "marker": "",
    "public_only": false,
    "policy": "付费/会员内容只保留页面公开可见部分，不绕过付费墙"
  },
  "crawl": {
    "success": true,
    "status_code": 200,
    "error": ""
  },
  "code_blocks": [],
  "images": [],
  "audio": [],
  "videos": [],
  "links": [
    {
      "href": "https://github.com/deghosal-2026/adversarial-debate",
      "label": "adversarial-debate",
      "type": "a"
    },
    {
      "href": "https://github.com/deghosal-2026/adversarial-debate/blob/main/docs/field-test/v0.2.2/FIELD_TEST_REPORT.md",
      "label": "v0.2.2 field test report",
      "type": "a"
    },
    {
      "href": "https://github.com/deghosal-2026/adversarial-debate/blob/main/CHANGELOG.md",
      "label": "CHANGELOG",
      "type": "a"
    }
  ],
  "repair_version": 2,
  "repaired_at": "2026-10-14T10:50:11Z",
  "source_url": "https://dev.to/debashish_ghosal/ai-promoted-every-developer-to-reviewer-nobody-measured-whether-we-got-worse-1mkk",
  "papers": [],
  "actual_video_files": [],
  "body_chars": 6670,
  "expected_body_images": 0,
  "discovery_status": "ok",
  "delivery_status": "ok",
  "missing_reason": "",
  "raw_html": "attachments/a79dee5d5f25/pages/source.html",
  "local_html": "attachments/a79dee5d5f25/pages/article.html",
  "body_base_path": "attachments/a79dee5d5f25/pages/",
  "body_markdown_path": "attachments/a79dee5d5f25/pages/article.md"
}