<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Aleksei Grebenkin — Voice, AI & Productivity]]></title><description><![CDATA[Aleksei Grebenkin — Voice, AI & Productivity]]></description><link>https://avgrebenkin.hashnode.dev</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1593680282896/kNC7E8IR4.png</url><title>Aleksei Grebenkin — Voice, AI &amp; Productivity</title><link>https://avgrebenkin.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 15:57:15 GMT</lastBuildDate><atom:link href="https://avgrebenkin.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[The Work Didn't Disappear. It Moved Into Review.]]></title><description><![CDATA[Everyone measuring AI-assisted development is reporting the same shape of result: output is up, and the cost of checking that output is up much more. I want to walk through the numbers, because the ga]]></description><link>https://avgrebenkin.hashnode.dev/the-work-didn-t-disappear-it-moved-into-review</link><guid isPermaLink="true">https://avgrebenkin.hashnode.dev/the-work-didn-t-disappear-it-moved-into-review</guid><category><![CDATA[AI]]></category><category><![CDATA[Productivity]]></category><category><![CDATA[Programming Blogs]]></category><dc:creator><![CDATA[Aleksei Grebenkin]]></dc:creator><pubDate>Fri, 14 Aug 2026 13:21:11 GMT</pubDate><content:encoded><![CDATA[<p>Everyone measuring AI-assisted development is reporting the same shape of result: output is up, and the cost of checking that output is up much more. I want to walk through the numbers, because the gap between the two is larger than most teams have adjusted for, and then say what it looks like from inside a small team where I do most of the reviewing myself.</p>
<h2>What the telemetry says</h2>
<p>Faros AI published an engineering report built on two years of telemetry from 22,000 developers across more than 4,000 teams. Not a survey about how AI feels, but workflow data before and after AI adoption inside the same organisations.</p>
<p>The delivery side improved:</p>
<ul>
<li>task throughput per developer up 33.7%</li>
<li>epics completed up 66.2%</li>
<li>pull request merge rate up 16.2%</li>
</ul>
<p>The review side moved differently:</p>
<ul>
<li>median time a pull request sits in review up 441.5%</li>
<li>average review time up 199.6%</li>
<li>median time to first review up 156.6%</li>
<li>daily pull request contexts per developer up 67.4%</li>
</ul>
<p>Two numbers in the same report describe what happens when that pressure has nowhere to go:</p>
<ul>
<li>pull requests merged without any review up 31.3%</li>
<li>incidents-to-PR ratio up 242.7%</li>
</ul>
<p>So teams write more, and the queue in front of the reviewer grows faster than the queue behind the author. Some of that queue gets resolved by not reviewing at all, and the incident numbers follow.</p>
<h2>What developers say about it</h2>
<p>Sonar's State of Code Developer Survey, published in January 2026 with more than 1,100 developers, adds the human half:</p>
<ul>
<li>96% do not fully trust that AI-generated code is functionally correct</li>
<li>only 48% always check AI-assisted code before committing</li>
<li>38% say reviewing AI-generated code takes more effort than reviewing code written by a colleague</li>
<li>AI accounts for 42% of committed code</li>
</ul>
<p>Read the first two together and you get the shape of the problem. Almost nobody trusts the output, and barely half of them verify it. The trust gap does not turn into review work automatically. It turns into review work for the people who have the discipline or the responsibility, and into risk for everybody else.</p>
<p>That 38% is the number I recognise most.</p>
<h2>Why checking is more expensive than writing</h2>
<p>When you write code yourself, the mental model builds as you go. By the time the last line is in place you already hold the reasons behind every decision, including the ones you rejected. Review is not that. Review is reconstructing a model backwards from a finished artefact, without the discarded branches, without the moment where the author decided this approach was worth it.</p>
<p>That is expensive with a colleague's code, and it is more expensive with a model's code, because a model produces plausible work uniformly. A colleague signals uncertainty. Their commit message hedges, they leave a comment, they ping you about the part they are unsure of. Generated code arrives with the same confident surface everywhere, so the reviewer has no gradient to follow and has to give every section the same level of attention.</p>
<p>Add the context switching. A 67.4% increase in daily pull request contexts means the interruptions do not just multiply, they arrive on someone else's schedule. Work that runs on its own still comes back to you, and it comes back at a moment you did not choose. Each return costs the reload of a context you had already put down.</p>
<h2>What this looks like on a small team</h2>
<p>I build a product mostly by myself, with agents doing a growing share of the mechanical work. Automation ate the typing. It did not touch the checking, and it multiplied the number of things waiting to be checked.</p>
<p>I still cannot take a result from a model and send it to production without looking at it. Not once has that felt safe. So a layer of review always stays, and that layer is where the day actually goes. I have used AI coding tools for a long time, but the load only became obvious once individual completions turned into a set of automations running in parallel. The bottleneck stopped being how fast I write and became how fast I can rebuild context for work I did not do.</p>
<p>I do not have a clean set of rules that solves this. The things that visibly help me are unglamorous:</p>
<ul>
<li>smaller units of generated work, because review cost grows faster than diff size</li>
<li>fewer parallel threads, even at the cost of throughput, because each extra thread taxes every other one on return</li>
<li>tests written before generation, so a chunk of verification runs without me holding the whole model in my head</li>
<li>treating "I do not understand why this works" as a blocking result, not a stylistic complaint</li>
</ul>
<p>None of that closes the gap. It moves it a little.</p>
<h2>The part worth arguing about</h2>
<p>The industry conversation is still mostly about generation quality, on the assumption that better models shrink the review burden. The telemetry suggests review load is not a bug in current model quality but a structural property of delegating work you remain accountable for. Even at high accuracy, someone has to hold responsibility, and holding responsibility means rebuilding context.</p>
<p>That is why the productivity number and the review number in the Faros report should be read as one result and not two. Throughput up a third, review time up more than four times over. If your planning captured the first number and not the second, your team is absorbing the difference somewhere: in senior engineers' evenings, in merges nobody looked at, or in the incident count.</p>
<p>Where does your review time actually go, and what have you changed to make it survivable?</p>
<hr />
<p><em>Sources: Faros AI, "The AI Engineering Report 2026: The Acceleration Whiplash" (telemetry from 22,000 developers across 4,000+ teams). Sonar, "State of Code Developer Survey 2026" (1,100+ developers, published January 8, 2026).</em></p>
]]></content:encoded></item><item><title><![CDATA[AI Watermarks Can't Prove Who Wrote Anything — and That's the Point Everyone Misses]]></title><description><![CDATA[Within 48 hours at the turn of August, both major AI labs switched on watermarking. On July 31, OpenAI embedded SynthID marks into all GPT-Live voice output — one day before Article 50 of the EU AI Ac]]></description><link>https://avgrebenkin.hashnode.dev/ai-watermarks-can-t-prove-who-wrote-anything-and-that-s-the-point-everyone-misses</link><guid isPermaLink="true">https://avgrebenkin.hashnode.dev/ai-watermarks-can-t-prove-who-wrote-anything-and-that-s-the-point-everyone-misses</guid><category><![CDATA[AI]]></category><category><![CDATA[llm]]></category><dc:creator><![CDATA[Aleksei Grebenkin]]></dc:creator><pubDate>Thu, 13 Aug 2026 06:46:19 GMT</pubDate><content:encoded><![CDATA[<p>Within 48 hours at the turn of August, both major AI labs switched on watermarking. On July 31, OpenAI embedded SynthID marks into all GPT-Live voice output — one day before Article 50 of the EU AI Act came into force. From August 2, Anthropic began weaving an imperceptible watermark into everything Claude writes.</p>
<p>My first thought was that this is very hard to do in a way that actually holds. Text has no pixel layer to hide anything in. So I read how Anthropic plans to do it — and dug into how text watermarks work in general. The honest answer: it works, and it also breaks in a lot of ordinary situations.</p>
<h2>How do you even hide a mark in plain text?</h2>
<p>There are three generations of this idea. (A good breakdown of the mechanics went viral this week in a <a href="https://x.com/dariadsss/status/2087197486515445924">thread by ML engineer Daria Berezhnaia</a> — I'm borrowing her framing for the first two.)</p>
<p><strong>Zero-width Unicode.</strong> The ancient way: invisible characters tucked between words. Paste the text into Notepad and copy it back out — the mark is gone. Nobody serious uses this anymore.</p>
<p><strong>Token-level (statistical) watermarking.</strong> When the model generates text, many word choices are near coin-flips: "the cat <em>sits</em>" vs "the cat <em>lies</em>" might both be ~50% likely. A secret key decides which of the equally-probable options the model picks, again and again across the text. Where the model is confident — 90% one option — the choice is left alone, so quality barely suffers. A detector with the key checks whether word choices are "skewed" in the right pattern. This is the academic classic (green/red token lists), and Anthropic's "embedded in the text itself" wording points this way.</p>
<p><strong>Embedding-space watermarking.</strong> The subtler one. Inside the model, every step produces hidden states — vectors that trace how the model "thought". You can nudge those vectors slightly in a secret direction; word choices shift almost imperceptibly, nothing visible at the text level, but the statistical fingerprint is there. Research is now pushing this toward semantic clusters, precisely so that paraphrasing won't wash the mark out.</p>
<h2>Where it stops working</h2>
<p>Taken mostly from Anthropic's own documentation, plus what follows from the mechanics:</p>
<ul>
<li><strong>Short text.</strong> Their wording: a very short passage leaves "too little text for a reliable signal". A mark spread across word choices needs volume, so a headline, a chat reply or a commit message is out of reach.</li>
<li><strong>Editing.</strong> Heavy editing, paraphrasing, translating, or mixing the output into your own writing all thin the signal out until it is gone.</li>
<li><strong>Older models</strong>, until the transition period for pre-August releases finishes.</li>
<li><strong>Screenshots and format conversion</strong>, which strip file metadata completely.</li>
<li><strong>Only the vendor can check.</strong> The key is secret, so there is no independent verification: Anthropic tells you whether Claude touched a text; you cannot audit the claim, and false positives on short "skewed-looking" text are a real statistical possibility. The detection tooling and its documentation haven't even shipped yet.</li>
</ul>
<h2>The part I did not expect</h2>
<p>A detected mark says Claude <em>processed</em> the text, not that Claude <em>wrote</em> it. Anthropic states this plainly. Proofreading, translating and summarising leave the same mark as generating from scratch. I dictate my posts and run them through a model to fix grammar, so the thinking is mine and the mark would be there anyway.</p>
<p>Read it the other way and it is no stronger. No mark found proves nothing.</p>
<p>So the people this catches reliably are the ones who paste raw output and change nothing. Anyone who edits carefully, translates, or runs the text through a second model comes out clean — today there is no second embedding-space mark to replace the first one, and even when every lab ships one, each key stays locked in its own vault.</p>
<h2>The voice side has the same hole — plus one more</h2>
<p>OpenAI's audio watermarking repeats the pattern: their Verify tool answers one question — whether audio was "made by OpenAI" — not who authored the words. And voice adds its own escape hatch: the moment marked audio is transcribed to text, the audio watermark is gone. Speech-to-text is the analog hole of voice provenance.</p>
<h2>So is it pointless?</h2>
<p>I do not think so. A weak provenance signal beats no signal, someone had to move first, and Anthropic published the limitations instead of burying them. It just cannot carry the weight people will want to put on it, which is proof of who wrote something.</p>
<p>Would you want your own writing marked because you asked a model to fix your commas?</p>
<hr />
<p><em>Sources: <a href="https://support.claude.com/en/articles/16266773-how-claude-marks-ai-generated-content">Anthropic — How Claude marks AI-generated content</a> · <a href="https://x.com/dariadsss/status/2087197486515445924">thread on watermark mechanics by @dariadsss</a> · <a href="https://www.techtimes.com/articles/322592/20260801/gpt-live-voice-gets-synthid-watermarks-one-day-before-eu-ai-act-enforcement.htm">OpenAI adds SynthID to GPT-Live voice</a> · token-level watermarking: Kirchenbauer et al., "A Watermark for Large Language Models" · embedding-space: <a href="https://arxiv.org/html/2605.10977v1">PASA</a>, <a href="https://arxiv.org/pdf/2502.02787">SimMark</a></em></p>
<p><em>Originally published on <a href="https://dev.to/avgrebenkin/ai-watermarks-cant-prove-who-wrote-anything-and-thats-the-point-everyone-misses-2g5k">dev.to</a>. I'm Aleksei, a software engineer. I dictate most of what I write.</em></p>
]]></content:encoded></item></channel></rss>