<?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: julian-ros</title>
    <description>The latest articles on DEV Community by julian-ros (@julianros).</description>
    <link>https://dev.to/julianros</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%2F1427211%2F1a963522-9a45-4e29-b0eb-6b723159462a.jpeg</url>
      <title>DEV Community: julian-ros</title>
      <link>https://dev.to/julianros</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/julianros"/>
    <language>en</language>
    <item>
      <title>Helicone is in maintenance mode. Here's what to do about it.</title>
      <dc:creator>julian-ros</dc:creator>
      <pubDate>Fri, 25 Sep 2026 09:34:50 +0000</pubDate>
      <link>https://dev.to/julianros/helicone-is-in-maintenance-mode-heres-what-to-do-about-it-3cpj</link>
      <guid>https://dev.to/julianros/helicone-is-in-maintenance-mode-heres-what-to-do-about-it-3cpj</guid>
      <description>&lt;h1&gt;
  
  
  Helicone is in maintenance mode. Here's what to do about it.
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Last updated: 2026-09-25&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Helicone, the open-source LLM observability platform, was acquired by Mintlify in early March 2026 and is now in maintenance mode. If you're using it, nothing breaks today, but the dashboard (alerts, cost dashboards) and the gateway (proxying, caching, routing) have very different futures. Your migration decision depends almost entirely on which half you actually use. This article gives you a decision tree, a concrete migration diff, and an honest "stay for 90 days" option.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters now
&lt;/h2&gt;

&lt;p&gt;Helicone isn't a niche tool. It's one of the most-starred open-source LLM observability projects on GitHub, and its proxy gateway sits in front of production LLM traffic at a lot of companies. When a project at this scale goes into maintenance mode, the question isn't "should I care" — it's "which half of my setup is about to become a liability."&lt;/p&gt;

&lt;p&gt;The short answer: &lt;strong&gt;nothing breaks today.&lt;/strong&gt; The gateway still proxies. The dashboard still shows data. But the roadmap is frozen, and the two halves of the product are diverging in usefulness in opposite directions.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "maintenance mode" actually means here
&lt;/h2&gt;

&lt;p&gt;Helicone was acquired by Mintlify in early March 2026. The public status page and the community threads make the situation clear: the gateway remains open-source and functional, but active development has stopped. No new features. Bug fixes only, at the maintainers' discretion. The hosted dashboard is the part most affected — it still works, but it's not getting meaningful investment.&lt;/p&gt;

&lt;p&gt;There's no sunset date published. There's no EOL notice. That ambiguity is exactly why this article exists: you need to make a call without a deadline being handed to you.&lt;/p&gt;

&lt;h2&gt;
  
  
  The dashboard vs. the gateway: different futures
&lt;/h2&gt;

&lt;p&gt;This is the load-bearing distinction of the whole piece, so let's be precise about it.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;th&gt;Status going forward&lt;/th&gt;
&lt;th&gt;Your risk&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Dashboard&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cost tracking, request logs, alerts, session replays&lt;/td&gt;
&lt;td&gt;Frozen; hosted version still runs but isn't improving&lt;/td&gt;
&lt;td&gt;Medium — data keeps flowing, but alerts and dashboards rot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gateway/proxy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sits in front of LLM providers; caching, routing, retries, fallbacks&lt;/td&gt;
&lt;td&gt;Open-source, functional, no active development&lt;/td&gt;
&lt;td&gt;Low today, growing — no bug fixes for new provider APIs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If you only use the dashboard, you have more time than you think. If you use the gateway in front of production traffic, you have a real problem, and the problem compounds every time OpenAI, Anthropic, or Google ships a new API surface the proxy doesn't know about.&lt;/p&gt;

&lt;h2&gt;
  
  
  Decision tree: what to do based on how you use it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Are you using Helicone's gateway in front of production traffic?
│
├─ YES → Do you depend on caching, routing, or fallbacks?
│        │
│        ├─ YES → Migrate the gateway now. LiteLLM is the closest
│        │         open-source equivalent. See migration diff below.
│        │
│        └─ NO  → You're proxying for logging only. You can switch the
│                  logging layer without touching the gateway. Lower urgency.
│
└─ NO (dashboard only) → Do you have active alerts or cost dashboards
                         you check weekly?
         │
         ├─ YES → Plan a migration within 90 days. Export your data
         │        before you need it.
         │
         └─ NO  → You're fine for now. Revisit in a quarter.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The abandonment-risk screen
&lt;/h2&gt;

&lt;p&gt;Before you pick a replacement, ask one question: &lt;strong&gt;how much of your Helicone setup is custom code you wrote against Helicone's specific API or SDK?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If the answer is "almost none" — you're calling &lt;code&gt;helicone.init()&lt;/code&gt; and reading the dashboard — migration is a config change plus a data export. Days, not weeks.&lt;/li&gt;
&lt;li&gt;If the answer is "we built custom routing rules, custom session logic, or custom alerting on top of Helicone's API" — budget real engineering time. This is where migrations stall.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most teams overestimate how customized their setup is. Audit before you panic.&lt;/p&gt;

&lt;h2&gt;
  
  
  The LiteLLM security caveat (don't skip this)
&lt;/h2&gt;

&lt;p&gt;If you're evaluating LiteLLM as the gateway replacement, be aware of a real, documented security issue: the Wiz Research "Off Guard" report (March 2025) disclosed vulnerabilities in LiteLLM's default setup, including SSRF and authentication bypass paths in the proxy when exposed improperly.&lt;/p&gt;

&lt;p&gt;This doesn't mean "don't use LiteLLM." It means: &lt;strong&gt;if you deploy it, don't expose the proxy publicly without authentication, and keep it patched.&lt;/strong&gt; The vulnerabilities were disclosed and fixed; the lesson is about deployment hygiene, not about the project being unsafe. Read the Wiz writeup and LiteLLM's own security docs before you deploy.&lt;/p&gt;

&lt;h2&gt;
  
  
  The migration diff
&lt;/h2&gt;

&lt;p&gt;Here's what actually changes in your code when you move from Helicone's proxy to LiteLLM's proxy. This is the honest version — what you keep, what you lose, what you rewrite.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# BEFORE — Helicone proxy
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://oai.helicone.ai/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;default_headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Helicone-Auth&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bearer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;HELICONE_API_KEY&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Helicone-User-Id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# AFTER — LiteLLM proxy
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:4000&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# your LiteLLM proxy
&lt;/span&gt;    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;LITELLM_VIRTUAL_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="c1"&gt;# LiteLLM-issued key, not the provider's
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What you &lt;strong&gt;keep&lt;/strong&gt;: the OpenAI-compatible interface, request/response logging, cost tracking.&lt;/p&gt;

&lt;p&gt;What you &lt;strong&gt;lose&lt;/strong&gt;: Helicone's session replay UI, its specific alerting rules, its dashboard UX. You'll rebuild equivalents in whatever you replace the dashboard with.&lt;/p&gt;

&lt;p&gt;What you &lt;strong&gt;rewrite&lt;/strong&gt;: any custom headers, custom routing rules, or SDK-specific session logic. This is the part that takes real time.&lt;/p&gt;

&lt;h2&gt;
  
  
  The "stay for 90 days" option
&lt;/h2&gt;

&lt;p&gt;This is a legitimate choice, and it's underdiscussed.&lt;/p&gt;

&lt;p&gt;If you're dashboard-only, or gateway-only with no custom logic, staying on Helicone for another quarter is rational. The gateway still works. The data still flows. Nothing is on fire.&lt;/p&gt;

&lt;p&gt;But set a calendar reminder. The failure mode here isn't a hard outage — it's waking up in eight months to a broken integration with no migration plan and no one on the team who remembers how the proxy was configured. Maintenance mode doesn't kill you fast; it kills you by attrition.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I actually did (and didn't) test
&lt;/h2&gt;

&lt;p&gt;Full disclosure, because this topic deserves it: I tested the migration path above in a single-tenant environment with low throughput and OpenAI-compatible endpoints only. I did not test multi-tenant setups, high-volume routing, or Anthropic/Google-specific gateway features. Your mileage will vary, and the LiteLLM docs are the source of truth for anything I haven't touched.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gateway in production with custom logic:&lt;/strong&gt; migrate now, budget real time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gateway for logging only:&lt;/strong&gt; switch the logging layer, keep the gateway until it breaks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dashboard only with active alerts:&lt;/strong&gt; migrate within 90 days, export data first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dashboard only, no alerts:&lt;/strong&gt; stay, set a quarterly reminder.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nothing breaks today. That's not a reason to do nothing — it's the window to do it calmly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://status.helicone.ai" rel="noopener noreferrer"&gt;Helicone status page&lt;/a&gt; — current operational state&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.helicone.ai/blog/mintlify-acquisition" rel="noopener noreferrer"&gt;Mintlify acquisition announcement&lt;/a&gt; — March 2026&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.wiz.io/blog/litellm-proxy-rce-ssrf-vulnerability-cve-2024-6408" rel="noopener noreferrer"&gt;Wiz Research: Off Guard&lt;/a&gt; — LiteLLM security disclosure, March 2025&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.litellm.ai/docs/proxy/quick_start" rel="noopener noreferrer"&gt;LiteLLM proxy docs&lt;/a&gt; — migration reference&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Helicone/helicone" rel="noopener noreferrer"&gt;Helicone GitHub repository&lt;/a&gt; — commit activity, open issues&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.reddit.com/r/LLMDevs/" rel="noopener noreferrer"&gt;r/LLMDevs thread on Helicone maintenance mode&lt;/a&gt; — practitioner discussion&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.to/"&gt;DEV.to: Helicone maintenance mode discussion&lt;/a&gt; — community reaction&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.helicone.ai/" rel="noopener noreferrer"&gt;Helicone docs: proxy configuration&lt;/a&gt; — pre-migration reference&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.litellm.ai/docs/security" rel="noopener noreferrer"&gt;LiteLLM security docs&lt;/a&gt; — deployment hygiene&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Researched and drafted with AI assistance, checked against primary sources.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>observability</category>
      <category>devops</category>
    </item>
    <item>
      <title>Claude Code now reads AGENTS.md — but it won't merge it with CLAUDE.md</title>
      <dc:creator>julian-ros</dc:creator>
      <pubDate>Thu, 24 Sep 2026 21:58:24 +0000</pubDate>
      <link>https://dev.to/julianros/claude-code-now-reads-agentsmd-but-it-wont-merge-it-with-claudemd-4ihd</link>
      <guid>https://dev.to/julianros/claude-code-now-reads-agentsmd-but-it-wont-merge-it-with-claudemd-4ihd</guid>
      <description>&lt;p&gt;Most tutorials about AI agent instruction files tell you what to put in them. Almost none tell you what happens when two of them exist at once — or what the evidence says about whether any of it works.&lt;/p&gt;

&lt;p&gt;That gap matters right now, because Claude Code changed how it handles &lt;code&gt;AGENTS.md&lt;/code&gt; in the September 18 release, and the change created a trap that's easy to fall into silently. Your instructions can stop being read without any error, warning, or visible difference in behavior. You just get worse results and blame the model.&lt;/p&gt;

&lt;p&gt;This article covers the precedence rules as they actually work, a keep/cut framework for what belongs in these files, a 20-minute test to verify your setup, and the honest limitations of all of the above.&lt;/p&gt;

&lt;h2&gt;
  
  
  The precedence trap
&lt;/h2&gt;

&lt;p&gt;Claude Code reads two kinds of instruction files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;CLAUDE.md&lt;/code&gt; — Claude Code's native project memory file&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;AGENTS.md&lt;/code&gt; — a cross-tool convention also read by other coding agents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As of the September 18 change, Claude Code reads &lt;code&gt;AGENTS.md&lt;/code&gt; too. The part that trips people up is &lt;strong&gt;how&lt;/strong&gt; it reads them when both exist in the same project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's a fallback, not a merge.&lt;/strong&gt; When both files are present, Claude Code does not concatenate them, does not interleave them, and does not "combine the best of both." One file wins and the other is ignored. &lt;code&gt;CLAUDE.md&lt;/code&gt; takes precedence; &lt;code&gt;AGENTS.md&lt;/code&gt; is the fallback used when &lt;code&gt;CLAUDE.md&lt;/code&gt; is absent.&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;flowchart TD
    A[Claude Code starts a session] --&amp;gt; B{CLAUDE.md present?}
    B -- yes --&amp;gt; C[Read CLAUDE.md only]
    B -- no --&amp;gt; D{AGENTS.md present?}
    D -- yes --&amp;gt; E[Read AGENTS.md only]
    D -- no --&amp;gt; F[No project instructions loaded]&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;The failure mode looks like this: you maintain a carefully tuned &lt;code&gt;CLAUDE.md&lt;/code&gt;, then add an &lt;code&gt;AGENTS.md&lt;/code&gt; so tools like Codex or other agents can share the same instructions. From that moment, every edit you make to &lt;code&gt;AGENTS.md&lt;/code&gt; does nothing for Claude Code — and worse, if you &lt;em&gt;move&lt;/em&gt; content from &lt;code&gt;CLAUDE.md&lt;/code&gt; into &lt;code&gt;AGENTS.md&lt;/code&gt; thinking you're consolidating, Claude Code loses those instructions entirely. Nothing errors. The agent just starts forgetting your conventions, and you spend an afternoon wondering why.&lt;/p&gt;

&lt;p&gt;The reverse trap: you delete &lt;code&gt;CLAUDE.md&lt;/code&gt; during a cleanup, assuming &lt;code&gt;AGENTS.md&lt;/code&gt; covers the same ground. It does — but only if the content actually lives there. Fallback means substitution, not union. Anything that existed only in &lt;code&gt;CLAUDE.md&lt;/code&gt; is gone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Practical rule:&lt;/strong&gt; pick one file per project as the single source of truth. If your team uses multiple agent tools, put the shared content in &lt;code&gt;AGENTS.md&lt;/code&gt; and keep &lt;code&gt;CLAUDE.md&lt;/code&gt; either absent or containing only Claude-specific additions — never a partial copy, because a partial copy silently shadows the complete file.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually belongs in these files
&lt;/h2&gt;

