<?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, 08 Apr 2026 00:00:00 +0000</lastBuildDate><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><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 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><item><title>How Do I Use DNF?</title><link>https://jeffbailey.us/blog/2026/02/28/how-do-i-use-dnf/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/02/28/how-do-i-use-dnf/</guid><pubDate>Sat, 28 Feb 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>How-to</category><category>Linux</category><category>Package Management</category><description><![CDATA[<p>I use DNF (Dandified YUM) whenever I install or update software on Fedora, RHEL, Rocky Linux, or another RPM-based system. This how-to gives you a single, clear path to install, update, remove, and search packages so you can get the task done and verify it.</p>
<h2 id="goal">Goal</h2>
<p>By the end you will have used DNF to install a package, update your system, remove a package, and search for packages. You will know how to confirm each step and fix the most common failures.</p>]]></description></item><item><title>How Do I Use APT?</title><link>https://jeffbailey.us/blog/2026/02/28/how-do-i-use-apt/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/02/28/how-do-i-use-apt/</guid><pubDate>Sat, 28 Feb 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>How-to</category><category>Linux</category><category>Package Management</category><description><![CDATA[<p>I use the Advanced Package Tool (APT) for installing, updating, removing, and searching software on Debian, Ubuntu, or derivatives. This guide provides a clear way to complete these tasks and verify them.</p>
<h2 id="goal">Goal</h2>
<p>By the end, you&rsquo;ll have used APT to install, update, remove, and search for packages, knowing how to confirm each step and fix common failures.</p>
<p><strong>Success criteria:</strong> You can run <code>apt install</code>, <code>apt update</code>, <code>apt upgrade</code>, <code>apt remove</code>, and <code>apt search</code> from the command line and interpret the output. You can confirm a package is installed and working.</p>]]></description></item><item><title>A Software Fundamentals Glossary</title><link>https://jeffbailey.us/blog/2026/02/27/a-software-fundamentals-glossary/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/02/27/a-software-fundamentals-glossary/</guid><pubDate>Fri, 27 Feb 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Glossary</category><category>Software Development</category><category>Fundamentals</category><description><![CDATA[<p>A glossary of fundamental software development terms.</p>
<h2 id="glossary">Glossary</h2>
<h2 id="agile-software-development">Agile Software Development</h2><p><strong>Agile Manifesto:</strong> A 2001 statement of values and principles guiding agile software development by developers.</p><p><strong>Backlog:</strong> A prioritized list of work items, features, or user stories for the team to complete.</p><p><strong>Burndown Chart:</strong> A graph tracking remaining work over time to monitor progress in an iteration or sprint.</p><p><strong>Continuous Integration (CI):</strong> The practice of integrating code changes often, usually several times daily, with automated testing to identify issues early.</p>]]></description></item><item><title>Fundamentals of Maintainability</title><link>https://jeffbailey.us/blog/2026/02/22/fundamentals-of-maintainability/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/02/22/fundamentals-of-maintainability/</guid><pubDate>Sun, 22 Feb 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Fundamentals</category><category>Software Development</category><category>Code Quality</category><description><![CDATA[<h2 id="introduction">Introduction</h2>
<p>Why do some codebases feel easy to change while others turn every fix into a weekend project? The difference is maintainability.</p>
<p><strong>Maintainability</strong> is how easily you can modify software to correct faults, improve performance, or adapt to new requirements. The <a href="https://www.iso.org/standard/35733.html">International Organization for Standardization (ISO)</a> defines it as a core quality attribute in ISO/IEC 25010. Maintainable code costs less to change, carries lower risk when refactoring, and lets new team members contribute without weeks of orientation.</p>]]></description></item><item><title>Fundamental Skills</title><link>https://jeffbailey.us/blog/2026/02/21/fundamental-skills/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/02/21/fundamental-skills/</guid><pubDate>Sat, 21 Feb 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Fundamentals</category><category>Software Development</category><category>Code Review</category><description><![CDATA[<h2 id="introduction">Introduction</h2>
<p>I write extensively on <a href="https://jeffbailey.us/blog/2025/10/30/fundamentals-of-fundamentals/">software fundamentals</a>, covering architecture, security, reliability, testing, performance, accessibility, and process. The articles are lengthy, detailed, and checklist-rich.</p>
<p>I kept encountering the same issue: knowing fundamentals and applying them in code review are different. I&rsquo;d review PRs, catch a timeout or a query, but forget accessibility or circuit breaker.</p>
<p>Human memory is unreliable. Checklists help, but reviewing 200+ items manually isn&rsquo;t practical.</p>
<p>I built skills that encode fundamentals into repeatable, automated fitness reviews. This article explains what they are, why they work, and how they fit together.</p>]]></description></item><item><title>What Is Just-in-Time Catching Test Generation?</title><link>https://jeffbailey.us/blog/2026/02/14/what-is-just-in-time-catching-test-generation/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/02/14/what-is-just-in-time-catching-test-generation/</guid><pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>What</category><category>Software Engineering</category><category>Testing</category><category>AI</category><description><![CDATA[<h2 id="introduction">Introduction</h2>
<p>When I submit a pull request, I rely on <a href="https://jeffbailey.us/blog/2025/11/30/fundamentals-of-software-testing/">existing tests</a>, written months or years ago, which run with each change. But what if tests could be automatically generated for each diff, tailored to catch bugs before code lands? That&rsquo;s the premise of Just-in-Time (JIT) Catching Test Generation.</p>
<p>This approach turns traditional testing on its head. Instead of maintaining a static test suite that you update whenever behavior changes, catching tests are generated on the fly by large language models (LLMs). They are meant to fail when they find a bug. They do not live in your codebase. They exist only to catch regressions in the specific code change under review.</p>]]></description></item><item><title>Fundamentals of Graph Databases</title><link>https://jeffbailey.us/blog/2026/02/14/fundamentals-of-graph-databases/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/02/14/fundamentals-of-graph-databases/</guid><pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Fundamentals</category><category>Databases</category><category>Data Architecture</category><description><![CDATA[<h2 id="introduction">Introduction</h2>
<p>Why do some queries that feel simple in your head turn into multi-table joins, subqueries, and endless recursion in SQL?</p>
<p>Years ago, I modeled a permission system where &ldquo;User A has role X in project Y&rdquo; became a maze of join tables. I envisioned a graph, but the implementation struggled with the database. A graph database would have fit my thinking better.</p>
<p>When your data is about relationships (who knows whom, what depends on what, how things connect), a relational database makes you work against its grain. Graph databases emerged in the 2000s precisely because of this friction, as social networks, recommendation engines, and fraud detection systems pushed relationship queries far beyond what SQL was designed for. Graph databases flip that friction around. They make relationships first-class: stored explicitly, queried directly.</p>]]></description></item><item><title>Software Development Frontier 1: Augmented Workflows, Quality at Speed, and Bot Spam</title><link>https://jeffbailey.us/blog/2026/02/08/software-development-frontier-1-augmented-workflows-quality-at-speed-and-bot-spam/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/02/08/software-development-frontier-1-augmented-workflows-quality-at-speed-and-bot-spam/</guid><pubDate>Sun, 08 Feb 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Software Development</category><category>Industry</category><description><![CDATA[<p>Where you put your energy in the next few years will matter more than it used to. I&rsquo;m betting on three pressure points: who pays for augmented workflows, how to keep quality and recovery in line with ship speed, and how to stop bots from drowning the rest of us. Solve these well, and you stay relevant.</p>
<h2 id="core-idea-three-frontiers">Core Idea: Three Frontiers</h2>
<p><strong>Augmented workflow optimization.</strong> Developers are generating more code than ever with AI-assisted tools. The value is real, but the economics are not. AnySphere, Anthropic, Microsoft, Google, and Amazon Web Services are all subsidizing the real cost of augmented workflows to varying degrees. They need developers inside their ecosystems, so they absorb the cost. Using <a href="https://jeffbailey.us/blog/2026/01/25/a-list-of-open-source-llms/">local open-source LLMs</a> for part of your workflow is one way to cut costs and rely less on those subsidies.</p>]]></description></item><item><title>What Is SBOM?</title><link>https://jeffbailey.us/blog/2026/02/06/what-is-sbom/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/02/06/what-is-sbom/</guid><pubDate>Fri, 06 Feb 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>What</category><category>Open Source</category><category>Security</category><category>Compliance</category><category>Software Supply Chain</category><description><![CDATA[<h2 id="introduction">Introduction</h2>
<p>When I download software, I rarely know what&rsquo;s actually inside it. Is it just the code the vendor wrote, or does it include hundreds of open source libraries? If a vulnerability appears in one of those libraries, how would I know if I&rsquo;m affected? These questions become critical when managing software across complex supply chains.</p>
<p>A Software Bill of Materials (SBOM) answers these questions. An SBOM is essentially an inventory list that documents all the components in a software product. Just as a physical product has a bill of materials listing its parts, an SBOM lists the software components, their versions, licenses, and relationships.</p>]]></description></item><item><title>What Is OpenSSF?</title><link>https://jeffbailey.us/blog/2026/02/06/what-is-openssf/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/02/06/what-is-openssf/</guid><pubDate>Fri, 06 Feb 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>What</category><category>Open Source</category><category>Security</category><category>Software Supply Chain</category><description><![CDATA[<h2 id="introduction">Introduction</h2>
<p>Most software relies on open source components, with your app potentially using hundreds of libraries, frameworks, and tools maintained by different teams with varying security practices. A vulnerability in one can impact thousands of applications.</p>
<p>The Open Source Security Foundation (OpenSSF), hosted by the Linux Foundation, aims to improve open source security with tools, standards, and collaboration. It unites organizations, developers, and security experts without replacing project efforts.</p>
<p>This article explains what OpenSSF is, why it exists, and how it helps secure the open source ecosystem that modern software depends on.</p>]]></description></item><item><title>What Is an OSPO?</title><link>https://jeffbailey.us/blog/2026/02/06/what-is-an-ospo/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/02/06/what-is-an-ospo/</guid><pubDate>Fri, 06 Feb 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>What</category><category>Open Source</category><category>Strategy</category><category>Compliance</category><description><![CDATA[<h2 id="why-do-some-companies-have-a-whole-team-just-for-open-source">Why Do Some Companies Have a Whole Team Just for Open Source?</h2>
<p>Most organizations depend on open source software but never formalize how they use it. Developers pull in libraries without a consistent view of licenses. Legal finds compliance gaps late. Security can&rsquo;t see the full dependency picture. Contributing back is ad hoc. An Open Source Program Office (OSPO) is the function that steps in to coordinate all of that: strategy, policy, compliance, and community engagement. It doesn&rsquo;t replace developers or teams; it provides the structure and expertise so the organization can use open source effectively and responsibly.</p>]]></description></item><item><title>How Do I Use GitHub Private Mirrors?</title><link>https://jeffbailey.us/blog/2026/02/04/how-do-i-use-github-private-mirrors/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/02/04/how-do-i-use-github-private-mirrors/</guid><pubDate>Wed, 04 Feb 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>How To</category><category>Open Source</category><category>GitHub</category><category>DevOps</category><description><![CDATA[<p>Why can&rsquo;t your organization fork an open source repo and send a pull request? Often, policy prevents it due to credential leaks, IP, PII, and compliance reviews. GitHub Private Mirrors allow private work while exposing only approved changes publicly. This post explains what GitHub Private Mirrors are, why they exist, how they work, and their relation to your org, upstream, and tools like the <a href="https://github.com/github-community-projects/private-mirrors">GitHub Private Mirrors App</a>.</p>
<h2 id="what-are-github-private-mirrors">What Are GitHub Private Mirrors?</h2>
<p>A private mirror is a private copy of a public repository within your organization. You develop and review there; when ready, push approved work to a public fork in your org, then open a pull request to the upstream project. The mirror remains private, with only synced content leaving your control.</p>]]></description></item><item><title>What Is the Exponential Backoff Pattern?</title><link>https://jeffbailey.us/blog/2026/02/01/what-is-the-exponential-backoff-pattern/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/02/01/what-is-the-exponential-backoff-pattern/</guid><pubDate>Sun, 01 Feb 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>What</category><category>Reliability</category><category>Distributed Systems</category><description><![CDATA[<h2 id="introduction">Introduction</h2>
<p>Retrying a remote call immediately when it fails can worsen the situation. Overloaded dependencies may be overwhelmed further, prolonging outages.</p>
<p>Exponential backoff increases wait times between retries (e.g., 1, 2, 4 seconds) to give struggling services room to recover, rather than piling on.</p>
<p>By the end of this article, you will:</p>
<ul>
<li>Understand what exponential backoff is and why it exists.</li>
<li>See how it works conceptually and fits with timeouts and <a href="https://jeffbailey.us/blog/2025/12/17/what-is-jitter/">jitter</a>.</li>
<li>Correct the misconception that backoff alone avoids overload.</li>
</ul>
<p><strong>What this is (and isn&rsquo;t):</strong> This article explains why exponential backoff exists, how it works, and how it fits with timeouts and jitter. It does not cover SDK retry defaults, circuit breaker implementation, or load testing.</p>]]></description></item><item><title>What Are My Principles?</title><link>https://jeffbailey.us/what-are-my-principles/</link><guid isPermaLink="true">https://jeffbailey.us/what-are-my-principles/</guid><pubDate>Sun, 01 Feb 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Productivity</category><category>Psychology</category><category>Principles</category><description><![CDATA[<p>Guided by principles, I make informed decisions, prioritize my time, and focus on what matters most as a father, husband, leader, and principal software engineer.</p>
<p>These principles align with my <a href="../what-are-my-professional-principles.index.md">professional principles</a> and <a href="../a-leadership-philosophy/.index.md">leadership philosophy</a>, forming a comprehensive framework for effective decision-making and growth.</p>
<h2 id="mental-and-emotional-state">Mental and Emotional State</h2>
<p>🤔 <strong>Cultivate Comprehension</strong> — Understand and teach my experiences.<br>
🌽 <strong>Embrace Abundance</strong> — Create what matters.<br>
❤️‍🔥 <strong>Nurture Love</strong> — Nurture deep caring in my relationships.<br>
💪 <strong>Practice Conscientiousness</strong> — Execute my tasks with the utmost care.<br>
🧘 <strong>Promote Mindfulness</strong> — Focus on being aware of my current state and surroundings.</p>]]></description></item><item><title>Logical Fallacies in Software Development</title><link>https://jeffbailey.us/blog/2026/02/01/logical-fallacies-in-software-development/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/02/01/logical-fallacies-in-software-development/</guid><pubDate>Sun, 01 Feb 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Fundamentals</category><category>Software Engineering</category><description><![CDATA[<h2 id="introduction">Introduction</h2>
<p>Why do teams invest in failing projects and choose poor options when better ones exist? Why do they trust the loudest voice over evidence?</p>
<p>Software development decisions happen under uncertainty, incomplete info, and time pressure. The brain relies on shortcuts for quick decisions, causing errors that compound in team discussions and architecture choices, leading to avoidable failures.</p>
<p>Software development amplifies errors from long-term decisions, numerous stakeholders, and complex systems with hard-to-trace cause and effect. As systems and teams became more complex and distributed, errors caught in small teams began causing bigger problems.</p>]]></description></item><item><title>Fundamentals of Timeouts</title><link>https://jeffbailey.us/blog/2026/02/01/fundamentals-of-timeouts/</link><guid isPermaLink="true">https://jeffbailey.us/blog/2026/02/01/fundamentals-of-timeouts/</guid><pubDate>Sun, 01 Feb 2026 00:00:00 +0000</pubDate><dc:creator>Jeff Bailey</dc:creator><category>Fundamentals</category><category>Distributed Systems</category><category>Reliability</category><description><![CDATA[<h2 id="introduction">Introduction</h2>
<!-- markdownlint-disable MD052 -->
<!-- Link reference definitions (used reference-style in body and References). -->
<p>Why do some services hang until clients give up, while others fail fast and recover?</p>
<p>Timeouts limit how long an operation can run before it&rsquo;s considered failed, preventing indefinite blocking of resources due to unreliable networks and dependencies, which could hide real failures.</p>
<p>When a payment call hangs for 60 seconds, a database read blocks a request, or a slow dependency exhausts the connection pool, it&rsquo;s a timeout problem. I see timeouts as the essential protection at every boundary.</p>]]></description></item></channel></rss>