<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Jonathan Haas | Haas on SaaS</title>
<subtitle>Insights on AI, engineering, and building products that scale</subtitle>
<link href="https://haasonsaas.com/atom.xml" rel="self" type="application/atom+xml"/>
<link href="https://haasonsaas.com" rel="alternate" type="text/html"/>
<id>https://haasonsaas.com</id>
<updated>2026-05-09T18:48:16.565Z</updated>
<entry>
<title><![CDATA[The Real Work of Orchestrating AI Coding Agents]]></title>
<link href="https://haasonsaas.com/blog/orchestrating-ai-coding-agents" rel="alternate" type="text/html" />
<id>https://haasonsaas.com/blog/orchestrating-ai-coding-agents</id>
<published>2026-03-26T00:00:00.000Z</published>
<updated>2026-03-26T00:00:00.000Z</updated>
<summary><![CDATA[Three concurrent coding agents taught me the actual bottleneck: not prompting, but assignment, evidence, review, and release control.]]></summary>
<author>
  <name>Jonathan Haas</name>
</author>
<category term="ai" />
<category term="ai-agents" />
<category term="developer-tools" />
<category term="engineering-management" />
<category term="automation" />
<category term="claude" />
<category term="codex" />
</entry>

<entry>
<title><![CDATA[Building Kestrel: A Context-Aware AI Desktop Assistant in One Session]]></title>
<link href="https://haasonsaas.com/blog/building-kestrel" rel="alternate" type="text/html" />
<id>https://haasonsaas.com/blog/building-kestrel</id>
<published>2026-03-24T00:00:00.000Z</published>
<updated>2026-03-24T00:00:00.000Z</updated>
<summary><![CDATA[How I built a full LittleBird clone with screen context reading, meeting recording, arena mode, and MCP tool support — from scratch to packaged .app in a single coding session.]]></summary>
<author>
  <name>Jonathan Haas</name>
</author>
<category term="ai" />
<category term="electron" />
<category term="macos" />
<category term="developer-experience" />
<category term="building-in-public" />
</entry>

<entry>
<title><![CDATA[DiffScope: What Happens When You Give a Code Review Agent Real Context]]></title>
<link href="https://haasonsaas.com/blog/diffscope-ai-code-review" rel="alternate" type="text/html" />
<id>https://haasonsaas.com/blog/diffscope-ai-code-review</id>
<published>2026-03-14T00:00:00.000Z</published>
<updated>2026-03-14T00:00:00.000Z</updated>
<summary><![CDATA[Most AI review tools see a diff. DiffScope sees the diff, the callers, the type hierarchy, the team history, and knows when to shut up. Here is how.]]></summary>
<author>
  <name>Jonathan Haas</name>
</author>
<category term="diffscope" />
<category term="code-review" />
<category term="developer-tools" />
<category term="agents" />
</entry>

<entry>
<title><![CDATA[The 10-Minute AI POC That Becomes a 10-Month Nightmare]]></title>
<link href="https://haasonsaas.com/blog/ai-poc-nightmare" rel="alternate" type="text/html" />
<id>https://haasonsaas.com/blog/ai-poc-nightmare</id>
<published>2025-09-12T00:00:00.000Z</published>
<updated>2025-09-12T00:00:00.000Z</updated>
<summary><![CDATA[Five lines of Python and an API key produce a working demo. The gap between that demo and a production system contains failure modes the prototype...]]></summary>
<author>
  <name>Jonathan Haas</name>
</author>
<category term="ai" />
<category term="technical-debt" />
<category term="poc" />
<category term="production-systems" />
<category term="engineering" />
<category term="cautionary-tales" />
<category term="contrarian" />
</entry>

<entry>
<title><![CDATA[Why Your AI Strategy is Actually a Spreadsheet Strategy]]></title>
<link href="https://haasonsaas.com/blog/spreadsheet-strategy" rel="alternate" type="text/html" />
<id>https://haasonsaas.com/blog/spreadsheet-strategy</id>
<published>2025-09-10T00:00:00.000Z</published>
<updated>2025-09-10T00:00:00.000Z</updated>
<summary><![CDATA[Most enterprise AI transformations are solving problems that spreadsheets handle at 1/50th the cost. The misalignment is driven by career incentives,...]]></summary>
<author>
  <name>Jonathan Haas</name>