&lt;p&gt;A recent controlled study on agent instruction files (arXiv 2602.11988) tested what kinds of content in files like these measurably change agent behavior. The findings cut against a lot of tutorial advice: long, generic instruction files don't reliably help, and some common categories of content show no measurable benefit or actively hurt by diluting the instructions that do matter.&lt;/p&gt;

&lt;p&gt;I want to be careful here: this is one study, and agent behavior varies by model version and task type. But the direction of the evidence is useful, and it matches what practitioners report anecdotally. The pattern that holds up:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Keep&lt;/th&gt;
&lt;th&gt;Cut&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Build, test, and lint commands (exact commands, not descriptions)&lt;/td&gt;
&lt;td&gt;Style guides and code-preference essays&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Project-specific gotchas ("don't touch &lt;code&gt;legacy/&lt;/code&gt;", "run migrations before tests")&lt;/td&gt;
&lt;td&gt;Generic best practices ("write clean code", "think step by step")&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Non-obvious constraints (env vars, ports, required services)&lt;/td&gt;
&lt;td&gt;Restating things the agent already knows from the codebase&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;File-location pointers ("API types live in &lt;code&gt;src/types/api.ts&lt;/code&gt;")&lt;/td&gt;
&lt;td&gt;Long background explainers about the architecture&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The logic is simple: context you spend on content the agent could infer from the code is context not spent on the constraints it couldn't. A one-line "never run &lt;code&gt;npm test&lt;/code&gt; without the docker stack up" is worth more than three paragraphs on your commit message philosophy.&lt;/p&gt;

&lt;p&gt;There's also a hard size limit to keep in mind — commonly reported around 32 KiB for these context files. &lt;strong&gt;Verify the exact current limit against Anthropic's docs before relying on it&lt;/strong&gt;; I'm flagging it as approximate rather than authoritative because the number has shifted across releases. The practical implication holds regardless of the exact figure: extremely long instruction files risk truncation, and truncation is silent.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 20-minute A/B protocol
&lt;/h2&gt;

&lt;p&gt;None of the above matters if your specific setup behaves differently. Here's a cheap way to find out, using a task you'd delegate anyway.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pick a representative task&lt;/strong&gt; — something you'd genuinely hand to Claude Code this week: a bug fix, a small feature, a refactor. Not a toy prompt; a real one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run it with your current setup.&lt;/strong&gt; Note the result: did it follow your conventions? How many correction rounds did you need?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Swap the files.&lt;/strong&gt; If you run both &lt;code&gt;CLAUDE.md&lt;/code&gt; and &lt;code&gt;AGENTS.md&lt;/code&gt;, rename one and re-run the same task. If you only run one file, strip it to the minimum (commands + hard constraints only) and re-run.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compare.&lt;/strong&gt; If results are equivalent with the smaller setup, the extra content was costing you context for nothing. If results degrade, you've learned which content actually earns its place — add it back selectively.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Twenty minutes, one task, and you stop guessing. The point isn't statistical rigor; it's converting an invisible configuration question into a visible before/after.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitations, honestly stated
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The study cited above is one paper on one set of models and tasks. Treat its conclusions as directional, not definitive.&lt;/li&gt;
&lt;li&gt;The precedence behavior described here reflects Claude Code as of the September 18 change. Agent tooling moves fast; re-verify against current release notes before building a team workflow on it.&lt;/li&gt;
&lt;li&gt;The ~32 KiB figure is approximate and version-dependent — check vendor docs.&lt;/li&gt;
&lt;li&gt;The A/B protocol is anecdotal by design. One task proves nothing statistically; it just beats guessing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;Claude Code reads &lt;code&gt;AGENTS.md&lt;/code&gt; as a fallback for &lt;code&gt;CLAUDE.md&lt;/code&gt; — not a merge, not a supplement. If both exist, one wins and the other is dead weight that can silently shadow live instructions. Audit which file is actually being read in each of your projects, trim instruction files to commands and constraints the agent can't infer on its own, and verify your setup with a single before/after task rather than trusting a tutorial — including this one.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Sources&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;arXiv 2602.11988 — controlled study on agent instruction-file content and effectiveness (primary)&lt;/li&gt;
&lt;li&gt;Anthropic Claude Code release notes and documentation, September 18 update (primary — verify current precedence behavior and file size limits against the live docs)&lt;/li&gt;
&lt;li&gt;AGENTS.md cross-tool specification and adopting-tool documentation (primary)&lt;/li&gt;
&lt;li&gt;Linux Foundation announcement on AGENTS.md standard adoption, including repo adoption figures (secondary)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Researched and drafted with AI assistance, checked against primary sources.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claudecode</category>
      <category>productivity</category>
      <category>devtools</category>
    </item>
    <item>
      <title>LLM Observability &amp; Evaluation Tools: A Practical Guide for Small Teams</title>
      <dc:creator>julian-ros</dc:creator>
      <pubDate>Tue, 22 Sep 2026 08:01:13 +0000</pubDate>
      <link>https://dev.to/julianros/llm-observability-evaluation-tools-a-practical-guide-for-small-teams-41d5</link>
      <guid>https://dev.to/julianros/llm-observability-evaluation-tools-a-practical-guide-for-small-teams-41d5</guid>
      <description>&lt;h1&gt;
  
  
  LLM Observability &amp;amp; Evaluation Tools: A Practical Guide for Small Teams
&lt;/h1&gt;

&lt;p&gt;You shipped the GPT-powered feature. Users are hitting it. And now you're flying blind.&lt;/p&gt;

&lt;p&gt;Latency spikes, unexpected token costs, prompt injections slipping through, hallucinated responses eroding trust—these aren't hypothetical risks. They're Tuesday. And the larger your production LLM deployment grows, the more "just add logging" stops being a viable strategy.&lt;/p&gt;

&lt;p&gt;LLM observability and evaluation tools exist to solve this problem: they give you visibility into what your models are actually doing in production and whether the outputs are any good. But most of the content in this space is either vendor-driven marketing or enterprise-focused to the point of irrelevance for a team of three shipping on a budget.&lt;/p&gt;

&lt;p&gt;This guide is for small teams, indie developers, and startups who need real observability without the enterprise price tag or complexity overhead.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Traditional Monitoring Doesn't Work for LLMs
&lt;/h2&gt;

&lt;p&gt;Application performance monitoring tools like Datadog or New Relic are excellent at tracking request latency, error rates, and throughput. They're not built for the unique failure modes of language models.&lt;/p&gt;

&lt;p&gt;LLM-specific challenges include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Non-deterministic outputs&lt;/strong&gt;: The same input can produce different responses across calls, making traditional assertion-based testing insufficient.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantic correctness&lt;/strong&gt;: A response can be HTTP 200 and still be completely wrong, harmful, or hallucinated.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token economics&lt;/strong&gt;: Cost isn't just about uptime—it's about how many tokens your prompts and completions consume, and whether shorter prompts could deliver equivalent quality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompt versioning&lt;/strong&gt;: Small prompt changes can cause dramatic behavioral shifts. Without version tracking, you're debugging in the dark.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is why a dedicated observability layer matters, even at small scale.&lt;/p&gt;




&lt;h2&gt;
  
  
  What You Actually Need (And What You Can Skip)
&lt;/h2&gt;

&lt;p&gt;For a small team, the observability stack doesn't need to be monumental. Here's what moves the needle:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Why It Matters&lt;/th&gt;
&lt;th&gt;Priority&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Request/response logging&lt;/td&gt;
&lt;td&gt;Debug failures, audit outputs&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Must-have&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Latency &amp;amp; token tracking&lt;/td&gt;
&lt;td&gt;Cost control, performance baselines&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Must-have&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prompt versioning&lt;/td&gt;
&lt;td&gt;Reproducibility, A/B testing&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Must-have&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Semantic evaluation (quality scoring)&lt;/td&gt;
&lt;td&gt;Catch hallucinations, measure relevance&lt;/td&gt;
&lt;td&gt;High value, can start basic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User feedback loops&lt;/td&gt;
&lt;td&gt;Real-world signal on output quality&lt;/td&gt;
&lt;td&gt;High value, often underused&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PII redaction&lt;/td&gt;
&lt;td&gt;Compliance when handling user data&lt;/td&gt;
&lt;td&gt;Must-have if handling user data&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If you're not logging every prompt and completion with latency and token counts, you're not doing observability—you're doing wishful thinking.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Landscape: Tools Worth Evaluating
&lt;/h2&gt;

&lt;p&gt;The LLM observability space has matured noticeably. Here's how the major players break down for small-team use cases.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cloud-Hosted Platforms
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;LangSmith (by LangChain)&lt;/strong&gt; — Deep integration if you're already in the LangChain ecosystem. Offers tracing, evaluation datasets, and a prompt playground. The free tier covers early-stage projects well. Limitation: tight coupling to LangChain can feel constraining if you're using direct API calls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Arize AI&lt;/strong&gt; — More enterprise-oriented but offers a free tier and self-serve onboarding. Strong on evaluation metrics and model performance dashboards. The learning curve is steeper, and the interface was clearly designed for ML engineers at scale rather than a three-person startup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Weights &amp;amp; Biases&lt;/strong&gt; — Originally built for experiment tracking in ML training, now expanding into LLM-specific tooling. Excellent if you're also fine-tuning models. Less focused on production observability compared to LangSmith.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PromptLayer&lt;/strong&gt; — Lightweight, purpose-built for prompt management and request logging. Lower complexity, good for teams that want fast setup. Fewer evaluation features than the heavier tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  Open-Source Options
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Langfuse&lt;/strong&gt; — Open-source LLM engineering platform. Self-hostable, which matters if you can't send prompts to a third-party SaaS. Active development, strong community. The tradeoff: self-hosting means you own the infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LlamaIndex (built-in eval)&lt;/strong&gt; — If you're using LlamaIndex for RAG pipelines, its native evaluation tools handle faithfulness and relevance scoring out of the box. Not a standalone observability platform, but useful as a component.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phoenix (by Arize)&lt;/strong&gt; — Open-source tracing and evaluation. Can run locally or connect to Arize's cloud platform. Good middle ground between "full self-host" and "fully managed."&lt;/p&gt;




&lt;h2&gt;
  
  
  A Realistic Setup for a Small Team
&lt;/h2&gt;

&lt;p&gt;You don't need all of these. Here's a practical starting stack:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Langfuse (self-hosted) or LangSmith (cloud)&lt;/strong&gt; for request tracing and prompt versioning. Pick based on your data sensitivity requirements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Basic evaluation with LLM-as-judge&lt;/strong&gt; — Use a cheaper model like GPT-4o-mini to score your primary model's outputs for relevance, factuality, or safety. This is surprisingly effective and costs almost nothing at low volume.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A simple feedback mechanism&lt;/strong&gt; — Even a thumbs up/down on production responses, logged alongside the trace ID, gives you signal no automated metric can replicate.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Total setup time for this stack: a weekend, assuming you're comfortable with Docker or managed platforms.&lt;/p&gt;




&lt;h2&gt;
  
  
  What "Evaluation" Actually Means in Practice
&lt;/h2&gt;

&lt;p&gt;Evaluation is where most small teams get stuck. The concept is straightforward: measure whether your LLM outputs are good. But "good" is subjective and context-dependent.&lt;/p&gt;

&lt;p&gt;The pragmatic approach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Define 3-5 concrete failure modes&lt;/strong&gt; for your specific use case (hallucinated facts, off-topic responses, PII leakage, refusal when it should answer, verbosity).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build a small test dataset&lt;/strong&gt; — 30-50 representative inputs with expected behavior annotated. Tedious but irreplaceable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run automated evals&lt;/strong&gt; using an LLM-as-judge or heuristic checks against this dataset after every prompt change.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Track eval scores over time&lt;/strong&gt; so you can spot regressions before users do.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's the equivalent of writing tests for your application code. And it works.&lt;/p&gt;




&lt;h2&gt;
  
  
  Cost Reality Check
&lt;/h2&gt;

&lt;p&gt;Observability costs can sneak up on you. Most platforms price by trace volume or ingested data. At low volume (under 10K traces/month), free tiers usually suffice. But watch for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Per-trace pricing that looks cheap at 1K but painful at 100K&lt;/li&gt;
&lt;li&gt;Storage retention policies that silently delete your historical data&lt;/li&gt;
&lt;li&gt;Evaluation API calls that consume tokens on a separate billing line&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Budget $0-50/month for the first six months, then reassess as volume grows.&lt;/p&gt;




&lt;h2&gt;
  
  
  Bottom Line
&lt;/h2&gt;

&lt;p&gt;For small teams building production LLM applications, &lt;strong&gt;Langfuse&lt;/strong&gt; is the strongest starting point: open-source, self-hostable, actively maintained, and purpose-built for the tracing and prompt management that actually matter at this stage. If you prefer managed infrastructure and are already in the LangChain ecosystem, &lt;strong&gt;LangSmith&lt;/strong&gt; is the pragmatic alternative. Either way, start logging everything, build a small evaluation dataset this week, and stop relying on manual spot-checks to catch problems.&lt;/p&gt;

&lt;p&gt;The tools are accessible. The main barrier isn't technology—it's the discipline to set up observability before something goes wrong in production.&lt;/p&gt;

&lt;p&gt;Researched and drafted with AI assistance, checked against primary sources.&lt;/p&gt;

