<?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, 13 May 2026 00:00:00 +0000</lastBuildDate><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><item><title>Fundamentals of JavaScript</title><link>https://jeffbailey.us/blog/2026/03/20/fundamentals-of-javascript/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/03/20/fundamentals-of-javascript/</guid><pubDate>Fri, 20 Mar 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Fundamentals</category><category>Programming</category><description><![CDATA[<h2 id="introduction">Introduction</h2>
<p>Every JavaScript bug I debug relates to type coercion, <code>this</code> issues, stale variables in closures, or unhandled promise rejections. These aren&rsquo;t quirks but design consequences. Understanding the design clarifies the bugs.</p>
<p>Brendan Eich created JavaScript in 1995 at Netscape in just 10 days. It was meant to be a simple scripting language for browsers, accessible to non-programmers alongside Java applets. This origin influenced its features: dynamic typing, prototype inheritance, first-class functions, and a single-threaded event loop. Many quirks, such as type coercion, <code>this</code> binding, and hoisting, stem from decisions made quickly for a specific purpose.</p>]]></description></item><item><title>Annoying Auth — Deadly Cut 14</title><link>https://jeffbailey.us/blog/2026/03/20/death-by-1000-cuts-14-annoying-auth/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/03/20/death-by-1000-cuts-14-annoying-auth/</guid><pubDate>Fri, 20 Mar 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Death By 1000 Cuts</category><category>Software</category><category>Culture</category><description><![CDATA[<p><em>We sent an email to <a href="mailto:youremail@your.com">youremail@your.com</a></em></p>
<p>🤦🏻</p>
<p><em>I loathe Medium</em>, not least of which for popularizing the &ldquo;magic link&rdquo; pattern in 2014.</p>
<p>Their rationale—passwords provide a worse user experience than email, as most people click &ldquo;forgot password&rdquo; anyway, so why not skip the middleman?</p>
<p><em>No, it&rsquo;s not a worse experience.</em></p>
<p>I have a password manager, and I press <code>Cmd-Shift-L</code>, and Bitwarden happily fills it in. I can even use auto-fill if a website plays nice. But, not with websites that <em>ONLY</em> have <em><strong>Massive-Pain-In-The-Ass Links™️</strong></em>. I don&rsquo;t want to open my phone or email client to copy a code, especially if I can&rsquo;t paste it because a destroyer of webs never took HTML Forms 101.</p>]]></description></item><item><title>Fundamentals of Rust</title><link>https://jeffbailey.us/blog/2026/03/18/fundamentals-of-rust/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/03/18/fundamentals-of-rust/</guid><pubDate>Wed, 18 Mar 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Fundamentals</category><category>Programming</category><description><![CDATA[<h2 id="introduction">Introduction</h2>
<p>Every systems language demands a trade-off: control memory and risk crashes or rely on a garbage collector and lose predictability. Rust avoids this by offering control, performance, and safety, which I find genuinely interesting.</p>
<p>Graydon Hoare began Rust in 2006 as a personal project, and Mozilla adopted it in 2009 to develop <a href="https://servo.org/">Servo</a>, an experimental browser engine. The motivation was practical: Mozilla&rsquo;s C++ code had frequent memory bugs and security issues, prompting the need for a language that prevents such bugs by design. This origin shaped Rust, making it a practical solution for real systems programming, not just an academic exercise.</p>]]></description></item><item><title>Fundamentals of FinOps</title><link>https://jeffbailey.us/blog/2026/03/12/fundamentals-of-finops/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/03/12/fundamentals-of-finops/</guid><pubDate>Thu, 12 Mar 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Fundamentals</category><category>Cloud</category><description><![CDATA[<h2 id="introduction">Introduction</h2>
<p>Why do cloud bills spiral when nobody intended to overspend? Cloud is pay-as-you-go; without visibility and accountability, usage and cost drift. FinOps (cloud financial operations) brings financial accountability to variable cloud spend through collaboration, data, and continuous improvement.</p>
<p>This article explains why FinOps exists, how its ideas fit together, and what changes when teams treat cloud cost as an operational concern. It focuses on <em>why</em> the lifecycle and domains work, not on tool setup.</p>]]></description></item><item><title>Fundamentals of Azure</title><link>https://jeffbailey.us/blog/2026/03/08/fundamentals-of-azure/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/03/08/fundamentals-of-azure/</guid><pubDate>Sun, 08 Mar 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Fundamentals</category><category>Cloud</category><description><![CDATA[<h2 id="introduction">Introduction</h2>
<p>Why does Azure feel like a second platform rather than &ldquo;Windows in the cloud&rdquo;? Microsoft Azure is more than virtual machines and Office integration. It is a global system of regions, a distinct identity layer, and a management hierarchy that relies on understanding key ideas.</p>
<p>This article explains Azure&rsquo;s structure: regions, Availability Zones, Microsoft Entra ID, resource groups, subscriptions, and the shared responsibility model. It highlights principles and trade-offs to help you make better decisions and avoid costly mistakes.</p>]]></description></item><item><title>Fundamentals of AWS</title><link>https://jeffbailey.us/blog/2026/03/06/fundamentals-of-aws/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/03/06/fundamentals-of-aws/</guid><pubDate>Fri, 06 Mar 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Fundamentals</category><category>Cloud</category><description><![CDATA[<h2 id="introduction">Introduction</h2>
<p>Why does moving to the cloud feel like learning a second operating system? AWS is more than &ldquo;someone else&rsquo;s computers.&rdquo; It&rsquo;s a global system of regions, services, and a security model that rewards understanding core ideas.</p>
<p>This article explains why AWS is structured as it is: regions, Availability Zones, identity, and the shared responsibility model. It focuses on principles and trade-offs to help you make better decisions and avoid costly mistakes.</p>]]></description></item><item><title>Things That Are No Longer True With AI</title><link>https://jeffbailey.us/blog/2026/03/01/things-that-are-no-longer-true-with-ai/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/03/01/things-that-are-no-longer-true-with-ai/</guid><pubDate>Sun, 01 Mar 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Think</category><category>AI</category><category>Writing</category><description><![CDATA[<p>I&rsquo;m watching Monarch: Legacy of Monsters on Apple TV, and I got to thinking about things that are no longer true with AI. The jury is still out on whether it&rsquo;s a good show, but I do enjoy Kurt Russell, and his son isn&rsquo;t a half-bad actor.</p>
<p>Like other technologies, generative AI (GenAI) has displaced the old ways. Doing math by hand or with an abacus was the way until calculators came along, and then computers. Who uses a physical calculator anymore? And, why didn&rsquo;t they set Monarch in the 1950s? What a missed opportunity.</p>]]></description></item></channel></rss>