</author>
<category term="ai" />
<category term="business-strategy" />
<category term="spreadsheets" />
<category term="overengineering" />
<category term="technical-debt" />
<category term="contrarian" />
<category term="enterprise" />
</entry>

<entry>
<title><![CDATA[The AI Agent Gold Rush: Why Everyone's Building Picks and Shovels]]></title>
<link href="https://haasonsaas.com/blog/ai-agent-gold-rush" rel="alternate" type="text/html" />
<id>https://haasonsaas.com/blog/ai-agent-gold-rush</id>
<published>2025-09-08T00:00:00.000Z</published>
<updated>2025-09-08T00:00:00.000Z</updated>
<summary><![CDATA[Most AI agent infrastructure is premature. The agents themselves barely work. The industry is selling Formula 1 equipment to people still learning to...]]></summary>
<author>
  <name>Jonathan Haas</name>
</author>
<category term="ai" />
<category term="ai-agents" />
<category term="multi-agent-systems" />
<category term="venture-capital" />
<category term="infrastructure" />
<category term="business-strategy" />
<category term="contrarian" />
</entry>

<entry>
<title><![CDATA[From Consumer NUC to Production-Grade Homelab: My Journey with Proxmox and Infrastructure as Code]]></title>
<link href="https://haasonsaas.com/blog/homelab-proxmox-iac" rel="alternate" type="text/html" />
<id>https://haasonsaas.com/blog/homelab-proxmox-iac</id>
<published>2025-07-18T00:00:00.000Z</published>
<updated>2025-07-18T00:00:00.000Z</updated>
<summary><![CDATA[How I transformed two ASUS NUC 15 Pro+ machines into an enterprise-grade homelab using Proxmox, Terraform, Ansible, and 100% Infrastructure as Code]]></summary>
<author>
  <name>Jonathan Haas</name>
</author>
<category term="homelab" />
<category term="proxmox" />
<category term="infrastructure-as-code" />
<category term="devops" />
<category term="automation" />
</entry>

<entry>
<title><![CDATA[Building a Developer Environment That Actually Works: My Dotfiles Journey]]></title>
<link href="https://haasonsaas.com/blog/dotfiles-journey" rel="alternate" type="text/html" />
<id>https://haasonsaas.com/blog/dotfiles-journey</id>
<published>2025-07-11T00:00:00.000Z</published>
<updated>2025-07-11T00:00:00.000Z</updated>
<summary><![CDATA[Most developer environments are optimized for keystrokes. The actual bottleneck is context transfer between you and your AI tools.]]></summary>
<author>
  <name>Jonathan Haas</name>
</author>
<category term="developer-experience" />
<category term="dotfiles" />
<category term="productivity" />
<category term="automation" />
</entry>

<entry>
<title><![CDATA[The CLI Renaissance: How AI is Driving the Command Line Revolution]]></title>
<link href="https://haasonsaas.com/blog/cli-renaissance" rel="alternate" type="text/html" />
<id>https://haasonsaas.com/blog/cli-renaissance</id>
<published>2025-07-11T00:00:00.000Z</published>
<updated>2025-07-11T00:00:00.000Z</updated>
<summary><![CDATA[AI coding assistants output shell commands, not GUI instructions. That single fact is reversing a decade of developer tooling trends.]]></summary>
<author>
  <name>Jonathan Haas</name>
</author>
<category term="cli" />
<category term="developer-experience" />
<category term="ai" />
<category term="productivity" />
</entry>

<entry>
<title><![CDATA[Async Code Gen Turns Engineers Into Operators]]></title>
<link href="https://haasonsaas.com/blog/async-code-gen" rel="alternate" type="text/html" />
<id>https://haasonsaas.com/blog/async-code-gen</id>
<published>2025-07-08T00:00:00.000Z</published>
<updated>2025-07-08T00:00:00.000Z</updated>
<summary><![CDATA[Async code generation is delegated execution. The new work is task design, review, evidence, and deciding what the system is allowed to ship.]]></summary>
<author>
  <name>Jonathan Haas</name>
</author>
<category term="ai" />
<category term="software-development" />
<category term="automation" />
<category term="future-of-work" />
<category term="developer-experience" />
</entry>

<entry>
<title><![CDATA[Useful AI Code Review Needs Product Context]]></title>
<link href="https://haasonsaas.com/blog/ai-code-review" rel="alternate" type="text/html" />
<id>https://haasonsaas.com/blog/ai-code-review</id>
<published>2025-07-08T00:00:00.000Z</published>
<updated>2025-07-08T00:00:00.000Z</updated>
<summary><![CDATA[AI review only becomes valuable when it can reason about behavior, blast radius, user impact, and the evidence required to trust a change.]]></summary>
<author>
  <name>Jonathan Haas</name>
</author>
<category term="ai" />
<category term="code-review" />
<category term="developer-experience" />
<category term="automation" />
<category term="team-dynamics" />
</entry>

<entry>
<title><![CDATA[The Death of the 10x Developer: Why AI Multiplication Beats Individual Optimization]]></title>
<link href="https://haasonsaas.com/blog/death-of-10x-developer" rel="alternate" type="text/html" />
<id>https://haasonsaas.com/blog/death-of-10x-developer</id>
<published>2025-07-08T00:00:00.000Z</published>
<updated>2025-07-08T00:00:00.000Z</updated>
<summary><![CDATA[AI commoditized the pattern recognition and architectural intuition that made 10x developers valuable. The bottleneck moved from individual output to...]]></summary>
<author>
  <name>Jonathan Haas</name>
</author>
<category term="ai" />
<category term="automation" />
<category term="developer-experience" />
<category term="future-of-work" />
<category term="team-dynamics" />
</entry>

<entry>
<title><![CDATA[AI Evals Are the Operating System, Not the Test Suite]]></title>
<link href="https://haasonsaas.com/blog/eval-infrastructure" rel="alternate" type="text/html" />
<id>https://haasonsaas.com/blog/eval-infrastructure</id>
<published>2025-07-07T00:00:00.000Z</published>
<updated>2025-07-07T00:00:00.000Z</updated>
<summary><![CDATA[Reliable AI products need evals that live in the workflow: production signals, failure clusters, evidence trails, and regression gates.]]></summary>
<author>
  <name>Jonathan Haas</name>
</author>
<category term="ai-evaluation" />
<category term="ai-systems" />
<category term="evals" />
<category term="infrastructure" />
<category term="llm-ops" />
<category term="testing" />
</entry>

<entry>
<title><![CDATA[Feature Flags for Security: Decouple Deployment from Risk]]></title>
<link href="https://haasonsaas.com/blog/feature-flags-security" rel="alternate" type="text/html" />
<id>https://haasonsaas.com/blog/feature-flags-security</id>
<published>2025-06-28T00:00:00.000Z</published>
<updated>2025-06-28T00:00:00.000Z</updated>
<summary><![CDATA[Security teams conflate deployment with activation. Feature flags split them apart, turning security from a gate into a dial.]]></summary>
<author>
  <name>Jonathan Haas</name>
</author>
<category term="security" />
<category term="feature-flags" />
<category term="deployment" />
<category term="devops" />
<category term="risk-management" />
</entry>

<entry>
<title><![CDATA[Testing at Light Speed: How QA Adapts to AI Velocity]]></title>
<link href="https://haasonsaas.com/blog/qa-at-ai-speed" rel="alternate" type="text/html" />
<id>https://haasonsaas.com/blog/qa-at-ai-speed</id>
<published>2025-06-28T00:00:00.000Z</published>
<updated>2025-06-28T00:00:00.000Z</updated>
<summary><![CDATA[AI-generated code produces different bugs than human-written code. QA built for syntax checking is testing for the wrong failures.]]></summary>
<author>
  <name>Jonathan Haas</name>
</author>
<category term="qa" />
<category term="testing" />
<category term="velocity" />
<category term="ai" />
<category term="quality-assurance" />
</entry>

<entry>
<title><![CDATA[Forget Perfect Data: Building a Usable Voice Profile Extractor]]></title>
<link href="https://haasonsaas.com/blog/voice-profile-extractor" rel="alternate" type="text/html" />
<id>https://haasonsaas.com/blog/voice-profile-extractor</id>
<published>2025-06-26T00:00:00.000Z</published>
<updated>2025-06-26T00:00:00.000Z</updated>
<summary><![CDATA[I shipped a voice profile extractor at 60% accuracy. Simple pattern matching outperformed ML for writing voice replication.]]></summary>
<author>
  <name>Jonathan Haas</name>
</author>
<category term="ai" />
<category term="voice-ai" />
<category term="personality-replication" />
<category term="data-science" />
</entry>

<entry>
<title><![CDATA[When Claude Hits Its Limits: Building an AI-to-AI Escalation System]]></title>
<link href="https://haasonsaas.com/blog/ai-escalation-system" rel="alternate" type="text/html" />
<id>https://haasonsaas.com/blog/ai-escalation-system</id>
<published>2025-06-25T00:00:00.000Z</published>
<updated>2025-06-25T00:00:00.000Z</updated>
<summary><![CDATA[Different LLMs have different strengths. Routing tasks to the right model -- like heterogeneous compute -- turns out to be more valuable than using one ...]]></summary>
<author>
  <name>Jonathan Haas</name>
</author>
<category term="ai" />
<category term="mcp" />
<category term="claude" />
<category term="gemini" />
<category term="debugging" />
</entry>

<entry>
<title><![CDATA[Scaling the Me Component: How I Built an AI That Thinks Like Me]]></title>
<link href="https://haasonsaas.com/blog/personalized-ai" rel="alternate" type="text/html" />
<id>https://haasonsaas.com/blog/personalized-ai</id>
<published>2025-06-25T00:00:00.000Z</published>
<updated>2025-06-25T00:00:00.000Z</updated>
<summary><![CDATA[I built a voice replication system by extracting patterns from my blog corpus. Here's what it captures, what it misses, and what that reveals about...]]></summary>
<author>
  <name>Jonathan Haas</name>
</author>
<category term="ai" />
<category term="voice-replication" />
<category term="personalization" />
<category term="meta" />
<category term="ai-agents" />
</entry>

<entry>
<title><![CDATA[Shared Context Is the Real Multi-Agent Primitive]]></title>
<link href="https://haasonsaas.com/blog/two-minds-in-the-machine" rel="alternate" type="text/html" />
<id>https://haasonsaas.com/blog/two-minds-in-the-machine</id>
<published>2025-06-25T00:00:00.000Z</published>
<updated>2025-06-25T00:00:00.000Z</updated>
<summary><![CDATA[Multiple agents do not need a shared brain. They need explicit context, durable memory, and a record of why the project works the way it does.]]></summary>
<author>
  <name>Jonathan Haas</name>
</author>
<category term="ai" />
<category term="software-development" />
<category term="collaboration" />
</entry>

<entry>
<title><![CDATA[What Actually Failed Building a Multi-AI Content System]]></title>
<link href="https://haasonsaas.com/blog/multi-ai-content-orchestration-lessons" rel="alternate" type="text/html" />
<id>https://haasonsaas.com/blog/multi-ai-content-orchestration-lessons</id>
<published>2025-06-25T00:00:00.000Z</published>
<updated>2025-06-25T00:00:00.000Z</updated>
<summary><![CDATA[I built a multi-AI content pipeline combining Gemini and Claude. The failures taught me more than the architecture.]]></summary>
<author>
  <name>Jonathan Haas</name>
</author>
<category term="ai" />
<category term="ai-agents" />
<category term="content-orchestration" />
<category term="developer-experience" />
<category term="multi-agent-systems" />
</entry>
</feed>