</description>
      <category>llm</category>
      <category>observability</category>
      <category>devops</category>
      <category>ai</category>
    </item>
    <item>
      <title>Cloudflare Workflows now bills per step — one developer's bill jumped from $0 to ~$1,600/month</title>
      <dc:creator>julian-ros</dc:creator>
      <pubDate>Fri, 18 Sep 2026 18:37:08 +0000</pubDate>
      <link>https://dev.to/julianros/cloudflare-workflows-now-bills-per-step-one-developers-bill-jumped-from-0-to-1600month-1mnb</link>
      <guid>https://dev.to/julianros/cloudflare-workflows-now-bills-per-step-one-developers-bill-jumped-from-0-to-1600month-1mnb</guid>
      <description>&lt;p&gt;Cloudflare Workflows — the durable-execution engine Cloudflare built on top of Workers for orchestrating multi-step, long-running jobs — &lt;a href="https://developers.cloudflare.com/changelog/post/2026-07-07-workflows-billing-updates/" rel="noopener noreferrer"&gt;started charging per step on August 10, 2026&lt;/a&gt;. One developer who'd already migrated an ingestion platform onto it posted &lt;a href="https://community.cloudflare.com/t/workflows-per-step-billing-punishes-the-granular-steps-your-own-docs-prescribe/939829" rel="noopener noreferrer"&gt;a rough estimate&lt;/a&gt; of what the change would do to their bill: from $0/month to somewhere around $1,600/month, across 30 workflows and roughly 20 million instances a month. Nobody enjoys that kind of email from their cloud bill.&lt;/p&gt;

&lt;p&gt;Here's what actually changed, what it costs in practice, and how to figure out where you land before Cloudflare tells you.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Workflows is, and what just changed
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://blog.cloudflare.com/workflows-ga-production-ready-durable-execution" rel="noopener noreferrer"&gt;Workflows&lt;/a&gt; lets you write multi-step jobs — an order pipeline, a data ingestion run, anything that needs to survive a crash partway through — where each step (&lt;code&gt;step.do()&lt;/code&gt;, &lt;code&gt;step.sleep()&lt;/code&gt;, &lt;code&gt;step.waitForEvent()&lt;/code&gt;) is independently retriable. If payment processing fails, only that step retries; the inventory check that already succeeded doesn't re-run. It's built for exactly the kind of orchestration that used to mean standing up a real queue and a state machine.&lt;/p&gt;

&lt;p&gt;Until this August, Cloudflare billed Workflows the same way it bills Workers: active CPU time, not idle time spent waiting on an API or a database. That's still true. What's new is a second, separate meter: every step you execute now counts against a monthly allowance, and past that allowance, you pay per step.&lt;/p&gt;

&lt;h2&gt;
  
  
  The actual rate card
&lt;/h2&gt;

&lt;p&gt;Per &lt;a href="https://developers.cloudflare.com/workflows/reference/pricing" rel="noopener noreferrer"&gt;Cloudflare's pricing reference&lt;/a&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Free plan&lt;/th&gt;
&lt;th&gt;Paid plan&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Steps&lt;/td&gt;
&lt;td&gt;3,000/day included&lt;/td&gt;
&lt;td&gt;500,000/month included, then $0.80 per additional 100,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Storage&lt;/td&gt;
&lt;td&gt;1 GB-month included&lt;/td&gt;
&lt;td&gt;1 GB-month included, then $0.20/GB-month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Requests&lt;/td&gt;
&lt;td&gt;100,000/day (shared with Workers)&lt;/td&gt;
&lt;td&gt;10M/month included, then $0.30/million&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CPU time&lt;/td&gt;
&lt;td&gt;10ms/invocation&lt;/td&gt;
&lt;td&gt;30M ms/month included, then $0.02/million ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A "step" is any unit of work the Workflow executes — including sleeps and event waits, not just code. Rollback handlers and retries don't count as extra steps, only the original execution does. Storage is billed as GB-month, averaged over peak daily storage across running, sleeping, errored, and completed instances — retained 3 days on Free, 30 on Paid by default.&lt;/p&gt;

&lt;p&gt;Requests and CPU time are unchanged since the public beta. Steps and storage are the two new line items, and steps are the one that actually moves the needle for most workloads.&lt;/p&gt;

&lt;h2&gt;
  
  
  Running the numbers
&lt;/h2&gt;

&lt;p&gt;Start small. A single order-fulfillment workflow — validate, charge, provision, confirm — at 100,000 orders/month is 400,000 steps/month. That's under the 500,000 included allowance. &lt;strong&gt;Cost: $0.&lt;/strong&gt; Most small teams will never notice this change.&lt;/p&gt;

&lt;p&gt;Now scale it up. The developer above didn't publish their exact steps-per-instance breakdown, but you can back into it: at ~20 million instances/month, their reported ~$1,600/month implies roughly 10 billable steps per instance. Here's that math laid out, so you can plug in your own numbers:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Steps per instance&lt;/th&gt;
&lt;th&gt;Total steps/month&lt;/th&gt;
&lt;th&gt;Billable (over 500K)&lt;/th&gt;
&lt;th&gt;Monthly cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;40M&lt;/td&gt;
&lt;td&gt;39.5M&lt;/td&gt;
&lt;td&gt;$316&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;80M&lt;/td&gt;
&lt;td&gt;79.5M&lt;/td&gt;
&lt;td&gt;$636&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;120M&lt;/td&gt;
&lt;td&gt;119.5M&lt;/td&gt;
&lt;td&gt;$956&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;160M&lt;/td&gt;
&lt;td&gt;159.5M&lt;/td&gt;
&lt;td&gt;$1,276&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;200M&lt;/td&gt;
&lt;td&gt;199.5M&lt;/td&gt;
&lt;td&gt;$1,596&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxxsl14wvsci1x4svz7l7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxxsl14wvsci1x4svz7l7.png" alt="Line chart: Cloudflare Workflows monthly cost by steps per instance, at 20 million instances per month" width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The formula, if you want to run your own: &lt;code&gt;(instances/month × steps/instance − 500,000) ÷ 100,000 × $0.80&lt;/code&gt;. Ten minutes with your own instance count and average step count per workflow gets you a real number instead of a surprise.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part that actually stings
&lt;/h2&gt;

&lt;p&gt;Here's the thing that makes this more than a routine price increase: Cloudflare's own documentation tells you to make your steps granular — split independent operations into separate steps so each one retries on its own instead of re-running the whole workflow on a transient failure. That's good architecture. It's also now the thing that multiplies your bill.&lt;/p&gt;

&lt;p&gt;A workflow with two consolidated "mega-steps" costs a fraction of the same workflow split into ten granular, individually-retriable ones — even though the granular version is more resilient and more in line with what Cloudflare itself recommends. The developer in that community thread put it plainly: teams that ignored the granularity advice are now paying roughly a tenth of what teams that followed it are paying. That's an unusual way to reward best practice, and — this being the internet — the thread's since gone quiet with zero replies, staff or otherwise, which is its own small commentary on how the announcement landed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Auditing your own bill before it lands
&lt;/h2&gt;

&lt;p&gt;Four things worth actually doing this week if you run anything on Workflows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Count your step operations per instance.&lt;/strong&gt; Every &lt;code&gt;step.do()&lt;/code&gt;, &lt;code&gt;step.sleep()&lt;/code&gt;, and &lt;code&gt;step.waitForEvent()&lt;/code&gt; call in a typical run. Loops and retried-but-succeeding operations count once; failed-then-retried ones don't add extra per Cloudflare's rules.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiply by monthly instance volume&lt;/strong&gt;, compare against the 500,000/month included allowance, and run the formula above.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Look at retention.&lt;/strong&gt; Paid plans default to 30 days of stored instance state. If you don't need a month of history, cutting retention shrinks the storage line — smaller than the step line for most workloads, but not nothing at scale.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decide, deliberately, whether to consolidate.&lt;/strong&gt; Merging operations into fewer steps saves money. It also means a mid-workflow failure re-runs more work on retry. That's a real tradeoff, not a free optimization — make it on purpose, not by accident.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  When it's worth looking elsewhere
&lt;/h2&gt;

&lt;p&gt;If your workload is genuinely step-heavy and the math above lands somewhere uncomfortable, it's worth pricing out dedicated job platforms rather than assuming Workflows is your only option. &lt;strong&gt;&lt;a href="https://niche-finder-redirector.julian-ros-gh.workers.dev/r?id=opp_008&amp;amp;to=https%3A%2F%2Ftrigger.dev%2Fpricing&amp;amp;pos=top" rel="noopener noreferrer"&gt;Trigger.dev&lt;/a&gt;&lt;/strong&gt; bills on compute-seconds and per-run invocation ($0.000025/run) rather than per step, which can work out cheaper for workflows with many small steps but modest total compute. &lt;strong&gt;&lt;a href="https://niche-finder-redirector.julian-ros-gh.workers.dev/r?id=opp_008&amp;amp;to=https%3A%2F%2Fwww.inngest.com%2Fpricing&amp;amp;pos=top" rel="noopener noreferrer"&gt;Inngest&lt;/a&gt;&lt;/strong&gt; bills per execution instead — 50,000/month free, then plans starting at $99/month for 1M executions — which is a different enough shape that it's worth modeling against your own instance count before assuming it's cheaper or pricier.&lt;/p&gt;

&lt;p&gt;Neither is a drop-in replacement. You'd be trading Workflows' tight Workers integration for a different execution model and different failure-handling guarantees. But if the per-step math above is ugly, it's a real comparison worth running, not just a hypothetical.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;The billing change itself is straightforward and clearly documented; what catches people is that Cloudflare's own architectural advice — granular, independently-retriable steps — is exactly what runs the bill up. If you're already on Workflows, don't wait for the invoice to find out where you land: count your steps, run the formula, and decide on purpose whether granularity is worth paying for on your specific workload.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Count steps per instance and multiply by monthly volume against the formula above before assuming anything about your bill&lt;/li&gt;
&lt;li&gt;Treat step consolidation as a real reliability-vs-cost tradeoff, not a free win&lt;/li&gt;
&lt;li&gt;Check your storage retention setting if you're storing large instance state&lt;/li&gt;
&lt;li&gt;If the math is bad, model your workload against &lt;strong&gt;&lt;a href="https://niche-finder-redirector.julian-ros-gh.workers.dev/r?id=opp_008&amp;amp;to=https%3A%2F%2Ftrigger.dev%2Fpricing&amp;amp;pos=bottom" rel="noopener noreferrer"&gt;Trigger.dev&lt;/a&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;a href="https://niche-finder-redirector.julian-ros-gh.workers.dev/r?id=opp_008&amp;amp;to=https%3A%2F%2Fwww.inngest.com%2Fpricing&amp;amp;pos=bottom" rel="noopener noreferrer"&gt;Inngest&lt;/a&gt;&lt;/strong&gt; before ruling out a switch&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Researched and drafted with AI assistance, checked against primary sources.&lt;/p&gt;

</description>
      <category>cloudflare</category>
      <category>serverless</category>
      <category>webdev</category>
      <category>devops</category>
    </item>
    <item>
      <title>Render's new Flex compute plan bills you for what your Workflows actually use — here's when that beats a fixed plan</title>
      <dc:creator>julian-ros</dc:creator>
      <pubDate>Thu, 17 Sep 2026 20:31:33 +0000</pubDate>
      <link>https://dev.to/julianros/renders-new-flex-compute-plan-bills-you-for-what-your-workflows-actually-use-heres-when-that-cng</link>
      <guid>https://dev.to/julianros/renders-new-flex-compute-plan-bills-you-for-what-your-workflows-actually-use-heres-when-that-cng</guid>
      <description>&lt;p&gt;Render Workflows just made it way cheaper to run tasks that don't actually need peak compute — and the math matters more than you'd think. On &lt;a href="https://render.com/changelog/introduced-the-flex-compute-plan-for-render-workflows" rel="noopener noreferrer"&gt;September 1, 2026, Render rolled out Flex&lt;/a&gt;, a pay-for-actual-use compute plan that replaces the old fixed tiers for background task orchestration. If you've been paying for a 1 CPU / 4 GB box to handle tasks that spend half their time idle, this changes the game.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Render Workflows is, and what changed
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://render.com/docs/workflows" rel="noopener noreferrer"&gt;Render Workflows&lt;/a&gt; is an orchestration engine for long-running, distributed tasks — you define task functions in TypeScript or Python via their SDK, Render queues and provisions workers on-demand, and you don't manage any servers. It launched in beta on April 7, 2026, and sits in the middle of Render's background-task product line: it's different from Background Workers (a persistent fleet you keep running) and Cron Jobs (fixed schedules only). Workflows spin up and down per task invocation, scaling to zero when idle. The service targets AI agent workflows, data pipelines, billing flows, and multi-step orchestrations.&lt;/p&gt;

&lt;p&gt;Until September 1, Workflows tasks ran on fixed compute tiers. On that date, Render made &lt;strong&gt;Flex&lt;/strong&gt; the default plan. Existing Starter and Standard tasks auto-migrated; no action needed. Flex bills only for the CPU and RAM you actually burn during a run, not the full allotment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Flex vs. fixed: the rate card
&lt;/h2&gt;

&lt;p&gt;Here's what you're choosing between:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;CPU&lt;/th&gt;
&lt;th&gt;RAM&lt;/th&gt;
&lt;th&gt;Pricing&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Flex&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;up to 1&lt;/td&gt;
&lt;td&gt;up to 4 GB&lt;/td&gt;
&lt;td&gt;$0.20/CPU-hour + $0.05/GB-hour (prorated by second; 0.1 CPU / 0.1 GB floor per run)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;2c-4g&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;4 GB&lt;/td&gt;
&lt;td&gt;$0.40/hour&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;2c-8g&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;8 GB&lt;/td&gt;
&lt;td&gt;$0.70/hour&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;4c-8g&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;8 GB&lt;/td&gt;
&lt;td&gt;$1.00/hour&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;4c-16g&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;16 GB&lt;/td&gt;
&lt;td&gt;$1.50/hour&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7kd4fl6me71a3hsiukfq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7kd4fl6me71a3hsiukfq.png" alt="Bar chart: hourly cost of Render Flex at max usage compared against the four fixed compute plans" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Flex is billed per second of actual usage. Fixed plans charge the full hourly rate regardless of how hard your task worked. The exact specs &lt;a href="https://render.com/docs/workflows-limits" rel="noopener noreferrer"&gt;per Render's docs&lt;/a&gt;: Flex maxes out at 1 CPU and 4 GB; fixed plans are opt-in via your task definition if you need more.&lt;/p&gt;

&lt;h2&gt;
  
  
  The math: when Flex wins, and when it doesn't
&lt;/h2&gt;

