<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Dustin Boston</title>
    <link>https://dustin.boston</link>
    <description>A software engineer's notebook about modern web development.</description>
    <atom:link href="https://dustin.boston/feed" rel="self" type="application/rss+xml" />
    
    <item>
      <title><![CDATA[You Can Run WordPress in the Browser]]></title>
      <link>https://dustin.boston/blog/you-can-run-wordpress-in-the-browser</link>
      <guid isPermaLink="true">https://dustin.boston/blog/you-can-run-wordpress-in-the-browser</guid>
      <pubDate>Thu, 12 Mar 2026 01:21:00 GMT</pubDate>
      <description><![CDATA[You can run WordPress in the browser with the WordPress Playground (using Web Assembly). That's pretty impressive!...]]></description>
      <content:encoded><![CDATA[<p>It's wild that you can <a target="_blank" rel="noopener noreferrer nofollow" href="https://wordpress.org/playground/">run WordPress in the browser</a>.</p><p>I have been making these little single page, local-first, PWA's a lot lately. For example, I created a habit tracker that is integrated with a calendar. Now I don't know why you'd want to run WordPress as a PWA - I'd personally go with TiddlyWiki - but it's a cool idea.</p><p>Anyway, they didn't rebuild WordPress for this use-case. Instead, they compiled the PHP interpreter to Web Assembly. Then WordPress is bundled and loaded into an in-memory virtual filesystem. Finally, WordPress is executed as normal using PHP.</p><p>You can <a target="_blank" rel="noopener noreferrer nofollow" href="https://wasmer.io/posts/how-webassembly-is-powering-wordpress">read more about the architecture here</a>. <br />And <a target="_blank" rel="noopener noreferrer nofollow" href="https://ma.tt/2026/03/wordpress-everywhere/">here's the "Press Release"</a>.</p>]]></content:encoded>
      <author><name>Dustin Boston</name></author>
    </item>
    <item>
      <title><![CDATA[Durable business patterns]]></title>
      <link>https://dustin.boston/blog/durable-business-patterns</link>
      <guid isPermaLink="true">https://dustin.boston/blog/durable-business-patterns</guid>
      <pubDate>Thu, 05 Mar 2026 06:52:00 GMT</pubDate>
      <description><![CDATA[In an AI‑accelerated world where anyone can clone a product in days, the only startups that survive are the ones that accumulate advantages that compound over time....]]></description>
      <content:encoded><![CDATA[<p>In an AI‑accelerated world where anyone can clone a product in days, the only startups that survive are the ones that accumulate advantages that compound over time. Specifically, advantages that cannot be copied with code, capital, or a weekend hackathon.</p><p><a target="_blank" rel="noopener noreferrer nofollow" href="https://x.com/sidrmsh/status/2029339145114374256">Sid Ramesh argues</a> that true defensibility is not a moat you build at the end - it’s a direction you compound in. The seven compounding advantages:</p><ol><li><p>Proprietary, compounding data, that improves the product with every interaction and cannot be shortcut. For example, Spotify’s decade of listening behavior.</p></li><li><p>Infrastructure‑level trust including reliability, uptime, auditability, and deep integration into workflows. Stripe isn’t just a tool - it’s plumbing. Switching costs come from risk, not fees.</p></li><li><p>Permission moats (regulatory, compliance, licenses) are slow to build, impossible to copy quickly. Coinbase’s years of licensing became a structural advantage once regulators cleared them.</p></li><li><p>Distribution you can’t copy with code, like being the default, the marketplace integration, or the ecosystem hub. Hyperliquid became the coordination layer for decentralized derivatives.</p></li><li><p>Community and brand that exist beyond the product. Notion’s ecosystem of templates, creators, and workflows is uncopyable. You can clone the editor, not the culture.</p></li><li><p>Capital and liquidity depth like Aave’s safety module, loss history, and liquidity pool create a moat no fork can replicate. Liquidity begets liquidity.</p></li><li><p>Physical infrastructure such as warehouses, sensors, manufacturing, logistics, charging networks - atoms don’t compress like bits.</p></li></ol><p>So, the real question is "How do I build something that gets harder to kill the longer it exists?"<strong> </strong>Most founders chase growth, demos, and pitch decks instead of building something that would materially hurt users if it disappeared.</p><p>Durability starts with obsession over a specific user, not a market size slide.</p>]]></content:encoded>
      <author><name>Dustin Boston</name></author>
    </item>
    <item>
      <title><![CDATA[Four Ways to Use the Popover API - From Declarative to Imperative]]></title>
      <link>https://dustin.boston/blog/four-ways-to-use-the-popover-api-from-declarative-to-imperative</link>
      <guid isPermaLink="true">https://dustin.boston/blog/four-ways-to-use-the-popover-api-from-declarative-to-imperative</guid>
      <pubDate>Mon, 02 Mar 2026 00:45:00 GMT</pubDate>
      <description><![CDATA[I've been working on a native HTML+CSS pattern library, covering about 60 different components. One thing I noticed as I worked my way through the list is how often the Popover API came up. Specifically, in popovers, tooltips, hover cards, and context menus....]]></description>
      <content:encoded><![CDATA[<p>I've been working on a native HTML+CSS pattern library, covering about 60 different components. One thing I noticed as I worked my way through the list is how often the Popover API came up. Specifically, in popovers, tooltips, hover cards, and context menus.</p><p>The Popover API is one of the most versatile additions to the web platform in recent years. A single attribute - <code>popover</code> - gives any element top-layer promotion, light-dismiss behavior, and accessible focus management for free. But the API is not one-size-fits-all. Depending on the interaction pattern, you can lean entirely on HTML attributes, mix in a little JavaScript, or take full manual control.</p><p>This post walks through four real components that each use the Popover API differently, arranged from the most declarative to the most imperative.</p><h3><strong>1. Popover</strong></h3><p>The simplest use of the Popover API requires zero JavaScript. A <code>popovertarget</code> attribute on the button points at the popover's <code>id</code>, and the browser wires up all the toggle logic automatically.</p><pre><code class="language-html">&lt;button type="button" popovertarget="p1"&gt;Open popover&lt;/button&gt;
&lt;div id="p1" popover&gt;
  &lt;h4&gt;Dimensions&lt;/h4&gt;
  &lt;p&gt;Set the dimensions for the layer.&lt;/p&gt;
&lt;/div&gt;</code></pre><pre><code class="language-css">[popover] {
  inset: unset;
}
</code></pre><p>The bare <code>popover</code> attribute defaults to <code>auto</code> mode, which gives you two behaviors for free: light-dismiss (clicking outside closes the popover) and exclusive stacking (opening one <code>auto</code> popover closes any other). The <code>popovertarget</code> attribute defaults to toggle behavior — click once to open, click again to close. The CSS resets <code>inset: unset</code> because the browser applies a default <code>inset: 0</code> to popover elements, which would center them in the viewport rather than letting us position them near the trigger.</p><h3><strong>2. Tooltip</strong></h3><p>Tooltips need <code>popover="manual"</code> because they should never light-dismiss — the user did not click to open them, so clicking elsewhere should not be intercepted. They also should not compete with other popovers for exclusive stacking; a tooltip and a dropdown menu should be able to coexist.</p><pre><code class="language-html">&lt;button type="button" popovertarget="t1" popovertargetaction="toggle"&gt;Hover me&lt;/button&gt;
&lt;div id="t1" popover="manual" role="tooltip"&gt;Add to library&lt;/div&gt;
</code></pre><pre><code class="language-css">[role="tooltip"] {
  inset: unset;
}
</code></pre><pre><code class="language-js">const button = document.querySelector("[popovertarget]");
const tooltip = document.querySelector("[popover]");

positionPopover(tooltip, button, { placement: "top", gap: 4 });

button.addEventListener("mouseenter", () =&gt; tooltip.showPopover());
button.addEventListener("mouseleave", () =&gt; tooltip.hidePopover());
button.addEventListener("focus", () =&gt; tooltip.showPopover());
button.addEventListener("blur", () =&gt; tooltip.hidePopover());
</code></pre><p>Since manual mode disables all built-in triggers, we call <code>showPopover()</code> and <code>hidePopover()</code> from four event listeners: <code>mouseenter</code>/<code>mouseleave</code> for hover, and <code>focus</code>/<code>blur</code> for keyboard accessibility. The <code>popovertargetaction="toggle"</code> on the button is a fallback that lets the tooltip also work via click if the JavaScript has not loaded yet. The <code>role="tooltip"</code> ensures screen readers announce the content as a tooltip description rather than a generic region.</p><h3><strong>3. Hover Card</strong></h3><p>Hover cards are richer than tooltips — they contain structured content like profile information or previews, and the user should be able to move their mouse into the card to interact with it. Unlike the tooltip, a hover card uses <code>popover="auto"</code> because it benefits from light-dismiss: if the user clicks somewhere else, the card should close.</p><pre><code class="language-html">&lt;a href="#" popovertarget="my-hovercard" popovertargetaction="show"&gt;@dustinboston&lt;/a&gt;
&lt;div id="my-hovercard" popover="auto"&gt;
  &lt;h4&gt;Dustin&lt;/h4&gt;
  &lt;p&gt;Software engineer. Joined March 2002.&lt;/p&gt;
&lt;/div&gt;
</code></pre><pre><code class="language-css">[popover] {
  inset: unset;
  position: fixed;
}
</code></pre><pre><code class="language-js">let hideTimeout;
const show = () =&gt; { clearTimeout(hideTimeout); card.showPopover(); };
const hide = () =&gt; { hideTimeout = setTimeout(() =&gt; card.hidePopover(), 100); };

button.addEventListener("mouseenter", show);
button.addEventListener("mouseleave", hide);
card.addEventListener("mouseenter", show);
card.addEventListener("mouseleave", hide);

positionPopover(card, button, { placement: "top" });
</code></pre><p>The <code>popovertargetaction="show"</code> on the anchor is a subtle detail — it means if a user clicks the link, the card is shown rather than toggled closed. The real runtime drivers are the mouse event listeners, but there is an important difference from the tooltip: a delayed hide. When the cursor leaves the trigger, a 100ms timeout starts before <code>hidePopover()</code> fires. If the cursor enters the card within that window, the timeout is cancelled. This lets the user cross the gap between the trigger and the card without the card flickering away. Both the trigger and the card share the same <code>show</code>/<code>hide</code> functions, so hovering either element keeps it open. This is the hybrid sweet spot: the element still gets top-layer promotion and <code>auto</code>-mode light-dismiss from the platform, while JavaScript only handles the hover timing.</p><h3><strong>4. Context Menu</strong></h3><p>A right-click context menu is the furthest from the declarative ideal. There is no trigger button to wire <code>popovertarget</code> to — the menu appears wherever the cursor happens to be when the user right-clicks. This calls for <code>popover="manual"</code>.</p><pre><code class="language-html">&lt;div id="context-menu"&gt;
  &lt;div id="trigger"&gt;Right click here&lt;/div&gt;
  &lt;div id="menu" role="menu" popover="manual"&gt;
    &lt;button role="menuitem" type="button"&gt;Back&lt;/button&gt;
    &lt;button role="menuitem" type="button"&gt;Forward&lt;/button&gt;
    &lt;button role="menuitem" type="button"&gt;Reload&lt;/button&gt;
    &lt;hr data-separator /&gt;
    &lt;button role="menuitem" type="button"&gt;Save As...&lt;/button&gt;
    &lt;button role="menuitem" type="button"&gt;Print...&lt;/button&gt;
  &lt;/div&gt;
&lt;/div&gt;
</code></pre><pre><code class="language-css">[popover] {
  inset: unset;
  position: fixed;
}
</code></pre><pre><code class="language-js">const trigger = document.querySelector("#trigger");
const menu = document.querySelector("#menu");

trigger.addEventListener("contextmenu", (e) =&gt; {
  e.preventDefault();
  menu.style.left = e.clientX + "px";
  menu.style.top = e.clientY + "px";
  menu.showPopover();
});

document.addEventListener("click", (e) =&gt; {
  if (!menu.contains(e.target)) menu.hidePopover();
});
</code></pre><p>Manual mode disables every automatic behavior: no light-dismiss, no Escape-to-close, no exclusive stacking. The <code>contextmenu</code> event provides the cursor coordinates, which are set as inline <code>style.left</code> and <code>style.top</code> before calling <code>showPopover()</code>. Dismissal is handled by a document-level click listener that checks whether the click landed outside the menu. The component is responsible for the entire lifecycle — but it still benefits from top-layer rendering, which means it paints above dialogs and other popovers without z-index hacks or stacking context headaches.</p><h2><strong>The Spectrum</strong></h2><p>These four components sit on a clear spectrum:</p><ol><li><p>Popover - fully auto, no JS required</p></li><li><p>Tooltip - manual, minimal JS required</p></li><li><p>Hover Card - auto, moderate JS required</p></li><li><p>Context Menu - manual, full JS required</p></li></ol><p>The lesson is straightforward: start with <code>popover</code> and <code>popovertarget</code>. Add <code>popovertargetaction</code> if you need directional control. Reach for <code>showPopover()</code> and <code>hidePopover()</code> only when the trigger is not a click. Switch to <code>manual</code> only when you need to own the entire lifecycle. At every step, the platform is doing the heavy lifting — you are just choosing how much of it to use.</p>]]></content:encoded>
      <author><name>Dustin Boston</name></author>
    </item>
    <item>
      <title><![CDATA[AI Usage as a Factor in Performance Reviews]]></title>
      <link>https://dustin.boston/blog/ai-usage-as-a-factor-in-performance-reviews</link>
      <guid isPermaLink="true">https://dustin.boston/blog/ai-usage-as-a-factor-in-performance-reviews</guid>
      <pubDate>Wed, 25 Feb 2026 02:07:00 GMT</pubDate>
      <description><![CDATA[AI usage is now being considered a factor in performance reviews. The WSJ reports that AI usage is already part of the reviews at Google, Amazon, and Meta....]]></description>
      <content:encoded><![CDATA[<p><a target="_blank" rel="noopener noreferrer nofollow" href="https://www.wsj.com/tech/ai/tech-firms-arent-just-encouraging-their-workers-to-use-ai-theyre-enforcing-it-d43ebf84?st=tC5Bx3&amp;reflink=desktopwebshare_permalink&amp;utm_source=tldrnewsletter">AI usage is now being considered a factor in performance reviews</a>. The WSJ reports that AI usage is already part of the reviews at Google, Amazon, and Meta. I saw this coming at Disney when the KPIs (key performance indicators) started to incorporate AI usage. It makes sense that companies would need to <em>motivate</em> developers who are worried about losing their jobs to AI. </p>]]></content:encoded>
      <author><name>Dustin Boston</name></author>
    </item>
    <item>
      <title><![CDATA[Don't Feel Bad About Using AI]]></title>
      <link>https://dustin.boston/blog/dont-feel-bad-about-using-ai</link>
      <guid isPermaLink="true">https://dustin.boston/blog/dont-feel-bad-about-using-ai</guid>
      <pubDate>Wed, 25 Feb 2026 01:05:00 GMT</pubDate>
      <description><![CDATA[The cultural stigma surrounding AI usage is fundamentally misplaced, as AI functions not as a shortcut for the lazy, but as a legitimate force multiplier and natural evolution of democratized knowledge that amplifies human craftsmanship....]]></description>
      <content:encoded><![CDATA[<p>Andreas Kling wrote an article about Ladybird adopting Rust, with help from AI. It stood out to me because of this paragraph:</p><blockquote><p>This was human-directed, not autonomous code generation. I decided what to port, in what order, and what the Rust code should look like. It was hundreds of small prompts, steering the agents where things needed to go. After the initial translation, I ran multiple passes of adversarial review, asking different models to analyze the code for mistakes and bad patterns.</p></blockquote><p>It's interesting because Kling goes out of the way to explain his AI usage. I think a lot of people feel this way - having to make sure that folks know you're not using AI for slop. Those who wage the great war against slop tend to have an air of superiority that makes you feel shame for using AI. This defensive posture - the need to justify the use of a tool - stems from a cultural narrative that frames AI as a shortcut for the lazy rather than a lever for the ambitious. But the shame surrounding AI is misplaced, rooted in a misunderstanding of how technology evolves and how human knowledge is meant to be shared.</p><p>Here are five reasons why using AI is nothing to be ashamed of:</p><ol><li><p>The internet was founded on the principle of freely accessible information. The outrage over AI training models often relies on a rigid interpretation of copyright that runs counter to this original ethos. If the web was designed to democratize access to human knowledge, AI is simply the next iteration of that democratization. It is an engine that synthesizes the collective public output of humanity. Using it is not participating in theft; it is engaging with the ultimate distillation of our shared digital history.</p></li><li><p>Critics frequently cite the energy consumption of data centers as a reason to boycott AI. Yet, society readily accepts the massive ecological footprints of other ambitious human endeavors—like launching rockets into orbit or powering global financial systems—because they are implicitly understood as investments in the "greater good." AI demands significant resources, but it also offers unprecedented potential to solve macro-level problems, optimize logistics, and accelerate scientific discovery. The energy cost is an investment in a cognitive infrastructure that benefits humanity at scale.</p></li><li><p>The fear of "slop" assumes that AI operates autonomously to flood the world with mediocrity. As Kling’s experience demonstrates, high-quality output requires high-level human orchestration. AI does not replace the human mind; it acts as a compiler for human intent. True software craftsmanship is no longer just about manually typing every character of syntax; it is about architecture, logic, and directing agents to execute a vision. The shame belongs to those who output thoughtless work, regardless of whether they used a keyboard or a prompt to generate it.</p></li><li><p>There is a persistent, romanticized notion that "harder" means "better." When high-level programming languages first appeared, developers writing in Assembly viewed them with similar skepticism. Refusing to use AI out of a sense of purity is a false economy. Efficiency is not a sin, and leveraging the most powerful tools available to execute an idea faster and with fewer errors is the hallmark of a skilled professional, not a hack.</p></li><li><p>AI acts as a force multiplier, dramatically lowering the barrier to entry for complex problem-solving. It allows an individual to act as an entire team, bridging the gap between a conceptual idea and a deployed reality. Making individuals feel ashamed for utilizing a tool that elevates their capabilities only serves to protect established monopolies and gatekeepers. Embracing AI is embracing a more level playing field where execution is limited only by imagination, not headcount.</p></li></ol><p></p>]]></content:encoded>
      <author><name>Dustin Boston</name></author>
    </item>
    <item>
      <title><![CDATA[Common Performance Pitfalls with Next.js React Server Components]]></title>
      <link>https://dustin.boston/blog/common-performance-pitfalls-with-nextjs-react-server-components</link>
      <guid isPermaLink="true">https://dustin.boston/blog/common-performance-pitfalls-with-nextjs-react-server-components</guid>
      <pubDate>Tue, 24 Feb 2026 23:00:00 GMT</pubDate>
      <description><![CDATA[In the article 6 React Server Component performance pitfalls in Next.js, Temitope Oyedele identifies common implementation errors that negate the performance benefits of React Server Components (RSCs) and the Next.js App Router....]]></description>
      <content:encoded><![CDATA[<p>In the article <a target="_blank" rel="noopener" class="ng-star-inserted" href="https://blog.logrocket.com/react-server-components-performance-mistakes/">6 React Server Component performance pitfalls in Next.js</a>, Temitope Oyedele<strong> </strong>identifies common implementation errors that negate the performance benefits of React Server Components (RSCs) and the Next.js App Router. I copied the entire article into a skill and had Claude track down these issues in my codebase. There were a surprising amount of them!</p><h3>Core Perf Pitfalls</h3><ul><li><p>Using top-level <code>await</code> in a page component prevents the server from streaming the initial UI shell. This leaves users staring at a blank screen until the slowest data fetch completes. </p></li><li><p>Passing entire database objects across the server-client boundary bloats the HTML and increases hydration time. Use only the fields the client actually needs.</p></li><li><p>Placing the <code>use client</code> directive too high in the component tree forces static elements to be included in the JavaScript bundle and hydrated unnecessarily.</p></li><li><p>Failing to use <code>Suspense</code> for non-essential, slow-loading data prevents the browser from showing "fast" content (like headers or sidebars) immediately.</p></li><li><p>Forgetting to use <code>revalidatePath</code> or <code>revalidateTag</code> in Server Actions can lead to stale UI where the database updates but the view remains unchanged until a manual refresh.</p></li><li><p>Using <code>async</code> logic directly in a root layout blocks the entire application's rendering. Data-heavy elements should be moved to isolated components wrapped in <code>Suspense</code>.</p></li></ul><p>The article emphasizes that RSC performance is often about perceived speed and visible progress. By isolating slow work behind <code>Suspense</code> boundaries and keeping the client-side bundle lean, developers can ensure the shell of an application renders instantly, even if back-end processes are slow.</p>]]></content:encoded>
      <author><name>Dustin Boston</name></author>
    </item>
    <item>
      <title><![CDATA[The End of Standardization - How AI is Making Uniformity Obsolete]]></title>
      <link>https://dustin.boston/blog/the-end-of-standardization-how-ai-is-making-uniformity-obsolete</link>
      <guid isPermaLink="true">https://dustin.boston/blog/the-end-of-standardization-how-ai-is-making-uniformity-obsolete</guid>
      <pubDate>Mon, 23 Feb 2026 23:26:00 GMT</pubDate>
      <description><![CDATA[In the essay Consistency is Primitive, Christopher Butler argues that AI-driven "bespoke technology" will render software standardization—once an economic necessity—an obsolete relic of our civilizational infancy....]]></description>
      <content:encoded><![CDATA[<p>In the essay <a target="_blank" rel="noopener" class="ng-star-inserted" href="https://www.chrbutler.com/consistency-is-primitive?utm_source=heydesigner.com">Consistency is Primitive</a>, Christopher Butler makes the point that our current reliance on standardized software is a relic of manufacturing constraints rather than a design necessity. Historically, high production costs required <a target="_blank" rel="noopener noreferrer nofollow" href="https://dustin.boston/blog/saas-extinction">productization</a> - building once and selling many - to achieve economies of scale. But as AI becomes digital infrastructure, these constraints vanish.</p><p>Butler explains that when AI can generate functional code and interfaces instantly, the "economic imperative" for standardization disappears. We are moving toward an era of <strong>bespoke technology</strong>, where software is no longer a static product but access to a "mind" that generates unique, personal solutions. In this context, consistency is viewed as a sign of "civilizational infancy"—a limitation we will eventually outgrow.</p><p>This shift presents some big challenges:</p><ul><li><p>If every interface is unique, sharing knowledge or teaching others becomes difficult.</p></li><li><p>Centralized ownership of AI "minds" creates significant power imbalances.</p></li><li><p>Transitioning from "wrestling with constraints" to mere prompting may atrophy human imagination.</p></li></ul><p>Ultimately, Butler suggests that while a world of infinite, inconsistent variation may look like chaos today, it represents a future where technology is finally as distinct as the individuals using it.</p>]]></content:encoded>
      <author><name>Dustin Boston</name></author>
    </item>
    <item>
      <title><![CDATA[GOOD Code is Still Expensive]]></title>
      <link>https://dustin.boston/blog/good-code-is-still-expensive</link>
      <guid isPermaLink="true">https://dustin.boston/blog/good-code-is-still-expensive</guid>
      <pubDate>Sun, 22 Feb 2026 21:01:00 GMT</pubDate>
      <description><![CDATA["Delivering new code has dropped in price to almost free... but delivering good code remains significantly more expensive than that."...]]></description>
      <content:encoded><![CDATA[<p><a target="_blank" rel="noopener noreferrer nofollow" href="https://simonwillison.net/guides/agentic-engineering-patterns/code-is-cheap/">Writing code is cheap now - Simon Willison's Weblog</a></p><blockquote><p>Delivering new code has dropped in price to almost free... but delivering <em>good</em> code remains significantly more expensive than that.</p></blockquote><p>Why is <em>good </em>code expensive? It's tested, documented, accessible, reliable, secure, maintainable, and observable.</p><blockquote><p>Coding agent tools can help with most of this, but there is still a substantial burden on the developer driving those tools to ensure that the produced code is good code</p></blockquote><p></p>]]></content:encoded>
      <author><name>Dustin Boston</name></author>
    </item>
    <item>
      <title><![CDATA[Is SaaS Really Going Extinct Tho?]]></title>
      <link>https://dustin.boston/blog/saas-extinction</link>
      <guid isPermaLink="true">https://dustin.boston/blog/saas-extinction</guid>
      <pubDate>Fri, 20 Feb 2026 20:40:00 GMT</pubDate>
      <description><![CDATA[In "There Is No Product", Sidu Ponnappa explains that "the fact that anyone can build it is precisely why it can’t be productised."...]]></description>
      <content:encoded><![CDATA[<p>In <a target="_blank" rel="noopener" class="ng-star-inserted" href="https://www.google.com/search?q=https://platform.twitter.com/widgets/tweet_button.2f70fb173b9000da126c79afe2098f02.en.html%23dnt%3Dfalse%26id%3Dtwitter-widget-1%26lang%3Den%26original_referer%3Dhttps%253A%252F%252Fsidu.in%252Fessays%252Fafter-ai-there-is-no-product.html%253Futm_source%253Dtldrnewsletter%26size%3Dm%26text%3DThere%2520Is%2520No%2520Product%26time%3D1771693825392%26type%3Dshare%26url%3Dhttps%253A%252F%252Fsidu.in%252Fessays%252Fafter-ai-there-is-no-product.html%253Futm_source%253Dtldrnewsletter%26via%3Dponnappa">There Is No Product</a>, Sidu Ponnappa explains that "the fact that <em>anyone</em> can build it is precisely <em>why</em> it can’t be productised." If your software can't be productized then you don't have a business. To be a product worth building it needs to be something hard to make. The problem for a SaaS business is that with AI, what is "hard to make" today might be easy tomorrow. Eventually any software that can be made, can be made with AI. So does that mean SaaS goes the way of the dodo? I have a hard time believing that.</p>]]></content:encoded>
      <author><name>Dustin Boston</name></author>
    </item>
    <item>
      <title><![CDATA[AI Will Create More Engineering Work, Not Less]]></title>
      <link>https://dustin.boston/blog/ai-will-create-more-engineering-work-not-less</link>
      <guid isPermaLink="true">https://dustin.boston/blog/ai-will-create-more-engineering-work-not-less</guid>
      <pubDate>Thu, 19 Feb 2026 21:55:00 GMT</pubDate>
      <description><![CDATA[In How GenAI Is Transforming Software Engineering, But Not Replacing It, Sr. Director of Global Business Innovation at Syntax, Matthias Steiner offers a comforting perspective for software engineers....]]></description>
      <content:encoded><![CDATA[<p>In <a target="_blank" rel="noopener noreferrer nofollow" href="https://www.syntax.com/blog/how-genai-is-transforming-software-engineering-but-not-replacing-it/">How GenAI Is Transforming Software Engineering, But Not Replacing It</a>, Sr. Director of Global Business Innovation at Syntax, Matthias Steiner offers a comforting perspective for software engineers (which could have saved me a few sleepless nights had I read it in December). While many, including myself, have misinterpreted the AI boom as an existential threat to software engineering, Steiner argues the opposite. </p><p>The reality is that AI makes the mechanical work of software <em>construction </em>light work, but not the <em>craft </em>of software engineering. Engineers are still responsible for architecture, pattern adoption and reliability, domain modeling, security, scalability, reliability, systems integration, and the alignment of technical decisions with business outcomes."</p><p>The good news according to Steiner is that the need for more software will only increase the need for more engineers to manage it. This is "Jevons' paradox: increasing efficiency expands demand." In other words, AI multiplies the amount of software and therefore the amount of software engineering.</p><p>The point is that "writing code is only one step of the software development lifecycle (SDLC)," which typically includes seven phases: planning, analysis, design, implementation, testing, deployment, and maintenance. Steiner points out that, every phase of the software development lifecycle benefits from AI: "Early-stage requirements can be transformed into structured specifications; Architectural diagrams can be drafted or critiqued; Test suites can be auto‑generated; CI/CD workflows can be orchestrated; Logs and incidents can be summarized and diagnosed; Legacy code can be refactored into modern patterns"</p><p>One approach that I've been experimenting with lately is spec-driven development, "where a structured specification becomes the system’s single source of truth.<strong>" </strong>It has added a level of control that I didn't have when purely vibe-coding. No doubt, AI can still be unwieldy.</p><p>For many, the fun part of software development has always been writing the code. AI takes that part and makes it more efficient. That's pretty unfortunate for the engineers who love writing code, but the good news is that there is still plenty to do.</p><p>Via <a target="_blank" rel="noopener noreferrer nofollow" href="https://thenewstack.io/vibe-coding-spec-driven/">The New Stack</a></p>]]></content:encoded>
      <author><name>Dustin Boston</name></author>
    </item>
    <item>
      <title><![CDATA[Software is Dead]]></title>
      <link>https://dustin.boston/blog/software-is-dead</link>
      <guid isPermaLink="true">https://dustin.boston/blog/software-is-dead</guid>
      <pubDate>Thu, 19 Feb 2026 14:59:00 GMT</pubDate>
      <description><![CDATA[The simplest refutation of the “death of software” argument is this: AI is still software. And application-layer AI delivered in the cloud is still Software-as-a-Service....]]></description>
      <content:encoded><![CDATA[<p>There are so many good points in this article, <a target="_blank" rel="noopener noreferrer nofollow" href="https://insights.euclid.vc/p/software-is-dead-long-live-software">Software Is Dead — Long Live Software by Euclid Ventures.</a> Here are a few completely out of context quotes that stood out:</p><ul><li><p>"The simplest refutation of the “death of software” argument is this: AI is still software. And application-layer AI delivered in the cloud is still Software-as-a-Service."</p></li><li><p>"If AI makes code cheaper, it makes the non-code moats — domain expertise, distribution, customer relationships, and what Evans memorably called “a throat to choke” — relatively more important, not less."</p></li><li><p>"One persistent fantasy is that enterprises will simply vibe-code their way out of buying software. Evans called this idea 'delusional' in his interview, and we completely agree, especially in vertical markets."</p></li></ul><p></p>]]></content:encoded>
      <author><name>Dustin Boston</name></author>
    </item>
    <item>
      <title><![CDATA[The Software Industrial Revolution]]></title>
      <link>https://dustin.boston/blog/software-industrial-revolution</link>
      <guid isPermaLink="true">https://dustin.boston/blog/software-industrial-revolution</guid>
      <pubDate>Thu, 19 Feb 2026 14:05:00 GMT</pubDate>
      <description><![CDATA[Andy Coenen explains how we’re living through another Industrial Revolution - the Software Industrial Revolution. In the first Industrial Revolution, they revolutionized textile production. In this one, it's software. ...]]></description>
      <content:encoded><![CDATA[<p>Andy Coenen explains <a target="_blank" rel="noopener noreferrer nofollow" href="https://cannoneyed.com/essays/software-industrial-revolution">how we’re living through another Industrial Revolution</a>—the <em>Software</em> Industrial Revolution. In the first Industrial Revolution, they revolutionized textile production. In this one, it's software. </p><p>There’s a detail about how people used to have only two pairs of clothes, one for work and one for church. After the Industrial Revolution, textiles were more available at cheaper prices. Now we have textiles for every occasion. In the same way, the second Industrial Revolution will drive the proliferation of software by increasing availability and reducing cost.</p><p>I can’t even imagine what that will look like. Does everyone just go around making software for things? If you need a calculator, you just build the software instead of opening an app. When you close it, the code is unloaded from RAM and deleted off the old aluminum alloy platters. Maybe the software never exists on a drive at all, and instead runs completely in RAM? Ephemeral software. Impermanence. Far out, man.</p><p>I still don’t know what the future will look like for my career, but the outlook does seem slightly more hopeful. <br /></p>]]></content:encoded>
      <author><name>Dustin Boston</name></author>
    </item>
    <item>
      <title><![CDATA[The AI Disruption Has Arrived]]></title>
      <link>https://dustin.boston/blog/the-ai-disruption-has-arrived</link>
      <guid isPermaLink="true">https://dustin.boston/blog/the-ai-disruption-has-arrived</guid>
      <pubDate>Thu, 19 Feb 2026 07:29:00 GMT</pubDate>
      <description><![CDATA[It was always a helpful coding assistant, but in November it suddenly got much better, and ever since I’ve been knocking off side projects that had sat in folders for a decade or longer....]]></description>
      <content:encoded><![CDATA[<p><a target="_blank" rel="noopener noreferrer nofollow" href="https://www.nytimes.com/2026/02/18/opinion/ai-software.html?unlocked_article_code=1.NFA.UkLv.r-XczfzYRdXJ&amp;smid=url-share">The A.I. Disruption Has Arrived, and It Sure Is Fun - The New York Times</a></p><p>"It was always a helpful coding assistant, but in November it suddenly got much better, and ever since I’ve been knocking off side projects that had sat in folders for a decade or longer. It’s fun to see old ideas come to life, so I keep a steady flow. Maybe it adds up to a half-hour a day of my time, and an hour of Claude’s."</p><p>I know what I'm doing after I finish this post. Time to revive some old projects!</p>]]></content:encoded>
      <author><name>Dustin Boston</name></author>
    </item>
    <item>
      <title><![CDATA[A Senior Engineer’s Guide to Learning a New Codebase]]></title>
      <link>https://dustin.boston/blog/a-senior-engineers-guide-to-learning-a-new-codebase</link>
      <guid isPermaLink="true">https://dustin.boston/blog/a-senior-engineers-guide-to-learning-a-new-codebase</guid>
      <pubDate>Wed, 11 Feb 2026 03:25:48 GMT</pubDate>
      <description><![CDATA[
My manager challenged me to learn a new part of the codebase that I've never worked on before. I figured I would use it as an opportunity to jot down the process I use. Learni...]]></description>
      <content:encoded><![CDATA[
<p>My manager challenged me to learn a new part of the codebase that I've never worked on before. I figured I would use it as an opportunity to jot down the process I use. Learning a new codebase should be a structured transition from observation to mental modeling. There are three phases: mapping, tracing, and modification. This approach moves a developer from treating code as a "black box" to understanding its guts.</p>



<h3 class="wp-block-heading">1. Mapping and context</h3>



<p>Mapping involves understanding the system’s architecture and data flow before reading business logic. In large-scale applications, reading code without a high-level map often leads to cognitive overload.</p>



<h4 class="wp-block-heading">Documentation</h4>



<p>The first step is identifying the "why" behind the implementation. Documentation provides the historical context of technical choices. Architectural documents detail why specific frameworks or patterns - such as a local-first architecture or a specific state management library - were selected over alternatives. Understanding these business constraints prevents the logic from appearing arbitrary.</p>



<h4 class="wp-block-heading">Entry points</h4>



<p>Every software module has a defined entry point or "front door." Identifying these allows a developer to narrow their focus to the most critical paths.</p>



<ul class="wp-block-list">
<li>Identify web API route handlers and middleware chains.</li>



<li>Find the public API or the primary export file for libraries</li>



<li>Map <code class="darkify_style_txt_border darkify_processed">props</code> and <code class="darkify_style_txt_border darkify_processed">useEffect</code> statements that fire when a component is mounted in the frontend.</li>
</ul>



<h4 class="wp-block-heading">Data flow</h4>



<p>A core requirement of mapping is diagramming how data moves through the system. This includes identifying where data enters (ingestion), where it is transformed (business logic), and where it is stored (persistence). This involves tracing a request from the router to the controller, through the service layer, and finally to the database driver.</p>



<h3 class="wp-block-heading">2. Tracing and analysis</h3>



<p>Once the boundaries are defined, the developer needs to see the code working. Static analysis is insufficient for understanding complex state changes and asynchronous operations.</p>



<h4 class="wp-block-heading">Step debugging</h4>



<p>The next step involves using a debugger to step through execution. Rather than simulating logic mentally, developers set breakpoints at high-level user actions, such as an API request or a UI event. By observing the call stack and variable state in real-time, the developer gains a factual understanding of how data mutates across different functions.</p>



<h4 class="wp-block-heading">Test suites</h4>



<p>Automated tests are the most accurate documentation of a system’s current state. They define the "contract" of a module.</p>



<ol class="wp-block-list">
<li>Run existing unit and integration tests to ensure a stable environment.</li>



<li>Intentionally modify a conditional statement or return value within the source code.</li>



<li>Watch for which tests fail. The resulting failures show the dependencies and the blast radius of changes within that module.</li>
</ol>



<h4 class="wp-block-heading">Version control</h4>



<p>Codebases are rarely static designs; they are historical records of bug fixes and shifting requirements. Using GitHub or tools like GitLens, look at the original Pull Request (PR) associated with a line of code. PR comments often contain the reasoning behind non-obvious workarounds or edge-case handling that the code itself does not explicitly state.</p>



<h3 class="wp-block-heading">3. Modification and validation</h3>



<p>The final step is validating the mental model through direct, non-destructive interaction with the code.</p>



<h4 class="wp-block-heading">Commenting</h4>



<p>As a developer reads through complex files, they should add "scratchpad" comments to summarize the perceived function of specific blocks. For example: <code>// Filters expired tokens prior to authentication check.</code> If a block of logic cannot be summarized in a single sentence, the developer has identified a gap in their mental model. These comments are for personal clarification and are not intended for the final commit.</p>



<h4 class="wp-block-heading">Refactoring</h4>



<p>Attempting a local-only refactor is a high-signal method for testing assumptions. This involves renaming variables for clarity or extracting long functions into smaller helpers. Because these changes are kept in a local branch and not merged, the developer can experiment without risk. If the refactor breaks the system in an unexpected way, it indicates that the developer's understanding was incomplete.</p>



<h4 class="wp-block-heading">Contribution</h4>



<p>A developer’s "beginner’s mind" is a temporary asset that allows them to see gaps in new areas that established team members may overlook. The final step in gaining proficiency is contributing back to the project.</p>



<ul class="wp-block-list">
<li>Correcting an outdated README or updating instructions.</li>



<li>Adding tests for edge cases discovered during the tracing phase.</li>



<li>Writing JSDoc comments for functions that lacked clarity.</li>
</ul>



<p>Synthesizing new knowledge into a documentation PR forces a final verification of the mental model while providing immediate value to the engineering team.</p>
]]></content:encoded>
      <author><name>Dustin Boston</name></author>
    </item>
    <item>
      <title><![CDATA[Matteo Collina on the Future of Software Engineering]]></title>
      <link>https://dustin.boston/blog/matteo-collina-on-the-future-of-software-engineering</link>
      <guid isPermaLink="true">https://dustin.boston/blog/matteo-collina-on-the-future-of-software-engineering</guid>
      <pubDate>Mon, 09 Feb 2026 15:09:47 GMT</pubDate>
      <description><![CDATA[
Matteo has some good points about The Future of the Software Engineering Caree...]]></description>
      <content:encoded><![CDATA[
<p>Matteo has some good points about <a href="https://adventures.nodeland.dev/archive/the-future-of-the-software-engineering-career/">The Future of the Software Engineering Career</a>. For one, valuable engineers will have to rely on fundamentals to work with generated code:</p>



<blockquote class="wp-block-quote">
<p>Algorithms. Distributed systems. Hardware architectures. Cache management techniques. Networking fundamentals. Database internals. These aren't academic exercises anymore. They're the foundation for evaluating AI-generated code.</p>



<p>When an AI produces a sorting algorithm, can you tell if it's appropriate for your data properties? When it suggests a caching layer, do you understand the trade-offs in consistency? When it generates a distributed system design, can you spot the failure modes?</p>



<p>There are endless layers to study here. Computer science fundamentals that seemed theoretical suddenly matter for practical work. The student who deeply understands how things work will outperform the one who only knows how to use them.</p>
</blockquote>



<p>You know, <a href="https://dustin.boston/matthew-hansen-on-the-hard-parts-of-software-development/">the hard parts of software development</a>.</p>



<p>I completely agree with his prediction that there will be a boom in small business applications that can be built using AI:</p>



<blockquote class="wp-block-quote">
<p>Remember when every business needed a website, and local web developers built them? We're about to see the same thing, but for custom software applications...</p>



<p>This is going to be a booming industry. And it favors people who can talk to clients, understand their real problems, and deliver working solutions. It favors generalists who can move quickly over specialists in narrow technologies. It favors judgment over raw coding speed</p>
</blockquote>
]]></content:encoded>
      <author><name>Dustin Boston</name></author>
    </item>
    <item>
      <title><![CDATA[Matthew Hansen on the Hard Parts of Software Development]]></title>
      <link>https://dustin.boston/blog/matthew-hansen-on-the-hard-parts-of-software-development</link>
      <guid isPermaLink="true">https://dustin.boston/blog/matthew-hansen-on-the-hard-parts-of-software-development</guid>
      <pubDate>Mon, 09 Feb 2026 14:50:15 GMT</pubDate>
      <description><![CDATA[
In ...]]></description>
      <content:encoded><![CDATA[
<p>In <a class="darkify_style_txt_border darkify_style_link darkify_processed" href="https://www.blundergoat.com/articles/ai-makes-the-easy-part-easier-and-the-hard-part-harder">AI Makes the Easy Part Easier and the Hard Part Harder</a>, Matthew shares a lesson that has taken me more than 20 years to learn:</p>



<blockquote class="wp-block-quote">
<p>Writing code is the easy part of the job. It always has been. The hard part is investigation, understanding context, validating assumptions, and knowing why a particular approach is the right one for this situation.</p>
</blockquote>



<p>The hardest part of software development, however, is and always has been, people. Politics, opinions, emotions. You can't find an AI for that, although it can help. </p>
]]></content:encoded>
      <author><name>Dustin Boston</name></author>
    </item>
    <item>
      <title><![CDATA[The Shift From Programming to Engineering]]></title>
      <link>https://dustin.boston/blog/the-shift-from-programming-to-engineering</link>
      <guid isPermaLink="true">https://dustin.boston/blog/the-shift-from-programming-to-engineering</guid>
      <pubDate>Sat, 07 Feb 2026 16:24:48 GMT</pubDate>
      <description><![CDATA[
Speaking of ...]]></description>
      <content:encoded><![CDATA[
<p>Speaking of <a class="darkify_style_link darkify_style_txt_border darkify_processed" href="https://dustin.boston/the-future-of-programming-looks-a-lot-like-an-everything-bagel/">everything bagels</a>, Hampton Lintorn-Catlin has an interesting perspective about <a class="darkify_style_link darkify_style_txt_border darkify_processed" href="https://hamptonmakes.com/blog/2026/02/06/programming-is-dead.html">the role of engineers versus programmers in the AI age</a>. AI agents now perform the bulk of code‑writing, shifting the valuable work from typing code to <strong class="darkify_style_txt_border darkify_processed">designing systems, orchestrating agents, reviewing output, and defining standards</strong>. </p>



<p>In response to the notion that you can't use AI in complex codebases, Hampton says "<strong>If agents aren’t working well in your codebase, you need to figure out why that is instead of throwing your hands up.</strong>" That's the kind of <a href="https://dustin.boston/satya-nadellas-architecture-for-executive-success/">leadership advice Satya Nadella would be proud of</a>.</p>



<p></p>
]]></content:encoded>
      <author><name>Dustin Boston</name></author>
    </item>
    <item>
      <title><![CDATA[Satya Nadella’s Architecture for Executive Success]]></title>
      <link>https://dustin.boston/blog/satya-nadellas-architecture-for-executive-success</link>
      <guid isPermaLink="true">https://dustin.boston/blog/satya-nadellas-architecture-for-executive-success</guid>
      <pubDate>Sat, 07 Feb 2026 16:22:52 GMT</pubDate>
      <description><![CDATA[
Jeffrey Snover invites us behind the scenes of his promotion to Technical Fellow, when he joined Microsoft’s other Senior Executives. Satya Nadella ...]]></description>
      <content:encoded><![CDATA[
<p>Jeffrey Snover invites us behind the scenes of his promotion to Technical Fellow, when he joined Microsoft’s other Senior Executives. Satya Nadella <a href="https://www.jsnover.com/blog/2026/02/01/welcome-to-the-room/">gave this admonishment, paraphrased by Jeffrey</a>:</p>



<blockquote class="wp-block-quote">
<p>Congratulations …. your days of whining are over​. In this room, we deliver success, we don’t whine.​ Look, I’m not confused, I know you walk through fields of shit every day. Your job is to find the rose petals. Don’t come whining that you don’t have the resources you need.​ We’ve done our homework. We’ve evaluated the portfolio, considered the opportunities and allocated our available resources to those opportunities. That is what you have to work with. Your job is to manufacture success with the resources you’ve been allocated</p>
</blockquote>



<p>This philosophy was what once made working at Netflix so great. The feeling of being empowered was incredible, but the drive to behave like a member of the Dream Team is what had the biggest impact on me. If you want a master class in leadership, read No Rules Rules, by Reid Hastings.</p>



<p></p>
]]></content:encoded>
      <author><name>Dustin Boston</name></author>
    </item>
    <item>
      <title><![CDATA[The Future of Programming Looks a Lot Like an Everything Bagel]]></title>
      <link>https://dustin.boston/blog/the-future-of-programming-looks-a-lot-like-an-everything-bagel</link>
      <guid isPermaLink="true">https://dustin.boston/blog/the-future-of-programming-looks-a-lot-like-an-everything-bagel</guid>
      <pubDate>Thu, 05 Feb 2026 15:47:34 GMT</pubDate>
      <description><![CDATA[
What does the future of programming look like? 




...]]></description>
      <content:encoded><![CDATA[
<p>What does the future of programming look like? </p>



<ul class="wp-block-list">
<li><a href="https://swizec.com/blog/the-future-of-software-engineering-is-sre/">Swizec Teller says it's Site Reliability Engineering (SRE)</a></li>



<li><a href="https://addyosmani.com/blog/agentic-engineering/">Addy Osmani thinks it will be "Agentic Engineering"</a></li>



<li><a href="https://newsletter.rafapaez.com/p/the-rise-of-the-100x-product-engineer">Rafa Páez makes a case for Product Engineering</a></li>
</ul>



<p>So, which is it? I say <a class="darkify_style_link darkify_style_txt_border darkify_processed" href="https://www.imdb.com/title/tt6710474/characters/nm3513533/?item=qt6793459&amp;ref_=ext_shr_lnk">it's an everything bagel</a>:</p>



<blockquote class="wp-block-quote">
<p>Jobu Tupaki:  I got bored one day - and I put everything on a bagel. Everything. All my hopes and dreams, my old report cards, every breed of dog, every last personal ad on craigslist. Sesame. Poppy seed. Salt. And it collapsed in on itself. 'Cause, you see, when you really put everything on a bagel, it becomes this.</p>
</blockquote>



<p>Here's a quick compare and contrast. </p>



<h3 class="wp-block-heading">What Each Role Optimizes For</h3>



<ul class="wp-block-list">
<li><strong>Agentic Engineering</strong> optimizes for <em>throughput with correctness</em>. The goal is to produce high‑quality software quickly by orchestrating AI agents, not by typing faster.</li>



<li><strong>SRE</strong> optimizes for <em>reliability over time</em>. The mission is to keep systems predictable under load, failure, and change.</li>



<li><strong>Product Engineering</strong> optimizes for <em>user and business value</em>. The focus is on shipping features that matter and iterating toward impact.</li>
</ul>



<h3 class="wp-block-heading"><strong>How they work day to day</strong></h3>



<h4 class="wp-block-heading"><strong>Agentic Engineers</strong></h4>



<p>They treat AI like a fast but unreliable junior developer. Their craft is decomposition, prompting, reviewing, and testing. They build scaffolds, guardrails, and workflows that turn raw model output into maintainable software.</p>



<h4 class="wp-block-heading"><strong>SREs</strong></h4>



<p>They live in the world of SLIs, SLOs, error budgets, and incident response. Their work is automation-heavy and relentlessly focused on reducing toil, improving observability, and ensuring systems behave as expected.</p>



<h4 class="wp-block-heading"><strong>Product Engineers</strong></h4>



<p>They sit closest to users. They translate product requirements into working features, iterate quickly, and balance speed with long‑term maintainability. They’re the connective tissue between design, backend, and business goals.</p>



<h3 class="wp-block-heading"><strong class="darkify_style_secondary_bg darkify_style_all darkify_processed">How each role uses A</strong><strong>I</strong></h3>



<p>AI is reshaping all three roles, but in different ways:</p>



<ul class="wp-block-list">
<li><strong>Agentic Engineers</strong> build around AI. It’s the core tool, not an add‑on.</li>



<li><strong>SREs</strong> use AI as an accelerator—log summarization, anomaly detection, config generation—but remain deeply skeptical. Reliability requires verification, not vibes.</li>



<li><strong>Product Engineers</strong> use AI to multiply iteration speed: scaffolding features, generating UI variants, writing tests, and exploring alternatives faster than ever.</li>
</ul>



<p>The common thread: <em>AI shifts the work upward, toward orchestration and decision‑making.</em></p>



<h3 class="wp-block-heading"><strong class="darkify_style_secondary_bg darkify_style_all darkify_processed">Skills that define each disciplin</strong><strong>e</strong></h3>



<ul class="wp-block-list">
<li><strong>Agentic Engineering</strong>: system design, decomposition, prompt engineering, test‑driven development, code review, architectural thinking.</li>



<li><strong>SRE</strong>: distributed systems, observability, automation, incident response, performance engineering.</li>



<li><strong>Product Engineering</strong>: UX intuition, full‑stack development, rapid prototyping, experimentation, cross‑functional communication.</li>
</ul>



<p>These skill sets overlap, but each role has a distinct emphasis.</p>



<h3 class="wp-block-heading"><strong class="darkify_style_secondary_bg darkify_style_all darkify_processed">The downsides of each disciplin</strong><strong>e</strong></h3>



<ul class="wp-block-list">
<li><strong>Agentic Engineering</strong> risks over‑trusting AI output, weak test coverage, and architectural drift from agent‑generated code.</li>



<li><strong>SRE</strong> risks over‑engineering reliability, becoming a ticket‑ops team, or burning out under incident load.</li>



<li><strong>Product Engineering</strong> risks shipping fast but accruing tech debt, or building features that don’t move metrics.</li>
</ul>



<p>Understanding these failure modes is part of understanding the craft.</p>



<h3 class="wp-block-heading"><strong class="darkify_style_secondary_bg darkify_style_all darkify_processed">Where the roles converg</strong><strong>e</strong></h3>



<p>AI is pushing all three disciplines toward a shared future:</p>



<ul class="wp-block-list">
<li>Less manual coding, more orchestration</li>



<li>Less toil, more automation</li>



<li>Less focus on implementation, more on system‑level thinking</li>



<li>Less “just ship it,” more continuous verification</li>
</ul>



<p>But their centers of gravity remain distinct:</p>



<ul class="wp-block-list">
<li><strong>Agentic Engineering</strong> asks: <em>How do we build software with AI?</em></li>



<li><strong>SRE</strong> asks: <em>How do we keep software reliable as it changes?</em></li>



<li><strong>Product Engineering</strong> asks: <em>How do we build the right software for users?</em></li>
</ul>



<p>Together, they form a triangle of modern engineering practice.</p>



<h3 class="wp-block-heading">The everything bagel</h3>



<p>If AI continues absorbing more of the implementation work, the future engineer - regardless of title - starts to look like an everything bagel:</p>



<ul class="wp-block-list">
<li>the <strong>orchestration mindset</strong> of an Agentic Engineer</li>



<li>the <strong>reliability instincts</strong> of an SRE</li>



<li>the <strong>user‑centric judgment</strong> of a Product Engineer</li>



<li>Sesame. Poppy seed. Salt.</li>
</ul>



<p>In other words:</p>



<p><em>The future of engineering is a system designer, reliability steward, and product thinker who directs AI to do the work.</em></p>



<p>Classic software engineer answer.</p>
]]></content:encoded>
      <author><name>Dustin Boston</name></author>
    </item>
    <item>
      <title><![CDATA[How Software Will Survive with AI]]></title>
      <link>https://dustin.boston/blog/how-software-will-survive-with-ai</link>
      <guid isPermaLink="true">https://dustin.boston/blog/how-software-will-survive-with-ai</guid>
      <pubDate>Sat, 31 Jan 2026 02:55:03 GMT</pubDate>
      <description><![CDATA[
In ...]]></description>
      <content:encoded><![CDATA[
<p>In <a class="darkify_style_link darkify_style_txt_border darkify_processed" href="https://steve-yegge.medium.com/software-survival-3-0-97a2a6255f7b">Software Survival 3.0</a> Steve Yegge lays out a model for software survivability that states, roughly: AI is advancing exponentially, and in a world where agents can synthesize almost any software on demand, only certain kinds of software will survive. It basically assumes that AI is cheap and lazy and will reach for tools (aka <em class="darkify_style_txt_border darkify_processed">your</em> tools) that have the following characteristics:</p>



<ol class="wp-block-list">
<li>Knowledge dense. They embody decades of knowledge and would be too expensive for an AI to build from scratch.</li>



<li>Efficient. They run more efficiently on CPUs than on GPU inference.</li>



<li>Broadly useful. They are general-purpose tools with wide applicability.</li>



<li>Familiar. Agents have to know your tool exists in terms (via popularity, documentation, etc.) or at least how to find it.</li>



<li>Low Friction. Interestingly, their hallucinations should work, docs reinforce intuitive behavior.</li>



<li>Appeal to humans. Whether it is human curated, human created, or human experiences.</li>
</ol>



<p>There's a fun story about Beads, which has evolved over 100 sub-commands, intended for use by AI. </p>
]]></content:encoded>
      <author><name>Dustin Boston</name></author>
    </item>
  </channel>
</rss>