<?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>Tue, 14 Jul 2026 00:00:00 +0000</lastBuildDate><item><title>Fundamentals of Empirical Software Engineering</title><link>https://jeffbailey.us/blog/2026/07/14/fundamentals-of-empirical-engineering/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/07/14/fundamentals-of-empirical-engineering/</guid><pubDate>Tue, 14 Jul 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Fundamentals</category><category>Software Engineering</category><category>Data Science</category><description><![CDATA[<p>Most claims about how to build software are opinions wearing the costume of fact. &ldquo;Pair programming catches more bugs.&rdquo; &ldquo;Microservices scale better.&rdquo; &ldquo;This linter improves quality.&rdquo; Each sounds authoritative, and each is testable. Empirical software engineering is the discipline that does the testing: it studies how software is built, maintained, and used by collecting real data and analyzing it, instead of trusting whoever argues most confidently.</p>
<p>Think of it like the shift medicine made a century ago. Doctors once prescribed treatments because a respected mentor swore by them. Then medicine started running trials, tracking outcomes, and pooling results across studies. Software engineering is partway through the same shift, and understanding how it works lets you tell a real finding from a well-dressed guess.</p>]]></description></item><item><title>Fundamentals of Data Architecture</title><link>https://jeffbailey.us/blog/2026/07/13/fundamentals-of-data-architecture/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/07/13/fundamentals-of-data-architecture/</guid><pubDate>Mon, 13 Jul 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Fundamentals</category><category>Data Engineering</category><category>Data Architecture</category><description><![CDATA[<h2 id="introduction">Introduction</h2>
<p>Someone on r/dataengineering asked if there&rsquo;s a standard for modern data architecture. With 20 years of experience, they had a batch pipeline pulling 200MB files into a data lake and a new source as a serialized Kafka stream. They wondered if streaming was the new paradigm or if they were becoming dinosaurs.</p>
<p>The best answer cut to the confusion: the question asked about architecture, but the follow-up discussed tools. They are on different levels. Data architecture has little to do with tool selection.</p>]]></description></item><item><title>Fundamentals of Architecture Decision Making</title><link>https://jeffbailey.us/blog/2026/07/13/fundamentals-of-architecture-decision-making/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/07/13/fundamentals-of-architecture-decision-making/</guid><pubDate>Mon, 13 Jul 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Fundamentals</category><category>Software Architecture</category><category>System Design</category><description><![CDATA[<h2 id="introduction">Introduction</h2>
<p>A team spends three weeks debating whether to use PostgreSQL or MongoDB. Six months later, nobody remembers why they chose one over the other, a new hire proposes switching, and the whole argument starts again from zero. The database was never the hard part. The team had no way to make the decision, agree on it, and remember it.</p>
<p>Most software failures are not coding failures. They trace back to an undocumented decision made without considering key forces, by the wrong people, or both. Architecture decision-making is the discipline of choosing well when the choice is hard to reverse.</p>]]></description></item><item><title>Fundamentals of Analytics Engineering</title><link>https://jeffbailey.us/blog/2026/07/09/fundamentals-of-analytics-engineering/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/07/09/fundamentals-of-analytics-engineering/</guid><pubDate>Thu, 09 Jul 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Fundamentals</category><category>Data Engineering</category><category>Analytics Engineering</category><description><![CDATA[<h2 id="introduction">Introduction</h2>
<p>Most data teams hit the same wall. The pipelines run, the warehouse fills up, and yet nobody trusts the numbers. Two dashboards report different revenue. An analyst spends a morning rebuilding a definition of &ldquo;active user&rdquo; that someone already wrote last quarter. The data exists, but the data nobody argues about does not.</p>
<p>Analytics engineering is the work that closes that gap. It sits between the people who move data and the people who interpret it, and it owns the messy middle where raw tables become datasets you can trust.</p>]]></description></item><item><title>Are We There Yet Development</title><link>https://jeffbailey.us/blog/2026/07/02/death-by-1000-are-we-there-yet-development/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/07/02/death-by-1000-are-we-there-yet-development/</guid><pubDate>Thu, 02 Jul 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Software Development</category><category>AI</category><description><![CDATA[<p>A new paradigm is emerging in the age of AI-led software development. I&rsquo;m calling it <em><strong>Are We There Yet Development</strong></em>. Last week a developer walked over to another developer asking for something they felt they needed to proceed with their <em><strong>critical</strong></em> greenfield project when the developer was in the middle of troubleshooting a production incident.</p>
<p>Looming over nearly every developer is a neverending sense of urgency from on high and an enduring belief that using AI means building at the speed of thought. As this cultural &ldquo;norm&rdquo; seeps into the software development lifecycle I can&rsquo;t help but think about children in the back of the car whining for the hundredth time: <em>&ldquo;Are we there yet?!&rdquo;</em>.</p>]]></description></item><item><title>Learn HTTP Status Codes</title><link>https://jeffbailey.us/blog/2026/06/28/learn-http-codes/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/06/28/learn-http-codes/</guid><pubDate>Sun, 28 Jun 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Web Development</category><category>Learn X</category><description><![CDATA[<p><strong>Quick Start:</strong> Learn five mental models that cover every HTTP response, then read live codes with <code>curl</code>. Total time: 20 minutes.</p>
<h2 id="what-youll-learn">What You&rsquo;ll Learn</h2>
<ul>
<li>What an HTTP status code is, and what problem it solves.</li>
<li>Five mental models that make any code readable, not just the ones you&rsquo;ve memorized.</li>
<li>The mnemonic for all five classes, and four more models for the hard cases.</li>
<li>The handful of codes you&rsquo;ll meet 95% of the time.</li>
<li>When the code lies to you (200 with an error inside).</li>
<li>How to read status codes yourself with <code>curl</code>.</li>
<li>Where to go to learn the long tail.</li>
</ul>
<h2 id="the-basics">The Basics</h2>
<p>Every HTTP response carries a three-digit status code: the server&rsquo;s verdict on your request, delivered before any body content. The first digit classifies responses into five categories; knowing those five is enough to read any code you encounter.</p>]]></description></item><item><title>1000 Life Giving Potions - Operating System Wildlife</title><link>https://jeffbailey.us/blog/2026/06/27/1000-life-giving-potions-operating-system-wildlife/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/06/27/1000-life-giving-potions-operating-system-wildlife/</guid><pubDate>Sat, 27 Jun 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>1000 Life Giving Potions</category><category>Operating Systems</category><category>Software Development</category><description><![CDATA[<p>I admit it: I&rsquo;m an operating system addict. I&rsquo;ve installed countless operating systems over my life, and I still use many of them. It may seem like a bad idea. It isn&rsquo;t.</p>
<p>I jump between macOS, Linux, Windows, and Chrome OS across many devices, and that&rsquo;s just on desktop. On phones, my first was a Google Nexus One then a couple pit stops with Nokia Lumia 521 and 620 Windows Phones. Later I went back to Adroid with a Samsung S7, an S10, and others, I now carry an iPhone 13 Pro Max. I&rsquo;ve also used long-dead operating systems like SunOS, Solaris, Warp OS, and many more. Oh, and I run Android TV on an Nvidia Shield and don&rsquo;t forget three different Raspberry Pis and a Synology NAS all running various flavors of Linux.</p>]]></description></item><item><title>What Is a Knowledge Graph?</title><link>https://jeffbailey.us/blog/2026/06/23/what-is-a-knowledge-graph/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/06/23/what-is-a-knowledge-graph/</guid><pubDate>Tue, 23 Jun 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Data Engineering</category><category>AI Engineering</category><category>Software Architecture</category><description><![CDATA[<p>Most data starts as rows in tables: customers, orders, tickets. To see how a customer links to a product they refunded through a support ticket, you write joins. The connections exist, but the tables hide them; they surface only when you go looking.</p>
<p>A knowledge graph puts those connections first, treating the relationships between entities as the main thing. By the end of this article, you&rsquo;ll know what a knowledge graph is, why people build them, how one works, and where it helps and where it doesn&rsquo;t.</p>]]></description></item><item><title>How Do I Create a Knowledge Graph?</title><link>https://jeffbailey.us/blog/2026/06/23/how-do-i-create-a-knowledge-graph/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/06/23/how-do-i-create-a-knowledge-graph/</guid><pubDate>Tue, 23 Jun 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Data Engineering</category><category>AI Engineering</category><category>Software Architecture</category><description><![CDATA[<p>You have read what a knowledge graph is. Now build the smallest one that works.</p>
<p>This tutorial uses plain Python, a list, small functions, no database, libraries, or setup beyond Python. By the end, you&rsquo;ll have a runnable file that stores facts, answers questions, and navigates between facts.</p>
<p>If the words <em>triple</em>, <em>node</em>, or <em>edge</em> are new, read <a href="https://jeffbailey.us/blog/2026/06/23/what-is-a-knowledge-graph/">What Is a Knowledge Graph?</a> first. This guide builds what that article describes.</p>]]></description></item><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></channel></rss>