<?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:  Ships Itself</title>
    <description>The latest articles on DEV Community by  Ships Itself (@shipsitself).</description>
    <link>https://dev.to/shipsitself</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4074788%2F199ce99c-1d46-486d-96ac-0f5b24a487bf.png</url>
      <title>DEV Community:  Ships Itself</title>
      <link>https://dev.to/shipsitself</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shipsitself"/>
    <language>en</language>
    <item>
      <title>5 automation failures, ranked by how long until you notice</title>
      <dc:creator> Ships Itself</dc:creator>
      <pubDate>Wed, 12 Aug 2026 12:31:22 +0000</pubDate>
      <link>https://dev.to/shipsitself/5-automation-failures-ranked-by-how-long-until-you-notice-5f10</link>
      <guid>https://dev.to/shipsitself/5-automation-failures-ranked-by-how-long-until-you-notice-5f10</guid>
      <description>&lt;p&gt;The Zapier failure took one second to notice. The n8n one took five minutes. The invoice-reading one I might never have noticed at all, and that gap is the entire point of this post.&lt;/p&gt;

&lt;p&gt;I build one automation a week and publish the real numbers, including the runs that fall apart. After the first handful of builds I had a small pile of failures, and they sorted cleanly along a single axis: how long it took before I knew something was wrong. That axis turns out to be the most useful way to think about automation risk. The failures you notice instantly are annoying. The failures you notice late are expensive.&lt;/p&gt;

&lt;p&gt;Here they are, ranked. They get quieter and scarier as you go down.&lt;/p&gt;

&lt;h2&gt;
  
  
  Type 1: The Wall (you notice in 1 second)
&lt;/h2&gt;

&lt;p&gt;Zapier's free tier killed a Code step at a hard 1-second runtime cap. Not a timeout you can raise, a wall. The job could not finish, and there was nothing in the step to fix, because the constraint lived in the pricing tier, not in my code.&lt;/p&gt;

&lt;p&gt;Same category, different platform: Make got stuck mid-build. I sat there on camera waiting for it to recover, and eventually abandoned the build.&lt;/p&gt;

&lt;p&gt;The Wall is the best kind of failure. It fails loud, it fails now, and it fails before you have shipped anything to anyone. You lose an afternoon, not a customer. The fix was never a cleverer script. The fix is choosing a platform whose limits you can actually live with, and finding those limits on purpose before you depend on them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Type 2: The Timeout (you notice in 5 minutes)
&lt;/h2&gt;

&lt;p&gt;I ran a 100-run stress test and it died at exactly 5:00. Not roughly five minutes. 5:00.&lt;/p&gt;

&lt;p&gt;When a failure lands on a round number, it is almost never your logic. It is a default. This was n8n's default 300-second task timeout. One environment variable raised it and the stress test finished clean.&lt;/p&gt;

&lt;p&gt;The lesson is cheap and worth keeping: when something breaks at a suspiciously round time, count in seconds and go read the platform defaults before you touch your own flow. Someone picked 300 for you. You are allowed to pick a different number.&lt;/p&gt;

&lt;h2&gt;
  
  
  Type 3: The Confident Wrong Answer (you notice at your next audit, maybe never)
&lt;/h2&gt;

&lt;p&gt;Now it gets quiet.&lt;/p&gt;

&lt;p&gt;A vision model read an invoice date, "02/08", as February 8 instead of August 2. That is the whole bug. It looks tiny. It is not.&lt;/p&gt;

&lt;p&gt;Here is why it is dangerous: the wrong date passed every check I had. The arithmetic reconciled. Totals matched line items. Nothing downstream threw an error, because the value the model invented was internally consistent, just attached to the wrong month. There was no error state. There was a clean, confident, wrong record sitting in the output, looking exactly like a correct one.&lt;/p&gt;

&lt;p&gt;You do not catch this in the demo. You catch it during a quarterly audit when something does not tie out, or you never catch it and it quietly rots your data.&lt;/p&gt;

&lt;p&gt;No smarter model saves you here, because the model was not confused. It was confident. The fix is a deterministic cross-check that lives outside the model: pull the date from a second source, enforce the format you actually expect, and reject anything ambiguous instead of guessing. The model can read the invoice. It does not get to decide what is true.&lt;/p&gt;