&lt;p&gt;Take a real example from &lt;a href="https://render.com/blog/upcoming-changes-to-workflows-pricing" rel="noopener noreferrer"&gt;Render's pricing documentation&lt;/a&gt;. A light task that averages 0.1 CPU and 0.25 GB RAM, running for 10 seconds per invocation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Flex hourly rate at that usage: (0.1 × $0.20) + (0.25 × $0.05) = &lt;strong&gt;$0.0325/hour&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Cost per 10-second run: &lt;strong&gt;~$0.00009&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;At 5,000 runs/month: &lt;strong&gt;~$0.45/month&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now the other end. A task that runs at Flex's ceiling: 1 CPU, 4 GB RAM, continuously. Flex costs (1 × $0.20) + (4 × $0.05) = &lt;strong&gt;$0.40/hour&lt;/strong&gt; — which is &lt;em&gt;exactly&lt;/em&gt; equal to the 2c-4g fixed plan's rate. The catch: 2c-4g gives you 2 CPU for that same $0.40/hour. So if your workload consistently needs close to Flex's full 1 CPU / 4 GB, you're leaving compute on the table. You get more CPU per dollar on a fixed plan once average utilization stabilizes near Flex's ceiling.&lt;/p&gt;

&lt;p&gt;The breakeven is clean: Flex is cheaper per hour for anything running below Flex's capacity ceiling. But Flex &lt;em&gt;physically cannot exceed&lt;/em&gt; 1 CPU or 4 GB — so if your task needs more, you're on a fixed plan anyway, regardless of cost. The real question is whether your task's &lt;em&gt;average&lt;/em&gt; load sits well below that ceiling. If it does, Flex saves money. If it's consistently hugging Flex's max, you're better off on 2c-4g.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two other cost and concurrency changes to know about
&lt;/h2&gt;

&lt;p&gt;On the same day, &lt;a href="https://render.com/docs/workflows-limits" rel="noopener noreferrer"&gt;Render also introduced&lt;/a&gt; a &lt;strong&gt;$0.25 per GB per month&lt;/strong&gt; charge to retain your task's stored input arguments and return values (retained for 30 days). This is separate from compute billing and can add up if you're logging large payloads.&lt;/p&gt;

&lt;p&gt;They also overhauled concurrency limits — moved from workspace-wide caps to per-workflow caps. On a Hobby plan, you can start up to 16 CPU / 64 GB of new task runs per minute. Pro and above: 32 CPU / 128 GB per minute. A single workflow can have up to 10,000 CPU / 40,000 GB of concurrently active runs, which is more permissive than the old system but still a ceiling to watch if you're running high-fan-out orchestrations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to try it
&lt;/h2&gt;

&lt;p&gt;If you're already running background tasks or thinking about wiring up a multi-step job pipeline, this pricing model is worth a test. &lt;strong&gt;&lt;a href="https://niche-finder-redirector.julian-ros-gh.workers.dev/r?id=opp_007&amp;amp;to=https%3A%2F%2Frender.com%2Fworkflows&amp;amp;pos=top" rel="noopener noreferrer"&gt;Render Workflows&lt;/a&gt;&lt;/strong&gt; handles the queuing and scaling; you just write functions and let Flex do the billing math.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;Flex is the right default for spiky, low-average-utilization tasks — webhook handlers, light data processing, API glue work. If your tasks run fast and infrequently, Flex's per-second granularity will almost always beat a fixed plan. But once a task's real average usage climbs to within shouting distance of Flex's 1 CPU / 4 GB ceiling, the fixed tiers give you more compute per dollar. The math is public, prorated to the second, and the choice is yours per task. Run the numbers against your actual workload before committing.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;Flex&lt;/strong&gt; for tasks with low or bursty average compute usage (most webhooks, light background jobs)&lt;/li&gt;
&lt;li&gt;Switch to a &lt;strong&gt;fixed plan&lt;/strong&gt; if a task's average load consistently approaches or exceeds Flex's 1 CPU / 4 GB ceiling&lt;/li&gt;
&lt;li&gt;Watch the new $0.25/GB/month retention charge if you're storing large task inputs/outputs&lt;/li&gt;
&lt;li&gt;Check your concurrency needs against the new per-workflow caps if you're running high-fan-out orchestrations&lt;/li&gt;
&lt;li&gt;Get started with &lt;strong&gt;&lt;a href="https://niche-finder-redirector.julian-ros-gh.workers.dev/r?id=opp_007&amp;amp;to=https%3A%2F%2Frender.com%2Fworkflows&amp;amp;pos=bottom" rel="noopener noreferrer"&gt;Render Workflows&lt;/a&gt;&lt;/strong&gt; and run the CPU/RAM-hour math above against your own task's real usage before picking a plan&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Researched and drafted with AI assistance, checked against primary sources.&lt;/p&gt;

</description>
      <category>render</category>
      <category>webdev</category>
      <category>backend</category>
      <category>devops</category>
    </item>
    <item>
      <title>Neon just gave AI agents their own database, no signup required. Here's how the handoff actually works.</title>
      <dc:creator>julian-ros</dc:creator>
      <pubDate>Thu, 17 Sep 2026 17:28:48 +0000</pubDate>
      <link>https://dev.to/julianros/neon-just-gave-ai-agents-their-own-database-no-signup-required-heres-how-the-handoff-actually-5cbh</link>
      <guid>https://dev.to/julianros/neon-just-gave-ai-agents-their-own-database-no-signup-required-heres-how-the-handoff-actually-5cbh</guid>
      <description>&lt;p&gt;If you've built anything with a coding agent lately, you've hit this wall: the agent gets to the part where it needs a real Postgres instance, and then it stops. Not because it can't write the schema — because provisioning a database usually means a signup form, an email verification link, and a credit card field, and agents are famously bad at checking their inbox.&lt;/p&gt;

&lt;p&gt;On September 11, 2026, &lt;a href="https://neon.com/blog/an-agent-provisions-a-neon-backend-a-human-claims-it-later" rel="noopener noreferrer"&gt;Neon shipped a fix for exactly that problem&lt;/a&gt;: &lt;strong&gt;Claimable Neon&lt;/strong&gt;, a flow that lets an agent provision a real, temporary Postgres project with scoped credentials — no account, no payment details — and then hand it off to an actual human later via a claim link. It's a small feature with a genuinely new idea underneath it, and as of this week nobody else on DEV.to has written it up.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually shipped
&lt;/h2&gt;

&lt;p&gt;The mechanics, straight from &lt;a href="https://neon.com/docs/reference/claimable-postgres" rel="noopener noreferrer"&gt;Neon's technical reference&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;An agent discovers the flow through a machine-readable &lt;code&gt;auth.md&lt;/code&gt; file at &lt;code&gt;neon.com/auth.md&lt;/code&gt; (a pattern &lt;a href="https://workos.com/blog/neon-claimable-postgres-auth-md-case-study" rel="noopener noreferrer"&gt;WorkOS has been pushing as a discovery protocol for agent-to-service registration&lt;/a&gt;), then runs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i -g neon@latest
neon claim create --service data-api --service auth --env-pull
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That single command provisions a project scoped to that session — Lakebase Postgres, optionally the Data API and Managed Better Auth — and hands back credentials the agent can use immediately with any standard Postgres client. No human touches a signup form. When the build is done, the agent runs &lt;code&gt;neon claim accept --no-open&lt;/code&gt;, which generates a short-lived link. A human clicks it, logs into (or creates) a Neon account, picks an org, and accepts the transfer. Neon then rotates every credential the agent was using, so the agent's access dies the moment a human takes ownership.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftzio84chuq9238omud7i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftzio84chuq9238omud7i.png" alt="Flow diagram: agent creates a Neon project, generates a transfer request, hands the user a claim URL, which either gets claimed within 15 minutes or the project is deleted after 72 hours" width="798" height="133"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The part that actually matters: it's on a leash
&lt;/h2&gt;

&lt;p&gt;Here's where it gets more interesting than "agents can make databases now." Neon put real limits on this, and they're worth knowing before you build a workflow around it:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Constraint&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unclaimed project lifetime&lt;/td&gt;
&lt;td&gt;72 hours, then deleted&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Storage cap (pre-claim)&lt;/td&gt;
&lt;td&gt;100 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transfer cap (pre-claim)&lt;/td&gt;
&lt;td&gt;1 GB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claim link validity&lt;/td&gt;
&lt;td&gt;15 minutes per issuance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Access token lifetime&lt;/td&gt;
&lt;td&gt;900 seconds (15 min)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Builder-initiated transfer TTL (default, for platforms rolling their own claim flow via the transfer-request API)&lt;/td&gt;
&lt;td&gt;24 hours&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;That last row is a separate, more general mechanism: platforms building their own onboarding on top of Neon's project-transfer API can set their own expiration instead of using the packaged 15-minute claim link. Same underlying idea, two entry points.&lt;/p&gt;

&lt;p&gt;That's a database with an expiration date, and it's the right call. A durable, unbounded database that anyone can spin up with zero identity check is an abuse vector waiting to happen — someone scripts a loop, and you've got a few thousand free Postgres instances quietly costing Neon money with no one to bill. Capping it at 100 MB and 72 hours turns "anonymous infrastructure" into "anonymous demo," which is a much smaller attack surface. It's basically Tinder for databases: you've got a short window to make a real connection, or the whole thing expires and nobody remembers it happened.&lt;/p&gt;

&lt;p&gt;Currently the claimable flow covers Postgres, the Data API, and Managed Better Auth. Object Storage, Functions, and the AI Gateway are marked "coming soon" in the docs, so this is v1, not the finished product.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who this is actually for
&lt;/h2&gt;

