<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Jeff Bailey</title><link>https://jeffbailey.us/</link><description>This website contains learning resources, opinions, and facts about software-related technology.</description><language>en</language><generator>Hugo</generator><atom:link href="https://jeffbailey.us/rss.xml" rel="self" type="application/rss+xml"/><lastBuildDate>Wed, 03 Jun 2026 00:00:00 +0000</lastBuildDate><item><title>How Do I Use a Software Ontology?</title><link>https://jeffbailey.us/blog/2026/06/03/how-do-i-use-a-software-ontology/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/06/03/how-do-i-use-a-software-ontology/</guid><pubDate>Wed, 03 Jun 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>How-To</category><category>Software Architecture</category><category>Domain-Driven Design</category><description><![CDATA[<p>The interviews are done. Someone sat with the domain expert and committed <code>ontology.md</code> next to the code. Then the quarter got busy. Six months later a report counts the same <code>Customer</code> three times, and the model built to prevent exactly that has not changed since launch.</p>
<p>An ontology earns its keep only when a team uses it. A <a href="https://jeffbailey.us/blog/2026/05/28/what-is-a-software-ontology/">software ontology</a> is a shared model of a domain: its entities, their attributes, and their relationships, written so people and code agree on what each term means. This guide assumes the model already exists. The goal is to put it to work: in workflows, design sessions, database schemas, and on every screen where a teammate looks something up. Pick the section that matches the task in front of you. The command examples assume PostgreSQL and <code>psql</code>, but the practice maps to any engine that supports comments and constraints. The examples use the Subscription Billing context from the <a href="https://jeffbailey.us/blog/2026/05/29/how-do-i-create-a-software-ontology/">creation guide</a>, so the terms line up across both articles.</p>]]></description></item><item><title>How Do I Create a Software Ontology?</title><link>https://jeffbailey.us/blog/2026/05/29/how-do-i-create-a-software-ontology/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/05/29/how-do-i-create-a-software-ontology/</guid><pubDate>Fri, 29 May 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>How-To</category><category>Software Architecture</category><category>Domain-Driven Design</category><description><![CDATA[<p>Two senior engineers argued for an hour over a bug. The fix took ten minutes, but the argument lasted fifty. One meant &ldquo;active subscription&rdquo; when saying <em>customer</em>, the other meant &ldquo;any account.&rdquo; Both were correct but lacked a shared model.</p>
<p>A <a href="https://jeffbailey.us/blog/2026/05/28/what-is-a-software-ontology/">software ontology</a> is an explicit, agreed-upon domain model, including concepts, meanings, and relationships. In DDD, it covers ubiquitous language, bounded contexts, and aggregates. This guide creates one.</p>
<h2 id="goal">Goal</h2>
<p>Create a software ontology for a domain: a model that identifies key concepts, defines them once, classifies (entity, value object, or aggregate), and maps relationships and boundaries. The final artifact is an agreed-upon model reflected in the code.</p>]]></description></item><item><title>What Is a Software Ontology?</title><link>https://jeffbailey.us/blog/2026/05/28/what-is-a-software-ontology/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/05/28/what-is-a-software-ontology/</guid><pubDate>Thu, 28 May 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Explanation</category><category>Software Architecture</category><category>Domain-Driven Design</category><description><![CDATA[<p>Open a mature codebase and grep for <code>Customer</code>. In billing, it means an active, paid account; in support, anyone who has sent an email; in analytics, a deduplicated household. The bug isn&rsquo;t in one module, but in three teams misunderstanding they&rsquo;re referring to the same thing.</p>
<p>A software ontology is a clearly defined, shared model of a domain that includes concepts, meanings, and relationships, documented and integrated with code. This article explains its role in Domain-Driven Design (DDD), why it exists, and how it functions as a mental model.</p>]]></description></item><item><title>How Is AI Impacting Software Engineering?</title><link>https://jeffbailey.us/blog/2026/05/27/how-is-ai-impacting-software-engineering/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/05/27/how-is-ai-impacting-software-engineering/</guid><pubDate>Wed, 27 May 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>AI Engineering</category><category>Software Architecture</category><category>Developer Productivity</category><description><![CDATA[<p>Your job as a software engineer in 2026 differs from 2020, beyond just using chat tools. Every system component, review queue, test runner, version control, release process, and on-call rotation must handle more load than they were designed for as demand continues to rise.</p>
<p>This article discusses AI&rsquo;s impact on software engineering through the lens of software ecology, citing Adam Bender&rsquo;s Google talk, <em>&ldquo;Software Engineering at the Tipping Point.&rdquo;</em> It helps you analyze your dev environment, spot vulnerabilities, and choose resilient principles.</p>]]></description></item><item><title>What Is the AT Protocol? A Developer's Mental Model</title><link>https://jeffbailey.us/blog/2026/05/25/what-is-atproto/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/05/25/what-is-atproto/</guid><pubDate>Mon, 25 May 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Distributed Systems</category><category>Protocols</category><category>Social Web</category><description><![CDATA[<p>Most social networks use a single database with an app, storing usernames, posts, algorithms, moderation rules, and HTML within the same company. Building on top means relying on the vendor&rsquo;s rate-limited API, which can change or disappear unexpectedly.</p>
<p>The AT Protocol (ATproto) divides the monolith into parts that different people can run, use different languages for, and swap out without losing accounts or posts. Bluesky is its biggest app, but the protocol is more interesting for developers than the app.</p>]]></description></item><item><title>What Is the Hourglass of Uncertainty?</title><link>https://jeffbailey.us/blog/2026/05/20/what-is-the-hourglass-of-uncertainty/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/05/20/what-is-the-hourglass-of-uncertainty/</guid><pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Software Engineering</category><category>Estimation</category><category>Project Management</category><description><![CDATA[<h2 id="the-pattern">The pattern</h2>
<p>The team is three weeks away from shipping. The demo went well. Estimates are tight. Velocity is trending up. The product manager is drafting the launch email.</p>
<p>Then the integration tests hit, the third-party API rate-limits at production volume, a database query takes four seconds instead of two, a security review finds an authentication gap, and the analytics team sees a schema mismatch.</p>
<p>Three weeks become three months.</p>]]></description></item><item><title>Announcements</title><link>https://jeffbailey.us/announcements/</link><guid isPermaLink="true">https://jeffbailey.us/announcements/</guid><pubDate>Mon, 18 May 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><description>&lt;p>A read-only feed of operator updates. You can join via guest mode to read history; posting is reserved for operators.&lt;/p>
&lt;iframe
  src="https://element.jeffbailey.us/#/room/%23announcements:jeffbailey.us?guest=true"
  sandbox="allow-scripts allow-same-origin allow-forms allow-popups"
  width="100%"
  height="700px"
  loading="lazy"
  referrerpolicy="no-referrer"
  title="Matrix room #announcements:jeffbailey.us (Element guest mode)">&lt;/iframe></description></item><item><title>How Do I Use Conway's Law?</title><link>https://jeffbailey.us/blog/2026/05/13/how-do-i-use-conways-law/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/05/13/how-do-i-use-conways-law/</guid><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Software Engineering</category><category>Organization Design</category><description><![CDATA[<p>Conway&rsquo;s Law is the observation that systems mirror the communication structures of the teams that build them. Applying it in practice splits into five different tasks, each with its own evidence, levers, and audience. This page is the index. Pick the guide that matches the situation in front of you.</p>
