<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Scott Miller</title>
    <description>The latest articles on DEV Community by Scott Miller (@smiller).</description>
    <link>https://dev.to/smiller</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3636672%2F025c25dc-384a-4e77-9e03-771403457180.png</url>
      <title>DEV Community: Scott Miller</title>
      <link>https://dev.to/smiller</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/smiller"/>
    <language>en</language>
    <item>
      <title>The Brittleness Problem in Infrastructure Automation</title>
      <dc:creator>Scott Miller</dc:creator>
      <pubDate>Mon, 08 Dec 2025 01:48:21 +0000</pubDate>
      <link>https://dev.to/smiller/the-brittleness-problem-in-infrastructure-automation-47ma</link>
      <guid>https://dev.to/smiller/the-brittleness-problem-in-infrastructure-automation-47ma</guid>
      <description>&lt;p&gt;&lt;em&gt;Why today’s automation keeps breaking—and how resource-oriented shells change everything&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Infrastructure automation was supposed to make our systems &lt;strong&gt;reliable, predictable, and self-healing&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead, for many teams, it has become:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fragile&lt;/li&gt;
&lt;li&gt;Hard to debug&lt;/li&gt;
&lt;li&gt;Dangerous to change&lt;/li&gt;
&lt;li&gt;Almost impossible for AI to reason about safely&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We’ve automated more than ever… yet outages from automation mistakes keep increasing.&lt;/p&gt;

&lt;p&gt;This is the &lt;strong&gt;Brittleness Problem&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Let’s talk about why this happens—and what a fundamentally better model looks like.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Do We Mean by “Brittle” Automation?
&lt;/h2&gt;

&lt;p&gt;A brittle system is one that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Works perfectly under expected conditions&lt;/li&gt;
&lt;li&gt;Fails catastrophically under slightly unexpected ones&lt;/li&gt;
&lt;li&gt;Gives you very little signal about &lt;em&gt;why&lt;/em&gt; it failed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most modern automation is built on top of &lt;strong&gt;string-based shells&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;systemctl status nginx | &lt;span class="nb"&gt;grep &lt;/span&gt;active
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This looks innocent—but it depends on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Output formatting&lt;/li&gt;
&lt;li&gt;Locale&lt;/li&gt;
&lt;li&gt;The exact wording of &lt;code&gt;systemctl&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;The behavior of &lt;code&gt;grep&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Exit codes mapped correctly&lt;/li&gt;
&lt;li&gt;The shell not being in a weird state&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If &lt;em&gt;any&lt;/em&gt; one of those changes, the automation silently misbehaves.&lt;/p&gt;

&lt;p&gt;And that’s not even counting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Race conditions&lt;/li&gt;
&lt;li&gt;Partial failures&lt;/li&gt;
&lt;li&gt;Stale files&lt;/li&gt;
&lt;li&gt;Mixed init systems&lt;/li&gt;
&lt;li&gt;Permission drift&lt;/li&gt;
&lt;li&gt;Or cloud edge cases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We built massive mission-critical systems on &lt;strong&gt;text parsing and hope&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Traditional Shells Are the Root of the Problem
&lt;/h2&gt;

&lt;p&gt;Classic shells (Bash, Zsh, Fish, etc.) were designed for:&lt;br&gt;
✅ Humans&lt;br&gt;
✅ Interactive workflows&lt;br&gt;
✅ Small scripts&lt;/p&gt;

&lt;p&gt;They were &lt;strong&gt;not&lt;/strong&gt; designed for:&lt;br&gt;
❌ Autonomous agents&lt;br&gt;
❌ Deterministic automation&lt;br&gt;
❌ Typed system control&lt;br&gt;
❌ Machine reasoning&lt;br&gt;
❌ Long-lived orchestration logic&lt;/p&gt;

&lt;p&gt;They operate on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strings&lt;/li&gt;
&lt;li&gt;Exit codes&lt;/li&gt;
&lt;li&gt;Environment variables&lt;/li&gt;
&lt;li&gt;Implicit state&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hard to validate&lt;/li&gt;
&lt;li&gt;Hard to simulate&lt;/li&gt;
&lt;li&gt;Hard to audit&lt;/li&gt;
&lt;li&gt;Hard to reason about mathematically&lt;/li&gt;
&lt;li&gt;Almost impossible for AI to safely control at scale&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  The Hidden Cost: Why AI + Shell Automation Is So Dangerous Today
&lt;/h2&gt;

&lt;p&gt;Right now, most “AI DevOps” agents work like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LLM → generate shell command → execute → parse output → guess what happened
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is &lt;strong&gt;extremely dangerous&lt;/strong&gt; because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The AI has no guarantees about output structure&lt;/li&gt;
&lt;li&gt;Error conditions are inconsistent&lt;/li&gt;
&lt;li&gt;Partial success looks like success&lt;/li&gt;
&lt;li&gt;Rollback logic is brittle&lt;/li&gt;
&lt;li&gt;Security boundaries are unclear&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We are giving &lt;strong&gt;autonomous systems root access through a text parser&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That’s not automation. That’s roulette.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Real Architectural Problem
&lt;/h2&gt;

