<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Andrew Cairns - Notes</title>
    <description>Short-form notes on software development, tools, and things I find interesting</description>
    <link>https://acairns.co.uk/notes</link>
    <language>en-us</language>
    <atom:link href="https://acairns.co.uk/notes.xml" rel="self" type="application/rss+xml" />
    <lastBuildDate>Sun, 26 Apr 2026 11:58:55 GMT</lastBuildDate>
    <item>
      <title><![CDATA[I finally finished my Event Sourcing video]]></title>
      <description><![CDATA[After four to six months of work, my video introducing Event Sourcing using football as a metaphor is finally out.]]></description>
      <link>https://acairns.co.uk/notes/2026/04/21/event-sourcing-video</link>
      <guid isPermaLink="true">https://acairns.co.uk/notes/2026/04/21/event-sourcing-video</guid>
      <pubDate>Tue, 21 Apr 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Success Is Silent]]></title>
      <description><![CDATA[A principle emerging from agentic coding: verification steps that pass should produce no output; failures should dump everything. Simple idea, but it matters more than you'd expect when an LLM is the one reading the output.]]></description>
      <link>https://acairns.co.uk/notes/2026/04/15/success-is-silent</link>
      <guid isPermaLink="true">https://acairns.co.uk/notes/2026/04/15/success-is-silent</guid>
      <pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[The Night Shift Workflow]]></title>
      <description><![CDATA[Jamon Holmgren's Night Shift workflow separates human thinking from agent execution — specs by day, autonomous implementation by night. The core insight: your time is the expensive resource, tokens are cheap. Start from a draft PR, not from zero.]]></description>
      <link>https://acairns.co.uk/notes/2026/03/25/the-night-shift-workflow</link>
      <guid isPermaLink="true">https://acairns.co.uk/notes/2026/03/25/the-night-shift-workflow</guid>
      <pubDate>Wed, 25 Mar 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Composition over Inheritance on roadmap.sh]]></title>
      <description><![CDATA[My Composition over Inheritance YouTube video is listed as a learning resource on the roadmap.sh Software Design and Architecture roadmap.]]></description>
      <link>https://acairns.co.uk/notes/2026/03/23/composition-over-inheritance-on-roadmap-sh</link>
      <guid isPermaLink="true">https://acairns.co.uk/notes/2026/03/23/composition-over-inheritance-on-roadmap-sh</guid>
      <pubDate>Mon, 23 Mar 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[VoiceBox]]></title>
      <description><![CDATA[Tried VoiceBox, a free open-source voice cloning app that runs locally. Cloned my voice in 30 seconds from a short audio sample — surprisingly good, even with a Scottish accent.]]></description>
      <link>https://acairns.co.uk/notes/2026/03/15/voicebox</link>
      <guid isPermaLink="true">https://acairns.co.uk/notes/2026/03/15/voicebox</guid>
      <pubDate>Sun, 15 Mar 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[LSP plugins in Claude Code]]></title>
      <description><![CDATA[Claude Code has official LSP plugins for code intelligence. Easy to miss if you haven't gone looking.]]></description>
      <link>https://acairns.co.uk/notes/2026/03/11/lsp-plugins-claude-code</link>
      <guid isPermaLink="true">https://acairns.co.uk/notes/2026/03/11/lsp-plugins-claude-code</guid>
      <pubDate>Wed, 11 Mar 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Neologisms]]></title>
      <description><![CDATA[Fowler coins new words to describe things he sees in software. I do the same. I don't expect any to catch on. I do it to help me think.]]></description>
      <link>https://acairns.co.uk/notes/2026/03/08/neologisms</link>
      <guid isPermaLink="true">https://acairns.co.uk/notes/2026/03/08/neologisms</guid>
      <pubDate>Sun, 08 Mar 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Semantic Diffusion]]></title>
      <description><![CDATA[Semantic Diffusion describes how terms lose their meaning as they spread. I discovered it a while ago. I think Event Sourcing, CQRS, and DDD are topics that suffer from this exact problem.]]></description>
      <link>https://acairns.co.uk/notes/2026/03/08/semantic-diffusion</link>
      <guid isPermaLink="true">https://acairns.co.uk/notes/2026/03/08/semantic-diffusion</guid>
      <pubDate>Sun, 08 Mar 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[42 Days Across the Labrador Wilderness]]></title>
      <description><![CDATA[Kevin Wild filmed his 42-day, 650km solo canoe expedition across the Labrador wilderness. The result is an 8-hour documentary covering everything from polar bear territory to paddling alongside whales. Unmissable!]]></description>
      <link>https://acairns.co.uk/notes/2026/03/04/42-days-across-the-labrador-wilderness</link>
      <guid isPermaLink="true">https://acairns.co.uk/notes/2026/03/04/42-days-across-the-labrador-wilderness</guid>
      <pubDate>Wed, 04 Mar 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Implicit Freshness]]></title>
      <description><![CDATA[Claude is assuming my codebase and dependencies are always fresh. I'm experimenting with a new CLAUDE.md decision-making heuristic. I'm trying to nudge it to check before wasting a bunch of time on debugging cycles.]]></description>
      <link>https://acairns.co.uk/notes/2026/03/03/implicit-freshness</link>
      <guid isPermaLink="true">https://acairns.co.uk/notes/2026/03/03/implicit-freshness</guid>
      <pubDate>Tue, 03 Mar 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Pointer Capture for Range Inputs]]></title>
      <description><![CDATA[Native range inputs have a tiny capture area — drag too fast and the pointer escapes. setPointerCapture locks tracking to the element, touch-none stops the browser stealing the pointer for gestures, and a pointerup handler catches the final position that pointermove misses.]]></description>
      <link>https://acairns.co.uk/notes/2026/03/01/pointer-capture-for-range-inputs</link>
      <guid isPermaLink="true">https://acairns.co.uk/notes/2026/03/01/pointer-capture-for-range-inputs</guid>
      <pubDate>Sun, 01 Mar 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Manage the Context Window]]></title>
      <description><![CDATA[Daniel Griesser's custom sub-agent workflow for context management was ahead of its time — what he hand-rolled is now being shipped as first-class tooling. The core insight still stands: context is precious, and managing it intentionally is everything.]]></description>
      <link>https://acairns.co.uk/notes/2026/02/28/manage-the-context-window</link>
      <guid isPermaLink="true">https://acairns.co.uk/notes/2026/02/28/manage-the-context-window</guid>
      <pubDate>Sat, 28 Feb 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Deep Modules and AI-Ready Codebases]]></title>
      <description><![CDATA[Matt Pocock argues your codebase is the biggest influence on AI output, not your prompt. His solution is deep modules from John Ousterhout's A Philosophy of Software Design. It maps perfectly to how CQRS already works — each service boundary is a deep module with commands and queries as its interface.]]></description>
      <link>https://acairns.co.uk/notes/2026/02/27/deep-modules-and-ai-ready-codebases</link>
      <guid isPermaLink="true">https://acairns.co.uk/notes/2026/02/27/deep-modules-and-ai-ready-codebases</guid>
      <pubDate>Fri, 27 Feb 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Mole — macOS Disk Space Cleaner]]></title>
      <description><![CDATA[Mole is a macOS command-line tool that bundles system cleaning, smart app uninstalling, and build artifact removal into one binary. Ran it while fighting a disk space crunch and recovered over 20GB in minutes.]]></description>
      <link>https://acairns.co.uk/notes/2026/02/27/mole-macos-disk-space-cleaner</link>
      <guid isPermaLink="true">https://acairns.co.uk/notes/2026/02/27/mole-macos-disk-space-cleaner</guid>
      <pubDate>Fri, 27 Feb 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Subagents and the Smart Zone]]></title>
      <description><![CDATA[Matt Pocock explains why subagents are the dominant pattern for coding agents, keeping work in the first 40-50% of the context window where models perform best.]]></description>
      <link>https://acairns.co.uk/notes/2026/02/19/subagents-and-the-smart-zone</link>
      <guid isPermaLink="true">https://acairns.co.uk/notes/2026/02/19/subagents-and-the-smart-zone</guid>
      <pubDate>Thu, 19 Feb 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Raspberry Pi with a Purpose]]></title>
      <description><![CDATA[Got a new Raspberry Pi, but this time it's not for tinkering—it's for an actual project. First time installing a heat sink that won't be used to play Counter Strike.]]></description>
      <link>https://acairns.co.uk/notes/2026/02/12/raspberry-pi-with-a-purpose</link>
      <guid isPermaLink="true">https://acairns.co.uk/notes/2026/02/12/raspberry-pi-with-a-purpose</guid>
      <pubDate>Thu, 12 Feb 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Discovered EaseMaster – A Playground for Custom Easing]]></title>
      <description><![CDATA[Found this fantastic tool for exploring easing functions. It's opened up a whole playground for experimenting with custom timing curves to match the vibe and feeling of different animations.]]></description>
      <link>https://acairns.co.uk/notes/2026/02/08/easemaster</link>
      <guid isPermaLink="true">https://acairns.co.uk/notes/2026/02/08/easemaster</guid>
      <pubDate>Sun, 08 Feb 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Design Patterns for Humans]]></title>
      <description><![CDATA[Solid resource for understanding design patterns with good explanations and examples.]]></description>
      <link>https://acairns.co.uk/notes/2026/02/07/design-patterns-for-humans</link>
      <guid isPermaLink="true">https://acairns.co.uk/notes/2026/02/07/design-patterns-for-humans</guid>
      <pubDate>Sat, 07 Feb 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Compiled Conversations #17: Event Sourcing]]></title>
      <description><![CDATA[Shawn McCool discusses Event Sourcing as a modelling technique—how it differs from Event Streaming, why aggregates work better as short-lived lifecycles, and how CQRS pairs naturally with it. Touches on DDD as a pursuit of domain understanding.]]></description>
      <link>https://acairns.co.uk/notes/2026/02/02/compiled-conversations-17-event-sourcing</link>
      <guid isPermaLink="true">https://acairns.co.uk/notes/2026/02/02/compiled-conversations-17-event-sourcing</guid>
      <pubDate>Mon, 02 Feb 2026 00:00:00 GMT</pubDate>
    </item>
  </channel>
</rss>