<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ai on sbgrl.me</title><link>https://sbgrl.me/tags/ai/</link><description>Recent content in Ai on sbgrl.me</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>sylvain.bougerel@gmail.com (Sylvain Bougerel)</managingEditor><webMaster>sylvain.bougerel@gmail.com (Sylvain Bougerel)</webMaster><copyright>© 2026 Sylvain Bougerel</copyright><lastBuildDate>Fri, 01 May 2026 10:01:00 +0800</lastBuildDate><atom:link href="https://sbgrl.me/tags/ai/index.xml" rel="self" type="application/rss+xml"/><item><title>Why I continue to review code</title><link>https://sbgrl.me/posts/why-i-continue-to-review-code/</link><pubDate>Fri, 01 May 2026 10:01:00 +0800</pubDate><author>sylvain.bougerel@gmail.com (Sylvain Bougerel)</author><guid>https://sbgrl.me/posts/why-i-continue-to-review-code/</guid><description>&lt;p&gt;Given the increase in velocity from coding assistants such as Claude Code and Copilot, automated review had become a necessity. Since we rolled out &lt;a href="https://coderabbit.ai" target="_blank" rel="noreferrer"&gt;Coderabbit&lt;/a&gt; on our project, almost everybody stopped reviewing code. It didn&amp;rsquo;t happen immediately, but organically.&lt;/p&gt;
&lt;p&gt;As it turns out, Coderabbit is a formidable reviewer: with only a bit of context in the commit messages and a well-written &lt;code&gt;AGENTS.md&lt;/code&gt;, Coderabbit will often be more thorough in reviews than most of my colleagues. And if that wasn&amp;rsquo;t enough, Coderabbit is almost always available—&lt;a href="https://status.coderabbit.ai/" target="_blank" rel="noreferrer"&gt;98.3% of the time in the last 30 days&lt;/a&gt;, not good for typical SLA targets but much better than colleagues—and a fraction of their cost.&lt;/p&gt;
&lt;p&gt;Eventually everybody stopped reviewing code&amp;hellip; Save for me.&lt;/p&gt;
&lt;p&gt;For one thing, coding assistants can hallucinate blunders that neither humans—regrettably—nor Coderabbit will catch:&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;NON_EDITABLE_BOOKING_STATUSES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Set&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;cancelled&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;canceled&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;declined&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;withdrawn&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;]);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;I took that snippet from a merge request submitted yesterday. We do not have any &lt;code&gt;declined&lt;/code&gt; or &lt;code&gt;canceled&lt;/code&gt; statuses in our entire domain model—they simply don&amp;rsquo;t exist. I chose this example because it&amp;rsquo;s one of the simplest. The day before, a merge request had a complete re-implementation of a 200+ lines utility we already had. This happens all the time.&lt;/p&gt;
&lt;p&gt;But most importantly, if the phone rings because of an issue on the system, &lt;strong&gt;I&lt;/strong&gt; need to get on the call and fix the issue. When my work has potential to impact my personal life and my weekends with family, there&amp;rsquo;s no AI that I will trust enough. And every alert, whether it fires on the job or not, still costs the whole team velocity when we scramble for unplanned work.&lt;/p&gt;
&lt;p&gt;Ultimately, our customers don&amp;rsquo;t care who wrote the code: &amp;ldquo;We&amp;rsquo;re sorry, Claude wrote that line and Coderabbit didn&amp;rsquo;t catch the problem&amp;rdquo; is not a good look. No matter how powerful our tools have become, responsibility is still mine. So I&amp;rsquo;ll keep on reviewing code.&lt;/p&gt;</description></item><item><title>AI exacerbated the divide between engineers</title><link>https://sbgrl.me/posts/ai-exacerbated-the-divide-between-engineers/</link><pubDate>Sat, 25 Apr 2026 22:12:00 +0800</pubDate><author>sylvain.bougerel@gmail.com (Sylvain Bougerel)</author><guid>https://sbgrl.me/posts/ai-exacerbated-the-divide-between-engineers/</guid><description>&lt;p&gt;Any complex product requires deep context about the product&amp;rsquo;s domains, architecture, implementation. And if you want to make effective use of AI to solve a problem, you need to inject the right subset of that entire context into the prompt, or that smart auto-complete will spit out costly nonsense.&lt;/p&gt;
&lt;p&gt;Naturally, engineers with the best understanding of the context, the capacity to articulate the problem and the skills to implement it are even stronger with AI: they can provide better input to the model and quickly validate its output. The once derided 10x engineer is starting to become a reality for anyone who can use AI to implement a correct solution at a fraction of the time it would have taken them.&lt;/p&gt;
&lt;p&gt;On the other end of the spectrum, weaker engineers are now compelled to keep up with the pace set by their stronger peers, only they can neither prompt the LLM effectively nor validate what it produces. So they just let the garbage out—knowingly or not.&lt;/p&gt;
&lt;p&gt;If you feel like you&amp;rsquo;ve become a &amp;ldquo;man-in-the-middle&amp;rdquo;—a proxy between somebody else&amp;rsquo;s request and an LLM—you will be phased out. The great engineers of today learned the ropes at a time AI didn&amp;rsquo;t exist, when they could invest in their fundamentals. Give yourself the same gift: carve out time to use less AI, and start learning again so you can close the divide.&lt;/p&gt;</description></item><item><title>Claude Code more than doubled my productivity</title><link>https://sbgrl.me/posts/claude-code-made-me-twice-more-productive/</link><pubDate>Sat, 14 Mar 2026 15:28:00 +0800</pubDate><author>sylvain.bougerel@gmail.com (Sylvain Bougerel)</author><guid>https://sbgrl.me/posts/claude-code-made-me-twice-more-productive/</guid><description>&lt;p&gt;I wrote twice as much code last quarter, and it was better. I use Claude Code daily via &lt;a href="https://github.com/stevemolitor/claude-code.el" target="_blank" rel="noreferrer"&gt;Steve Molitor&amp;rsquo;s claude-code.el and monet.el&lt;/a&gt; integration for &lt;a href="https://emacs.org" target="_blank" rel="noreferrer"&gt;Emacs&lt;/a&gt;. Once a review is ready, &lt;a href="https://coderabbit.ai" target="_blank" rel="noreferrer"&gt;CodeRabbit&lt;/a&gt; handles it. My daily AI usage really kicked into high gear back in October 2025, when we got a large amount of Claude Code credit grants and I could use it as much as I wanted.&lt;/p&gt;
&lt;p&gt;The graph below is the number of lines of code changed (added and deleted) in my merge requests (MR), summed monthly, on our main application repository; a Next.js application with 200KLoC — not something an agent can easily get into. I authored 773 merge requests on this project alone which runs in production to serve our clients — just to emphasize the value of the sample-size:&lt;/p&gt;

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://sbgrl.me/ox-hugo/Lines%20changed%20vs.%20month.svg" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;p&gt;You can see a clear 2x increase when I started to use Claude Code daily around October 2025. Like most folks, I found Claude Code to be amazing when working as a pair programmer to write the code or review my changes in short feedback loops, to explore greenfield projects or to strengthen tests on brownfield projects.&lt;/p&gt;
&lt;p&gt;Around that time, I felt the quality of my code improving too. Below is the number of &lt;em&gt;normalized comments&lt;/em&gt; \(N\) in each of the MRs: or the number of comments \(C\) divided by the sum of lines of code added \(A\) and deleted \(D\):&lt;/p&gt;
&lt;p&gt;\begin{equation}
N = \frac{C}{(A + D)}
\end{equation}&lt;/p&gt;

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://sbgrl.me/ox-hugo/Normalized%20comments%20vs.%20month.svg" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;p&gt;Back in April 2025, we rolled out CodeRabbit which picked up over 70% of the reviewing work for everyone. Most team members do not perform code reviews anymore, except for myself — I&amp;rsquo;ll probably explain why in another post. Thus, on the changes I author, over 95% of the comments are just done by CodeRabbit from that time onwards.&lt;/p&gt;
&lt;p&gt;Normalized comments is an interesting metric since it reflects the quality of my work with Claude Code, prior to review by others and CodeRabbit. If the value &lt;em&gt;decreased&lt;/em&gt; there, it could be that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We got lazy about reviewing, but CodeRabbit is pretty much the only reviewer of my work;&lt;/li&gt;
&lt;li&gt;We output a lot more code or the quality of the code increased;&lt;/li&gt;
&lt;li&gt;The work we do is a lot easier, so there&amp;rsquo;s just fewer issues with it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;AI certainly had an impact on point 2, given the top graph. You can also see a dip soon after October 2025 when I started to use Claude Code, but then a bump appears again in January 2026. That bump is due to the fact that I had to tackle a challenging issue that spanned several MRs. It&amp;rsquo;s quite visible when looking at the histogram of independent values:&lt;/p&gt;

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://sbgrl.me/ox-hugo/Normalized%20comments%20per%20merge%20requests.svg" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;p&gt;There are other common proxies for code quality: such as unit tests. This is the raw number of unit tests on the &lt;code&gt;main&lt;/code&gt; project branch, over time and it went up nearly 5x in the last 4 months:&lt;/p&gt;

&lt;figure&gt;
 &lt;img class="my-0 rounded-md" src="https://sbgrl.me/ox-hugo/Unit%20tests.svg" alt="" /&gt;
 
 
 &lt;/figure&gt;
&lt;p&gt;Additionally, we have not had production rollbacks or outages in the last 4 months, consistent with the past year (We only ever had to perform production rollbacks twice). So agent usage is not called into &lt;a href="https://www.msn.com/en-us/news/technology/amazon-tightens-guardrails-after-ai-coding-tools-contributed-to-outages/ar-AA1Yttje" target="_blank" rel="noreferrer"&gt;question in our team&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The stats in this post were extracted &lt;a href="https://gitlab.com/sylvain.bougerel/code-review-stats" target="_blank" rel="noreferrer"&gt;using a tool written by Claude Code&lt;/a&gt;.&lt;/p&gt;</description></item></channel></rss>