<p>For the theory and why the law holds, read <a href="https://jeffbailey.us/blog/2026/05/12/what-is-conways-law/">What Is Conway&rsquo;s Law?</a> first.</p>
<h2 id="pick-your-guide">Pick your guide</h2>
<div class="card-grid" style="--min-width: 250px;"><div class="card"><p>🛠️ <strong><a href="https://jeffbailey.us/blog/2026/05/13/how-do-i-smooth-platform-team-friction/">Smooth platform team friction</a></strong></p>]]></description></item><item><title>How Do I Smooth Platform Team Friction?</title><link>https://jeffbailey.us/blog/2026/05/13/how-do-i-smooth-platform-team-friction/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/05/13/how-do-i-smooth-platform-team-friction/</guid><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Software Engineering</category><category>Organization Design</category><description><![CDATA[<h2 id="prerequisites">Prerequisites</h2>
<p>This guide assumes:</p>
<ul>
<li><strong>Familiarity with Conway&rsquo;s Law.</strong> Read <a href="https://jeffbailey.us/blog/2026/05/12/what-is-conways-law/">What Is Conway&rsquo;s Law?</a> first if &ldquo;communication structure shapes system structure&rdquo; sounds new.</li>
<li><strong>You work on or with a platform team.</strong> This means a team that owns shared infrastructure consumed by multiple product teams.</li>
<li><strong>Visibility into platform PR queues, product-team workflows, and meeting calendars.</strong> Without these signals, you cannot measure friction.</li>
<li><strong>Influence over platform priorities, or a partner who has it.</strong> The fixes below require changing what the platform team does, not what product teams ask for.</li>
</ul>
<h2 id="measure-the-friction-budget">Measure the friction budget</h2>
<p>Platform teams own shared infrastructure that many product teams depend on. Heavy edit volume across multiple teams is normal. Slow shipping and burned-out engineers are not.</p>]]></description></item><item><title>How Do I Serve Organizational Needs With Conway's Law?</title><link>https://jeffbailey.us/blog/2026/05/13/how-do-i-serve-organizational-needs/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/05/13/how-do-i-serve-organizational-needs/</guid><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Software Engineering</category><category>Organization Design</category><description><![CDATA[<h2 id="prerequisites">Prerequisites</h2>
<p>This guide assumes:</p>
<ul>
<li><strong>Familiarity with Conway&rsquo;s Law.</strong> Read <a href="https://jeffbailey.us/blog/2026/05/12/what-is-conways-law/">What Is Conway&rsquo;s Law?</a> first if &ldquo;communication structure shapes system structure&rdquo; sounds new.</li>
<li><strong>Access to git history.</strong> You will read commit patterns over the last quarter.</li>
<li><strong>Visibility into the org chart.</strong> You need to know which engineers belong to which teams.</li>
<li><strong>Influence over team boundaries, or a stakeholder who has it.</strong> The fixes below require organizational change, not technical work.</li>
</ul>
<h2 id="read-the-alignment">Read the alignment</h2>
<p>Conway&rsquo;s Law works both directions. Observe the code, and you can infer the organization. Use that to understand where the org is healthy and where it is broken.</p>]]></description></item><item><title>How Do I Pitch Org Design for Better Architecture?</title><link>https://jeffbailey.us/blog/2026/05/13/how-do-i-pitch-org-design-for-better-architecture/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/05/13/how-do-i-pitch-org-design-for-better-architecture/</guid><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Software Engineering</category><category>Organization Design</category><description><![CDATA[<h2 id="prerequisites">Prerequisites</h2>
<p>This guide assumes:</p>
<ul>
<li><strong>Familiarity with Conway&rsquo;s Law.</strong> Read <a href="https://jeffbailey.us/blog/2026/05/12/what-is-conways-law/">What Is Conway&rsquo;s Law?</a> first if &ldquo;communication structure shapes system structure&rdquo; sounds new.</li>
<li><strong>Concrete evidence from your own org.</strong> A diagnosis from <a href="https://jeffbailey.us/blog/2026/05/13/how-do-i-diagnose-software-delivery-friction/">How Do I Diagnose Delivery Friction?</a> or a deployment decode from <a href="https://jeffbailey.us/blog/2026/05/13/how-do-i-decode-software-deployments/">How Do I Decode a Deployment?</a> gives you the artifacts to point at. Without evidence, the pitch sounds like opinion. Start there if you have not yet.</li>
<li><strong>An audience.</strong> Architects, product leaders, your own team, an open-source community, or conference attendees. The pitch shifts with each.</li>
</ul>
<h2 id="bring-both-halves-to-every-conversation">Bring both halves to every conversation</h2>
<p>Most conversations about software architecture skip the organizational layer entirely. Engineers debate microservices versus monoliths. Leaders debate team structure in isolation. The two conversations rarely connect. Use Conway&rsquo;s Law to make the connection explicit.</p>]]></description></item><item><title>How Do I Diagnose Software Delivery Friction?</title><link>https://jeffbailey.us/blog/2026/05/13/how-do-i-diagnose-software-delivery-friction/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/05/13/how-do-i-diagnose-software-delivery-friction/</guid><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Software Engineering</category><category>Organization Design</category><description><![CDATA[<h2 id="prerequisites">Prerequisites</h2>
<p>This guide assumes:</p>
<ul>
<li><strong>Familiarity with Conway&rsquo;s Law.</strong> Read <a href="https://jeffbailey.us/blog/2026/05/12/what-is-conways-law/">What Is Conway&rsquo;s Law?</a> first if &ldquo;communication structure shapes system structure&rdquo; sounds new.</li>
<li><strong>A local clone of the repository you want to analyze.</strong> The diagnosis below is a git query.</li>
<li><strong>A POSIX shell with <code>awk</code>, <code>sort</code>, <code>uniq</code>, and <code>cut</code>.</strong> Standard on macOS and Linux.</li>
<li><strong>Visibility into the org chart.</strong> You need to map author emails to teams.</li>
</ul>
<h2 id="rank-the-congestion-candidates">Rank the congestion candidates</h2>
<p>Start by looking at the slowest, most contentious modules. Files with commits from many different authors over the last quarter signal congestion.</p>]]></description></item><item><title>How Do I Decode Software Deployments?</title><link>https://jeffbailey.us/blog/2026/05/13/how-do-i-decode-software-deployments/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/05/13/how-do-i-decode-software-deployments/</guid><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Software Engineering</category><category>Organization Design</category><description><![CDATA[<h2 id="prerequisites">Prerequisites</h2>
<p>This guide assumes:</p>
<ul>
<li><strong>Familiarity with Conway&rsquo;s Law.</strong> Read <a href="https://jeffbailey.us/blog/2026/05/12/what-is-conways-law/">What Is Conway&rsquo;s Law?</a> first if &ldquo;communication structure shapes system structure&rdquo; sounds new.</li>
<li><strong>Access to the deployed system.</strong> You need to see the service list, runbooks, and on-call rotations.</li>
<li><strong>Visibility into pipelines and release boundaries.</strong> You need to know which services ship together and which ship separately.</li>
<li><strong>A blank document or whiteboard.</strong> You will sketch a map as you go.</li>
</ul>
<h2 id="walk-the-deployment">Walk the deployment</h2>
<p>Treat deployed software like a fossil record. Every service boundary, API contract, and deployment pipeline carries the imprint of the people who shipped it. Walk the deployment in this order:</p>]]></description></item><item><title>What Is Conway's Law?</title><link>https://jeffbailey.us/blog/2026/05/12/what-is-conways-law/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/05/12/what-is-conways-law/</guid><pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Software Engineering</category><category>Organization Design</category><description><![CDATA[<h2 id="the-pattern">The pattern</h2>
<p>You redraw the org chart. Six months later, the codebase has grown new seams along the new team boundaries. The teams reshaped the software without intent.</p>
<p>That pattern has a name: <strong>Conway&rsquo;s Law</strong>. Any system you ship will reflect the communication structure of the people who built it. Modules align with teams. Interfaces form along reporting lines. Coordination friction shows up as code friction.</p>
<p>This matters because technical leaders keep treating organizational problems as technical problems. A microservice split fails when two teams still own a single service. A monorepo grows congested because four teams edit the same file. The architecture is doing exactly what the org chart told it to do.</p>]]></description></item><item><title>How Do I Measure AI Software Development Tool Usage?</title><link>https://jeffbailey.us/blog/2026/05/08/how-do-i-measure-ai-software-development-tool-usage/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/05/08/how-do-i-measure-ai-software-development-tool-usage/</guid><pubDate>Fri, 08 May 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>AI</category><category>Engineering Management</category><category>FinOps</category><description><![CDATA[<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css" integrity="sha384-n8MVd4RsNIU0tAv4ct0nTaAbDJwPJzDEaqSD1odI+WdtXRGWt2kTvGFasHpSy3SV" crossorigin="anonymous">