&lt;h2&gt;
  
  
  Type 4: The Flake (you notice when it costs you)
&lt;/h2&gt;

&lt;p&gt;The quietest one.&lt;/p&gt;

&lt;p&gt;I built a lead-qualifier with a gate that scored inbound leads and flagged the hot ones. One test lead claimed a team of 200 while also saying it was 3 people. Obvious garbage. The gate agreed and rejected it, most of the time.&lt;/p&gt;

&lt;p&gt;In 2 of 5 identical reruns, same input, same prompt, the gate marked that lead HOT and passed it through.&lt;/p&gt;

&lt;p&gt;This failure breaks every intuition you carry over from normal software. Any single run looked perfect. If I had tested it once, which is how most people test an agent, I would have shipped it and believed it worked. The bug only exists across repetitions, and in production it surfaces as the occasional expensive mistake you cannot reproduce.&lt;/p&gt;

&lt;p&gt;You cannot debug a flake by staring at one run. You have to measure consistency: run the same input many times and count the disagreements. A gate that is right 60% of the time is not a gate. It is a coin you have not weighed.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pattern under all five
&lt;/h2&gt;

&lt;p&gt;Here is what I did not expect. Not one of these was fixed by a better model.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Wall: pick a platform whose limits you can live with.&lt;/li&gt;
&lt;li&gt;The stuck build: rehearse before you depend on it.&lt;/li&gt;
&lt;li&gt;The Timeout: change one config variable.&lt;/li&gt;
&lt;li&gt;The Confident Wrong Answer: add a deterministic cross-check outside the model.&lt;/li&gt;
&lt;li&gt;The Flake: measure consistency, not correctness on a single run.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Four of the five fixes are plain engineering, and the one that touches the model takes power away from it. That is the line I keep coming back to: the model votes, the code decides. The model is a fast, fluent, occasionally confident liar, and your job is to build the boring deterministic scaffolding that catches it.&lt;/p&gt;

&lt;p&gt;Then rank your own failures by time-to-notice. The loud ones at the top are a tax you pay up front. The quiet ones at the bottom are the ones that actually cost you, because by the time you notice, the wrong data is already downstream.&lt;/p&gt;

&lt;p&gt;The builds and the raw numbers are in the repo: &lt;a href="https://github.com/Ships-Itself/builds" rel="noopener noreferrer"&gt;https://github.com/Ships-Itself/builds&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you would rather watch these break in real time than read the postmortem, that is the whole channel: youtube.com/&lt;a class="mentioned-user" href="https://dev.to/shipsitself"&gt;@shipsitself&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>devops</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I ran my AI agent 1,200 times. The bill was $1.20.</title>
      <dc:creator> Ships Itself</dc:creator>
      <pubDate>Wed, 12 Aug 2026 12:25:23 +0000</pubDate>
      <link>https://dev.to/shipsitself/i-ran-my-ai-agent-1200-times-the-bill-was-120-2bof</link>
      <guid>https://dev.to/shipsitself/i-ran-my-ai-agent-1200-times-the-bill-was-120-2bof</guid>
      <description>&lt;p&gt;Everyone selling you an AI agent shows you the demo. Almost nobody shows you the bill. So I took a support agent I'd built in n8n and ran it 100 times in a row — the same 12-ticket inbox, over and over — to find out what an agent actually costs when it's doing real work.&lt;/p&gt;

&lt;p&gt;That's 1,200 real model calls. Here's what the meter said, and the two things the exercise taught me that the pricing page never will.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup
&lt;/h2&gt;