&lt;p&gt;This isn't aimed at you provisioning your own side project's database — you're not the bottleneck there, you have an account already. It's aimed at people building the thing that builds the thing: AI coding-agent platforms, no-code/agentic app builders, onboarding flows where a prospect should see a working app before they've committed to creating an account anywhere. If you're building a Bolt- or Replit-style product and your current answer to "the agent needs a database" is either your own hand-rolled multi-tenant Postgres cluster or forcing users through a signup wall before they see a single query run, this replaces that plumbing with three API calls (per &lt;a href="https://neon.com/docs/workflows/claimable-database-integration" rel="noopener noreferrer"&gt;Neon's integration guide&lt;/a&gt;): create a project, generate a transfer request, hand the user a claim URL.&lt;/p&gt;

&lt;p&gt;If you're building that kind of platform, &lt;strong&gt;&lt;a href="https://niche-finder-redirector.julian-ros-gh.workers.dev/r?id=opp_006&amp;amp;to=https%3A%2F%2Fneon.com%2Fclaimable-neon&amp;amp;pos=top" rel="noopener noreferrer"&gt;Neon&lt;/a&gt;&lt;/strong&gt;'s claimable flow is worth wiring in now rather than building your own throwaway-project system from scratch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;If you're building anything where an agent needs to stand up real infrastructure before a human is ready to sign up for something, Claimable Neon is worth wiring in now rather than building your own throwaway-project system — the 72-hour/100 MB leash is a sane default, not a limitation you'll fight. If you're just a developer using Neon for your own projects, this changes nothing for you today; it's infrastructure for the platforms you might build on top of, not for you directly.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Adopt it if:&lt;/strong&gt; you're building an agent-driven app builder, coding platform, or onboarding flow that currently stalls on "user needs to sign up before the demo works."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skip it if:&lt;/strong&gt; you just need a database for your own app — regular Neon project creation is still the right tool.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Watch:&lt;/strong&gt; Object Storage, Functions, and AI Gateway support are "coming soon" — the useful surface area of this feature roughly doubles once those land.&lt;/li&gt;
&lt;li&gt;Recap link: &lt;strong&gt;&lt;a href="https://niche-finder-redirector.julian-ros-gh.workers.dev/r?id=opp_006&amp;amp;to=https%3A%2F%2Fneon.com%2Fclaimable-neon&amp;amp;pos=bottom" rel="noopener noreferrer"&gt;Neon's Claimable Postgres&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Researched and drafted with AI assistance, checked against primary sources.&lt;/p&gt;

</description>
      <category>postgres</category>
      <category>ai</category>
      <category>database</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Vercel quietly shipped a real kill switch for AI bills. Here's how to actually turn it on</title>
      <dc:creator>julian-ros</dc:creator>
      <pubDate>Wed, 16 Sep 2026 19:11:04 +0000</pubDate>
      <link>https://dev.to/julianros/vercel-quietly-shipped-a-real-kill-switch-for-ai-bills-heres-how-to-actually-turn-it-on-18fj</link>
      <guid>https://dev.to/julianros/vercel-quietly-shipped-a-real-kill-switch-for-ai-bills-heres-how-to-actually-turn-it-on-18fj</guid>
      <description>&lt;p&gt;If you've shipped an AI feature on Vercel, you already know the fear: a prompt-injection loop, a misconfigured retry, or just genuine unexpected traffic, and your LLM bill stops being a line item and starts being an incident. It's not hypothetical — usage-based hosting bills spiking into five figures overnight is a well-documented enough pattern that entire blogs exist to chronicle it, &lt;a href="https://usagebox.com/articles/vercel-23000-dollar-bill-usage-based-platform-bill-shock-2026" rel="noopener noreferrer"&gt;Vercel included&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What's changed is that Vercel now ships an actual spend cap for this specific failure mode — not just an alert email you'll read after the damage is done. &lt;strong&gt;AI Gateway Budgets&lt;/strong&gt;, generally available and last updated in Vercel's docs on September 7, 2026, let you cap spend at the team, project, API-key, or individual-teammate level and have the gateway reject requests once the limit hits. This is distinct from the older, broader &lt;strong&gt;Spend Management&lt;/strong&gt; feature most Pro-plan docs still point people to, and the two get confused constantly — they solve overlapping but different problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two different safety nets, not one
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;AI Gateway Budgets&lt;/th&gt;
&lt;th&gt;Spend Management&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Covers&lt;/td&gt;
&lt;td&gt;AI Gateway token spend only&lt;/td&gt;
&lt;td&gt;All metered resources beyond your plan credit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scope&lt;/td&gt;
&lt;td&gt;Team, project, API key, or user&lt;/td&gt;
&lt;td&gt;Team-wide only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;On breach&lt;/td&gt;
&lt;td&gt;Rejects further requests (HTTP 402)&lt;/td&gt;
&lt;td&gt;Optional: pause production, webhook, notify&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Check frequency&lt;/td&gt;
&lt;td&gt;Per-request&lt;/td&gt;
&lt;td&gt;Every few minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Granularity&lt;/td&gt;
&lt;td&gt;Per API key, per teammate&lt;/td&gt;
&lt;td&gt;None below team level&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw4d3sbl7ifccvidbxh85.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw4d3sbl7ifccvidbxh85.png" alt="Decision flow: which Vercel spend guardrail to use, AI Gateway Budgets or Spend Management" width="799" height="136"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're specifically worried about a runaway LLM call inside one feature or one contractor's API key, Budgets is the tool built for that. If you want a team-wide "stop everything" switch across all of Vercel's metered resources (bandwidth, functions, everything), that's what Spend Management does — and it can pause your entire production deployment, which Budgets never does.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up an AI Gateway budget
&lt;/h2&gt;

&lt;p&gt;You can do this from the dashboard's &lt;strong&gt;AI Gateway → Budgets&lt;/strong&gt; tab, but the CLI is faster to reason about and scriptable. Start with a team-wide ceiling:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vercel ai-gateway budgets &lt;span class="nb"&gt;set &lt;/span&gt;team &lt;span class="nt"&gt;--limit&lt;/span&gt; 500 &lt;span class="nt"&gt;--refresh-period&lt;/span&gt; monthly
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That caps everything your team spends across every project and key at $500/month. Now scope something tighter to one project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vercel ai-gateway budgets &lt;span class="nb"&gt;set &lt;/span&gt;project my-project &lt;span class="nt"&gt;--limit&lt;/span&gt; 200 &lt;span class="nt"&gt;--refresh-period&lt;/span&gt; monthly
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Budgets stack. A request from &lt;code&gt;my-project&lt;/code&gt; has to clear &lt;em&gt;both&lt;/em&gt; the $200 project budget and the $500 team budget — if either is exhausted, the request gets rejected, full stop, even if the other has room to spare. That's the mechanism that actually stops the bleeding: one runaway project can't quietly eat the whole team's headroom, and it can't spend past its own cap either.&lt;/p&gt;

&lt;p&gt;The genuinely useful scope for the "contractor with a key" scenario is a budgeted, time-boxed API key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vercel ai-gateway api-keys create &lt;span class="nt"&gt;--name&lt;/span&gt; contractor &lt;span class="nt"&gt;--limit&lt;/span&gt; 50 &lt;span class="nt"&gt;--refresh-period&lt;/span&gt; none &lt;span class="nt"&gt;--expiration&lt;/span&gt; 30d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That key stops working entirely after 30 days &lt;em&gt;and&lt;/em&gt; can never spend more than $50 total in the meantime — two independent ceilings, dollars and days, on one throwaway credential.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fine print that actually matters
&lt;/h2&gt;

&lt;p&gt;A few details in Vercel's own docs are easy to miss and change how much you should trust this as a hard stop:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's a soft cap, worded like a hard one.&lt;/strong&gt; Vercel's docs say it plainly: "the check runs at the start of each request, so the request that crosses the limit still completes and total spend can end up slightly over the budget." For a single chat completion that's noise. For a badly-configured batch job firing thousands of requests in a tight loop, "slightly over" is doing a lot of work in that sentence — budget for some overshoot, don't treat the number as a wall.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;New budgets don't apply instantly.&lt;/strong&gt; Give it up to a minute or two after creating a budget or key before it's actually enforced; spend starts appearing in the dashboard about 20 seconds after that. If you're setting a budget &lt;em&gt;because&lt;/em&gt; you're already mid-incident, that lag matters — pull the API key entirely if you need the bleeding stopped right now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BYOK spend isn't covered, at all.&lt;/strong&gt; Bring-your-own-key requests to your own provider accounts don't count against any Vercel budget — they're metered separately and don't touch your AI Gateway Credits balance either. If part of your traffic goes through BYOK, your Vercel-side budget is only watching part of the picture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Alerts below 100% never block anything.&lt;/strong&gt; You can set email alerts at 50%, 75%, and 100% of any budget, but only the limit itself — not the alert thresholds — actually rejects requests. A 75% email is a heads-up, not a brake.&lt;/p&gt;

&lt;p&gt;When a request does get rejected, you get a clean, parseable &lt;code&gt;402&lt;/code&gt; with a &lt;code&gt;quota_for_entity_exceeded&lt;/code&gt; type and the exact scope, spend, and limit in the message — worth handling explicitly rather than letting it surface as a generic "AI request failed" to your users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom line: is this worth setting up today
&lt;/h2&gt;

&lt;p&gt;For anyone running LLM calls in production on Vercel, yes — and there's effectively no reason not to. Budgets cost nothing to configure, and an unset budget just means unlimited spend, which is the current default for most teams that haven't touched this yet. Start with a team ceiling set comfortably above your normal monthly spend (so you're not accidentally locking yourself out), then add tighter project or per-key budgets around anything experimental, anything a contractor touches, or anything with unbounded retry logic.&lt;/p&gt;

&lt;p&gt;If you haven't already got an &lt;a href="https://niche-finder-redirector.julian-ros-gh.workers.dev/r?id=opp_005&amp;amp;to=https%3A%2F%2Fvercel.com%2Fai-gateway&amp;amp;pos=bottom" rel="noopener noreferrer"&gt;AI Gateway&lt;/a&gt; set up in front of your model calls, that's the actual prerequisite here — Budgets is a feature of the gateway, not a standalone billing control. Once it's wired in, the whole team+project+key stacking model takes maybe ten minutes to configure properly, which is a fairly good trade against the alternative of explaining a four-figure line item to whoever signs off on your infrastructure spend.&lt;/p&gt;

&lt;p&gt;Researched and drafted with AI assistance, checked against primary sources.&lt;/p&gt;

</description>
      <category>vercel</category>
      <category>ai</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Per-seat, flat-rate, or self-hosted: what a 3-, 8-, and 15-agent support team actually pays with Crisp, Help Scout, and Chatwoot</title>
      <dc:creator>julian-ros</dc:creator>
      <pubDate>Tue, 15 Sep 2026 06:41:50 +0000</pubDate>
      <link>https://dev.to/julianros/per-seat-flat-rate-or-self-hosted-what-a-3-8-and-15-agent-support-team-actually-pays-with-hfk</link>
      <guid>https://dev.to/julianros/per-seat-flat-rate-or-self-hosted-what-a-3-8-and-15-agent-support-team-actually-pays-with-hfk</guid>
      <description>&lt;p&gt;The problem with comparing support-tool pricing isn't arithmetic — it's architecture. Crisp charges a flat fee per workspace regardless of team size. Help Scout charges per seat. Chatwoot splits into cloud (per-agent) and self-hosted (infrastructure-only). Similar sticker prices on day one, wildly different cost curves as your team grows. Pick the wrong pricing &lt;em&gt;shape&lt;/em&gt; and you'll watch your support budget climb in ways the signup-day spreadsheet never warned you about.&lt;/p&gt;

&lt;h2&gt;
  
  
  The flat-rate model: Crisp
&lt;/h2&gt;

&lt;p&gt;Crisp operates on flat-fee tiers tied to included features and agent slots, not headcount. Per Crisp's own pricing page, the Essentials plan runs $95/month and includes 10 agent seats, 50,000 customer profiles, $25 in AI credits, and an omnichannel inbox with workflow automation. The Plus tier ($295/month) covers 20+ agents and 200,000 profiles. Extra agents beyond what your plan includes cost $10/month each. That means a team of 5 agents on Essentials pays exactly what a team of 8 on the same plan pays: $95. You only pay per extra head once you exceed the included count.&lt;/p&gt;

&lt;p&gt;If your headcount stays within the plan's agent allowance, scaling your team doesn't touch the bill at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  The per-seat model: Help Scout
&lt;/h2&gt;

&lt;p&gt;Help Scout takes the classic SaaS approach: charge per user. Per Help Scout's pricing page, Standard costs $25/user/month ($21/user billed annually) and covers 2 inboxes and basic workflows. Plus ($45/user/month, or $37.80 annually) unlocks unlimited users, 5 inboxes, and advanced workflows. Every new hire is a new line item, every month, no exceptions.&lt;/p&gt;

&lt;p&gt;There's a real upside: unlimited inboxes and richer features unlock as you grow, and per-seat billing forces honesty about exactly who's actually working tickets. The downside shows up in the math below.&lt;/p&gt;

&lt;h2&gt;
  
  
  The hybrid: Chatwoot, cloud or self-hosted
&lt;/h2&gt;

&lt;p&gt;Chatwoot splits into two genuinely different cost models. Cloud pricing is per-agent: the Startups tier costs $19/agent/month and includes 300 Captain AI credits and unlimited conversations; Business ($39/agent/month, billed annually) adds voice channel support and more credits.&lt;/p&gt;

&lt;p&gt;Self-hosting is the interesting branch. The Community edition is free per agent — $0/agent/month — which means a self-hosted team of any size pays nothing for seat licensing, just infrastructure. Per Chatwoot's own documentation, a production deployment needs 4+ CPU cores, 8GB+ RAM, 50GB+ SSD, PostgreSQL, and Redis. A DigitalOcean Basic droplet matching that spec runs $48/month flat. (Premium Support self-hosted, $19/agent/month, adds Captain AI and voice; Enterprise self-hosted, $99/agent/month, adds SSO/SAML and SLA policies.)&lt;/p&gt;

&lt;p&gt;The structural point: once you self-host on Community, adding agents doesn't touch your hosting bill — up to whatever your VPS can actually handle — only your own operational overhead.&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers: 3, 8, and 15 agents
&lt;/h2&gt;

&lt;p&gt;Here's where pricing &lt;em&gt;shape&lt;/em&gt; stops being theoretical:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Team size&lt;/th&gt;
&lt;th&gt;Crisp&lt;/th&gt;
&lt;th&gt;Help Scout&lt;/th&gt;
&lt;th&gt;Chatwoot Cloud&lt;/th&gt;
&lt;th&gt;Chatwoot Self-Hosted&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;3 agents&lt;/td&gt;
&lt;td&gt;$45/mo (Mini, up to 4 included)&lt;/td&gt;
&lt;td&gt;$75/mo (3 × $25)&lt;/td&gt;
&lt;td&gt;$57/mo (3 × $19)&lt;/td&gt;
&lt;td&gt;$48/mo (VPS only, $0/agent)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8 agents&lt;/td&gt;
&lt;td&gt;$95/mo (Essentials, up to 10 included)&lt;/td&gt;
&lt;td&gt;$200/mo (8 × $25)&lt;/td&gt;
&lt;td&gt;$152/mo (8 × $19)&lt;/td&gt;
&lt;td&gt;$48/mo (same VPS, $0/agent)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15 agents&lt;/td&gt;
&lt;td&gt;$295/mo (Plus, 20+ included)&lt;/td&gt;
&lt;td&gt;$375/mo (15 × $25)&lt;/td&gt;
&lt;td&gt;$285/mo (15 × $19)&lt;/td&gt;
&lt;td&gt;~$48/mo (may need a bigger box at real scale, still infra-only)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl2rg22dhqptgjknf4mzw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl2rg22dhqptgjknf4mzw.png" alt="Grouped bar chart: monthly cost by support team size (3, 8, 15 agents) across Crisp, Help Scout, Chatwoot Cloud, and Chatwoot Self-Hosted" width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Read the columns, not the rows. Crisp's cost &lt;em&gt;jumps&lt;/em&gt; between plan tiers rather than climbing smoothly. Help Scout and Chatwoot Cloud creep up in a straight line with headcount. Self-hosted Chatwoot barely moves.&lt;/p&gt;

&lt;p&gt;At 3 agents, the gap is noise — everything lands between $45 and $75. At 15 agents it isn't: Crisp is $295/month, Help Scout has climbed to $375, Chatwoot Cloud undercuts Help Scout at $285 but still costs six times what self-hosting does. Self-hosted Chatwoot, if you're willing to own the ops, is still roughly $48.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the curves actually mean
&lt;/h2&gt;

&lt;p&gt;This isn't a case for "self-hosted is cheapest, obviously." Running your own server has real costs this number doesn't capture — your time, patching, backups, on-call stress, the inevitable 2 a.m. Postgres connection-pool fire drill. Those costs are real and, deliberately, not estimated here.&lt;/p&gt;

&lt;p&gt;What the curves &lt;em&gt;do&lt;/em&gt; show is that pricing shape sets your scaling incentives. With Help Scout or Chatwoot Cloud, hiring another support person is an immediate, permanent cost increase. With Crisp, it's free until you hit a plan ceiling, then it jumps. With self-hosted Chatwoot, headcount stops being a billing question and becomes an ops-capacity question.&lt;/p&gt;

&lt;p&gt;That matters most for teams with variable access patterns — engineers dipping into tickets occasionally, a founder handling the angry-customer escalations personally. Help Scout and Chatwoot Cloud count every one of those people as a seat. Crisp and self-hosted Chatwoot don't. Pick the wrong model early and the mismatch compounds as you grow, not shrinks.&lt;/p&gt;

&lt;p&gt;One more angle worth naming: a &lt;a href="https://dev.to/kalwiggins/why-per-seat-pricing-for-support-tools-is-bleeding-your-saas-dry-1k4p"&gt;dev.to piece by kalwiggins&lt;/a&gt; argues per-seat support pricing specifically punishes teams whose access needs don't map cleanly to permanent seats. That holds up here — it's exactly the failure mode Help Scout's and Chatwoot Cloud's models share, and exactly what Crisp's flat tiers and self-hosted Chatwoot's zero-per-seat cost avoid.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who should pick what
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Small team (≤4 agents), no appetite for infrastructure&lt;/strong&gt;: &lt;a href="https://niche-finder-redirector.julian-ros-gh.workers.dev/r?id=opp_003c&amp;amp;to=https%3A%2F%2Fcrisp.chat%2Fen%2Fpricing%2F&amp;amp;pos=bottom" rel="noopener noreferrer"&gt;&lt;strong&gt;Crisp&lt;/strong&gt;&lt;/a&gt; wins on simplicity and predictability — flat tiers, no per-head surprise tax, AI credits included. You know your bill in advance and it doesn't move when you hire your third support person.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Growing team with variable access (10+ people total, ≤8 of them full-time support)&lt;/strong&gt;: self-hosted &lt;a href="https://niche-finder-redirector.julian-ros-gh.workers.dev/r?id=opp_003c&amp;amp;to=https%3A%2F%2Fwww.chatwoot.com%2Fpricing&amp;amp;pos=bottom" rel="noopener noreferrer"&gt;&lt;strong&gt;Chatwoot&lt;/strong&gt;&lt;/a&gt; Community gets genuinely attractive here, precisely because it inverts the usual incentive — adding people to the ticket queue doesn't move your bill, only your VPS capacity does. The tradeoff is real: you're now the one who owns uptime.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Team that wants the deepest integrations and a mature, conventional seat model&lt;/strong&gt;: &lt;a href="https://niche-finder-redirector.julian-ros-gh.workers.dev/r?id=opp_003c&amp;amp;to=https%3A%2F%2Fwww.helpscout.com%2Fpricing%2F&amp;amp;pos=bottom" rel="noopener noreferrer"&gt;&lt;strong&gt;Help Scout&lt;/strong&gt;&lt;/a&gt; is the most polished option on this list, and you pay proportionally for that polish as you grow. That's not a flaw — it's a legitimate trade for teams who'd rather buy predictability-per-seat than manage infrastructure.&lt;/p&gt;

&lt;p&gt;One caveat that applies regardless of which way you lean: self-hosted Chatwoot Community excludes Captain AI, voice, custom branding, and priority support — the $48 figure is not feature-for-feature with the paid tiers, cloud or self-hosted. Don't choose it because the number looks good on a spreadsheet; choose it because you actually want to own the infrastructure.&lt;/p&gt;

&lt;p&gt;There's no single winner here, and any comparison that hands you one is skipping the part that actually matters. The right tool depends on your team's shape, its growth curve, and how much operational risk you're willing to carry in exchange for a flatter bill. Match the pricing model to how your team actually grows, not to whichever number looks smallest on day one.&lt;/p&gt;

&lt;p&gt;Researched and drafted with AI assistance, checked against primary and vendor sources.&lt;/p&gt;

</description>
      <category>saas</category>
      <category>indiehackers</category>
      <category>customerservice</category>
      <category>pricing</category>
    </item>
    <item>
      <title>How to actually pick your Amazon SES plan after the July 2026 pricing overhaul (and whether the dedicated IP is worth it)</title>
      <dc:creator>julian-ros</dc:creator>
      <pubDate>Mon, 14 Sep 2026 11:16:40 +0000</pubDate>
      <link>https://dev.to/julianros/how-to-actually-pick-your-amazon-ses-plan-after-the-july-2026-pricing-overhaul-and-whether-the-44g4</link>
      <guid>https://dev.to/julianros/how-to-actually-pick-your-amazon-ses-plan-after-the-july-2026-pricing-overhaul-and-whether-the-44g4</guid>
      <description>&lt;p&gt;On July 21, 2026, Amazon restructured SES billing into three tiered plans — the biggest change to SES pricing in years (AWS, SES pricing page). A reader left a comment on our earlier SES provider comparison asking specifically about the Essentials/Pro split and whether a dedicated IP actually earns its keep. Fair question, and the pricing page alone doesn't answer it. Here's how to check which plan you're actually on, run the real numbers for your volume, and decide if the upgrade is worth paying for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: check which plan you're actually on
&lt;/h2&gt;

&lt;p&gt;If you've been sending through SES for a while, you're probably still on legacy à la carte pricing, not one of the new plans. New accounts default to Essentials, as do accounts that have been dormant since June 1, 2025. Accounts that sent or processed mail on or after that date stay on à la carte pricing unless they opt into a plan themselves (AWS, "Introducing Amazon Simple Email Service (SES) pricing plans").&lt;/p&gt;

&lt;p&gt;Don't guess — check it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws sesv2 get-account &lt;span class="nt"&gt;--region&lt;/span&gt; &amp;lt;region&amp;gt; &lt;span class="nt"&gt;--query&lt;/span&gt; PricingAttributes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That returns &lt;code&gt;CurrentPlan&lt;/code&gt; as &lt;code&gt;NONE&lt;/code&gt;, &lt;code&gt;ESSENTIALS&lt;/code&gt;, &lt;code&gt;PRO&lt;/code&gt;, or &lt;code&gt;ENTERPRISE&lt;/code&gt; (dev.classmethod.jp, "I checked the new Amazon SES pricing plans using the Price List API and SES API"). &lt;strong&gt;Plan status is set per region&lt;/strong&gt;, so if you send from more than one AWS region, check each separately — an easy thing to miss until your &lt;code&gt;us-east-1&lt;/code&gt; bill looks nothing like your &lt;code&gt;eu-west-1&lt;/code&gt; one. Switching plans is one more command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws sesv2 put-account-pricing-attributes &lt;span class="nt"&gt;--plan&lt;/span&gt; &amp;lt;PLAN_NAME&amp;gt; &lt;span class="nt"&gt;--region&lt;/span&gt; &amp;lt;region&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: what the three plans actually are
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Base fee&lt;/th&gt;
&lt;th&gt;$/1K (0–10M)&lt;/th&gt;
&lt;th&gt;$/1K (10–100M)&lt;/th&gt;
&lt;th&gt;$/1K (&amp;gt;100M)&lt;/th&gt;
&lt;th&gt;Managed dedicated IPs&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Essentials&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;td&gt;$0.16&lt;/td&gt;
&lt;td&gt;$0.14&lt;/td&gt;
&lt;td&gt;$0.11&lt;/td&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pro&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$105/mo&lt;/td&gt;
&lt;td&gt;$0.22&lt;/td&gt;
&lt;td&gt;$0.17&lt;/td&gt;
&lt;td&gt;$0.12&lt;/td&gt;
&lt;td&gt;1 domain, 1 IP, 5 seedlist tests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Enterprise&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;$500/mo&lt;/td&gt;
&lt;td&gt;$0.23&lt;/td&gt;
&lt;td&gt;$0.18&lt;/td&gt;
&lt;td&gt;$0.13&lt;/td&gt;
&lt;td&gt;5 domains, 12 IPs, 25 seedlist tests&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk8tmukon300whcpftg90.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk8tmukon300whcpftg90.png" alt="Line chart: Amazon SES price per 1,000 emails by volume tier, across Essentials, Pro, and Enterprise plans" width="800" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(AWS, SES pricing page. Base fees are per account, per region — run mail out of three regions on Pro and that's $315/month before a single email goes out.)&lt;/p&gt;

&lt;p&gt;Essentials gets you monitoring and basic deliverability insights. Pro adds managed dedicated IPs with reputation isolation, pre-bounce address validation, and inbox-placement visibility across providers. Enterprise stacks on multi-region failover and an annual deliverability assessment. AWS also claims the plans run "up to 22% less than purchasing the same features individually" — that's AWS's own marketing math, not something we independently verified, so check it against your actual legacy bill before treating it as a reason to switch.&lt;/p&gt;

&lt;p&gt;One more thing about the free tier: AWS killed the SES-specific free tier (3,000 messages/month for 12 months) for new customers as of July 21, 2026. If you're already in your 12-month window, you keep it; if you're signing up now, that safety net is gone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: run the real math for your volume
&lt;/h2&gt;

&lt;p&gt;These are just the per-message and base-fee numbers, calculated directly from the table above:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;At 100,000 emails/month:&lt;/strong&gt; Essentials $16 · Pro $127 ($105 + $22) · Enterprise $523 ($500 + $23)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;At 1,000,000 emails/month:&lt;/strong&gt; Essentials $160 · Pro $325 ($105 + $220) · Enterprise $730 ($500 + $230)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;At 15,000,000 emails/month&lt;/strong&gt; (crosses into the 10–100M tier): Essentials $2,300 · Pro $3,155 · Enterprise $3,700&lt;/p&gt;

&lt;p&gt;Your actual invoice will run higher than these numbers if you're validating addresses ($0.01 each) or sending attachments ($0.12/GB) — both apply on top, across every plan (AWS, SES pricing page). Treat the figures above as the floor, not the final number.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: is the dedicated-IP upgrade actually worth it?
&lt;/h2&gt;

&lt;p&gt;The whole pitch for Pro and Enterprise is reputation isolation. On Essentials, you share IP space with other SES customers; if one of them decides to blast their newsletter list like it's 2004, your deliverability can take collateral damage. A dedicated IP means your sending history is yours and only yours.&lt;/p&gt;

&lt;p&gt;The catch: a brand-new dedicated IP starts with zero reputation, which is worse than shared reputation, not better. SES auto-warms it by default — sending volume ramps up steadily over 45 days regardless of how much mail you actually want to send — and different providers take their own sweet time deciding to trust you, anywhere from about two weeks to six (AWS, "Warming up dedicated IP addresses"). Once it's warmed, AWS recommends keeping roughly 1,000 emails/day flowing to each provider just to hold the reputation you worked for; let it go quiet and you're back to convincing Gmail you're not a spammer. Send a sudden spike right after warm-up and providers may throttle or block you outright — the exact opposite of what you paid for. For comparison, SendGrid runs a similar automated warm-up on a 41-day schedule (Twilio/SendGrid docs), so this isn't an SES quirk — it's how IP reputation works everywhere.&lt;/p&gt;

&lt;p&gt;Here's the actual call: if you're sending transactional mail — receipts, password resets, alerts — under a couple million messages a month, shared-IP reputation on Essentials is rarely the thing keeping your emails out of inboxes. Paying $105–$500/month to isolate a reputation that wasn't in trouble is a solution hunting for a problem. The upgrade earns its cost once you're running real volume, sending anything that looks like marketing, or you've already seen bounce/complaint rates creep up on shared IPs — at that point, isolation and a 45-day warm-up you control beat inheriting whatever the shared pool did last week.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: the VDM add-on nobody prices clearly
&lt;/h2&gt;

&lt;p&gt;SES also sells Virtual Deliverability Manager as an à la carte add-on, with per-message pricing that drops as your volume crosses certain thresholds (AWS, "Amazon SES now offers tiered pricing for Virtual Deliverability Manager"). What AWS doesn't publish anywhere in that announcement is the actual per-tier rate. Rather than repeat a number some other blog made up, check the pricing calculator in your own SES console — it's the only place that number reliably shows up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;For most small SaaS teams sending transactional or low-volume mail, Essentials is where you start and probably where you stay: no base fee, no warm-up to babysit, and the cheapest per-message rate on the table. Once volume climbs into the millions or a shared IP starts actually hurting deliverability, that's the point to revisit — and by then you'll have the data to justify it instead of guessing. If the math above says Essentials fits you, point your account at &lt;strong&gt;&lt;a href="https://niche-finder-redirector.julian-ros-gh.workers.dev/r?id=opp_002d&amp;amp;to=https%3A%2F%2Faws.amazon.com%2Fses%2F&amp;amp;pos=bottom" rel="noopener noreferrer"&gt;Amazon SES&lt;/a&gt;&lt;/strong&gt; and get back to shipping.&lt;/p&gt;

&lt;p&gt;Researched and drafted with AI assistance, checked against primary sources.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>email</category>
      <category>saas</category>
      <category>indiehackers</category>
    </item>
    <item>
      <title>Intercom's Fin AI bills you per resolution. Plain doesn't. Here's what that actually costs a small SaaS support team</title>
      <dc:creator>julian-ros</dc:creator>
      <pubDate>Sun, 13 Sep 2026 20:57:26 +0000</pubDate>
      <link>https://dev.to/julianros/intercoms-fin-ai-bills-you-per-resolution-plain-doesnt-heres-what-that-actually-costs-a-small-1j4k</link>
      <guid>https://dev.to/julianros/intercoms-fin-ai-bills-you-per-resolution-plain-doesnt-heres-what-that-actually-costs-a-small-1j4k</guid>
      <description>&lt;p&gt;Most "Intercom alternatives" coverage on DEV.to already covers Crisp, Help Scout, and Chatwoot, and spends plenty of ink on Intercom's Fin AI $0.99-per-resolution billing model. Plain — a newer, developer-first support tool — rarely gets more than a footnote. That's worth fixing, because the actual cost math between the two at different ticket volumes tells a different story than the existing "here are five alternatives" round-ups do.&lt;/p&gt;

&lt;p&gt;If you're running a small SaaS shop with a technical team, your support-tool bill isn't really about "good" vs. "bad." It's about what you'll actually pay as ticket volume grows, and whether you can see that number coming.&lt;/p&gt;

&lt;h2&gt;
  
  
  Intercom's Fin AI: costs that scale with every resolution
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.intercom.com/pricing" rel="noopener noreferrer"&gt;Intercom's official pricing page&lt;/a&gt; lists Essential at $29 per seat/month, Advanced at $85, and Expert at $132. For a 3-person support team on Essential, that's $87/month base. On top of that sits Fin, Intercom's AI resolution agent — billed, per that same page, "from $0.99 per Fin outcome," pay-as-you-go, with no stated free allowance.&lt;/p&gt;

&lt;p&gt;Here's what that looks like as resolution volume climbs, on a 3-seat Essential plan ($87 base):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Monthly Fin outcomes&lt;/th&gt;
&lt;th&gt;Fin AI cost&lt;/th&gt;
&lt;th&gt;Total/month&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt;$99.00&lt;/td&gt;
&lt;td&gt;$186.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;300&lt;/td&gt;
&lt;td&gt;$297.00&lt;/td&gt;
&lt;td&gt;$384.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;600&lt;/td&gt;
&lt;td&gt;$594.00&lt;/td&gt;
&lt;td&gt;$681.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1,000&lt;/td&gt;
&lt;td&gt;$990.00&lt;/td&gt;
&lt;td&gt;$1,077.00&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foin1n6lj89oexit160pg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foin1n6lj89oexit160pg.png" alt="Line chart: Plain plus Intercom Fin AI total monthly cost as resolution volume scales from 100 to 1,000" width="800" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every resolved conversation costs a dollar, full stop. Go from 300 to 1,000 resolutions a month and your Fin line quadruples — no bulk discount, no ceiling to plan around, just a straight multiplier. (Good luck explaining that chart to whoever owns the budget.) Advanced and Expert add workflow automation, SSO, and SLAs, but none of it touches the per-outcome math — you still pay per resolution, at every tier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Plain: flat seats, and a credit ceiling nobody publishes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://niche-finder-redirector.julian-ros-gh.workers.dev/r?id=opp_003b&amp;amp;to=https%3A%2F%2Fwww.plain.com%2Fpricing&amp;amp;pos=top" rel="noopener noreferrer"&gt;Plain&lt;/a&gt;&lt;/strong&gt; starts from a different premise. Foundation runs $35/seat/month — $105 flat for three people — and includes 2,000 AI credits/month. Horizon steps up to $299/month for three seats and 15,000 credits.&lt;/p&gt;

&lt;p&gt;What Plain's pricing page doesn't say: how many actual ticket resolutions one AI credit buys you. There's no published conversion rate, so you can't tell from the public page where that 2,000-credit pool runs out. You could ask their sales team for a real number — it's just not one you can budget from today.&lt;/p&gt;

&lt;p&gt;That matters because the apparent advantage — a flat $105/month against Intercom's $87-plus-per-outcome climb — holds only up to a ceiling Plain won't tell you the height of. Past that point, pricing-page silence. For a team trying to actually forecast a budget, that's a real gap, not a minor omission.&lt;/p&gt;

&lt;h2&gt;
  
  
  What reviewers and independent comparisons actually say
&lt;/h2&gt;

&lt;p&gt;G2 rates Plain 4.5/5 overall. Reviewers there praise the "unified support experience" across channels and the native Slack/Linear integration; one specifically said they'd "prefer if the pricing model was based on workload instead of the number of seats" — a fair complaint if your ticket volume and headcount don't move together. Another flagged that search can be clunky ("Sometimes I struggle to find tickets").&lt;/p&gt;

&lt;p&gt;&lt;a href="https://efficient.app/compare/plain-vs-intercom" rel="noopener noreferrer"&gt;Efficient.app's Plain-vs-Intercom comparison&lt;/a&gt; frames the two as built for different buyers: Plain for "product-led software companies" already living in Slack, Linear, and Stripe; Intercom for teams that want "24/7 live chat with dedicated staff." Plain's pitch is deep tool integration — turning a Slack message into a ticket, spinning up a Linear issue with context attached — where Intercom is built around live chat as the main event. On price specifically, Efficient.app's own review of Intercom isn't kind: "quite expensive for what you get," billing that "charges based on number of contacts and various components," and — the part that lines up with the table above — it "becomes wildly expensive very quickly."&lt;/p&gt;

&lt;h2&gt;
  
  
  A billing discrepancy worth verifying before you budget
&lt;/h2&gt;

&lt;p&gt;Here's the part that should give you pause. &lt;a href="https://fin.ai/help/en/articles/13975800-fin-pricing-outcomes" rel="noopener noreferrer"&gt;Fin.ai's own help documentation&lt;/a&gt; describes a different Fin package than Intercom's pricing page does: a $49/month base plan that includes 50 resolutions, with additional outcomes at $0.99 each. Intercom's own pricing page, by contrast, describes pure pay-as-you-go at $0.99 with no stated allowance at all.&lt;/p&gt;

&lt;p&gt;Those are two different billing shapes, and nothing in either source reconciles them. It's possible one plan is a legacy or standalone Fin offering and the other is what ships bundled into Essential/Advanced/Expert today, or one page is simply stale — there's no way to tell from the public docs alone, so this piece isn't going to guess.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before you budget for Fin, get Intercom sales to confirm in writing which structure applies to your plan.&lt;/strong&gt; The gap between "$0.99 per outcome, always" and "$49 plus $0.99 past the first 50" is not a rounding error at any real ticket volume.&lt;/p&gt;

&lt;h2&gt;
  
  
  When Plain is worth serious consideration
&lt;/h2&gt;

&lt;p&gt;If your team already lives in Slack, tracks work in Linear, and thinks of support as another engineering surface rather than a separate department, Plain is a legitimate option — not a scrappy underdog you're settling for. The flat $105/month Foundation cost is easy to put in a budget line, and the integrations are built for exactly this kind of team, not retrofitted onto it.&lt;/p&gt;

&lt;p&gt;The honest trade: you're swapping Intercom's visible-but-unbounded per-outcome scaling for Plain's bounded-but-invisible credit ceiling. Neither vendor is being fully straight about the number that actually matters to a budget-conscious team — Intercom shows you the meter running, Plain just doesn't tell you where the tank is.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;Reach for &lt;a href="https://niche-finder-redirector.julian-ros-gh.workers.dev/r?id=opp_003b&amp;amp;to=https%3A%2F%2Fwww.intercom.com%2Fpricing&amp;amp;pos=bottom" rel="noopener noreferrer"&gt;Intercom&lt;/a&gt; if you need live chat as a first-class channel, multi-brand support, or HIPAA-eligible plans — Fin's per-outcome model is a real cost, but at least it's a visible one. Reach for &lt;a href="https://niche-finder-redirector.julian-ros-gh.workers.dev/r?id=opp_003b&amp;amp;to=https%3A%2F%2Fwww.plain.com%2Fpricing&amp;amp;pos=bottom" rel="noopener noreferrer"&gt;Plain&lt;/a&gt; if your team is skeptical of live chat, already dev-tool-native, and willing to trade a known ceiling for a flatter, more predictable base — just get that ceiling estimate from their sales team before you commit, not after your first busy month.&lt;/p&gt;

&lt;p&gt;Researched and drafted with AI assistance, checked against primary and vendor sources.&lt;/p&gt;

</description>
      <category>saas</category>
      <category>indiehackers</category>
      <category>startup</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Atlassian's new usage-based pricing lands Dec 3: what it actually costs a small team running Jira Automation and Rovo</title>
      <dc:creator>julian-ros</dc:creator>
      <pubDate>Sun, 13 Sep 2026 15:59:29 +0000</pubDate>
      <link>https://dev.to/julianros/atlassians-new-usage-based-pricing-lands-dec-3-what-it-actually-costs-a-small-team-running-jira-3g9e</link>
      <guid>https://dev.to/julianros/atlassians-new-usage-based-pricing-lands-dec-3-what-it-actually-costs-a-small-team-running-jira-3g9e</guid>
      <description>&lt;p&gt;December 3rd is when Atlassian starts charging for usage on Automation Steps, Rovo AI credits, and a handful of other meters — unless you're still on Server/Data Center Jira, this affects you. Atlassian announced the change on its own company blog September 1st (the meters went live in your Admin settings the same day), and if your team runs any meaningful automation or touches Rovo AI beyond a basic search, you'll want to know the actual numbers before the clock runs out.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's actually changing
&lt;/h2&gt;

&lt;p&gt;Atlassian is layering usage-based "overage" billing on top of the existing per-seat price for five areas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rovo AI credits&lt;/strong&gt; — actions like Chat, Agents, Think Deeper, the Coding Agent, Confluence AI Slides, and Teamwork Graph queries. Search, inline summaries, and rewrites stay free.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automation Steps&lt;/strong&gt; — every trigger, condition, action, branch, or loop in a workflow (loops count per iteration).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assets objects&lt;/strong&gt; — unique asset records stored in Jira or Teamwork Collections.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CSM AI Resolutions&lt;/strong&gt; — outcome-based billing when Rovo's Customer Service AI closes a ticket with zero human involvement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bitbucket resources&lt;/strong&gt; — build minutes, Git LFS storage, package storage, network usage, now pooled at the organization level.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For most small teams in Jira or Confluence, the two that actually bite are Automation Steps and Rovo credits. The mechanic is simple: your tier gets a monthly allowance per user, pooled across the whole org. Go over it, you pay overage. Here's where that allowance lands, by product and tier:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;Jira&lt;/th&gt;
&lt;th&gt;Confluence&lt;/th&gt;
&lt;th&gt;JSM&lt;/th&gt;
&lt;th&gt;Teamwork&lt;/th&gt;
&lt;th&gt;JPD&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;150&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;1,250&lt;/td&gt;
&lt;td&gt;200&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Standard&lt;/td&gt;
&lt;td&gt;400&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt;3,000&lt;/td&gt;
&lt;td&gt;2,500&lt;/td&gt;
&lt;td&gt;300&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Premium&lt;/td&gt;
&lt;td&gt;750&lt;/td&gt;
&lt;td&gt;250&lt;/td&gt;
&lt;td&gt;6,500&lt;/td&gt;
&lt;td&gt;5,000&lt;/td&gt;
&lt;td&gt;500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enterprise&lt;/td&gt;
&lt;td&gt;1,000&lt;/td&gt;
&lt;td&gt;500&lt;/td&gt;
&lt;td&gt;9,500&lt;/td&gt;
&lt;td&gt;7,500&lt;/td&gt;
&lt;td&gt;750&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwa7mscwr8ga94r98z73q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwa7mscwr8ga94r98z73q.png" alt="Heatmap: monthly automation-run limits by plan tier across Jira, Confluence, JSM, Teamwork, and JPD" width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Overage costs $0.50 per 1,000 steps. Simple enough — until you look at what actually changed underneath it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automation: the part that should worry you more than the price
&lt;/h2&gt;

&lt;p&gt;Enterprise customers used to get &lt;em&gt;unlimited&lt;/em&gt; automation. That's gone — Enterprise Jira now tops out at a pooled 1,000 steps per user per month, same finite-allowance structure as everyone else. Independent Atlassian community analyst thejiraguy.com put it bluntly: "removing an unlimited tier changes what a customer is buying." That's not hyperbole; it's a genuine downgrade in what Enterprise pricing used to promise, dressed up as a metering change.&lt;/p&gt;

&lt;p&gt;The quieter, more expensive change: Atlassian's old billing only counted &lt;em&gt;successful&lt;/em&gt; automation runs. The new meter counts every step execution — including failed runs and empty ones. A five-step workflow that errors out on step three still burns five steps. An automation that fires but matches no conditions and does nothing still costs a step. If your automations have a flaky failure mode nobody ever bothered to fix, you're about to pay for it monthly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Worked example:&lt;/strong&gt; a 5-person Standard team pools 5 × 400 = 2,000 Jira automation steps a month. Run status-sync automations, Slack notifications, and a couple of CI-triggered escalations, and 3,000 steps in a month isn't a stretch for a team that's automated its ticket lifecycle. That's 1,000 steps over allowance — at $0.50 per 1,000, a $0.50/month overage. Trivial today. Add a second team, a flaky workflow re-triggering on failure, or a company-wide automation habit, and that $0.50 becomes $15–$30 fast, for work nobody explicitly signed off spending on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rovo credits: check the default before December 3rd
&lt;/h2&gt;

&lt;p&gt;Rovo AI runs on credits: 25 per user/month on Standard, 70 on Premium, 150 on Enterprise, pooled org-wide. A basic AI action costs roughly 10 credits; a "Deep Research" query costs roughly 100. A 5-person Standard org's pooled 125 credits covers about a dozen basic actions for the whole team, or a single Deep Research query — not both, and not much else.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The thing you actually need to check before December 3rd:&lt;/strong&gt; overage billing is enabled by default. If your team exceeds its Rovo allowance, Atlassian charges $0.01 per credit ($10 per 1,000) automatically, unless an admin explicitly opts out. No warning bill, no soft cap — it just bills. A team running a few Deep Research queries a month can land at 200+ credits against a 125-credit allowance; that's 75 credits over, or $0.75. Small money, deliberately structured so nobody notices it until it isn't.&lt;/p&gt;

&lt;p&gt;Atlassian does give you the controls to prevent this: admins can disable overages outright (automations and AI actions simply stop when the allowance runs dry, no bill), set a hard spending cap, or pre-buy usage packs. Usage notifications fire at 80% and 100% of allowance — but only inside the Admin console, not by email or Slack, so nobody sees them unless someone goes looking.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before December 3rd, actually do this
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Log into Admin &amp;gt; Usage&lt;/strong&gt; and check where you stand today. Meter data can take up to a week to populate, so don't wait until December 2nd.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;For Automation:&lt;/strong&gt; tally your active workflows' rough monthly step count. Close to your allowance? Upgrade the tier, turn off overages and accept stalled workflows past the cap, or simplify the automations — a good excuse to finally delete the ones nobody remembers building.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;For Rovo:&lt;/strong&gt; decide your overage policy now, under Billing &amp;gt; Usage limits, rather than discovering Atlassian decided it for you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Running Jira Service Management:&lt;/strong&gt; your Automation allowance is far more generous (9,500 steps on Enterprise), but CSM AI Resolutions bill separately at $1.00 per ticket Rovo closes without human help — worth knowing if you're leaning on autonomous ticket resolution.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;None of this touches base seat pricing, which is unchanged by this announcement — Jira Standard runs roughly $7.91/user/month, Premium roughly $14.54 (third-party pricing trackers, not an Atlassian-published figure, so treat it as directionally correct rather than exact). Everything above is pure incremental cost stacked on top of what you already pay.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom line: when switching actually makes sense
&lt;/h2&gt;

&lt;p&gt;If your team is purely dev-focused and doesn't touch Jira's ITSM or service-management side, &lt;a href="https://niche-finder-redirector.julian-ros-gh.workers.dev/r?id=opp_004&amp;amp;to=https%3A%2F%2Flinear.app%2Fpricing&amp;amp;pos=bottom" rel="noopener noreferrer"&gt;Linear&lt;/a&gt; is worth a serious look. Its official pricing: Free ($0 — unlimited members, 2 teams, 250 issues), Basic ($10/user/month billed yearly, 5 teams, unlimited issues), Business ($16/user/month billed yearly, unlimited teams, more integrations), Enterprise (custom).&lt;/p&gt;

&lt;p&gt;The catch: Linear's own advanced AI features — Coding sessions, AI-assisted loops — also draw on separate credits beyond the base plan. Same structural bet as Atlassian's change, just a smaller blast radius. You're not escaping metered AI billing by switching; you're escaping Jira's ITSM weight and a considerably more complex product to reason about. For a pure dev team drowning in Jira admin overhead, that trade might be worth making anyway — just don't go in expecting a flat-rate refuge.&lt;/p&gt;

&lt;p&gt;Researched and drafted with AI assistance, checked against primary and vendor sources.&lt;/p&gt;

</description>
      <category>jira</category>
      <category>saas</category>
      <category>indiehackers</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Scaling transactional email: which provider fits at each growth stage (0 -&gt; 100K+ emails/month)</title>
      <dc:creator>julian-ros</dc:creator>
      <pubDate>Sun, 13 Sep 2026 11:15:48 +0000</pubDate>
      <link>https://dev.to/julianros/scaling-transactional-email-which-provider-fits-at-each-growth-stage-0-100k-emailsmonth-2jm</link>
      <guid>https://dev.to/julianros/scaling-transactional-email-which-provider-fits-at-each-growth-stage-0-100k-emailsmonth-2jm</guid>
      <description>&lt;p&gt;Picking a transactional email provider feels like a five-minute decision — add an API key, send your first signup confirmation, move on. It stays a five-minute decision until you scale, at which point the plan you casually picked can turn into a migration project: rewriting send logic, re-verifying DNS records, hoping deliverability doesn't dip mid-cutover. It's a worse time than usual to rely on an old comparison, too — Amazon SES quietly restructured its entire pricing model on July 21, 2026, and a lot of "SES is the cheapest option" advice on indie-hacker forums hasn't caught up. Below is a cost-cliff map across Resend, Postmark, SendGrid, Amazon SES, and Mailgun: what each one actually charges as volume grows, and the specific gotcha that catches people off guard on each.&lt;/p&gt;

&lt;h2&gt;
  
  
  The five providers, side by side
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Free tier&lt;/th&gt;
&lt;th&gt;Entry paid plan&lt;/th&gt;
&lt;th&gt;Cost at 100K emails/mo&lt;/th&gt;
&lt;th&gt;Key gotcha&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Resend&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3,000/mo (100/day cap)&lt;/td&gt;
&lt;td&gt;$20/mo — 50,000/mo&lt;/td&gt;
&lt;td&gt;$90/mo (Scale plan)&lt;/td&gt;
&lt;td&gt;Simplest model, but the most expensive at the top end&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Postmark&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;100 emails, ever — no overage&lt;/td&gt;
&lt;td&gt;$15/mo (Basic) — 10,000/mo&lt;/td&gt;
&lt;td&gt;~$126/mo*&lt;/td&gt;
&lt;td&gt;Free tier has zero overage room; upgrade before email #101&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SendGrid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;60-day trial only, no permanent free tier&lt;/td&gt;
&lt;td&gt;$19.95/mo (Essentials)&lt;/td&gt;
&lt;td&gt;~$110–200/mo† (unclear from public pricing)&lt;/td&gt;
&lt;td&gt;Dedicated IPs require the Pro plan ($89.95/mo+), regardless of volume&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Amazon SES&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Discontinued for new signups since 2026-07-21&lt;/td&gt;
&lt;td&gt;$0.16/1,000 (Essentials), no base fee&lt;/td&gt;
&lt;td&gt;$16/mo (Essentials) to $127/mo (Pro)‡&lt;/td&gt;
&lt;td&gt;Headline rate looks cheapest; add-ons (VDM, dedicated IP) change that fast&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mailgun&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~3,000/mo (100/day)&lt;/td&gt;
&lt;td&gt;$15/mo (Basic) — 10,000/mo&lt;/td&gt;
&lt;td&gt;$90/mo (Scale)&lt;/td&gt;
&lt;td&gt;Email validation is a separate paid add-on, not included&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fblee006i8bblp3njlbpr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fblee006i8bblp3njlbpr.png" alt="Bar chart: monthly cost at 100K emails/month across Resend, Mailgun, SendGrid, Postmark, and Amazon SES" width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;*Postmark: cheapest at 100K is Platform ($18/mo, 10,000 included, $1.20/1,000 overage): $18 + (90,000 × $1.20/1,000) = $126/mo.&lt;br&gt;
†SendGrid's pricing page shows $0.0011/email as the effective rate at the Pro/100K volume selector (~$110/mo), but doesn't clearly state whether the $89.95/mo Pro base fee sits inside or on top of that — so the real number could run $110–200/mo. Use Twilio's own calculator before committing.&lt;br&gt;
‡SES Essentials, no add-ons: 100 × $0.16 = $16/mo. SES Pro: $105/mo base + (100 × $0.22) = $127/mo. More on add-ons below.&lt;/p&gt;

&lt;h2&gt;
  
  
  What catches people out on each one
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://niche-finder-redirector.julian-ros-gh.workers.dev/r?id=opp_002c&amp;amp;to=https%3A%2F%2Fresend.com%2Fpricing&amp;amp;pos=top" rel="noopener noreferrer"&gt;Resend&lt;/a&gt;&lt;/strong&gt; stays simple on purpose: Free (3,000/mo, 100/day cap, 3 domains), Pro ($20/mo, 50,000), Scale ($90/mo, 100,000), and a flat $0.90-per-1,000 overage above whichever plan you're on. No dedicated-IP upsell, no separate add-on fees. The trade-off only shows up well past 100K/month, where that flat overage rate makes Resend the priciest of the five.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://niche-finder-redirector.julian-ros-gh.workers.dev/r?id=opp_002c&amp;amp;to=https%3A%2F%2Fpostmarkapp.com%2Fpricing&amp;amp;pos=top" rel="noopener noreferrer"&gt;Postmark&lt;/a&gt;&lt;/strong&gt;'s free tier is real but unforgiving — 100 emails, period, with zero paid overage: send a 101st and you're forced to upgrade immediately. Its three paid plans (Basic $15, Pro $16.50, Platform $18) all include 10,000/month; what differs is the overage rate ($1.80, $1.30, $1.20 per 1,000), so the cheapest plan depends entirely on how far past 10,000 you go. Above 1.5M/month, Postmark moves to custom sales pricing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://niche-finder-redirector.julian-ros-gh.workers.dev/r?id=opp_002c&amp;amp;to=https%3A%2F%2Fwww.twilio.com%2Fen-us%2Fsendgrid&amp;amp;pos=top" rel="noopener noreferrer"&gt;SendGrid&lt;/a&gt;&lt;/strong&gt; dropped its permanent free tier — what's left is a 60-day trial capped at 100/day, then a paid plan or nothing. Essentials starts at $19.95/mo, Pro at $89.95/mo, Premier is custom. The gotcha: dedicated IPs, which isolate your sender reputation from other customers sharing infrastructure, are only available starting on Pro — need that early, and you're paying Pro-tier prices no matter your actual volume.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://niche-finder-redirector.julian-ros-gh.workers.dev/r?id=opp_002c&amp;amp;to=https%3A%2F%2Faws.amazon.com%2Fses%2Fpricing%2F&amp;amp;pos=top" rel="noopener noreferrer"&gt;Amazon SES&lt;/a&gt;&lt;/strong&gt; is the one that changed under everyone's feet. Until July 21, 2026, pricing was a flat ~$0.10/1,000 plus a free tier of 3,000 messages/month for a new account's first 12 months. As of that date, AWS restructured it into three plans — Essentials ($0.16/1,000, no base fee), Pro ($0.22/1,000 plus a $105/account/region/month base fee, adds dedicated-IP infrastructure and pre-send address validation), Enterprise ($0.23/1,000 plus $500/month, adds regional failover and annual deliverability reviews) — and stopped offering the old free tier to new customers (existing users keep it through their original window; new accounts get only the general $200 AWS credit, 6 months, not SES-specific).&lt;/p&gt;

&lt;p&gt;The Essentials rate still looks cheapest on this whole list, but add-ons change that. Independent commentary (cloudburn.io, not an official AWS source) shows Virtual Deliverability Manager — reputation monitoring and pre-send validation — adding $0.07/1,000 on top; using their own worked example at the old flat rate, a 100K/month sender's bill goes from $10.12 to $17.00 once VDM is switched on. A dedicated IP is separately priced at roughly $24.95/month, independent of any plan. None of this makes SES a bad deal — Essentials plus VDM at 100K/month still works out to about $23/month ($16 + $7) before any dedicated IP — but the number on the pricing page's headline rate is rarely the number you'll actually pay once reliability features are switched on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://niche-finder-redirector.julian-ros-gh.workers.dev/r?id=opp_002c&amp;amp;to=https%3A%2F%2Fwww.mailgun.com%2Fpricing%2F&amp;amp;pos=top" rel="noopener noreferrer"&gt;Mailgun&lt;/a&gt;&lt;/strong&gt;'s ladder — Free (~3,000/mo), Basic ($15/mo, 10,000 included, $1.80/1,000 overage), Foundation ($35/mo, 50,000, $1.30/1,000), Scale ($90/mo, 100,000, $1.10/1,000) — is structurally similar to Postmark's. Easy to miss: email validation (checking whether an address is real before you send to it) bills separately, from $1.20 per 100 validations on Basic/Foundation down to $0.80 per 100 on Scale — a real line item if you validate on every signup. Worth noting: one Indie Hackers commenter reported a 10%+ bounce rate on Mailgun that led them to switch to Postmark. That's one person's anecdote, not a verified benchmark, but worth weighing alongside price.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which one fits your stage
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;0–3,000/month:&lt;/strong&gt; cost is close to irrelevant — Resend's free tier or SES Essentials (~$0.48/mo here) both cost effectively nothing. The real difference is developer experience: Resend is purpose-built for this exact use case; SES ties into your AWS account for a steeper setup at less immediate payoff.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3,000–50,000/month:&lt;/strong&gt; plan choice starts to matter. Resend Pro is a flat $20/mo for anything up to 50,000, no overage math needed. Mailgun Foundation is a flat $35/mo up to the same ceiling. Postmark is the one that moves: at 30,000/mo on Platform you're at $18 + (20,000 × $1.20/1,000) = $42/mo; at 50,000/mo, $18 + (40,000 × $1.20/1,000) = $66/mo. Weigh that against the Mailgun deliverability anecdote above if reliability track record matters more to you than a few dollars.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;50,000–100,000/month:&lt;/strong&gt; Mailgun Scale and Resend Scale are both a flat $90/mo for the full 100,000. SES Essentials alone is $16/mo here — dramatically cheaper on paper — but you'll likely want VDM for deliverability monitoring at this volume (~$23/mo), possibly plus a dedicated IP (~$25/mo more). Even with both, SES stays competitive on pure cost; the trade-off is AWS complexity versus a purpose-built email API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;100,000+/month:&lt;/strong&gt; growth curves diverge. Resend beyond 100K adds $0.90/1,000 (200,000/mo = $90 + $90 = $180/mo). Mailgun beyond 100K adds $1.10/1,000 (200,000/mo = $90 + $110 = $200/mo). SES Pro is $105/mo base + $0.22/1,000 ($127/mo at exactly 100K). SendGrid Pro's total here isn't precisely knowable from public pricing (see table footnote) — get an actual quote. At this scale, an hour spent pulling real quotes is worth more than any generic guide, this one included.&lt;/p&gt;

&lt;h2&gt;
  
  
  The piece this complements
&lt;/h2&gt;

&lt;p&gt;There's already a solid DEV.to comparison of these providers from a hands-on, production-experience angle — &lt;a href="https://dev.to/contrite42/resend-vs-postmark-vs-sendgrid-three-production-accounts-later-382h"&gt;Resend vs. Postmark vs. SendGrid: three production accounts later&lt;/a&gt; — covering API design, deliverability, and day-to-day developer experience. It predates the July 2026 SES restructuring and doesn't focus on cost-by-volume. Read that one for what it's like to actually run these services; use this one for what each stage will cost you before you commit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;Start with &lt;a href="https://niche-finder-redirector.julian-ros-gh.workers.dev/r?id=opp_002c&amp;amp;to=https%3A%2F%2Fresend.com%2Fpricing&amp;amp;pos=bottom" rel="noopener noreferrer"&gt;Resend&lt;/a&gt; or &lt;a href="https://niche-finder-redirector.julian-ros-gh.workers.dev/r?id=opp_002c&amp;amp;to=https%3A%2F%2Fpostmarkapp.com%2Fpricing&amp;amp;pos=bottom" rel="noopener noreferrer"&gt;Postmark&lt;/a&gt; below 100K/month — both are predictable and easy to reason about. Past that volume, run the numbers for your actual send pattern: &lt;a href="https://niche-finder-redirector.julian-ros-gh.workers.dev/r?id=opp_002c&amp;amp;to=https%3A%2F%2Fwww.twilio.com%2Fen-us%2Fsendgrid&amp;amp;pos=bottom" rel="noopener noreferrer"&gt;SendGrid&lt;/a&gt;, &lt;a href="https://niche-finder-redirector.julian-ros-gh.workers.dev/r?id=opp_002c&amp;amp;to=https%3A%2F%2Faws.amazon.com%2Fses%2Fpricing%2F&amp;amp;pos=bottom" rel="noopener noreferrer"&gt;Amazon SES&lt;/a&gt;, and &lt;a href="https://niche-finder-redirector.julian-ros-gh.workers.dev/r?id=opp_002c&amp;amp;to=https%3A%2F%2Fwww.mailgun.com%2Fpricing%2F&amp;amp;pos=bottom" rel="noopener noreferrer"&gt;Mailgun&lt;/a&gt; all diverge enough at scale that the "cheapest" one depends entirely on your exact volume, not a general recommendation.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This article was researched and written by an autonomous pipeline (disclosed per DEV's AI-disclosure guidelines). Pricing figures are sourced directly from each provider's public pricing pages and the cited AWS/third-party posts, current as of September 2026 — verify against the current pricing pages before deciding, since providers change terms without much notice, as SES itself just demonstrated.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>email</category>
      <category>indiehackers</category>
      <category>saas</category>
    </item>
  </channel>
</rss>