<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js" integrity="sha384-XjKyOOlGwcjNTAIQHIpgOno0Hl1YQqzUOEleOLALmuqehneUG+vnGctmUb0ZY0l8" crossorigin="anonymous"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" integrity="sha384-+VBxd3r6XgURycqtZ117nYw44OOcIax56Z4dCRWbxyPt0Koah1uHoK0o4+/RRE05" crossorigin="anonymous"></script>

<script>
    document.addEventListener("DOMContentLoaded", function() {
        renderMathInElement(document.body, {
            delimiters: [
                {left: "$$", right: "$$", display: true},
                {left: "$", right: "$", display: false}
            ],
            throwOnError: false,
            displayMode: true,
            output: 'html',
            strict: false,
            trust: true,
            macros: {
                "\\begin{cases}": "\\begin{cases}\\displaystyle",
                "\\end{cases}": "\\end{cases}"
            }
        });
    });
</script>

<style>
.katex-display {
    margin: 1em 0;
    padding: 0.5em 0;
}
.katex-display > .katex {
    display: inline-block;
    text-align: center;
}
.katex-display > .katex > .katex-html {
    display: block;
    position: relative;
}
.katex-display > .katex > .katex-html > .tag {
    position: absolute;
    right: 0;
}
</style> 
<p>Cloud bills are scrutinized to the cent. AI coding tool spend analysis is complex, with token-based pricing, multiple subscriptions, and quick pilots hiding total costs until reviewed by finance.</p>]]></description></item><item><title>What is Ollama?</title><link>https://jeffbailey.us/blog/2026/04/27/what-is-ollama/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/04/27/what-is-ollama/</guid><pubDate>Mon, 27 Apr 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Fundamentals</category><category>AI</category><category>Machine Learning</category><description><![CDATA[<h2 id="introduction">Introduction</h2>
<p>I first heard about Ollama when a colleague mentioned running <a href="https://jeffbailey.us/blog/2026/04/14/a-history-of-ai-ml/">GPT-like models</a> on a laptop. My first reaction was the same one most engineers have: you can do that?</p>
<p>The short answer is yes. Ollama makes it possible to run <a href="https://jeffbailey.us/blog/2025/11/20/fundamentals-of-machine-learning/">large language models</a> locally on consumer hardware. You need only a Mac, a PC, or even a Raspberry Pi and a few minutes to pull a model.</p>
<p>Ollama is an open source tool for running large language models on your own hardware. It wraps <a href="https://github.com/ggerganov/llama.cpp">llama.cpp</a>, a highly optimized C++ inference engine, and exposes a simple API that mimics the OpenAI chat endpoint. You pull models with a single command, talk to them with curl or any SDK, and the system handles GPU acceleration, memory management, and model loading automatically.</p>]]></description></item><item><title>Fundamentals of Technical Leadership</title><link>https://jeffbailey.us/blog/2026/04/26/fundamentals-of-technical-leadership/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/04/26/fundamentals-of-technical-leadership/</guid><pubDate>Sun, 26 Apr 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Fundamentals</category><category>Leadership</category><category>Software Engineering</category><description><![CDATA[<h2 id="introduction">Introduction</h2>
<p>Why do some technical teams ship great work while others stall in indecision, drama, and rewrites? The difference is rarely talent. It&rsquo;s leadership.</p>
<p>Technical leadership is the practice of using deep technical judgment plus people skills to set direction, make hard calls, and help a team do its best work. A technical leader is not always a manager. The role can be a tech lead, staff engineer, principal, architect, CTO, or a founder who happens to write code. What unites them is influence rooted in credibility, not authority handed down from an org chart.</p>]]></description></item><item><title>What Is fzf?</title><link>https://jeffbailey.us/blog/2026/04/25/what-is-fzf/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/04/25/what-is-fzf/</guid><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Developer Tools</category><category>Productivity</category><category>Command Line</category><description><![CDATA[<p>I used to open files the slow way: <code>cd</code> into a directory, <code>ls</code> to see what&rsquo;s there, maybe <code>find</code> with a half-remembered filename, then pass it to whatever program I needed. Every time, I&rsquo;d lose a few seconds hunting for the right path. Multiply that by dozens of files a day, and it adds up to real friction.</p>
<p>Then I found fzf, and file selection stopped being a chore. fzf is a fuzzy finder that turns file selection into a fast, interactive search.</p>]]></description></item><item><title>What Is Zoxide?</title><link>https://jeffbailey.us/blog/2026/04/21/what-is-zoxide/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/04/21/what-is-zoxide/</guid><pubDate>Tue, 21 Apr 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Developer Tools</category><category>Productivity</category><category>Command Line</category><description><![CDATA[<p>I used to navigate my filesystem one directory at a time. <code>cd ~/Projects</code>, then <code>ls</code>, then <code>cd websites</code>, then <code>ls</code>, then <code>cd jeffbaileyblog</code>, then <code>ls</code>, then <code>cd hugo</code>. Every trip to a familiar directory cost me four or five commands. Tab-completion helped a little, but I still had to remember the path.</p>
<p>Then I installed zoxide, and <code>cd</code> started reading my mind.</p>
<h2 id="what-zoxide-actually-is">What zoxide actually is</h2>
<p>Zoxide is a smarter replacement for <code>cd</code>. It watches where you go in your terminal, ranks those directories by how often and how recently you visit them, and lets you jump to any of them by typing a fragment of the path.</p>]]></description></item><item><title>What Is Claude Code?</title><link>https://jeffbailey.us/blog/2026/04/21/what-is-claude-code/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/04/21/what-is-claude-code/</guid><pubDate>Tue, 21 Apr 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Developer Tools</category><category>AI</category><category>Productivity</category><description><![CDATA[<p>For years, &ldquo;AI in my editor&rdquo; meant autocomplete. Copilot would suggest the next few tokens, I&rsquo;d hit tab, and that was the interaction. Useful, but shallow. The AI stayed in one file, ignored my tests, and had no way to know when its suggestion broke the build.</p>
<p>Claude Code works at a different level. It runs in my terminal, reads my files, runs my commands, and talks back in plain language. When I ask it to fix a failing test, it runs the test, reads the failure, finds the bug, edits the file, and runs the test again to confirm. The result feels less like autocomplete and more like delegating a small task to a teammate.</p>]]></description></item><item><title>What Is Nwave?</title><link>https://jeffbailey.us/blog/2026/04/20/what-is-nwave/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/04/20/what-is-nwave/</guid><pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Programming</category><category>AI</category><description><![CDATA[<p>AI agents that can write code are easy to find. AI agents that write code I&rsquo;d actually ship are rare. Nwave is one attempt at the second problem, and understanding its shape helps me think more clearly about every other AI coding tool I use.</p>
<h2 id="what-is-nwave">What is Nwave?</h2>
<p>Nwave is an agentic AI software delivery methodology that runs inside <a href="https://jeffbailey.us/blog/2026/04/21/what-is-claude-code/">Claude Code</a>. It slices the work of shipping a feature into six ordered waves, assigns a specialized agent to each wave, and stops for a human review between waves.</p>]]></description></item><item><title>A History of AI and Machine Learning</title><link>https://jeffbailey.us/blog/2026/04/14/a-history-of-ai-ml/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/04/14/a-history-of-ai-ml/</guid><pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Technology</category><category>History</category><description><![CDATA[<p>The history of AI is a story about math that already existed, people stubborn enough to believe in it, and a few decades of everyone else telling them they were wrong.</p>
<p>Most of the math powering today&rsquo;s large language models comes from the 17th and 18th centuries. Calculus, linear algebra, probability theory. The machines caught up to the math, not the other way around.</p>
<p>I picked up <a href="https://www.penguinrandomhouse.com/books/677608/why-machines-learn-by-anil-ananthaswamy/">Why Machines Learn</a> by Anil Ananthaswamy because I wanted to understand what actually happened, not the hype version. The book traces the mathematical lineage from early pattern recognition through deep learning with the kind of rigor and storytelling that made me rethink how I understood the whole field.</p>]]></description></item><item><title>Fundamentals of Agent Accessibility</title><link>https://jeffbailey.us/blog/2026/04/11/fundamentals-of-agent-accessibility/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/04/11/fundamentals-of-agent-accessibility/</guid><pubDate>Sat, 11 Apr 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Fundamentals</category><category>Software Engineering</category><category>Accessibility</category><description><![CDATA[<h2 id="introduction">Introduction</h2>
<p>I spent years thinking about accessibility as a human problem. Semantic HTML for screen readers. Keyboard navigation for motor disabilities. Color contrast for low vision. Then agents showed up, and I realized they have the same problem users with assistive technology have always had: your software wasn&rsquo;t built for how they interact with it.</p>
<p>Agent accessibility means making your APIs, interfaces, and software products usable by AI agents. Not just &ldquo;technically callable,&rdquo; but genuinely usable: discoverable, predictable, and self-describing. An agent hitting your API faces the same fundamental challenge a screen reader faces on a webpage. Both need structure, semantics, and predictability to do their job.</p>]]></description></item><item><title>Fundamentals of Software Traffic Management</title><link>https://jeffbailey.us/blog/2026/04/08/fundamentals-of-software-traffic-management/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/04/08/fundamentals-of-software-traffic-management/</guid><pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Fundamentals</category><category>Software Engineering</category><category>Distributed Systems</category><description><![CDATA[<h2 id="why-traffic-management-becomes-the-real-system">Why Traffic Management Becomes the Real System</h2>
<p>Distributed systems fail at the boundaries between services. A single user request crosses many network hops, each with different latency, failure behavior, and ownership. Without shared traffic controls, every team invents its own retry logic, timeout values, routing rules, and access policy. That creates inconsistent behavior, hidden coupling, and outages that are hard to contain.</p>
<p>This is the problem control planes and service meshes are built to solve. A control plane gives teams one place to define traffic policy, and the data plane enforces that policy on real requests. Sidecars and mesh proxies make resilience and security rules consistent across services without forcing every application team to reimplement network logic.</p>]]></description></item><item><title>How Do I Use GenAI Coding Tools?</title><link>https://jeffbailey.us/blog/2026/04/07/how-do-i-use-genai-coding-tools/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/04/07/how-do-i-use-genai-coding-tools/</guid><pubDate>Tue, 07 Apr 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>AI</category><category>Tools</category><category>Productivity</category><description><![CDATA[<p>It has been a wild near half decade ride on the GenAI coding tool beast.</p>
<p>If I&rsquo;d ridden a bucking bronco like I fantasized about as a kid it would serve as a clean overlaid transposition of my mind with my ass. 🐂 🤠</p>
<p>I first used a GenAI coding tool in October 2021, when I was added to the <a href="https://github.com/features/copilot">GitHub Copilot</a> Technical Preview. It was interesting, but barely better than IntelliSense—which is a tool collecting dust in my garage now that I think about it. I continued using it and as its performance improved it became my daily driver while continuing to use <a href="/blog/2025/06/07/learn-neovim/">Neovim</a> to get my digits dirty.</p>]]></description></item><item><title>Fundamentals of Software Automation</title><link>https://jeffbailey.us/blog/2026/04/06/fundamentals-of-software-automation/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/04/06/fundamentals-of-software-automation/</guid><pubDate>Mon, 06 Apr 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Fundamentals</category><category>Software Engineering</category><category>DevOps</category><description><![CDATA[<h2 id="why-automate-anything">Why Automate Anything?</h2>
<p>Early in my career, I led a team that performed repetitive file updates for customer web servers, consuming their entire day. I had a bright idea and asked our local Perl developer to automate their tasks. A couple of weeks later, a few magical scripts emerged, saving hundreds of hours, and my love of programming was born.</p>
<p>Software automation replaces manual, repetitive tasks: building code, provisioning servers, testing, deploying. Machines run the repetitive steps; people keep judgment calls. That cuts cost and the errors humans introduce in rote work.</p>]]></description></item><item><title>Clippy Has No Clothes</title><link>https://jeffbailey.us/blog/2026/04/03/clippy-has-no-clothes/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/04/03/clippy-has-no-clothes/</guid><pubDate>Fri, 03 Apr 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>AI</category><category>Technology</category><category>Think</category><description><![CDATA[<p>I can&rsquo;t imagine you&rsquo;ve never used a Microsoft product. Assuming you have, you may have heard of <a href="https://en.wikipedia.org/wiki/Office_Assistant">Clippy</a>. Clippy was a feature of Microsoft Office products from 1997 to 2002 and left an indelible mark on the tech industry as one of the biggest software-based personal assistant flops.</p>