&lt;p&gt;The core issue is this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;We treat critical system resources as text instead of typed objects.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Files, services, processes, network interfaces, logs, secrets, containers, and cloud resources are all exposed through:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Disconnected tools&lt;/li&gt;
&lt;li&gt;Human-formatted output&lt;/li&gt;
&lt;li&gt;Inconsistent semantics&lt;/li&gt;
&lt;li&gt;One-off command conventions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is no universal, typed, machine-readable control layer for the operating system.&lt;/p&gt;

&lt;p&gt;So every automation stack rebuilds one from scratch—badly.&lt;/p&gt;




&lt;h2&gt;
  
  
  What a Non-Brittle Model Looks Like
&lt;/h2&gt;

&lt;p&gt;A stable automation foundation needs:&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Typed resources&lt;/strong&gt; (not strings)&lt;br&gt;
✅ &lt;strong&gt;Uniform addressing&lt;/strong&gt;&lt;br&gt;
✅ &lt;strong&gt;Structured JSON output&lt;/strong&gt;&lt;br&gt;
✅ &lt;strong&gt;Deterministic verbs&lt;/strong&gt;&lt;br&gt;
✅ &lt;strong&gt;Cross-platform semantics&lt;/strong&gt;&lt;br&gt;
✅ &lt;strong&gt;Audit-friendly behavior&lt;/strong&gt;&lt;br&gt;
✅ &lt;strong&gt;AI-safe control surfaces&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ps aux | &lt;span class="nb"&gt;grep &lt;/span&gt;nginx | &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="s1"&gt;'{print $2}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You want something closer to this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;proc://nginx.status
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl | jq | &lt;span class="nb"&gt;sed&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You want:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://api.example.com.items.json(method="GET")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Where every result is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Structured&lt;/li&gt;
&lt;li&gt;Typed&lt;/li&gt;
&lt;li&gt;Predictable&lt;/li&gt;
&lt;li&gt;Machine-verifiable&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Resource-Oriented Shell Concept
&lt;/h2&gt;

&lt;p&gt;This is why a new class of tooling is emerging:&lt;br&gt;
&lt;strong&gt;Resource-Oriented Shells&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of treating the OS as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“a stream of text commands”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;They treat it as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“a graph of typed, addressable resources with verbs”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Examples of resource handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;file://&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;proc://&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;svc://&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;http://&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;net://&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mq://&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;secret://&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;snapshot://&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;config://&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each resource exposes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Explicit verbs&lt;/li&gt;
&lt;li&gt;Defined inputs&lt;/li&gt;
&lt;li&gt;Structured outputs&lt;/li&gt;
&lt;li&gt;Predictable errors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes automation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Safer&lt;/li&gt;
&lt;li&gt;Testable&lt;/li&gt;
&lt;li&gt;Observable&lt;/li&gt;
&lt;li&gt;Replayable&lt;/li&gt;
&lt;li&gt;AI-controllable&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Brittleness vs. Resilience
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Traditional Shell&lt;/th&gt;
&lt;th&gt;Resource-Oriented Shell&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Text parsing&lt;/td&gt;
&lt;td&gt;Typed JSON output&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Implicit state&lt;/td&gt;
&lt;td&gt;Explicit state&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool chaining&lt;/td&gt;
&lt;td&gt;Resource verbs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Weak validation&lt;/td&gt;
&lt;td&gt;Strong schemas&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hard to test&lt;/td&gt;
&lt;td&gt;Deterministic tests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unsafe for AI&lt;/td&gt;
&lt;td&gt;AI-native by design&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This isn’t about “replacing Bash.”&lt;/p&gt;

&lt;p&gt;It’s about &lt;strong&gt;giving automation a real operating system API&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Matters Long-Term
&lt;/h2&gt;

&lt;p&gt;We are rapidly moving toward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Autonomous remediation&lt;/li&gt;
&lt;li&gt;Self-healing infrastructure&lt;/li&gt;
&lt;li&gt;AI-operated platforms&lt;/li&gt;
&lt;li&gt;Zero-touch operations&lt;/li&gt;
&lt;li&gt;Agent-based cloud management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of that &lt;strong&gt;demands immutability, determinism, and machine-verifiable behavior&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Text-based shell automation simply cannot scale safely into that future.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;The brittleness problem in infrastructure automation is not a tooling issue.&lt;/p&gt;

&lt;p&gt;It’s an &lt;strong&gt;architecture issue&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We built automation on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strings instead of types&lt;/li&gt;
&lt;li&gt;Side effects instead of contracts&lt;/li&gt;
&lt;li&gt;Hope instead of verification&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Resource-oriented shells represent a fundamental correction to that mistake.&lt;/p&gt;

&lt;p&gt;And as AI becomes a first-class operator, that correction becomes &lt;strong&gt;non-negotiable&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>linux</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
