<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>Posts Tagged "code-review" on Alex Leighton's Blog</title>
  <id>https://alexleighton.com/posts/tags/code-review-tag-feed.xml</id>
  <link href="https://alexleighton.com/posts/tags/code-review-tag-feed.xml" rel="self" />
  <link href="https://alexleighton.com/posts/tags/code-review.html" />
  <updated>2026-04-20T00:41:38.993470907Z</updated>
  <author>
    <name>Alex Leighton</name>
    <uri>https://alexleighton.com/</uri>
  </author>
  <icon>https://alexleighton.com/static/icon-dino.png</icon>
  <logo>https://alexleighton.com/static/icon-dino.png</logo>
  
  <entry>
    <title>KBS: Adding Todos</title>
    <id>https://alexleighton.com/posts/2026-02-19-kbs-adding-todos.html</id>
    <link href="https://alexleighton.com/posts/2026-02-19-kbs-adding-todos.html" />
    <published>2026-02-20T03:45:00Z</published>
    <updated>2026-02-20T03:45:00Z</updated>
    <author><name>Alex Leighton</name></author>
    <summary type="html"><![CDATA[<p>More guidance, and thoughts on automatic review.</p><p>Published on <span title="2026-02-20T03:45:00Z">2026-02-20</span></p>]]></summary>
    <content type="html"><![CDATA[<h3>More guidance, and thoughts on automatic review.</h3><p>Published on <span title="2026-02-20T03:45:00Z">2026-02-20</span><br>Tags: article, code-review, llm, ocaml, software-eng, software-eng-auto</p><p>Today's changes build on the previous commit's unpacking of <code>Todo</code>, making a repository for <code>Todo</code>s, and hooking it up to the command line to provide <code>bs add todo ...</code>.</p>
<h2>More Guidance</h2>
<p>The implementation plan forgot to add a task for integration tests, which resulted in a <a href="https://github.com/alexleighton/knowledge-bases/blob/412117ae6940be69a6122a8a1d048f73ba0fa8de/docs/bin/principles.md?plain=1#L17-L40"><code>bin</code> principle</a> saying changes to <code>bin</code>, where we're only keeping command-line parsing and top-level orchestration, should always be accompanied by an integration test. I also had the agent put together an <a href="https://github.com/alexleighton/knowledge-bases/blob/412117ae6940be69a6122a8a1d048f73ba0fa8de/docs/test-integration/architecture.md">architecture document</a> guiding the structure of integration tests and their purpose.</p>
<p>In the hopes of keeping file sizes down, I added a line length principle to <a href="https://github.com/alexleighton/knowledge-bases/blob/412117ae6940be69a6122a8a1d048f73ba0fa8de/docs/bin/principles.md?plain=1#L52-L57"><code>bin</code></a> and <a href="https://github.com/alexleighton/knowledge-bases/blob/412117ae6940be69a6122a8a1d048f73ba0fa8de/docs/lib/principles.md?plain=1#L41-L46"><code>lib</code></a>. I'm not sure about these principles, because I think this can be automated as a lint. I will keep these in mind and improve the linting situation when I get another structural/syntactic principle that can be automated.</p><p>...<br><a href="https://alexleighton.com/posts/2026-02-19-kbs-adding-todos.html">Read the full post →</a></p>]]></content>
  </entry>
  
  <entry>
    <title>KBS: Unpacking Todo</title>
    <id>https://alexleighton.com/posts/2026-02-18-kbs-unpacking-todo.html</id>
    <link href="https://alexleighton.com/posts/2026-02-18-kbs-unpacking-todo.html" />
    <published>2026-02-19T04:15:00Z</published>
    <updated>2026-02-19T04:15:00Z</updated>
    <author><name>Alex Leighton</name></author>
    <summary type="html"><![CDATA[<p>Guidance, prompts, and TDD.</p><p>Published on <span title="2026-02-19T04:15:00Z">2026-02-19</span></p>]]></summary>
    <content type="html"><![CDATA[<h3>Guidance, prompts, and TDD.</h3><p>Published on <span title="2026-02-19T04:15:00Z">2026-02-19</span><br>Tags: article, code-review, llm, ocaml, software-eng, software-eng-auto</p><p>Today's change to Knowledge Bases is addressing my unhappiness at the beginning of the month: <a href="../../../posts/2026-02-01-storage-for-knowledge-bases.html">"Data modeling"</a>. I've returned to the work of <a href="https://github.com/alexleighton/knowledge-bases/blob/d5fcf06481d710a6ecf35a0b874474e96d016dc5/lib/data/todo.ml#L19-L25">unpacking <code>Note</code> into <code>Todo</code></a>, to make it easier to control the TypeID prefix, and prepare for making a <code>Todo</code> repository.</p>
<h2>Revisiting Guidance Docs</h2>
<p>A handy thing about coding agents: they can make such a wide-ranging change with minimal effort (see the number of changed files in the commit). Additionally, the coding principles guidance doc paid for itself — agent code review noted the duplicated validation logic for title and content now in both <code>Note</code> and <code>Todo</code> and recommended deduplication. I redirected it to encapsulate the validation into new types, a favorite software engineering technique of mine (see <a href="../../../posts/2025-10-24-note-identifiers-and-tests.html">"Aside: Correct Construction"</a>), as well as <a href="https://github.com/alexleighton/knowledge-bases/blob/d5fcf06481d710a6ecf35a0b874474e96d016dc5/docs/lib/principles.md?plain=1#L15-L26">adjusted the guidance</a>.</p><p>...<br><a href="https://alexleighton.com/posts/2026-02-18-kbs-unpacking-todo.html">Read the full post →</a></p>]]></content>
  </entry>
  
  <entry>
    <title>More Software Engineering Research</title>
    <id>https://alexleighton.com/posts/2026-02-14-more-software-engineering-research.html</id>
    <link href="https://alexleighton.com/posts/2026-02-14-more-software-engineering-research.html" />
    <published>2026-02-15T05:00:00Z</published>
    <updated>2026-02-15T05:00:00Z</updated>
    <author><name>Alex Leighton</name></author>
    <summary type="html"><![CDATA[<p>Strategies for guiding coding agents.</p><p>Published on <span title="2026-02-15T05:00:00Z">2026-02-15</span></p>]]></summary>
    <content type="html"><![CDATA[<h3>Strategies for guiding coding agents.</h3><p>Published on <span title="2026-02-15T05:00:00Z">2026-02-15</span><br>Tags: code-review, commentary, llm, software-eng, software-eng-auto</p><p>OpenAI has put out yet another software engineering report on coding agent use, closer to StrongDM's <a href="../../../posts/2026-02-12-new-software-engineering-modes.html">Software Factory</a> than to <a href="../../../posts/2026-01-27-orchestrating-coding-agents-in-2026.html">Gas Town</a>.</p>
<blockquote>
<p><a href="https://openai.com/index/harness-engineering/"><strong>Ryan Lopopolo for OpenAI</strong> on 2026-02-11</a>:</p><p>Over the past five months, our team has been running an experiment: building and shipping an internal beta of a software product with <strong>0 lines of manually-written code</strong>.</p>
<p>The product has internal daily users and external alpha testers. It ships, deploys, breaks, and gets fixed. What’s different is that every line of code—application logic, tests, CI configuration, documentation, observability, and internal tooling—has been written by Codex.</p>
<p><strong>Humans steer. Agents execute.</strong></p></blockquote>
<p>OpenAI provides a number of interesting details here that, I think, complement the practices described by StrongDM. They started by reviewing Codex's commits, and that review load shrank drastically over time as every correction was worked into a set of guiding documents that agents would automatically pick up. It sounds like they did human-to-human reviews of feature and guidance documents. The picture they paint makes a lot of sense — encoding practical software engineering standards into tooling and guidelines documents, and then routinely "garbage collecting" using agents prompted specifically to review and clean up. An interesting thing to me is that they found "rolling forward" via speedy coding agent code generation to be faster and less disruptive to the process than rolling back bugs.</p><p><a href="https://alexleighton.com/posts/2026-02-14-more-software-engineering-research.html">Read the post →</a></p>]]></content>
  </entry>
  
  <entry>
    <title>New Software Engineering Modes</title>
    <id>https://alexleighton.com/posts/2026-02-12-new-software-engineering-modes.html</id>
    <link href="https://alexleighton.com/posts/2026-02-12-new-software-engineering-modes.html" />
    <published>2026-02-12T16:30:00Z</published>
    <updated>2026-02-14T22:00:00Z</updated>
    <author><name>Alex Leighton</name></author>
    <summary type="html"><![CDATA[<p>Adapting to code abundance.</p><p>Published on <span title="2026-02-12T16:30:00Z">2026-02-12</span></p>]]></summary>
    <content type="html"><![CDATA[<h3>Adapting to code abundance.</h3><p>Published on <span title="2026-02-12T16:30:00Z">2026-02-12</span><br>Tags: code-review, commentary, llm, software-eng, software-eng-auto</p><p>Complementing <a href="../../../posts/2026-01-27-orchestrating-coding-agents-in-2026.html">Gas Town</a>, a team of engineers at StrongDM have coined the term "<a href="https://factory.strongdm.ai/">Software Factories</a>" (<a href="https://simonwillison.net/2026/Feb/7/software-factory">via</a>) for a different kind of coding agent software engineering methodology. They get straight to the heart of things:</p>
<blockquote>
<p>Code <strong>must not be</strong> written by humans</p>
<p>Code <strong>must not be</strong> reviewed by humans</p>
</blockquote>
<p>Coding agents write code faster than a human can read and understand it. This has the potential to be very valuable — quickly producing working programs on its own, but also the amount of work a single engineer can ship. To sustain that speed, the code cannot be reviewed. I think most people who've worked with coding agents have seen that they can tap into the speed, but then you end up forced to slow down and stretch your code review skills. What would need to change to make full use of the speed?</p><p>...<br><a href="https://alexleighton.com/posts/2026-02-12-new-software-engineering-modes.html">Read the full post →</a></p>]]></content>
  </entry>
  
  <entry>
    <title>Additive vs Subtractive</title>
    <id>https://alexleighton.com/posts/2025-11-17-additive-vs-subtractive.html</id>
    <link href="https://alexleighton.com/posts/2025-11-17-additive-vs-subtractive.html" />
    <published>2025-11-18T05:30:00Z</published>
    <updated>2025-11-18T05:30:00Z</updated>
    <author><name>Alex Leighton</name></author>
    <summary type="html"><![CDATA[<p>Metaphor for future software engineering practice.</p><p>Published on <span title="2025-11-18T05:30:00Z">2025-11-18</span></p>]]></summary>
    <content type="html"><![CDATA[<h3>Metaphor for future software engineering practice.</h3><p>Published on <span title="2025-11-18T05:30:00Z">2025-11-18</span><br>Tags: code-review, commentary, llm, software-eng</p><blockquote>
<p><a href="https://bsky.app/profile/steveklabnik.com/post/3m5tiyaw2h22n"><strong>Steve Klabnik</strong> on 2025-11-17</a>:</p><p>A “probably not new to me but I’ve been thinking about it” hot take:</p>
<p>AI-first development processes are significantly different than traditional ones in a similar way to how subtractive manufacturing is different than additive manufacturing</p>
<p>Some of what this means is based on what these forms of manufacturing mean to you.</p>
<p>What I mean is something akin to “traditionally you build up what you want from nothing” and with AI is something closer to “throw some clay on a wheel and start shaping”</p></blockquote>
<p>This resonates. As some folks have discussed, coding agents require that the engineer in charge have stronger code review skills than code authoring skills, as well as mid-level code architecture skill (where should the abstraction boundaries be, where should logic live?). I'm also getting the impression that the software process itself will become part of what is engineered, because coding agents are low-skill and semi-autonomous — how to break work down into reviewable pieces, how to mitigate lack of testing or other code quality issues, how to coordinate work between agents, etc.</p><p>...<br><a href="https://alexleighton.com/posts/2025-11-17-additive-vs-subtractive.html">Read the full post →</a></p>]]></content>
  </entry>
  
  <entry>
    <title>Capturing Code Conversations</title>
    <id>https://alexleighton.com/posts/2025-08-20-capturing-code-conversations.html</id>
    <link href="https://alexleighton.com/posts/2025-08-20-capturing-code-conversations.html" />
    <published>2025-08-20T14:15:53Z</published>
    <updated>2025-08-20T14:15:53Z</updated>
    <author><name>Alex Leighton</name></author>
    <summary type="html"><![CDATA[<p>Concurrence between two blog posts.</p><p>Published on <span title="2025-08-20T14:15:53Z">2025-08-20</span></p>]]></summary>
    <content type="html"><![CDATA[<h3>Concurrence between two blog posts.</h3><p>Published on <span title="2025-08-20T14:15:53Z">2025-08-20</span><br>Tags: code-review, commentary, git, software-eng</p><p>I saw an interesting concurrence between a couple blog posts that came across my feed:</p>
<ul>
<li><a href="https://tigerbeetle.com/blog/2025-08-04-code-review-can-be-better/">Code Review Can Be Better</a></li>
<li><a href="https://zed.dev/blog/sequoia-backs-zed">Sequoia Backs Zed's Vision for Collaborative Coding</a></li>
</ul>
<p>In both there's a desire to capture the conversations that produced code, alongside the code. For the Tigerbeetle dev, the desire is to reuse git and your usual text editor when doing code reviews, so that the code review comments, answers, and adjustments live in git as part of the history. For the Zed team, they think git is insufficient for capturing the conversations they're having, which I presume would include code review, such that they're going to build a new version control system. I wonder if the Zed team and the Tigerbeetle dev are feeling the same pain around trying to orchestrate communication within git's commit system.</p><p><a href="https://alexleighton.com/posts/2025-08-20-capturing-code-conversations.html">Read the post →</a></p>]]></content>
  </entry>
  
  <entry>
    <title>Conventional Communication</title>
    <id>https://alexleighton.com/posts/2025-06-30-conventional-communication.html</id>
    <link href="https://alexleighton.com/posts/2025-06-30-conventional-communication.html" />
    <published>2025-07-01T00:32:00Z</published>
    <updated>2025-07-01T00:32:00Z</updated>
    <author><name>Alex Leighton</name></author>
    <summary type="html"><![CDATA[<p>Communicating with conventions is still just communication.</p><p>Published on <span title="2025-07-01T00:32:00Z">2025-07-01</span></p>]]></summary>
    <content type="html"><![CDATA[<h3>Communicating with conventions is still just communication.</h3><p>Published on <span title="2025-07-01T00:32:00Z">2025-07-01</span><br>Tags: article, code-review, communication, software-eng</p><p>At my day job I review a lot of other people's work, in the form of code
reviews or design (and other) documents. A few years back a coworker whose
code I was reviewing requested, rather insistently, that I start using
<a href="https://conventionalcomments.org/">conventional comments</a> when doing code
reviews. They also messaged it out to the team, though more as a practice
suggestion and not a proposed change to the team's process.</p>
<p>I internally shrugged the request off, as they were a junior engineer still
working through their personal relationship to feedback — as we all do. I don't
think many people are raised with the education necessary for internally
de-personalizing feedback, analyzing your own behavior, synthesizing the given
feedback with your own understanding of "the world", and thanking the other
person for their gift, regardless of your orientation towards that "gift". It's
complicated stuff and most of us, myself included, take years to adjust our
reactions accordingly.</p><p>...<br><a href="https://alexleighton.com/posts/2025-06-30-conventional-communication.html">Read the full post →</a></p>]]></content>
  </entry>
  
</feed>