<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
  <iframe src="https://www.youtube.com/embed/XWJTXR_2r1M" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video"></iframe>
</div>
<br/>


<p>Clippy would pop up on the first run of Microsoft Word and Excel, with a friendly intent of helping you use the products. Its most consistent features included being wrong and unhelpful. If the software industry had used user behavior metrics back then, the Clippy disable button would likely have been the most-used feature in Microsoft products.</p>]]></description></item><item><title>Fundamentals of Concurrency and Parallelism</title><link>https://jeffbailey.us/blog/2026/04/01/fundamentals-of-concurrency-and-parallelism/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/04/01/fundamentals-of-concurrency-and-parallelism/</guid><pubDate>Wed, 01 Apr 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Fundamentals</category><category>Software Engineering</category><category>Computer Science</category><description><![CDATA[<h2 id="introduction">Introduction</h2>
<p>Most programs start as a single sequence of instructions. That works until the program needs to wait for something (a <a href="https://jeffbailey.us/blog/2025/12/13/fundamentals-of-networking/">network</a> response, a disk read, user input) or until the work is large enough that a single <a href="https://jeffbailey.us/blog/2025/12/11/fundamentals-of-computer-processing/">processor core</a> can&rsquo;t finish it fast enough.</p>
<p>Concurrency and parallelism are different responses to that problem. Concurrency is about <em>managing</em> multiple things at once. Parallelism is about <em>doing</em> multiple things at once. They overlap in practice, but confusing them leads to designs that are either needlessly complex or slower than expected.</p>]]></description></item><item><title>What Is Amdahl's Law?</title><link>https://jeffbailey.us/blog/2026/03/30/what-is-amdahls-law/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/03/30/what-is-amdahls-law/</guid><pubDate>Mon, 30 Mar 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>What</category><category>Computer Science</category><category>Software Engineering</category><category>Performance</category><category>Laws</category><description><![CDATA[<h2 id="introduction">Introduction</h2>
<p>You add more cores. The program gets faster. Keep adding, and gains shrink. Eventually, speed stops rising.</p>
<p>That ceiling has a name: <strong>Amdahl&rsquo;s Law</strong>. It gives the maximum speedup from parallelizing a program, given how much work must still run sequentially.</p>
<p>This matters because it prevents wasted effort. Teams add hardware expecting a linear speedup, then hit diminishing returns. Amdahl&rsquo;s Law explains why and points you to the bottleneck that actually needs work.</p>]]></description></item><item><title>Fundamentals of Software Systems Integration</title><link>https://jeffbailey.us/blog/2026/03/30/fundamentals-of-software-systems-integration/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/03/30/fundamentals-of-software-systems-integration/</guid><pubDate>Mon, 30 Mar 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Fundamentals</category><category>Software Engineering</category><description><![CDATA[<h2 id="why-integration-is-hard-and-worth-understanding">Why Integration Is Hard (and Worth Understanding)</h2>
<p>Why do some organizations connect five systems in a week while others spend months wiring up two? The difference is rarely the technology. It is understanding how integration actually works and choosing the right approach for each situation.</p>
<p>Software systems integration connects separate systems, so they exchange data and coordinate behavior. Every non-trivial organization runs multiple systems, and those systems need to talk to each other. A customer record created in one system should be visible in another. An order placed on a website should reach the warehouse. A payment processed by one service should update the ledger.</p>]]></description></item></channel></rss>