{"id":3531,"date":"2026-01-15T14:36:08","date_gmt":"2026-01-15T09:06:08","guid":{"rendered":"https:\/\/www.getpanto.ai\/blog\/?p=3531"},"modified":"2026-01-15T14:40:10","modified_gmt":"2026-01-15T09:10:10","slug":"pr-code-reviews-feel-different-lately","status":"publish","type":"post","link":"https:\/\/www.getpanto.ai\/blog\/pr-code-reviews-feel-different-lately","title":{"rendered":"PR Code Reviews Feel Different Lately"},"content":{"rendered":"<h3 class=\"wp-block-heading\" style=\"text-transform:capitalize\" id=\"i-think-we-should-talk-about-it\"><span class=\"ez-toc-section\" id=\"i-think-we-should-talk-about-it\"><\/span><strong>I think we should talk about it.<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n<p class=\"wp-block-paragraph\">I used to be that annoying person in <a href=\"https:\/\/www.getpanto.ai\/products\/ai-code-review\/pr-summary\">code review<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Not the \u201cnit: rename variable\u201d annoying.<br>More like: <em>\u201cwhy are we touching this at all?\u201d<\/em> and <em>\u201cwhat happens when this fails in prod?\u201d<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Over the years you learn a simple thing: most outages are not caused by idiots. They\u2019re caused by normal people, doing reasonable things, under time pressure, inside systems that drift.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Code review was one of the few rituals that stopped drift.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And lately\u2026 It feels like that ritual is getting hollow.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Not in an obvious way. In a quiet way.<\/p>\n\n\n<h2 class=\"wp-block-heading\" style=\"text-transform:capitalize\" id=\"the-moment-i-started-noticing-it\"><span class=\"ez-toc-section\" id=\"the-moment-i-started-noticing-it\"><\/span><strong>The moment I started noticing it<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n<p class=\"wp-block-paragraph\">A PR comes in. The diff is big. Not \u201csomeone rewrote half the repo\u201d big but big enough that your brain does that thing where it says: <em>brother, not today.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You scroll.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You see code that looks\u2026 fine.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Readable, even. Clean formatting. Decent naming. Some <a href=\"https:\/\/www.getpanto.ai\/\">tests<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You leave a comment or two, mostly on shape not substance.<br>CI is green. Someone else already approved. You approve too.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And then you move on.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That is the new normal in a lot of teams I speak to. And if I\u2019m honest, in my own behaviour too when I\u2019m tired.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nobody is malicious here. Nobody is careless.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It\u2019s just that the <strong>cost of producing code has fallen off a cliff<\/strong>, and the cost of understanding it hasn\u2019t.<\/p>\n\n\n<h3 class=\"wp-block-heading\" style=\"text-transform:capitalize\" id=\"i-asked-myself-what-is-a-code-review-supposed-to-do\"><span class=\"ez-toc-section\" id=\"i-asked-myself-what-is-a-code-review-supposed-to-do\"><\/span><strong>I asked myself: what is a code review supposed to do?<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n<p class=\"wp-block-paragraph\">Forget <a href=\"https:\/\/www.getpanto.ai\/products\/integrations\/github\">GitHub<\/a>. Forget \u201cLGTM\u201d. Forget templates.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Why does code review exist?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It exists to reduce the probability of future pain.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That\u2019s it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Review is not \u201cfind syntax errors\u201d. Your compiler already does that.<br>Review is not \u201ccheck formatting\u201d. Your linter does that.<br>Review is not \u201cmake sure the author feels seen\u201d (though that happens).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Review is: <em>\u201care we about to ship something that will bite us?\u201d<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And historically, <a href=\"https:\/\/www.getpanto.ai\/blog\/best-ai-code-review-tools\">code review<\/a> worked because the reviewer could, in a reasonable amount of time, build a mental model of the change.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That\u2019s the part that\u2019s breaking.<\/p>\n\n\n<h3 class=\"wp-block-heading\" style=\"text-transform:capitalize\" id=\"what-changed-code-got-cheaper-than-attention\"><span class=\"ez-toc-section\" id=\"what-changed-code-got-cheaper-than-attention\"><\/span><strong>What changed: code got cheaper than attention<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n<p class=\"wp-block-paragraph\">AI didn\u2019t just make people write faster. It changed the <em>shape<\/em> of <a href=\"https:\/\/www.getpanto.ai\/blog\/pr-chat-for-code-reviews\">PRs<\/a>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>More files touched.<br><\/li>\n\n\n\n<li>More refactors \u201cbecause why not\u201d.<br><\/li>\n\n\n\n<li>More tests that look legitimate but weren\u2019t written with intent.<br><\/li>\n\n\n\n<li>More code that the author themselves didn\u2019t reason through line-by-line.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">It\u2019s not even a judgement. It\u2019s just reality.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When code is expensive to write, you write less of it, and you tend to know why each piece exists.<br>When code is cheap to generate, you get a lot more \u201clooks right\u201d code.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And then the reviewer gets handed a diff that\u2019s technically coherent\u2026 but cognitively expensive.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So reviewers do what humans do when faced with cognitive overload:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">They skim.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">They rubber-stamp.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">They look for obvious smells and move on.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Again &#8211; not because they don\u2019t care. Because the alternative is spending their entire week in <a href=\"https:\/\/www.getpanto.ai\/blog\/introducing-pantos-new-pr-summary-feature-to-10-customers-heres-how-it-went\">code review<\/a>.<\/p>\n\n\n<h3 class=\"wp-block-heading\" style=\"text-transform:capitalize\" id=\"the-dangerous-part-review-still-looks-healthy\"><span class=\"ez-toc-section\" id=\"the-dangerous-part-review-still-looks-healthy\"><\/span><strong>The dangerous part: review still <em>looks<\/em> healthy<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n<p class=\"wp-block-paragraph\">This is what scares me.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Because nothing has \u201cbroken\u201d in the process. The PR still has approvals. Comments. Green checks. Merges.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So the org tells itself: <em>we\u2019re doing code review.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But the function of <a href=\"https:\/\/www.getpanto.ai\/blog\/ai-code-review-tools-gitlab-merge-requests\">code review<\/a> has changed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It has gone from <strong>risk reduction<\/strong> to <strong>ceremony<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And ceremony is worse than no ceremony because it creates a false sense of safety.<\/p>\n\n\n<h3 class=\"wp-block-heading\" style=\"text-transform:capitalize\" id=\"what-skimming-misses-and-why-it-matters\"><span class=\"ez-toc-section\" id=\"what-skimming-misses-and-why-it-matters\"><\/span><strong>What skimming misses (and why it matters)<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n<p class=\"wp-block-paragraph\">When people skim, they still catch some things:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>obvious <a href=\"https:\/\/www.getpanto.ai\/blog\/mobile-app-testing-ai-top-bugs\">bugs<\/a><br><\/li>\n\n\n\n<li>typos<br><\/li>\n\n\n\n<li>broken tests<br><\/li>\n\n\n\n<li>\u201cwhy is this variable named x\u201d<br><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">But they miss the stuff that actually hurts you later:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1) Boundary mistakes<\/strong><strong><br><\/strong> Auth edges. Permission checks. Input validation. Data exposure.<br>These bugs are usually boring-looking. They don\u2019t scream.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2) \u201cWorks today, breaks later\u201d logic<\/strong><strong><br><\/strong> Retries. Timeouts. Partial failures. Out-of-order events.<br>Most of the production isn\u2019t happy paths.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>3) Slow architectural decay<\/strong><strong><br><\/strong> The code is fine, but the system gets a little harder to change.<br>And then six months later you\u2019re scared to touch it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>4) No blast radius thinking<\/strong><strong><br><\/strong> What happens if this rolls out gradually?<br>What happens if it fails?<br>What\u2019s the rollback story?<br>Most PRs don\u2019t even mention this, and reviewers don\u2019t demand it because\u2026 time.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The end result is not an immediate catastrophe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It\u2019s more subtle: <strong>you accumulate risk invisibly<\/strong> until one day you pay for it in a way that feels \u201csudden\u201d but isn&#8217;t.<\/p>\n\n\n<h3 class=\"wp-block-heading\" style=\"text-transform:capitalize\" id=\"a-conversation-that-made-this-feel-real\"><span class=\"ez-toc-section\" id=\"a-conversation-that-made-this-feel-real\"><\/span><strong>A conversation that made this feel real<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n<p class=\"wp-block-paragraph\">I was discussing this with a Principal Engineer at Cloudflare (<a href=\"https:\/\/x.com\/dillon_mulroy\/status\/2011271537874104711\">public thread<\/a>, nothing private). He said something very blunt:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/x.com\/dillon_mulroy\/status\/2011271537874104711\"><img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"471\" src=\"https:\/\/www.getpanto.ai\/blog\/wp-content\/uploads\/2026\/01\/image-56.png\" alt=\"A conversation about PR Code Reviews\" class=\"wp-image-3535\" srcset=\"https:\/\/www.getpanto.ai\/blog\/wp-content\/uploads\/2026\/01\/image-56.png 512w, https:\/\/www.getpanto.ai\/blog\/wp-content\/uploads\/2026\/01\/image-56-300x276.png 300w, https:\/\/www.getpanto.ai\/blog\/wp-content\/uploads\/2026\/01\/image-56-200x184.png 200w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">That line stuck with me because it\u2019s a very human response to volume and not a culture problem.<\/p>\n\n\n<h2 class=\"wp-block-heading\" style=\"text-transform:capitalize\" id=\"so-what-now-just-review-harder-isnt-a-plan\"><span class=\"ez-toc-section\" id=\"so-what-now-%e2%80%9cjust-review-harder%e2%80%9d-isnt-a-plan\"><\/span><strong>So what now? \u201cJust review harder\u201d isn\u2019t a plan.<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n<p class=\"wp-block-paragraph\">Most advice here is useless because it\u2019s moralising.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u201cMake PRs smaller.\u201d Sure. Everyone agrees. Still doesn\u2019t happen consistently.<br>\u201cSpend more time reviewing.\u201d Sure. Who\u2019s giving you that time?<br>\u201cAdd more checklists.\u201d Sure. Then people tick boxes faster.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you accept the principle &#8211; that <a href=\"https:\/\/www.getpanto.ai\/blog\/context-aware-code-reviews\">code review<\/a> is supposed to reduce risk and then the question becomes:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>How do we make sure the right parts of a change gets deep attention, even when the diff is huge and partially machine-written?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That\u2019s the actual problem statement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Not \u201chow do we read more code\u201d.<\/p>\n\n\n<h3 class=\"wp-block-heading\" style=\"text-transform:capitalize\" id=\"my-current-belief-code-review-has-to-become-guided-not-heroic\"><span class=\"ez-toc-section\" id=\"my-current-belief-code-review-has-to-become-guided-not-heroic\"><\/span><strong>My Current Belief: Code Review has to become Guided, not Heroic<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n<p class=\"wp-block-paragraph\">The old model of <a href=\"https:\/\/www.getpanto.ai\/blog\/on-premise-ai-code-reviews-boost-code-quality-and-security-for-enterprise-teams\">review<\/a> was heroic: one human brain reads the diff and catches everything.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That model barely worked when PRs were smaller. It won\u2019t work now.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The new model has to be guided:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Pull attention to the risky parts.<br><\/li>\n\n\n\n<li>Summarise intent in plain English, so reviewers don\u2019t waste time reconstructing it.<br><\/li>\n\n\n\n<li>Make missing rollout\/rollback info uncomfortable.<br><\/li>\n\n\n\n<li>Help reviewers build a mental model quickly &#8211; then spend human judgement where it matters.<br><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This is not about replacing humans.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It\u2019s little about respecting human limits.<\/p>\n\n\n<h3 class=\"wp-block-heading\" style=\"text-transform:capitalize\" id=\"why-im-writing-this-and-where-we-fit\"><span class=\"ez-toc-section\" id=\"why-im-writing-this-and-where-we-fit\"><\/span><strong>Why I\u2019m writing this (and where we fit)<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n<p class=\"wp-block-paragraph\">We\u2019ve built a <a href=\"https:\/\/www.getpanto.ai\/code-review-agent\">PR code review tool<\/a> &#8211; yes, in the CodeRabbit category but we started because we were seeing this exact drift.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I\u2019m not interested in \u201cfaster reviews\u201d as a pitch. Faster code reviews are easy. You can always go faster by caring less.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I\u2019m interested in <strong>code<\/strong> <strong>reviews that still do their job<\/strong> in a world where code is cheap and attention is expensive.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you\u2019re a reviewer and you\u2019ve felt that quiet shift &#8211; where you approve things you don\u2019t fully understand because it\u2019s the only way to keep up &#8211; you\u2019re not broken. The system is just outdated.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And if you\u2019ve already solved this in your team, I genuinely want to learn how. No posturing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Because I don\u2019t think this is a tooling problem alone. It\u2019s a <a href=\"https:\/\/www.getpanto.ai\/blog\/how-panto-ais-cross-file-dependency-analysis-is-transforming-tech-teams-development-workflows\">workflow <\/a>+ incentives + tooling problem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But we can at least start by naming it.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I think we should talk about it. I used to be that annoying person in code review. Not the \u201cnit: rename variable\u201d annoying.More like: \u201cwhy are we touching this at all?\u201d and \u201cwhat happens when this fails in prod?\u201d Over the years you learn a simple thing: most outages are not caused by idiots. They\u2019re [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":3547,"comment_status":"open","ping_status":"open","sticky":false,"template":"wp-custom-template-panto-code-review-blog","format":"standard","meta":{"footnotes":""},"categories":[93],"tags":[],"class_list":["post-3531","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code-review"],"_links":{"self":[{"href":"https:\/\/www.getpanto.ai\/blog\/wp-json\/wp\/v2\/posts\/3531","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.getpanto.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.getpanto.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.getpanto.ai\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.getpanto.ai\/blog\/wp-json\/wp\/v2\/comments?post=3531"}],"version-history":[{"count":0,"href":"https:\/\/www.getpanto.ai\/blog\/wp-json\/wp\/v2\/posts\/3531\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.getpanto.ai\/blog\/wp-json\/wp\/v2\/media\/3547"}],"wp:attachment":[{"href":"https:\/\/www.getpanto.ai\/blog\/wp-json\/wp\/v2\/media?parent=3531"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.getpanto.ai\/blog\/wp-json\/wp\/v2\/categories?post=3531"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.getpanto.ai\/blog\/wp-json\/wp\/v2\/tags?post=3531"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}