<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Inference Notes]]></title><description><![CDATA[Notes on building AI agents, pricing AI products, and the quiet decisions that actually matter — from someone who runs this stack in production.]]></description><link>https://inferencenotes.co</link><image><url>https://inferencenotes.co/img/substack.png</url><title>Inference Notes</title><link>https://inferencenotes.co</link></image><generator>Substack</generator><lastBuildDate>Wed, 10 Jun 2026 10:41:04 GMT</lastBuildDate><atom:link href="https://inferencenotes.co/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Sathish J]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[inferencenotes@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[inferencenotes@substack.com]]></itunes:email><itunes:name><![CDATA[Sathish J]]></itunes:name></itunes:owner><itunes:author><![CDATA[Sathish J]]></itunes:author><googleplay:owner><![CDATA[inferencenotes@substack.com]]></googleplay:owner><googleplay:email><![CDATA[inferencenotes@substack.com]]></googleplay:email><googleplay:author><![CDATA[Sathish J]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[The cheapest line item in my AI app is the AI]]></title><description><![CDATA[When you ship a consumer app that leans on a large language model, the standard cost warning is always the same: watch your inference bill.]]></description><link>https://inferencenotes.co/p/the-cheapest-line-item-in-my-ai-app</link><guid isPermaLink="false">https://inferencenotes.co/p/the-cheapest-line-item-in-my-ai-app</guid><dc:creator><![CDATA[Sathish J]]></dc:creator><pubDate>Fri, 29 May 2026 15:40:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!hKTv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F383df05b-4da2-40fe-8dbe-4f78e406c7b1_948x614.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When you ship a consumer app that leans on a large language model, the standard cost warning is always the same: watch your inference bill. Cap your usage. The model will eat your margin.</p><p>After running mine live for a while, I can report the opposite. The AI is the cheapest, most predictable line item I have &#8212; and the economics that actually matter turned out to be somewhere else entirely.</p><h2>What the model actually costs</h2><p>The app uses a small, cheap model for its AI features, and I built it to call that model as little as possible:</p><ul><li><p>A small model, not a frontier one, for tasks that don&#8217;t need a frontier one.</p></li><li><p>Hard caps on output length and low temperature &#8212; predictable tokens in, predictable tokens out.</p></li><li><p>Aggressive caching: a cache hit rate north of 80%, so most requests never reach the model at all.</p></li><li><p>A free, deterministic data source tried first; the model is only the fallback.</p></li><li><p>A per-user rate limit, so no single user can run up the bill.</p></li></ul><p>Add it up and the cost to serve an active user lands on the order of a tenth of a percent of what they pay for a monthly subscription. On the P&amp;L, the model is a rounding error.</p><p>The lesson isn&#8217;t &#8220;models are cheap now,&#8221; though they are. It&#8217;s that <strong>AI cost is an architecture decision, not a procurement one.</strong> You don&#8217;t get cheap inference by negotiating price-per-token; you get it by calling the model <em>less</em> &#8212; cache, cap, prefer deterministic sources, batch. The team that designs for fewer, smaller calls beats the team with a better rate card. That bullet list above is really a pricing decision disguised as architecture.</p><h2>The line item that actually moves the margin</h2><p>The expensive part of the app has nothing to do with AI. It&#8217;s distribution.</p><p>Put it on a single $10 transaction. Route it through iOS in-app purchase and the platform fee takes $1.50 to $3.00 of it; the inference behind that customer&#8217;s usage costs a fraction of a cent. The channel takes a couple hundred times what the model does, on the same dollar. So the app applies the long-established &#8220;reader&#8221; principle &#8212; apps from Netflix to Spotify to Kindle handle commerce on the web and use the iOS app for access. That&#8217;s the architecture I ended up with. (The formal App Store carve-out is narrow, and the rules are in flux post-Epic and under the EU&#8217;s DMA &#8212; so the point is the principle, not any one loophole.)</p><p>A pricing person&#8217;s way to say it: <strong>your distribution channel&#8217;s take rate is usually a far bigger lever on margin than your cost of goods.</strong> I spend my day setting price inside a hardware P&amp;L at scale, where a point of margin is real money and the structure &#8212; where value gets captured, not what it costs to make &#8212; dominates the model. The app just let me run the same logic at the opposite extreme: near-zero unit cost, and the structure still decides everything.</p><h2>Two pricing reflexes that break when cost rounds to zero</h2><p>When your unit cost rounds to zero, two reflexes that served older businesses well both break.</p><p><strong>Cost-plus pricing makes you look cheap to your own product.</strong> Price a near-zero-cost feature on cost and you&#8217;ll price it near nothing &#8212; which tells the buyer it&#8217;s worth near nothing.</p><p><strong>Per-usage metering makes the user anxious about a meter that&#8217;s measuring almost nothing</strong> &#8212; you collect all of the anxiety and almost none of the revenue.</p><p>Metering isn&#8217;t always wrong, though. It&#8217;s the right model when each call does expensive, legible work &#8212; a coding agent like Cursor or Claude Code, a per-resolution support agent &#8212; because there the meter tracks something the customer can see is worth paying for. It fails only when both the per-call <em>cost</em> and the per-call <em>value</em> are low, which is exactly the consumer-app case: each call is cheap and invisible, so the meter just generates worry. There, bundle pricing and value-anchored tiers win.</p><p>The same logic set my lifetime tier. I didn&#8217;t price it from cost; I priced it for what someone would pay for the certainty of never being asked to pay again &#8212; a willingness-to-pay number, not a cost number. A lifetime plan is normally a recurring-revenue anti-pattern: you trade a stream for a lump and a permanent obligation to serve. I took it deliberately, precisely because near-zero marginal cost makes that obligation nearly free to honor.</p><p>Then, at launch, I gave Pro away to the first cohort of families. That&#8217;s revenue I&#8217;m choosing not to collect &#8212; and it&#8217;s a standard early-stage sequencing move, not generosity. At this stage the binding constraint isn&#8217;t monetization; it&#8217;s getting enough engaged users in the door to learn what makes them stay. The risk you take on is anchoring &#8212; teach people the thing is free and some never convert &#8212; which is why it&#8217;s the <em>first cohort</em>, not forever.</p><h2>Where the economics actually live</h2><p>Once inference rounds to zero and you&#8217;ve protected your take rate, unit economics stop being about cost to serve at all. They&#8217;re dominated by activation and retention. If people sign up and ghost, no pricing tier saves you. If they stick, the model cost is noise. In a world of cheap inference, the highest-leverage &#8220;pricing&#8221; work often isn&#8217;t pricing &#8212; it&#8217;s getting someone to the &#8220;oh, I get it&#8221; moment fast enough that they come back.</p><h2>The transferable part</h2><p>If you price or build AI products, retire one reflex: treating token cost as the central economic question. It was the right worry in 2023; it&#8217;s increasingly the wrong one for products shaped like mine. The honest caveat is the frontier: multi-step agents and reasoning loops have pushed per-<em>task</em> cost up even as per-token prices fall, and cost still matters enormously there. But for the broad middle of consumer and SaaS AI features, cost-to-serve is trending toward noise.</p><p>Watch where the supply side is pushing it. NVIDIA&#8217;s published comparison for its next-generation Vera Rubin platform puts inference cost per token at roughly a tenth of the current Blackwell generation&#8217;s at the same latency &#8212; on one reasoning workload, with the usual caveat that the number moves with model and operating point. The cost floor under inference keeps dropping. But the direction was never the interesting part. The interesting question is who keeps the margin when a token costs almost nothing &#8212; and it isn&#8217;t the resellers metering tokens, or the SaaS priced on cost. It accrues to whoever prices the <em>system</em> and the <em>relationship</em>. That&#8217;s the same lesson the app taught me, three orders of magnitude down.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hKTv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F383df05b-4da2-40fe-8dbe-4f78e406c7b1_948x614.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hKTv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F383df05b-4da2-40fe-8dbe-4f78e406c7b1_948x614.png 424w, https://substackcdn.com/image/fetch/$s_!hKTv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F383df05b-4da2-40fe-8dbe-4f78e406c7b1_948x614.png 848w, https://substackcdn.com/image/fetch/$s_!hKTv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F383df05b-4da2-40fe-8dbe-4f78e406c7b1_948x614.png 1272w, https://substackcdn.com/image/fetch/$s_!hKTv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F383df05b-4da2-40fe-8dbe-4f78e406c7b1_948x614.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hKTv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F383df05b-4da2-40fe-8dbe-4f78e406c7b1_948x614.png" width="446" height="288.86497890295357" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/383df05b-4da2-40fe-8dbe-4f78e406c7b1_948x614.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:614,&quot;width&quot;:948,&quot;resizeWidth&quot;:446,&quot;bytes&quot;:232302,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://inferencenotes.co/i/199753729?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F383df05b-4da2-40fe-8dbe-4f78e406c7b1_948x614.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hKTv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F383df05b-4da2-40fe-8dbe-4f78e406c7b1_948x614.png 424w, https://substackcdn.com/image/fetch/$s_!hKTv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F383df05b-4da2-40fe-8dbe-4f78e406c7b1_948x614.png 848w, https://substackcdn.com/image/fetch/$s_!hKTv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F383df05b-4da2-40fe-8dbe-4f78e406c7b1_948x614.png 1272w, https://substackcdn.com/image/fetch/$s_!hKTv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F383df05b-4da2-40fe-8dbe-4f78e406c7b1_948x614.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Inference cost per token vs. latency &#8212; Rubin NVL72 vs. Blackwell NVL72, on one reasoning workload (Kimi K2-Thinking, 32K/8K). Source: NVIDIA.</em></figcaption></figure></div><p>The questions that decide whether an AI product makes money are the old, unglamorous ones: what take rate your channel imposes, how you package against willingness to pay, and whether you keep the user long enough for any of it to matter.</p><p>Price the value and the relationship &#8212; not the inference. The inference was never going to be the expensive part.</p>]]></content:encoded></item><item><title><![CDATA[Three things that surprised me running a personal AI agent in production]]></title><description><![CDATA[For the last few months I&#8217;ve run a small agent system on a server in my house.]]></description><link>https://inferencenotes.co/p/three-things-that-surprised-me-running</link><guid isPermaLink="false">https://inferencenotes.co/p/three-things-that-surprised-me-running</guid><dc:creator><![CDATA[Sathish J]]></dc:creator><pubDate>Tue, 26 May 2026 16:43:49 GMT</pubDate><content:encoded><![CDATA[<p>For the last few months I&#8217;ve run a small agent system on a server in my house. It reads from about a dozen sources &#8212; three banks, a brokerage, property-management email, a medical-receipts ledger, my own app&#8217;s analytics &#8212; and assembles one message that lands on my phone twice a day. It drafts replies, files documents by year and category, and flags things I&#8217;d otherwise miss. It does not move money, sign anything, or email my tenants on its own.</p><p>It&#8217;s been live long enough now to be boring, which was the goal. Along the way three things surprised me. Each one cut against what I expected going in, and each turns out to matter well beyond a house.</p><h2>1. The win was aggregation, not automation.</h2><p>Going in, I assumed the value would be in the agent <em>doing</em> things &#8212; answering email, paying bills, scheduling. That&#8217;s the demo everyone builds.</p><p>What actually changed my days was duller than that: one message instead of twenty tabs. Before, a normal morning meant logging into App Store Connect, Google Ads, Firebase, three bank accounts, a brokerage, a property inbox, and a receipts ledger &#8212; each its own login, each a few minutes, each a context switch that cost more than the minutes. Now it&#8217;s one message at 6:30 a.m. and one at 8 p.m. The agent&#8217;s main job is to read everything, summarize it, and put it in a single place.</p><p>Most of the leverage in a personal agent &#8212; and, I&#8217;d argue, a business one &#8212; is in collapsing scattered state into one view. Automation is the dessert; aggregation is the meal. If you&#8217;re scoping an agent product, the unglamorous &#8220;read everything, summarize in one place&#8221; is probably worth more to the user than the impressive &#8220;take action&#8221; demo that gets the applause.</p><h2>2. Constraining the agent made me trust it more &#8212; and use it more.</h2><p>My instinct was that an agent earns its keep by acting, so I expected to keep widening what it was allowed to do on its own. The opposite happened.</p><p>The modules I rely on most are the ones that do the least. Property email gets a <em>drafted</em> reply that I approve with a tap; actually sending is gated behind a PIN. Banking is read-only &#8212; the agent can see balances and flag an odd charge, but it has no path to move a dollar. Investments are never traded. The medical module reads a sanitized ledger and never the underlying images.</p><p>Here&#8217;s the part I didn&#8217;t predict: the first time an agent does something you didn&#8217;t expect &#8212; even something small and harmless &#8212; you stop trusting it, and an untrusted tool gets quietly closed and never reopened. By keeping everything to <em>draft &#8594; approve</em>, I never had that moment. So I left more of it running, gave it more to read, leaned on it more. The constraint increased usage.</p><p>A narrow agent I trust beats a capable one I have to babysit. For anyone building agents for other people, the lesson is sharper still: &#8220;human in the loop&#8221; isn&#8217;t a compliance checkbox you bolt on at the end. It&#8217;s the feature that decides whether the thing survives contact with a real user. Design the approval step <em>as the product</em>, not as the guardrail around it.</p><h2>3. The model was the most replaceable part of the system.</h2><p>Partway through, I switched the underlying model from one provider to another. Not because of quality &#8212; because the framework I was running expected a particular model&#8217;s tool-calling profile. The swap took an evening, and the system behaved the same the next morning.</p><p>What did <em>not</em> swap easily was the plumbing. Read-only, scoped API tokens instead of stored passwords. Running on an isolated machine that is never my work laptop, so a bad instruction can&#8217;t reach anything that matters. A redaction step that strips personal information before anything leaves the house &#8212; the medical module, for instance, never sends a receipt image downstream at all, only a sanitized ledger. A PIN gate on anything that can send. That layer is where the weeks actually went, and it&#8217;s the part I couldn&#8217;t rip out without rebuilding the whole thing.</p><p>The model is increasingly a commodity you can swap in an evening. The durable engineering is the boring security-and-data-handling layer around it. So when you&#8217;re evaluating an &#8220;AI feature&#8221; &#8212; your own or a vendor&#8217;s &#8212; spend less time on <em>which model</em> and more on three questions: what can it read, what can it write, and where does the data go? That&#8217;s the part that&#8217;s hard to change later, and it&#8217;s the part that decides whether you can trust the thing with anything real.</p><h2>The pattern underneath</h2><p>None of this is exotic. A server that&#8217;s already on, some scoped tokens, a chat bot, a scheduler. The surprises weren&#8217;t technical &#8212; they were about where the value actually sat: in reading rather than acting, in constraint rather than capability, in the plumbing rather than the model.</p><p>None of this is specific to a personal setup. The same three decide things at company scale, anywhere an agent is put in front of real data and real consequences.</p>]]></content:encoded></item></channel></rss>