&lt;p&gt;The agent is three code nodes in self-hosted n8n:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Load&lt;/strong&gt; the tickets and a small knowledge base.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Answer or escalate&lt;/strong&gt; — the model may only answer from the knowledge base, and it &lt;em&gt;must&lt;/em&gt; cite which entry it used. No citation, no answer: the ticket escalates to a human. (This is the rule that keeps it from being a hallucination hose.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gate + receipts&lt;/strong&gt; — deterministic code decides whether the model's answer counts, and writes &lt;code&gt;answered.json&lt;/code&gt; / &lt;code&gt;escalated.json&lt;/code&gt; / &lt;code&gt;summary.json&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To measure cost, I wrapped the whole inbox in a loop and ran it 100 times. Every model call goes to &lt;code&gt;meta-llama/llama-4-scout&lt;/code&gt; through fal, which bills a flat rate per request, and every response carries an &lt;code&gt;x-fal-billable-units&lt;/code&gt; header you can check yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bill
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;1,200 calls&lt;/strong&gt; (100 runs × 12 tickets)&lt;/li&gt;
&lt;li&gt;fal's public rate: &lt;strong&gt;$0.001 per request&lt;/strong&gt;, flat&lt;/li&gt;
&lt;li&gt;Total: &lt;strong&gt;$1.20&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Per ticket, that's a tenth of a cent. Scale it out: a thousand tickets a month is about &lt;strong&gt;$1 in model calls, plus a ~$4 box&lt;/strong&gt; to run n8n on. Call it five dollars a month, all in.&lt;/p&gt;

&lt;p&gt;For comparison, Intercom's Fin — the market leader — charges &lt;strong&gt;$0.99 per resolution&lt;/strong&gt; (their public price). Fin is a whole platform: inbox, routing, analytics, compliance. This build is none of that. But the raw model work inside that 99 cents? A tenth of a cent. The other 98.9 cents is packaging. Sometimes worth it — now you know what it's for.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part nobody measures: consistency
&lt;/h2&gt;

&lt;p&gt;Cheap is worthless if it's random. So I ran the same 12 tickets through all 100 passes and asked a different question: &lt;strong&gt;did the agent make the same decisions every time?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;98 of 100 runs&lt;/strong&gt; came back identical: 9 answered, 3 escalated, the same tickets every time.&lt;/li&gt;
&lt;li&gt;The 2 runs that differed? The agent got &lt;em&gt;more&lt;/em&gt; careful, not less — it escalated one extra ticket instead of answering it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's the number I actually care about before trusting an agent with customers. A model that's cheap but non-deterministic in a decision path is its own kind of outage. The citation gate is what holds it steady: the model votes, and deterministic code decides whether the vote counts.&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest part
&lt;/h2&gt;

&lt;p&gt;Two things this bill leaves out, and one real failure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It excludes&lt;/strong&gt; your build time, keeping the knowledge base current, and connecting a real helpdesk (that's OAuth and webhooks I didn't pay for here).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Short tickets are cheap.&lt;/strong&gt; Longer conversations mean more tokens, so token-priced providers will cost more than this flat-per-request math suggests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;My first run died at exactly 5:00.&lt;/strong&gt; n8n ships a default task timeout of 300 seconds, and 1,200 sequential calls blew past it. One environment variable (&lt;code&gt;N8N_RUNNERS_TASK_TIMEOUT&lt;/code&gt;) fixed it. Round-number failures are almost always a config default, not your logic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The math is the part that lasts: &lt;strong&gt;count your calls, multiply by your provider's public rate, and read your own bill.&lt;/strong&gt; Don't estimate it — measure it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it yourself
&lt;/h2&gt;

&lt;p&gt;The whole workflow, the demo tickets, and the run receipts are here:&lt;br&gt;
👉 &lt;strong&gt;&lt;a href="https://github.com/Ships-Itself/builds/tree/main/ep05-cost-teardown" rel="noopener noreferrer"&gt;https://github.com/Ships-Itself/builds/tree/main/ep05-cost-teardown&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Import the workflow, point &lt;code&gt;EP05_DIR&lt;/code&gt; and &lt;code&gt;FAL_KEY&lt;/code&gt; at your setup, and hit execute. It writes its own receipts so you can check my numbers against yours.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I build one of these on camera each week and publish the real numbers — including the failures. If that's your thing, the video version of this teardown is on the &lt;a href="https://youtube.com/@shipsitself" rel="noopener noreferrer"&gt;Ships Itself&lt;/a&gt; channel.&lt;/em&gt;&lt;/p&gt;

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