<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://danfking.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://danfking.github.io/" rel="alternate" type="text/html" /><updated>2026-04-23T10:25:38+00:00</updated><id>https://danfking.github.io/feed.xml</id><title type="html">Daniel King</title><subtitle>Full-stack engineer orchestrating teams of people and agents. Writing about agentic development, developer tools, and MCP. Australia.</subtitle><author><name>Daniel King</name></author><entry><title type="html">Verification is the expensive thing now</title><link href="https://danfking.github.io/blog/2026/04/23/verification-is-the-expensive-thing/" rel="alternate" type="text/html" title="Verification is the expensive thing now" /><published>2026-04-23T00:00:00+00:00</published><updated>2026-04-23T00:00:00+00:00</updated><id>https://danfking.github.io/blog/2026/04/23/verification-is-the-expensive-thing</id><content type="html" xml:base="https://danfking.github.io/blog/2026/04/23/verification-is-the-expensive-thing/"><![CDATA[<p>Martin Fowler’s <a href="https://martinfowler.com/fragments/2026-04-02.html">latest fragments post</a> collects several ideas about how AI is reshaping software development. The one that stuck with me is Ajey Gore’s argument: as coding agents take over execution, verification becomes the premium activity.</p>

<p>Gore puts it bluntly. Instead of ten engineers building, you might have three engineers plus seven people defining acceptance criteria and designing tests. The bottleneck moves from “can we write the code?” to “do we know whether the code is right?”</p>

<p>This matches what I see daily. I run multiple Claude Code sessions in parallel, each producing working code at a pace I couldn’t match alone. The hard part is never the generation. The hard part is knowing whether what came out actually does what I intended, handles the edges I care about, and doesn’t quietly break something else. And it’s not just me who needs to know. My team members need to look at that same output and reach the same confidence, often without the context I had when I prompted it.</p>

<p>The cultural shift Gore describes is the part most teams will struggle with. Your Monday standup changes. Instead of “what did we ship?” the question becomes “what did we validate?” Instead of tracking output, you’re tracking whether the output was right. That reframes what it means to be productive. An engineer who catches a subtle misalignment in generated code before it ships has done more valuable work than one who prompted three features into existence without checking them.</p>

<p>This connects to something else Fowler highlights in the same post: Margaret-Anne Storey’s concept of “intent debt,” where the goals guiding a system are poorly documented or maintained. If you can’t clearly articulate what the system should do, you can’t verify that it does it. Intent debt was always a problem, but it was partially hidden when the same person writing the code also held the intent in their head. When an agent writes the code, that implicit knowledge gap becomes a concrete failure mode.</p>

<p>I think the teams that figure out verification workflows early will have a real advantage. Not just automated tests (though those matter), but the whole practice of clearly stating intent, reviewing output critically, and building confidence that what shipped is what was meant.</p>]]></content><author><name>Daniel King</name></author><category term="agentic-development" /><category term="ai" /><category term="engineering-culture" /><summary type="html"><![CDATA[Martin Fowler’s latest fragments post collects several ideas about how AI is reshaping software development. The one that stuck with me is Ajey Gore’s argument: as coding agents take over execution, verification becomes the premium activity.]]></summary></entry><entry><title type="html">Small productivity hack that changed how I work with Claude Code</title><link href="https://danfking.github.io/blog/2026/04/22/claude-code-chime-notification/" rel="alternate" type="text/html" title="Small productivity hack that changed how I work with Claude Code" /><published>2026-04-22T00:00:00+00:00</published><updated>2026-04-22T00:00:00+00:00</updated><id>https://danfking.github.io/blog/2026/04/22/claude-code-chime-notification</id><content type="html" xml:base="https://danfking.github.io/blog/2026/04/22/claude-code-chime-notification/"><![CDATA[<p>I typically have half a dozen Claude Code sessions running at once, spread across different terminals and monitors, some hidden behind other windows. The visual “done” indicator is easy to miss when you’re not looking at the right terminal.</p>

<p>About a month ago I added a global hook that plays a short chime whenever any session finishes a task. Two minutes to configure. Can’t live without it now.</p>

<p>The difference is about flow. Before, I’d either stare at a terminal waiting, or context-switch and then keep interrupting myself to check which session was ready. Now the chime pulls me back at exactly the right moment. I stay in whatever I’m doing until I hear it, then go find the session that needs me. It’s kept me in a flow state in a way I genuinely didn’t expect from something so simple.</p>

<h2 id="how-to-set-it-up">How to set it up</h2>

<p>Drop this into your <code class="language-plaintext highlighter-rouge">~/.claude/settings.json</code>:</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"hooks"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nl">"Notification"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
      </span><span class="p">{</span><span class="w">
        </span><span class="nl">"matcher"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span><span class="w">
        </span><span class="nl">"hooks"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
          </span><span class="p">{</span><span class="w">
            </span><span class="nl">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"command"</span><span class="p">,</span><span class="w">
            </span><span class="nl">"command"</span><span class="p">:</span><span class="w"> </span><span class="s2">"powershell.exe -NoProfile -Command </span><span class="se">\"</span><span class="s2">(New-Object Media.SoundPlayer 'C:</span><span class="se">\\</span><span class="s2">Windows</span><span class="se">\\</span><span class="s2">Media</span><span class="se">\\</span><span class="s2">chimes.wav').PlaySync()</span><span class="se">\"</span><span class="s2">"</span><span class="w">
          </span><span class="p">}</span><span class="w">
        </span><span class="p">]</span><span class="w">
      </span><span class="p">}</span><span class="w">
    </span><span class="p">]</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>That’s it. Windows has the sound file built in. For Mac/Linux, swap the command for <code class="language-plaintext highlighter-rouge">afplay</code> or <code class="language-plaintext highlighter-rouge">paplay</code> with a sound file of your choice.</p>

<p>The empty matcher means it fires on every notification, regardless of which project or session triggered it. Claude Code sends a notification whenever a session finishes and is waiting for input, which is exactly the moment you want to know about.</p>]]></content><author><name>Daniel King</name></author><category term="claude-code" /><category term="productivity" /><category term="ai" /><category term="developer-tools" /><summary type="html"><![CDATA[I typically have half a dozen Claude Code sessions running at once, spread across different terminals and monitors, some hidden behind other windows. The visual “done” indicator is easy to miss when you’re not looking at the right terminal.]]></summary></entry></feed>