<?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[Jason Bell]]></title><description><![CDATA[Building One-to-One relationships at scale. Designing great customer experiences with technology. ]]></description><link>https://gotomomento.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!FRfW!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11cca971-83a1-4339-8db1-a71d7505299e_1800x1800.jpeg</url><title>Jason Bell</title><link>https://gotomomento.substack.com</link></image><generator>Substack</generator><lastBuildDate>Mon, 13 Apr 2026 11:59:58 GMT</lastBuildDate><atom:link href="https://gotomomento.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Jason Bell]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[gotomomento@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[gotomomento@substack.com]]></itunes:email><itunes:name><![CDATA[Jason Bell]]></itunes:name></itunes:owner><itunes:author><![CDATA[Jason Bell]]></itunes:author><googleplay:owner><![CDATA[gotomomento@substack.com]]></googleplay:owner><googleplay:email><![CDATA[gotomomento@substack.com]]></googleplay:email><googleplay:author><![CDATA[Jason Bell]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[K.I.S.S. Keep It Separate, Stupid.]]></title><description><![CDATA[You are optimising for a variable you do not own, will never own, and cannot forecast. Congratulations on your very busy spreadsheet.]]></description><link>https://gotomomento.substack.com/p/kiss-keep-it-separate-stupid</link><guid isPermaLink="false">https://gotomomento.substack.com/p/kiss-keep-it-separate-stupid</guid><dc:creator><![CDATA[Jason Bell]]></dc:creator><pubDate>Sat, 11 Apr 2026 08:08:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!50-W!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36df5c42-6b27-4d22-bb74-1f74f68e0f37_1200x1200.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>There is a particular kind of engineering hubris that surfaces every time a new cost constraint appears on the horizon. Developers see token pricing, squint at their usage bills, and immediately start making architectural decisions, collapsing separate concerns into single prompts, hoisting logic into context windows, batching calls that have no business being near each other, all in the service of shaving cost from a line item they do not control.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!50-W!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36df5c42-6b27-4d22-bb74-1f74f68e0f37_1200x1200.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!50-W!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36df5c42-6b27-4d22-bb74-1f74f68e0f37_1200x1200.jpeg 424w, https://substackcdn.com/image/fetch/$s_!50-W!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36df5c42-6b27-4d22-bb74-1f74f68e0f37_1200x1200.jpeg 848w, https://substackcdn.com/image/fetch/$s_!50-W!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36df5c42-6b27-4d22-bb74-1f74f68e0f37_1200x1200.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!50-W!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36df5c42-6b27-4d22-bb74-1f74f68e0f37_1200x1200.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!50-W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36df5c42-6b27-4d22-bb74-1f74f68e0f37_1200x1200.jpeg" width="1200" height="1200" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/36df5c42-6b27-4d22-bb74-1f74f68e0f37_1200x1200.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1200,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:219953,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://gotomomento.substack.com/i/193865101?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36df5c42-6b27-4d22-bb74-1f74f68e0f37_1200x1200.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!50-W!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36df5c42-6b27-4d22-bb74-1f74f68e0f37_1200x1200.jpeg 424w, https://substackcdn.com/image/fetch/$s_!50-W!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36df5c42-6b27-4d22-bb74-1f74f68e0f37_1200x1200.jpeg 848w, https://substackcdn.com/image/fetch/$s_!50-W!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36df5c42-6b27-4d22-bb74-1f74f68e0f37_1200x1200.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!50-W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36df5c42-6b27-4d22-bb74-1f74f68e0f37_1200x1200.jpeg 1456w" sizes="100vw" fetchpriority="high"></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></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://gotomomento.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Here is the uncomfortable truth they are papering over: <strong>you are a price taker.</strong> You always were. You always will be.</p><h3>The cost curve belongs to someone else</h3><p>Token costs have fallen dramatically and will continue to fall. The frontier models that cost a small fortune per million tokens in 2023 are already being undercut by distilled successors. The providers are in a race with no finish line, and their pricing reflects infrastructure economics you have zero visibility into. What costs you ten units today might cost one unit in eighteen months. Or it might not. </p><p>A new modality, a new architecture, a regulatory burden, a compute shortage, none of these are in your model. You don&#8217;t own the model, it now owns you.</p><p>And yet here you are, coupling your retrieval logic to your summarisation logic to your classification logic all stuffed into one sprawling system prompt, because you convinced yourself you were being economical.</p><p>This is the architectural equivalent of designing a building around the spot price of steel on the day you drew the plans. Except at least steel has a futures market. Token pricing has a blog post.</p><h3>What you actually destroyed</h3><p>When you packed everything into a single call to save tokens, you also threw away testability. You threw away the ability to swap providers. You made debugging a matter of staring at a 4,000-token prompt and wondering which bit is lying to you. You made prompt iteration a full-stack event. You made your system fragile in direct proportion to how clever you were.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FPuv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66ef86ec-e3e9-44ae-8497-f91f3156ea5e_640x360.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FPuv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66ef86ec-e3e9-44ae-8497-f91f3156ea5e_640x360.gif 424w, https://substackcdn.com/image/fetch/$s_!FPuv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66ef86ec-e3e9-44ae-8497-f91f3156ea5e_640x360.gif 848w, https://substackcdn.com/image/fetch/$s_!FPuv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66ef86ec-e3e9-44ae-8497-f91f3156ea5e_640x360.gif 1272w, https://substackcdn.com/image/fetch/$s_!FPuv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66ef86ec-e3e9-44ae-8497-f91f3156ea5e_640x360.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FPuv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66ef86ec-e3e9-44ae-8497-f91f3156ea5e_640x360.gif" width="640" height="360" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/66ef86ec-e3e9-44ae-8497-f91f3156ea5e_640x360.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:360,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2292055,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gotomomento.substack.com/i/193865101?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66ef86ec-e3e9-44ae-8497-f91f3156ea5e_640x360.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FPuv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66ef86ec-e3e9-44ae-8497-f91f3156ea5e_640x360.gif 424w, https://substackcdn.com/image/fetch/$s_!FPuv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66ef86ec-e3e9-44ae-8497-f91f3156ea5e_640x360.gif 848w, https://substackcdn.com/image/fetch/$s_!FPuv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66ef86ec-e3e9-44ae-8497-f91f3156ea5e_640x360.gif 1272w, https://substackcdn.com/image/fetch/$s_!FPuv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66ef86ec-e3e9-44ae-8497-f91f3156ea5e_640x360.gif 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></figure></div><p></p><p>Separation of concerns is not a nice-to-have. It is the foundational discipline that made software engineering a profession rather than a craft. It exists because concerns change at different rates, for different reasons, controlled by different people. That principle does not dissolve because the runtime happens to charge by the token.</p><h3>The cost you are not counting</h3><p>Token costs are visible. They are on your invoice. They feel controllable, because they respond to effort you compress the prompt, the number goes down, dopamine is released.</p><p>The cost of architectural coupling is invisible until it is not. It lives in the engineer-hours spent making a change that should have been simple. In the incident where one mutated prompt broke three downstream features simultaneously. In the moment you try to switch models and discover that your prompts are load-bearing walls.</p><p>These costs don&#8217;t appear on an invoice. </p><p>They appear on a Tuesday afternoon, three months from now, when the person who wrote the original prompt is no longer at the company.</p><h3>What to do instead</h3><p>Design your system as if token costs were zero and you were optimising for clarity, testability, and modularity. Then profile. Then optimise the calls that actually hurt, with evidence.</p><p>Separate prompts for separate concerns. One job per call, where possible. Named, versioned, independently testable. If a prompt is too expensive, you can cache it, compress it, or replace the model underneath it because you kept it separate. If you didn&#8217;t, you can&#8217;t do any of those things cleanly.</p><p>The providers will adjust their pricing. They will change their context window limits, their rate limits, their model availability. </p><p>You are at their mercy and their pricing.</p><p>The spaghetti of services relying on core models. You create front ends on Loveable, that uses Claude&#8217;s Opus 4.6 model, which they don&#8217;t own. </p><p>The only hedge you have against all of that is a system with clean seams. </p><p>If not then your startup is built on a bet where the odds are already against you. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://gotomomento.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://gotomomento.substack.com/p/kiss-keep-it-separate-stupid?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://gotomomento.substack.com/p/kiss-keep-it-separate-stupid?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p>]]></content:encoded></item><item><title><![CDATA[A digital twin is just a model. And your model is wrong.]]></title><description><![CDATA[The digital twin market is projected to reach $110 billion by 2028. It is also, in large part, a rebranding exercise for technology that already existed, applied to problems it cannot actually solve,]]></description><link>https://gotomomento.substack.com/p/a-digital-twin-is-just-a-model-and</link><guid isPermaLink="false">https://gotomomento.substack.com/p/a-digital-twin-is-just-a-model-and</guid><dc:creator><![CDATA[Jason Bell]]></dc:creator><pubDate>Fri, 10 Apr 2026 07:26:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!6rPA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930cbf1f-193b-4c89-993b-6e0f66628ba6_2000x3000.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The pitch is seductive. Build a perfect digital replica of a physical system. Feed it live sensor data. Watch it mirror reality in real time. Use it to predict failures before they happen, optimise operations without touching the physical asset, run simulations of future states and make decisions accordingly.</p><p>This pitch has been made, with minor variations, to manufacturing firms, hospital systems, city planners, energy companies, and militaries. The market analysts have assigned it a number with nine zeroes. The consulting firms have built practices around it. The vendors have given it a name that implies science fiction levels of fidelity: a <em>twin</em>. Not a model, not a simulation, not a dashboard. A twin. A perfect double.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://gotomomento.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6rPA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930cbf1f-193b-4c89-993b-6e0f66628ba6_2000x3000.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6rPA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930cbf1f-193b-4c89-993b-6e0f66628ba6_2000x3000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6rPA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930cbf1f-193b-4c89-993b-6e0f66628ba6_2000x3000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6rPA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930cbf1f-193b-4c89-993b-6e0f66628ba6_2000x3000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6rPA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930cbf1f-193b-4c89-993b-6e0f66628ba6_2000x3000.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6rPA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930cbf1f-193b-4c89-993b-6e0f66628ba6_2000x3000.jpeg" width="1456" height="2184" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/930cbf1f-193b-4c89-993b-6e0f66628ba6_2000x3000.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2184,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:598465,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://gotomomento.substack.com/i/193769323?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930cbf1f-193b-4c89-993b-6e0f66628ba6_2000x3000.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6rPA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930cbf1f-193b-4c89-993b-6e0f66628ba6_2000x3000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6rPA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930cbf1f-193b-4c89-993b-6e0f66628ba6_2000x3000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6rPA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930cbf1f-193b-4c89-993b-6e0f66628ba6_2000x3000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6rPA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930cbf1f-193b-4c89-993b-6e0f66628ba6_2000x3000.jpeg 1456w" sizes="100vw" fetchpriority="high"></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></figure></div><p></p><p>There is a word for what most deployed digital twins actually are. That word is model. And models, as any engineer who has spent time with them knows, are wrong. The question is not whether your model is wrong. It is how wrong, in which directions, and whether anyone is accounting for that when they make decisions based on it.</p><p>The digital twin industry has largely decided not to engage with this question. That decision is costing buyers real money for capabilities that are, in the precise technical sense, not what was advertised.</p><h2>What a digital twin actually is</h2><p>Ask ten vendors what a digital twin is and you will get ten answers. This is not because the concept is subtle. It is because the term has been deliberately kept vague enough to apply to almost anything, which maximises the addressable market.</p><p>The original definition, from <a href="https://www.researchgate.net/publication/307509727_Origins_of_the_Digital_Twin_Concept">Grieves at the University of Michigan in 2002</a>, was specific: a digital twin is a virtual representation of a physical object or system, connected to that object via data, updated continuously, and used to understand and predict the behaviour of the physical counterpart. The connection and the continuity were load-bearing. Without them, you have a model. With them, you have something potentially more useful.</p><p>What the market has since defined as a digital twin includes: static 3D CAD models with a live dashboard bolted on. BIM files for buildings that were last updated at construction. Simulation models that run periodically, not continuously. Dashboards that aggregate sensor data into visualisations without any underlying physics model at all. In several high-profile cases, what a vendor called a digital twin was, on inspection, a database with a 3D viewer.</p><p>The definitional collapse is not accidental. Once you allow &#8220;digital representation of a physical thing&#8221; to count as a twin, the installed base explodes overnight. Every CAD file ever created becomes a digital twin. Every BMS system in every office building becomes a digital twin. The market is large because the definition has been made large to fit it.</p><p>The actual thing, a continuously updated, data-connected representation that meaningfully tracks a physical system is much rarer, much harder, and much more expensive than the market narrative suggests. </p><h2>The model drift problem</h2><p>A digital twin is only useful if it reflects the current state of its physical counterpart. The moment it diverges, it stops being a twin and starts being a historical record. Keeping it synchronised requires continuous data ingestion, model updating, and crucially, a mechanism for detecting and correcting when the digital and physical have come apart.</p><p>This is a Kalman filter problem. The Kalman filter is the standard tool for maintaining a running estimate of a system&#8217;s state given noisy measurements. It has two steps: predict the next state using the model, then update that prediction using the actual measurement. The update weight -- how much you trust the measurement versus the model -- is determined by the relative uncertainty of each.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;3a5f1fa0-5df7-4f72-a126-d9b0224e9be8&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">import numpy as np

def kalman_update(x_est, P_est, measurement, H, R, F, Q):
    """
    One step of a Kalman filter.

    x_est:       current state estimate           (n,)
    P_est:       current state covariance          (n, n)
    measurement: observed sensor reading           (m,)
    H:           observation matrix                (m, n)  maps state to measurement space
    R:           measurement noise covariance      (m, m)  how much we trust sensors
    F:           state transition matrix           (n, n)  the physics model
    Q:           process noise covariance          (n, n)  how much the model drifts

    The critical ratio: Q / R
    High Q, low R: trust the sensors, distrust the model  (model is bad)
    Low Q, high R: trust the model, distrust the sensors  (sensors are bad)
    """

    # Predict step: where does the model say we'll be?
    x_pred = F @ x_est
    P_pred = F @ P_est @ F.T + Q

    # Kalman gain: how much to correct toward the measurement
    S = H @ P_pred @ H.T + R          # innovation covariance
    K = P_pred @ H.T @ np.linalg.inv(S)

    # Update step: correct the prediction with the measurement
    innovation = measurement - H @ x_pred    # how wrong was the model?
    x_updated  = x_pred + K @ innovation
    P_updated  = (np.eye(len(x_est)) - K @ H) @ P_pred

    return x_updated, P_updated, innovation

# Concrete example: tracking a turbine bearing temperature
# State: [temperature, rate_of_change]
# Measurement: raw thermocouple reading

n_steps = 100
np.random.seed(42)

# True system: temperature rising slowly with noise
true_temp  = 80.0
true_state = np.array([true_temp, 0.1])   # [temp, rate]

# Model parameters (what the digital twin thinks the physics is)
F = np.array([[1.0, 1.0],   # temp += rate * dt
              [0.0, 1.0]])  # rate stays constant (simplified)

H = np.array([[1.0, 0.0]])  # we only measure temperature, not rate

# The critical question: how wrong is the model?
Q_good  = np.diag([0.1, 0.01])   # model is trusted: low process noise
Q_bad   = np.diag([2.0, 0.5])    # model is not trusted: high process noise

R = np.array([[1.5]])              # sensor noise covariance (thermocouples are noisy)

# Run both scenarios
x_est_good = np.array([80.0, 0.0])
x_est_bad  = np.array([80.0, 0.0])
P           = np.eye(2)

drift_good, drift_bad = [], []

for step in range(n_steps):
    # Simulate physical system drifting from model assumptions
    true_state[1] += 0.005 * step / n_steps   # rate is actually accelerating
    true_state[0] += true_state[1]
    measurement = np.array([true_state[0] + np.random.randn() * 1.2])

    x_est_good, P, innov_good = kalman_update(
        x_est_good, P, measurement, H, R, F, Q_good)
    x_est_bad,  P, innov_bad  = kalman_update(
        x_est_bad,  P, measurement, H, R, F, Q_bad)

    drift_good.append(abs(x_est_good[0] - true_state[0]))
    drift_bad.append(abs(x_est_bad[0]  - true_state[0]))

print(f"After {n_steps} steps:")
print(f"  Twin with trusted (but wrong) model -- mean drift: {np.mean(drift_good):.2f} deg C")
print(f"  Twin with distrusted model          -- mean drift: {np.mean(drift_bad):.2f} deg C")
print(f"")
print(f"  The twin that trusted its model drifted {np.mean(drift_good)/np.mean(drift_bad):.1f}x more.")
print(f"  This is the core problem: vendors tune Q to make demos look good.")
print(f"  In production, the model is always wrong in ways the demo didn't include.")

# Typical output:
# After 100 steps:
#   Twin with trusted (but wrong) model -- mean drift: 4.73 deg C
#   Twin with distrusted model          -- mean drift: 1.21 deg C
#   The twin that trusted its model drifted 3.9x more.</code></pre></div><p>The Q matrix is where digital twin projects go to die. Q encodes how much you trust your own physics model. Set it too low, we trust the model too much, and when the physical system drifts from the model&#8217;s assumptions, the twin lags behind and eventually diverges. Set it too high, distrust the model, and you are essentially just filtering the sensor data, and there is no need for the physics model at all.</p><p>Most vendors set Q in their demos by tuning it to match their demo dataset. In production, the physical system behaves differently than the demo. The model is wrong in new directions. The twin drifts. The maintenance team stops looking at the twin dashboard because it is wrong too often to trust. This is not a hypothetical. It is the modal outcome of digital twin deployments in discrete manufacturing.</p><h2>The sensor data problem nobody prices in</h2><p>The Kalman filter above assumes you have measurements. Good measurements, arriving on time, from sensors that are working. This assumption is doing a remarkable amount of heavy lifting in every digital twin business case I have ever seen.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;eebd68ca-e8df-445d-ac31-ae3f77481263&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">def assess_sensor_quality(sensor_readings, expected_range, max_gap_seconds):
    """
    The data quality audit that should precede every digital twin business case.
    Almost never actually done before signing the contract.
    """
    readings = np.array(sensor_readings)
    timestamps = readings[:, 0]
    values     = readings[:, 1]

    # 1. Completeness: what fraction of expected readings actually arrived?
    gaps          = np.diff(timestamps)
    missing_pct   = (gaps[gaps &gt; max_gap_seconds] / max_gap_seconds - 1).sum()
    completeness  = max(0, 1 - missing_pct / len(gaps))

    # 2. Range validity: sensors fail in characteristic ways
    in_range      = ((values &gt;= expected_range[0]) &amp; (values &lt;= expected_range[1]))
    range_valid   = in_range.mean()

    # 3. Stuck sensor detection: a common failure mode where sensor reads same value
    diffs         = np.diff(values)
    stuck_windows = (np.abs(diffs) &lt; 0.001).sum()
    stuck_pct     = stuck_windows / len(diffs)

    # 4. Latency: is the data arriving fast enough to be useful?
    # For a fast-moving system, 30-second old data is not "real time"
    median_latency = np.median(np.diff(timestamps))

    print(f"Sensor data quality report:")
    print(f"  Completeness:         {completeness:.1%}")
    print(f"  Range validity:       {range_valid:.1%}")
    print(f"  Stuck sensor windows: {stuck_pct:.1%} of readings")
    print(f"  Median update rate:   {median_latency:.1f}s")
    print(f"")

    if completeness &lt; 0.95:
        print(f"  WARNING: {(1-completeness):.1%} of readings missing.")
        print(f"  The twin will interpolate or hold-last-value.")
        print(f"  Neither is the physical system. It is a guess.")

    if stuck_pct &gt; 0.02:
        print(f"  WARNING: {stuck_pct:.1%} of readings look stuck.")
        print(f"  Stuck sensors read healthy while the system degrades.")
        print(f"  The twin will show green. The asset is not green.")

    total_quality = completeness * range_valid * (1 - stuck_pct)
    print(f"  Combined data quality index: {total_quality:.1%}")
    print(f"  Your twin is {total_quality:.1%} of a twin. The rest is fiction.")
    return total_quality</code></pre></div><p>Real industrial sensor estates are not what the demo shows. They are accumulated over years, from multiple vendors, using different protocols, with varying calibration histories. Sensors fail silently: they stick at a value, they drift slowly, they develop intermittent faults that look like signal noise. The PLC that aggregates readings was not designed for the latency requirements of a real-time digital twin. The historian database that stores readings was set up to log at one-minute intervals, and nobody budgeted for upgrading it.</p><p>In 2017 a study of industrial IoT deployments by <a href="https://newsroom.cisco.com/c/r/newsroom/en/us/a/y2017/m05/cisco-survey-reveals-close-to-three-fourths-of-iot-projects-are-failing.html">Cisco found that 74% of IoT projects fail</a> or stall. The leading cause is not the software. <strong>It is data: missing data, bad data, data that arrives too slowly, data from sensors that have not been calibrated in three years.</strong> The digital twin sits downstream of all of this. It gets the data last, after it has been through the PLC, the historian, the network, and the middleware layer that converts it from the proprietary format the sensor vendor uses. By the time the twin sees a reading, it can be seconds to minutes old.</p><p>For a slow-moving system like a building, this is fine. For a fast-moving system like a turbine, a compressor, or a robot cell, it is not fine. &#8220;Real time&#8221; in most digital twin deployments means &#8220;real time relative to the historian update frequency,&#8221; which is not the same thing as real time.</p><h2>The model fidelity trap</h2><p>Suppose you solve the data problem. Sensors are good, data is clean, latency is acceptable. Now you need the physics model, the part that turns sensor readings into predictions about future states and failure modes. This is the part the vendors call &#8220;the digital twin&#8221; in their marketing materials, because it is the part that justifies the premium pricing.</p><p>Physics models exist on a spectrum from empirical (curve-fit to historical data) to first-principles (derived from governing equations). Both have problems.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;c49ae823-d135-46c2-9920-a263581477de&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">def model_fidelity_tradeoffs():
    """
    The three model types used in digital twins, and what each actually buys you.
    """

    models = {
        "Empirical (data-driven)": {
            "build_cost":       "Low -- fit a model to historical data",
            "physics_required": "None",
            "extrapolation":    "POOR -- fails outside training distribution",
            "calibration":      "Automatic, but retraining needed as system ages",
            "failure_modes":    "Confidently wrong on novel operating conditions",
            "honest_name":      "Glorified regression",
        },
        "Physics-based (first principles)": {
            "build_cost":       "Very high -- requires domain experts, months of work",
            "physics_required": "Complete governing equations",
            "extrapolation":    "Good within physical assumptions",
            "calibration":      "Manual, expensive, degrades as system wears",
            "failure_modes":    "Assumes ideal conditions that do not exist in production",
            "honest_name":      "Simulation that was calibrated once and then drifted",
        },
        "Hybrid": {
            "build_cost":       "Highest -- requires both expertise types",
            "physics_required": "Partial",
            "extrapolation":    "Moderate",
            "calibration":      "Ongoing, requires both data and engineering review",
            "failure_modes":    "Inherits worst-case failure modes of both approaches",
            "honest_name":      "What vendors promise; rarely what is delivered",
        },
    }

    for model_type, props in models.items():
        print(f"\n{model_type}")
        print(f"  Honest name:      {props['honest_name']}")
        print(f"  Extrapolation:    {props['extrapolation']}")
        print(f"  Primary failure:  {props['failure_modes']}")

    print(f"""
The trap:
  Vendors sell the hybrid vision.
  They deliver empirical models because they are fast and cheap to build.
  Empirical models fail outside their training distribution.
  Industrial systems constantly operate outside their historical distribution
  (new operators, new products, new wear patterns, new ambient conditions).
  The twin fails precisely when you need it most: novel conditions.
""")

model_fidelity_tradeoffs()</code></pre></div><p>The first-principles physics model has its own problem: it was calibrated on a new machine, or a reference machine in a laboratory. The machine you actually have is not new. It has worn components, fouled heat exchangers, slightly misaligned shafts, and operating patterns that were not in the original design envelope. The physics model describes a platonic version of your asset. Your asset is not that.</p><p>Calibrating the model to your actual asset is a significant piece of engineering work, and it degrades over time as the asset changes. Most digital twin projects include an initial calibration. Almost none include a systematic recalibration process. Within 12 to 24 months, the model has drifted from the physical asset in ways that are not visible to the dashboard user.</p><p>This is the failure mode that never appears in case studies. Nobody publishes a paper titled &#8220;Our digital twin was accurate for 18 months and then quietly became useless.&#8221; The vendors move on to the next sale. The operations team keeps the dashboard on the wall because removing it would require admitting the project did not work.</p><h2>What &#8220;predictive maintenance&#8221; actually predicts</h2><p>The headline use case for digital twins in industrial settings is predictive maintenance: catch failures before they happen, reduce unplanned downtime, extend asset life. This is real. Condition monitoring and predictive maintenance genuinely work when implemented well.</p><p>The question is whether you need a digital twin to do it.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;037ebcba-3cf3-4060-a767-498b20f9c6dd&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">import numpy as np
from scipy import stats

def predictive_maintenance_reality_check(
    sensor_history,
    failure_events,
    twin_predictions,
    threshold=0.7
):
    """
    Evaluate what a digital twin's predictive maintenance is actually doing
    versus what simpler approaches would achieve.
    """

    sensor_history   = np.array(sensor_history)
    failure_events   = np.array(failure_events)    # 1 = failure in next 30 days
    twin_predictions = np.array(twin_predictions)  # model's failure probability

    # What the digital twin vendor reports: precision and recall at threshold
    predicted_positive = twin_predictions &gt;= threshold
    true_positive      = (predicted_positive &amp; (failure_events == 1)).sum()
    false_positive     = (predicted_positive &amp; (failure_events == 0)).sum()
    false_negative     = (~predicted_positive &amp; (failure_events == 1)).sum()

    twin_precision = true_positive / (true_positive + false_positive + 1e-9)
    twin_recall    = true_positive / (true_positive + false_negative + 1e-9)

    # What a simple statistical rule gets you: flag when reading exceeds 2 std devs
    mu, sigma         = sensor_history.mean(), sensor_history.std()
    simple_flag       = sensor_history &gt; (mu + 2 * sigma)
    tp_simple         = (simple_flag &amp; (failure_events == 1)).sum()
    fp_simple         = (simple_flag &amp; (failure_events == 0)).sum()
    fn_simple         = (~simple_flag &amp; (failure_events == 1)).sum()

    simple_precision  = tp_simple / (tp_simple + fp_simple + 1e-9)
    simple_recall     = tp_simple / (tp_simple + fn_simple + 1e-9)

    print(f"Predictive maintenance comparison:")
    print(f"{'Method':&lt;30} {'Precision':&gt;10} {'Recall':&gt;10}")
    print("-" * 52)
    print(f"{'Digital twin':&lt; 30} {twin_precision:&gt;10.1%} {twin_recall:&gt;10.1%}")
    print(f"{'Simple statistical rule':&lt; 30} {simple_precision:&gt;10.1%} {simple_recall:&gt;10.1%}")
    print(f"")
    print(f"  The question to ask your vendor:")
    print(f"  What is the marginal improvement over a simple threshold rule?")
    print(f"  And does that margin justify the implementation and maintenance cost?")
    print(f"  In most published evaluations, the margin is single-digit percentage points.")
    print(f"  The cost difference is an order of magnitude.")</code></pre></div><p>The published literature on digital twin predictive maintenance is full of precision and recall numbers that look impressive in isolation. They are rarely shown against the correct baseline, which is: what does a simple statistical threshold on the same sensor data achieve? In most cases, the answer is within a few percentage points of the twin&#8217;s performance. In some cases, the simple rule beats it.</p><p>This matters because the simple rule costs almost nothing to implement and maintain. The digital twin costs millions to build, requires specialist skills to maintain, and degrades silently when the underlying model drifts. The ROI case, which almost always computes the benefit of predictive maintenance against the cost of unplanned downtime, uses the twin&#8217;s performance numbers in the numerator. It rarely subtracts the cost of the wrong alerts, the staff time spent investigating false positives, or the gradual erosion of trust in the system that leads operations teams to ignore it.</p><h2>The coordination problem nobody mentions</h2><p>There is a failure mode that is not technical at all, and it is the most common reason digital twin projects deliver nothing.</p><p>A digital twin produces predictions. Those predictions are only valuable if someone acts on them. Acting on them requires: a workflow that delivers the prediction to the right person, authority to act on the prediction, spare parts if the prediction calls for maintenance, maintenance staff with the right skills, a maintenance window that does not conflict with production commitments, and a feedback loop that records whether the action was taken and whether it was correct.</p><p>None of this is in scope for the typical digital twin implementation. The vendor builds the model, integrates the data, deploys the dashboard, runs the pilot, shows the predictions are accurate, and hands over. The operational changes required to act on those predictions are left as an exercise for the buyer.</p><p>The result is a dashboard that accurately predicts failures that nobody has the workflow to prevent. The twin is technically working. The benefit is zero.</p><p>This is not a criticism of any specific vendor. It is a structural feature of how the market is organised. The digital twin is a software product. The operational transformation required to extract value from it is a change management programme. They are priced and sold separately, delivered by different teams, and the connection between them is treated as the buyer&#8217;s problem.</p><h2>What you should actually buy</h2><p>None of this means that the underlying technologies are useless. Sensor networks, condition monitoring, physics simulation, and state estimation are all valuable. They have been valuable for decades, deployed under less glamorous names: SCADA, historian systems, FEA models, Kalman filters, process control. They work when implemented with realistic expectations about what they can and cannot do.</p><p>The question to ask any digital twin vendor is not &#8220;can you build a twin of my asset?&#8221; The answer to that question is always yes, because the definition of twin has been made expansive enough to guarantee it. The questions to ask are:</p><ul><li><p>What is your model type, and how does it perform outside the training distribution? </p></li><li><p>What is your assumed sensor data quality, and what happens when the actual data quality is lower? </p></li><li><p>What is the recalibration process when the model drifts, and who pays for it? </p></li><li><p>What operational workflow changes are required to act on the twin&#8217;s outputs, and are those in scope? </p></li><li><p>What is the performance of your system against a simple statistical baseline on the same data?</p></li></ul><p>If the vendor cannot answer all five questions with specifics, you are not buying a digital twin. </p><p><em><strong>You are buying a 3D dashboard with aspirational pricing.</strong></em></p><p>The technology is not the problem. The framing is the problem. &#8220;Twin&#8221; implies a fidelity that the physics of model drift, sensor noise, and data latency make impossible to sustain. A model that starts accurate and degrades silently is not a twin. It is a liability, because it creates the conditions for confident decisions made on stale information.</p><p>The industry built a business on a word. The word implies a guarantee the physics will not allow. And the gap between the word and the reality is, reliably and consistently, your problem.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://gotomomento.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://gotomomento.substack.com/p/a-digital-twin-is-just-a-model-and?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://gotomomento.substack.com/p/a-digital-twin-is-just-a-model-and?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p>]]></content:encoded></item><item><title><![CDATA[Agentic AI Won't Beat Aviation Yield Management. It Will Feed It.]]></title><description><![CDATA[The prevailing assumption that AI agents will find consumers cheaper flights is structurally wrong. The architecture of aviation pricing guarantees the opposite outcome.]]></description><link>https://gotomomento.substack.com/p/agentic-ai-wont-beat-aviation-yield-35f</link><guid isPermaLink="false">https://gotomomento.substack.com/p/agentic-ai-wont-beat-aviation-yield-35f</guid><dc:creator><![CDATA[Jason Bell]]></dc:creator><pubDate>Fri, 10 Apr 2026 07:06:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!r5cr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F062ce785-0a4f-47a4-ad46-6b32ced25b57_739x560.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The demos are convincing. An AI agent, acting on your behalf, searches dozens of airlines, compares fares, and books the cheapest flight &#8212; all while you sleep. <strong>The premise is sound. The execution is impossible.</strong> And in the scenarios where it partially works, the aggregate effect of millions of agents doing the same thing will inflate the prices everyone pays.</p><p>This is not a technology problem. The technology exists and largely works. This is an architecture problem, a collision between how agentic AI reasons about tasks and how aviation yield management systems are actually designed to respond to demand. They are not compatible. They are adversarial. And yield management will win.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://gotomomento.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!r5cr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F062ce785-0a4f-47a4-ad46-6b32ced25b57_739x560.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!r5cr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F062ce785-0a4f-47a4-ad46-6b32ced25b57_739x560.png 424w, https://substackcdn.com/image/fetch/$s_!r5cr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F062ce785-0a4f-47a4-ad46-6b32ced25b57_739x560.png 848w, https://substackcdn.com/image/fetch/$s_!r5cr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F062ce785-0a4f-47a4-ad46-6b32ced25b57_739x560.png 1272w, https://substackcdn.com/image/fetch/$s_!r5cr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F062ce785-0a4f-47a4-ad46-6b32ced25b57_739x560.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!r5cr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F062ce785-0a4f-47a4-ad46-6b32ced25b57_739x560.png" width="739" height="560" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/062ce785-0a4f-47a4-ad46-6b32ced25b57_739x560.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:560,&quot;width&quot;:739,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:83856,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://gotomomento.substack.com/i/193768493?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F062ce785-0a4f-47a4-ad46-6b32ced25b57_739x560.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_!r5cr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F062ce785-0a4f-47a4-ad46-6b32ced25b57_739x560.png 424w, https://substackcdn.com/image/fetch/$s_!r5cr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F062ce785-0a4f-47a4-ad46-6b32ced25b57_739x560.png 848w, https://substackcdn.com/image/fetch/$s_!r5cr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F062ce785-0a4f-47a4-ad46-6b32ced25b57_739x560.png 1272w, https://substackcdn.com/image/fetch/$s_!r5cr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F062ce785-0a4f-47a4-ad46-6b32ced25b57_739x560.png 1456w" sizes="100vw" fetchpriority="high"></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></figure></div><h2><strong>The Incognito Fallacy, Scaled Up</strong></h2><p>For years, a folk belief persisted that searching for flights in incognito mode would prevent airlines from detecting repeat searches and raising prices. This belief is wrong at a fundamental architectural level. Yield management systems do not track individual cookies. They track <em>aggregate route demand</em> across all sessions simultaneously.</p><p>Your individual browser state is noise. The signal that moves prices is the sum of every search on that route, weighted by time-to-departure, load factor, and competitor availability. Whether you are in incognito or not, you receive the same price as everyone else in your demand microsegment at that moment in time.</p><p><strong>Technical Clarification</strong></p><p><em>Yield management engines such as PROS Revenue Management and Amadeus Revenue Management System process aggregate booking curves, not individual session tracking. The misconception that clearing cookies affects pricing conflates client-side personalisation (which does exist for ancillary upselling) with core fare pricing logic (which is segment-level and server-side).</em></p><p>The reason this matters is that every proposed fix for agentic AI aviation booking carries the same misconception scaled to millions of agents. The assumption is that if an agent behaves differently to a human, masking its identity, rotating IPs, varying its search patterns, it can avoid triggering price increases. It cannot. Because price is not a response to who you are. <strong>It is a response to how many people want what you want, right now.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_QaJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea767b58-a83c-4c34-904c-3c8b5c9eba36_738x541.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_QaJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea767b58-a83c-4c34-904c-3c8b5c9eba36_738x541.png 424w, https://substackcdn.com/image/fetch/$s_!_QaJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea767b58-a83c-4c34-904c-3c8b5c9eba36_738x541.png 848w, https://substackcdn.com/image/fetch/$s_!_QaJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea767b58-a83c-4c34-904c-3c8b5c9eba36_738x541.png 1272w, https://substackcdn.com/image/fetch/$s_!_QaJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea767b58-a83c-4c34-904c-3c8b5c9eba36_738x541.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_QaJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea767b58-a83c-4c34-904c-3c8b5c9eba36_738x541.png" width="738" height="541" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ea767b58-a83c-4c34-904c-3c8b5c9eba36_738x541.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:541,&quot;width&quot;:738,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:77828,&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://gotomomento.substack.com/i/193768493?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea767b58-a83c-4c34-904c-3c8b5c9eba36_738x541.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_!_QaJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea767b58-a83c-4c34-904c-3c8b5c9eba36_738x541.png 424w, https://substackcdn.com/image/fetch/$s_!_QaJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea767b58-a83c-4c34-904c-3c8b5c9eba36_738x541.png 848w, https://substackcdn.com/image/fetch/$s_!_QaJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea767b58-a83c-4c34-904c-3c8b5c9eba36_738x541.png 1272w, https://substackcdn.com/image/fetch/$s_!_QaJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea767b58-a83c-4c34-904c-3c8b5c9eba36_738x541.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></figure></div><h2><strong>The Demand Signal Problem Is Not Fixable</strong></h2><p>A well-designed agentic booking agent will, by its nature, do the following: search broadly across dates and route alternatives to find the optimal option; re-query to confirm availability hasn&#8217;t changed; compare across multiple carriers; and verify price stability before committing. Each of these steps is a search event. Each search event is a demand signal.</p><p>Aviation yield management systems &#8212; PROS, Amadeus RMS, Sabre AirVision &#8212; are trained on decades of human booking behaviour. They interpret search volume as a proxy for intent. High search volume on a route in a given time window means high demand. High demand means price should rise. This is not a bug. It is the entire design.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!h-y0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773d214c-af6e-40fe-8821-d853d2725151_701x169.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!h-y0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773d214c-af6e-40fe-8821-d853d2725151_701x169.png 424w, https://substackcdn.com/image/fetch/$s_!h-y0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773d214c-af6e-40fe-8821-d853d2725151_701x169.png 848w, https://substackcdn.com/image/fetch/$s_!h-y0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773d214c-af6e-40fe-8821-d853d2725151_701x169.png 1272w, https://substackcdn.com/image/fetch/$s_!h-y0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773d214c-af6e-40fe-8821-d853d2725151_701x169.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!h-y0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773d214c-af6e-40fe-8821-d853d2725151_701x169.png" width="701" height="169" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/773d214c-af6e-40fe-8821-d853d2725151_701x169.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:169,&quot;width&quot;:701,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:23923,&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://gotomomento.substack.com/i/193768493?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773d214c-af6e-40fe-8821-d853d2725151_701x169.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_!h-y0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773d214c-af6e-40fe-8821-d853d2725151_701x169.png 424w, https://substackcdn.com/image/fetch/$s_!h-y0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773d214c-af6e-40fe-8821-d853d2725151_701x169.png 848w, https://substackcdn.com/image/fetch/$s_!h-y0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773d214c-af6e-40fe-8821-d853d2725151_701x169.png 1272w, https://substackcdn.com/image/fetch/$s_!h-y0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773d214c-af6e-40fe-8821-d853d2725151_701x169.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Now scale this. If ten million travellers deploy AI agents simultaneously on a popular route, the search volume against that route&#8217;s inventory multiplies by a factor of ten or more &#8212; before a single additional seat is actually sold. The yield engine interprets this as a demand surge. It raises prices autonomously. The agents re-search at the higher price, some switching to alternatives, generating more signals on adjacent routes. Those prices rise too.</p><p>This is not a theoretical scenario. It is the mechanical consequence of deploying demand-signal-dependent pricing systems against agents that generate more signals per intent than humans do. The outcome is not cheaper flights. The outcome is a market-wide inflation event caused by phantom demand.</p><p><em>The yield management system was never calibrated for agentic search behaviour. Deploying agents at scale is not outsmarting the pricing engine, it is overfeeding it.</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aiul!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dd9d01c-a715-41a6-8f55-51febead5458_741x484.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aiul!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dd9d01c-a715-41a6-8f55-51febead5458_741x484.png 424w, https://substackcdn.com/image/fetch/$s_!aiul!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dd9d01c-a715-41a6-8f55-51febead5458_741x484.png 848w, https://substackcdn.com/image/fetch/$s_!aiul!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dd9d01c-a715-41a6-8f55-51febead5458_741x484.png 1272w, https://substackcdn.com/image/fetch/$s_!aiul!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dd9d01c-a715-41a6-8f55-51febead5458_741x484.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aiul!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dd9d01c-a715-41a6-8f55-51febead5458_741x484.png" width="741" height="484" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8dd9d01c-a715-41a6-8f55-51febead5458_741x484.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:484,&quot;width&quot;:741,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:62117,&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://gotomomento.substack.com/i/193768493?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dd9d01c-a715-41a6-8f55-51febead5458_741x484.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_!aiul!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dd9d01c-a715-41a6-8f55-51febead5458_741x484.png 424w, https://substackcdn.com/image/fetch/$s_!aiul!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dd9d01c-a715-41a6-8f55-51febead5458_741x484.png 848w, https://substackcdn.com/image/fetch/$s_!aiul!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dd9d01c-a715-41a6-8f55-51febead5458_741x484.png 1272w, https://substackcdn.com/image/fetch/$s_!aiul!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dd9d01c-a715-41a6-8f55-51febead5458_741x484.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></figure></div><h2><strong>The Distribution Architecture Is Not Accessible</strong></h2><p>Even before the demand signal problem, agentic AI booking faces a more fundamental obstacle: there is no clean, legal, scalable path to the inventory it needs to compare.</p><p>Live airline pricing and availability sits behind three decades of commercial infrastructure. The Global Distribution Systems such as Sabre, Amadeus, Travelport are the only route to real-time inventory across carriers. Accessing them requires commercial agreements, per-segment transaction fees, and contractual data licensing arrangements that cost operators hundreds of thousands of dollars annually before a single booking is made.</p><p>The airlines that have moved to NDC (New Distribution Capability) have not opened their inventory, they have reasserted their own gatekeeping, requiring individual commercial agreements with each carrier. An agent that wants to compare British Airways, Lufthansa, and Emirates in real time needs three separate commercial relationships, three separate API integrations, and three separate legal agreements.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TBuW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7657ac6-8dc1-459f-9e87-fdecaff62585_716x436.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TBuW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7657ac6-8dc1-459f-9e87-fdecaff62585_716x436.png 424w, https://substackcdn.com/image/fetch/$s_!TBuW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7657ac6-8dc1-459f-9e87-fdecaff62585_716x436.png 848w, https://substackcdn.com/image/fetch/$s_!TBuW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7657ac6-8dc1-459f-9e87-fdecaff62585_716x436.png 1272w, https://substackcdn.com/image/fetch/$s_!TBuW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7657ac6-8dc1-459f-9e87-fdecaff62585_716x436.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TBuW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7657ac6-8dc1-459f-9e87-fdecaff62585_716x436.png" width="716" height="436" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b7657ac6-8dc1-459f-9e87-fdecaff62585_716x436.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:436,&quot;width&quot;:716,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:61498,&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://gotomomento.substack.com/i/193768493?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7657ac6-8dc1-459f-9e87-fdecaff62585_716x436.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_!TBuW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7657ac6-8dc1-459f-9e87-fdecaff62585_716x436.png 424w, https://substackcdn.com/image/fetch/$s_!TBuW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7657ac6-8dc1-459f-9e87-fdecaff62585_716x436.png 848w, https://substackcdn.com/image/fetch/$s_!TBuW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7657ac6-8dc1-459f-9e87-fdecaff62585_716x436.png 1272w, https://substackcdn.com/image/fetch/$s_!TBuW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7657ac6-8dc1-459f-9e87-fdecaff62585_716x436.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></figure></div><h2><strong>Bot Detection Is Not The Agent&#8217;s Friend</strong></h2><p>For agents that attempt to bypass the GDS layer through browser automation &#8212; using Playwright, Puppeteer, or computer vision approaches &#8212; the infrastructure they encounter is not passive. Airlines and OTAs deploy active bot detection through Cloudflare, DataDome, and proprietary fingerprinting systems specifically designed to identify and throttle non-human traffic.</p><p>The response to increased agent traffic will not be capitulation. It will be escalation. Airlines will detect the behavioural signatures of agent search, the systematic date iteration, the non-human dwell times, the API call patterns and throttle or block it. At which point the agent either fails to complete the booking or is forced to present worse, less current pricing than a human searching directly.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1v7S!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeb98e22-7c13-4875-9620-b41c8dc9e8dd_740x521.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1v7S!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeb98e22-7c13-4875-9620-b41c8dc9e8dd_740x521.png 424w, https://substackcdn.com/image/fetch/$s_!1v7S!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeb98e22-7c13-4875-9620-b41c8dc9e8dd_740x521.png 848w, https://substackcdn.com/image/fetch/$s_!1v7S!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeb98e22-7c13-4875-9620-b41c8dc9e8dd_740x521.png 1272w, https://substackcdn.com/image/fetch/$s_!1v7S!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeb98e22-7c13-4875-9620-b41c8dc9e8dd_740x521.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1v7S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeb98e22-7c13-4875-9620-b41c8dc9e8dd_740x521.png" width="740" height="521" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eeb98e22-7c13-4875-9620-b41c8dc9e8dd_740x521.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:521,&quot;width&quot;:740,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:64289,&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://gotomomento.substack.com/i/193768493?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeb98e22-7c13-4875-9620-b41c8dc9e8dd_740x521.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_!1v7S!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeb98e22-7c13-4875-9620-b41c8dc9e8dd_740x521.png 424w, https://substackcdn.com/image/fetch/$s_!1v7S!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeb98e22-7c13-4875-9620-b41c8dc9e8dd_740x521.png 848w, https://substackcdn.com/image/fetch/$s_!1v7S!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeb98e22-7c13-4875-9620-b41c8dc9e8dd_740x521.png 1272w, https://substackcdn.com/image/fetch/$s_!1v7S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeb98e22-7c13-4875-9620-b41c8dc9e8dd_740x521.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></figure></div><h2><strong>The Tragedy of the Commons at Thirty Thousand Feet</strong></h2><p>This is not a problem that a better agent solves. It is a structural consequence of deploying signal-generating systems against signal-dependent pricing infrastructure at scale. The individual agent acting in the user&#8217;s interest, searching diligently, re-verifying prices, comparing alternatives, produces collective harm by inflating the demand signals that make everyone&#8217;s flight more expensive.</p><p>The yield management engine does not know or care that the search volume is agentic. It knows only that demand for a given route in a given window has increased sharply. Its job is to extract maximum revenue from that demand. It will do its job.</p><p>Historically, yield management systems were calibrated on human search behaviour, a known quantity with predictable look-to-book ratios. The introduction of millions of agents with look-to-book ratios an order of magnitude higher than human norms will require those systems to recalibrate. The recalibration will not produce lower prices. It will produce higher baseline prices that account for agentic noise in the demand signal.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vNtn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd667eb19-316d-41fc-9b21-2f02f9c9b184_717x551.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vNtn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd667eb19-316d-41fc-9b21-2f02f9c9b184_717x551.png 424w, https://substackcdn.com/image/fetch/$s_!vNtn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd667eb19-316d-41fc-9b21-2f02f9c9b184_717x551.png 848w, https://substackcdn.com/image/fetch/$s_!vNtn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd667eb19-316d-41fc-9b21-2f02f9c9b184_717x551.png 1272w, https://substackcdn.com/image/fetch/$s_!vNtn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd667eb19-316d-41fc-9b21-2f02f9c9b184_717x551.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vNtn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd667eb19-316d-41fc-9b21-2f02f9c9b184_717x551.png" width="717" height="551" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d667eb19-316d-41fc-9b21-2f02f9c9b184_717x551.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:551,&quot;width&quot;:717,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:101164,&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://gotomomento.substack.com/i/193768493?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd667eb19-316d-41fc-9b21-2f02f9c9b184_717x551.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_!vNtn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd667eb19-316d-41fc-9b21-2f02f9c9b184_717x551.png 424w, https://substackcdn.com/image/fetch/$s_!vNtn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd667eb19-316d-41fc-9b21-2f02f9c9b184_717x551.png 848w, https://substackcdn.com/image/fetch/$s_!vNtn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd667eb19-316d-41fc-9b21-2f02f9c9b184_717x551.png 1272w, https://substackcdn.com/image/fetch/$s_!vNtn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd667eb19-316d-41fc-9b21-2f02f9c9b184_717x551.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></figure></div><h2><strong>The Demo Is Not the Architecture</strong></h2><p>The agentic AI travel demos work because they run against sandboxed environments, pre-agreed API partners, and synthetic inventory. They do not run against the actual commercial infrastructure that prices real seats on real flights.</p><p>The real infrastructure is not neutral. It is <strong>actively adversarial to agent access</strong>, commercially motivated to maintain information asymmetry, technically designed to respond to demand signals, and legally structured to prevent the kind of open inventory comparison that agents require to function.</p><p>The outcome of deploying agentic AI at scale against this architecture is not cheaper flights. It is <strong>a market-wide demand signal inflation event</strong> that raises prices for every traveller, agentic or otherwise, on the routes where adoption is highest.</p><p>Understanding this requires looking past the demo layer to the distribution architecture beneath it. The yield management engine has been optimising against human behaviour for fifty years. It will not lose to a system that generates more signals per intent than humans do. <strong>It will profit from it.</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://gotomomento.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://gotomomento.substack.com/p/agentic-ai-wont-beat-aviation-yield-35f?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://gotomomento.substack.com/p/agentic-ai-wont-beat-aviation-yield-35f?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p>]]></content:encoded></item><item><title><![CDATA[Startups: The Passion and The Paradox (2026 Edition)]]></title><description><![CDATA[I wrote this piece in 2014. Twelve years on, I'm still grumpy. Some things never change.]]></description><link>https://gotomomento.substack.com/p/startups-the-passion-and-the-paradox</link><guid isPermaLink="false">https://gotomomento.substack.com/p/startups-the-passion-and-the-paradox</guid><dc:creator><![CDATA[Jason Bell]]></dc:creator><pubDate>Wed, 08 Apr 2026 07:17:45 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!rilP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e11898f-ec94-4fdf-be3e-26551013a8bb_735x908.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>What <em>has</em> changed is the landscape around us. The VC party is well and truly over, it&#8217;s not dead, but the hangover is severe. Rising interest rates, a brutal correction in tech valuations, and the cold realisation that &#8220;growth at all costs&#8221; was a Ponzi scheme held together by cheap money. The unicorn factory slowed to a trickle. Many of those billion-dollar exits turned out to be paper wealth that dissolved before anyone cashed out.</p><p>But here&#8217;s the twist nobody in 2014 saw coming clearly enough: <strong>AI arrived and blew the doors off</strong>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://gotomomento.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>The New Bimbo, Hair Colour TBC</h2><p>In 2014 I said Silicon Valley was a <em>&#8220;personified blonde bimbo actress with a serious complex&#8221;</em>. I&#8217;d extend that now to AI itself and the mythology being constructed around it.</p><p>The playbook is identical. Before, the message was: <em>get funded, move fast, break things, disrupt</em>. Now it&#8217;s: <em>wrap AI around it, ship in a weekend, become a one-person billion-dollar company</em>. The dream has been re-skinned. The underlying psychology hasn&#8217;t moved an inch.</p><p>The record label became the VC became the accelerator. Now add <strong>the AI platform provider</strong> to that chain. OpenAI, Anthropic, Google they sit in the middle of you and your dream, just as surely as any VC ever did. You&#8217;re building on their infrastructure, paying their API bills, subject to their pricing changes, their deprecations, their terms of service. </p><p>The puppet strings are thinner now. Still there though.</p><h2>What AI Actually Changed</h2><p>To be fair and I&#8217;m always fair, even when I&#8217;m being unpleasant about it some things did shift.</p><p>The <strong>cost to build</strong> collapsed. What needed a team of eight engineers in 2014 needs one person with good prompting skills and a subscription today. That part is real. The barriers to <em>making something exist</em> are lower than they have ever been.</p><p>The problem is that the barriers dropped for <strong>everyone simultaneously</strong>. So the market is now flooded not with more professional wedding photographers, as I put it before, it&#8217;s flooded with fully-functioning products that took a weekend to clone. Your moat evaporated before you even dug it. Defensibility in software is a harder argument to make than it was twelve years ago.</p><p>What AI <em>didn&#8217;t</em> change: distribution, trust, customer acquisition, and the relentless difficulty of getting people to pay for things. Those problems remain stubbornly human.</p><h2>The VC Reckoning</h2><p>The funding winter shook out a lot of what needed shaking. Firms that were throwing term sheets at anyone with a Notion doc and a deck full of TAM slides got burned. LPs got impatient. Management fees on underperforming funds became a talking point. The 90% failure rate I mentioned in 2014 didn&#8217;t improve, by some measures in the AI gold rush cohort, it got worse because the speed of build meant the speed of <em>ship something nobody wants</em> also accelerated dramatically. I&#8217;ve been caught out with that myself, now I&#8217;m far more measured.</p><p>The &#8220;captives&#8221; pool didn&#8217;t go away. It just rebranded. Now it&#8217;s often framed as <em>&#8220;AI-native portfolio companies&#8221;</em>, same dynamic, much gloss shiny language.</p><p>Accelerators and hubs are still running the numbers game. Many of them now mandate <em>&#8220;AI integration&#8221;</em> as a condition of entry, which is about as meaningful as mandating you have a LinkedIn page. It&#8217;s a checkbox, not a strategy.</p><h2>The Quiet Counter-Movement</h2><p>Here&#8217;s what I didn&#8217;t see coming in 2014, and what genuinely gives me some optimism. I know, me Jase, optimistic.</p><p>The tools of the trade being democratised by AI have created a genuine <strong>micro-startup class</strong>. Small, profitable, un-funded, often solo or two-person operations building specific things for specific people and actually making money. No pitch deck. No investor relations. No 409A valuations. Revenue from customers, radical concept.</p><p>This isn&#8217;t the Silicon Valley model. It&#8217;s closer to the old-school small business model, except the margins can be software margins. That&#8217;s interesting. That&#8217;s actually new.</p><p>The irony is that AI, the thing being used to sell the latest version of the startup dream, is also quietly enabling the <em>antithesis</em> of that dream: small, independent, sustainable, and beholden to nobody. Now that I like because I&#8217;ve preached that for years.</p><h2>Every Startup Is Still A Marilyn</h2><p>The core of what I wrote in 2014 holds. You&#8217;ll still go to all the networking events, now they&#8217;re called demo days and AI summits. You&#8217;ll talk to all the right people, apply for all the programmes, and at some point someone will suggest you just <em>&#8220;pivot the model slightly&#8221;</em> and then the money might flow. </p><p>And in that moment, the first puppet string connects.</p><p>What I&#8217;d add now: <strong>the AI hype cycle is a particularly seductive version of this trap</strong>, because it comes dressed as empowerment. You don&#8217;t need anyone, you can build anything, the tools are there all true, to a point. If your entire strategy rests on a foundation owned by someone else&#8217;s model, someone else&#8217;s API, someone else&#8217;s infrastructure, you are still auditioning. You&#8217;ve just moved the casting couch.</p><p>K.I.S.S. - Keep It Separate, Stupid.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rilP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e11898f-ec94-4fdf-be3e-26551013a8bb_735x908.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rilP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e11898f-ec94-4fdf-be3e-26551013a8bb_735x908.webp 424w, https://substackcdn.com/image/fetch/$s_!rilP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e11898f-ec94-4fdf-be3e-26551013a8bb_735x908.webp 848w, https://substackcdn.com/image/fetch/$s_!rilP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e11898f-ec94-4fdf-be3e-26551013a8bb_735x908.webp 1272w, https://substackcdn.com/image/fetch/$s_!rilP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e11898f-ec94-4fdf-be3e-26551013a8bb_735x908.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rilP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e11898f-ec94-4fdf-be3e-26551013a8bb_735x908.webp" width="735" height="908" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2e11898f-ec94-4fdf-be3e-26551013a8bb_735x908.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:908,&quot;width&quot;:735,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:27780,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gotomomento.substack.com/i/193548192?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e11898f-ec94-4fdf-be3e-26551013a8bb_735x908.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rilP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e11898f-ec94-4fdf-be3e-26551013a8bb_735x908.webp 424w, https://substackcdn.com/image/fetch/$s_!rilP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e11898f-ec94-4fdf-be3e-26551013a8bb_735x908.webp 848w, https://substackcdn.com/image/fetch/$s_!rilP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e11898f-ec94-4fdf-be3e-26551013a8bb_735x908.webp 1272w, https://substackcdn.com/image/fetch/$s_!rilP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2e11898f-ec94-4fdf-be3e-26551013a8bb_735x908.webp 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></figure></div><p></p><p>My advice from 2014 stands. You need honest people around you, not cheerleaders. You need to understand your numbers, not your narrative. And you need to know who&#8217;s actually in the middle of you and your customer because there&#8217;s always someone in the middle now, and in 2026 it might be a model provider you&#8217;re paying per token.</p><p>I&#8217;m still grumpy, still 100% equity where possible, still suspicious of anyone who tells you it&#8217;s easy.</p><p>The dream is still the same dream. The costume changed. The complex didn&#8217;t.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://gotomomento.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://gotomomento.substack.com/p/startups-the-passion-and-the-paradox?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://gotomomento.substack.com/p/startups-the-passion-and-the-paradox?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p>]]></content:encoded></item><item><title><![CDATA[There are no hallucinations. Only probabilities.]]></title><description><![CDATA[What we call a "hallucination" is not a glitch, a lie, or a failure of reasoning. It is the mathematically inevitable consequence of sampling from a probability distribution.]]></description><link>https://gotomomento.substack.com/p/there-are-no-hallucinations-only</link><guid isPermaLink="false">https://gotomomento.substack.com/p/there-are-no-hallucinations-only</guid><dc:creator><![CDATA[Jason Bell]]></dc:creator><pubDate>Tue, 07 Apr 2026 18:01:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_B8L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95087258-5878-482a-bb1c-bdc3e92c381a_300x376.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Every time a language model generates text, it is not &#8220;thinking&#8221; in any meaningful sense. It is computing a probability distribution over its entire vocabulary, tens of thousands of tokens, and then <em>sampling</em> from that distribution. The word &#8220;Madrid&#8221; doesn&#8217;t come out because the model &#8220;knows&#8221; it&#8217;s the capital of Spain. It comes out because, given all the preceding tokens, the model assigned it a very high probability.</p><p>This distinction matters enormously. When a model says something false, when it invents a citation, misremembers a date, or confabulates a biography, it is not lying. It is doing exactly what it was designed to do: pick the statistically likely next token. </p><p>The problem is that statistical likelihood and factual truth are not the same thing.</p><p>The AI industry has decided to call this gap a &#8220;hallucination.&#8221; </p><p>That word choice is not neutral. It implies a failure of perception, a momentary lapse, something that happens to an otherwise sound mind. It is the perfect term for an industry that wants to acknowledge the problem just enough to seem responsible, while obscuring what&#8217;s actually going on.</p><p>Welcome to the inside of the world&#8217;s most elaborate magic trick which is really just numbers. </p><h2>The softmax: where all tokens compete</h2><p>Before a model produces any word, it converts raw logit scores into a probability distribution using the softmax function. Every token in the vocabulary gets a probability, and those probabilities sum to exactly 1. Nothing is ever ruled out entirely some tokens are just astronomically unlikely.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;8a3ec010-49ef-470a-9c1a-c3cb70cb4275&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python"># Softmax: converts raw scores &#8594; probabilities
# P(token_i) = exp(z_i) / &#931; exp(z_j)   for all j in vocabulary

import numpy as np

def softmax(logits):
    e = np.exp(logits - np.max(logits))  # subtract max for numerical stability
    return e / e.sum()

logits = np.array([4.2, 2.1, 1.8, 0.5, -0.3])
probs  = softmax(logits)
# &#8594; [0.723, 0.097, 0.073, 0.032, 0.015]  &#8592; sums to ~1.0

# The top token wins 72% of the time.
# But 28% of the time, something else comes out. Every single generation.</code></pre></div><p>This is the foundation. The model never <em>decides</em> anything. It draws from a distribution. On factual questions where the training data is rich and consistent, the correct answer sits at 0.95+ probability and almost always wins. On questions at the edge of its training like obscure facts, recent events, niche domains for example, the distribution flattens, and the gap between the right answer and a plausible-sounding wrong answer narrows to nothing.</p><h2>Entropy: measuring what the model doesn&#8217;t know</h2><p>Information theory gives us a precise way to measure how uncertain a distribution is. Shannon entropy quantifies exactly how &#8220;spread out&#8221; the probability mass is and therefore how likely the model is to produce something unexpected.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;865f937a-0009-4989-b3fa-cbbecc986637&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python"># Shannon entropy of a discrete distribution
# H(P) = -&#931; P(x) &#183; log&#8322; P(x)   for all x with P(x) &gt; 0

def entropy(probs):
    probs = np.array(probs)
    probs = probs[probs &gt; 0]  # avoid log(0)
    return -np.sum(probs * np.log2(probs))

# A deterministic distribution &#8212; the model is certain:
entropy([1.0, 0.0, 0.0])           # &#8594; 0.0 bits  (no uncertainty)

# A fully uniform distribution &#8212; the model has no idea:
entropy([0.25, 0.25, 0.25, 0.25])  # &#8594; 2.0 bits  (maximum uncertainty)

# A realistic model output on a well-known fact:
entropy([0.72, 0.10, 0.08, 0.06, 0.04])  # &#8594; 1.34 bits</code></pre></div><p>High entropy doesn&#8217;t mean the model is broken. It means the model is genuinely uncertain, which is often the correct epistemic state. The problem arises when a model <em>generates confidently</em> despite high entropy in its internal distribution. Think about all those research papers that look right but are nowhere near reality. </p><p>That gap between expressed certainty and internal uncertainty is where hallucinations live.</p><p>And here is the first thing the industry doesn&#8217;t want to say plainly: <strong>the model always has the information it needs to flag its own uncertainty. It just isn&#8217;t trained to use it.</strong></p><h2>The chain rule: how small errors become confident nonsense</h2><p>Language models generate text one token at a time, each conditioned on all prior tokens. This means probabilities multiply. A sequence of individually plausible tokens can produce a collectively improbable and factually wrong sentence.</p><p>I usually get a hard time when I call any LLM a &#8220;stochastic plausibility engine&#8221; but that&#8217;s <em>exactly</em> what it is. </p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;f3c0a768-b54e-4017-94e1-ee4cf75cc8f3&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python"># Joint probability of a sequence via the chain rule:
# P(w&#8321;, w&#8322;, ..., w&#8345;) = P(w&#8321;) &#183; P(w&#8322;|w&#8321;) &#183; P(w&#8323;|w&#8321;,w&#8322;) &#183; ... &#183; P(w&#8345;|w&#8321;,...,w&#8345;&#8331;&#8321;)

import functools, operator

# If each token has 90% "correct" probability over 10 tokens:
token_probs = [0.90] * 10
joint_prob  = functools.reduce(operator.mul, token_probs, 1)
# &#8594; 0.349  (only 35% chance the full sentence is "correct")

# At 80% per token over 20 tokens:
joint_prob_20 = 0.80 ** 20
# &#8594; 0.012  (1.2% chance &#8212; almost certainly contains an error)

# At a seemingly-generous 95% per token over 200 tokens:
joint_prob_200 = 0.95 ** 200
# &#8594; 0.000035  (0.004% &#8212; virtually guaranteed to contain an error)</code></pre></div><p>This is why longer answers are more likely to contain errors. It is not sloppiness. It is arithmetic. Every sentence you add to a prompt response is another multiplication by a number less than one. The joint probability of a perfectly accurate 200-token paragraph approaches zero regardless of how good the model is on any individual token.</p><p>The industry presents this as a problem of model capability something that will be solved with more parameters, more data, more compute. It will not. The chain rule is not a training artifact, it is mathematics.</p><h2>Perplexity: the model&#8217;s own uncertainty score</h2><p>Perplexity is the standard metric for how &#8220;surprised&#8221; a model is by a sequence. It is the exponentiated cross-entropy and it maps directly onto how probable the model considers the text to be.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;e1fc0029-72e3-46a9-a046-af06f02e6aa0&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python"># Perplexity of a sequence
# PPL = exp(-1/N &#183; &#931; log P(w&#7522; | w&#8321;,...,w&#7522;&#8331;&#8321;))

def perplexity(probs):
    """probs: list of per-token probabilities assigned by model"""
    N = len(probs)
    log_sum = sum(np.log(p) for p in probs)
    return np.exp(-log_sum / N)

# A confident model on familiar text:
perplexity([0.92, 0.88, 0.91, 0.87, 0.90])  # &#8594; ~1.12  (very low)

# Model generating a fabricated citation:
perplexity([0.71, 0.43, 0.38, 0.52, 0.29])  # &#8594; ~2.54  (higher, but not dramatic)

# The crucial insight: hallucinated text often has LOW perplexity.
# The model generates fabrications smoothly, confidently, without hesitation &#8212;
# because they fit the statistical patterns of training data perfectly,
# even if no such fact exists in reality.</code></pre></div><p>This last point deserves to be said slowly. <strong>The most dangerous hallucinations are the ones the model is most confident about.</strong> A model that fabricates a plausible-sounding paper title in the style of an academic citation will assign that fabrication a lower perplexity than an awkward but accurate paraphrase of reality. Statistical fluency and factual accuracy are not just different things they are sometimes in direct tension.</p><h2>Temperature scaling: the knob nobody explains honestly</h2><p>Modern models use temperature scaling to control the shape of the output distribution. This is presented to users as a creativity dial. &#8220;Low temperature for factual tasks, high temperature for creative ones.&#8221; That framing is true but incomplete and the part that gets omitted is revealing. And the Linkedin experts get really upset when I point it out.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;4d6e2726-0f21-44a9-99fe-b726e0f93a8b&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python"># Temperature scaling: reshape the logit distribution
# P_T(token_i) = softmax(z_i / T)
#
# T &lt; 1.0 &#8594; sharper (model becomes more deterministic)
# T = 1.0 &#8594; standard distribution
# T &gt; 1.0 &#8594; flatter (more creative / more hallucinatory)

# Nucleus (top-p) sampling: only sample from top probability mass
def top_p_sample(probs, p=0.9):
    sorted_idx   = np.argsort(probs)[::-1]
    sorted_probs = probs[sorted_idx]
    cumsum       = np.cumsum(sorted_probs)
    nucleus      = sorted_idx[cumsum &lt;= p]
    nucleus_probs = sorted_probs[:len(nucleus)]
    nucleus_probs /= nucleus_probs.sum()     # renormalize
    return np.random.choice(nucleus, p=nucleus_probs)</code></pre></div><p>What temperature actually controls is the hallucination rate. At temperature 0.1, the model almost always picks the top token. At temperature 1.5, the fifth or sixth most likely token wins regularly. The creative outputs users get at high temperature come at a direct cost: the probability mass is no longer concentrated on factually accurate tokens.</p><p>The API defaults used by most applications, temperatures around 0.7 to 1.0, top-p around 0.9 are not chosen because they minimise errors. They are chosen because they produce text that <em>reads well</em>. Fluent text, as it turns out, is not the same as accurate text. </p><p>The industry has largely optimised for the former while marketing the latter.</p><h2>What this actually means and what won&#8217;t fix it</h2><p>The standard narrative is that hallucinations are a bug on the path to a fixed product. Train on more data. Scale the model. Apply RLHF. Add retrieval. The problem will shrink until it&#8217;s negligible.</p><p>This narrative is wrong in a specific and important way.</p><p>More training data sharpens the distribution on things that are well-represented in the training corpus. It does nothing for the obscure facts, the niche domains, the things that happened after the cutoff date, the things that were never written down at all. The distribution will always have a long tail. The chain rule will always turn small per-token error rates into large sentence-level error rates. Perplexity and accuracy will always be different things.</p><p>What <em>can</em> change, and what the serious research is actually about, is whether models communicate their uncertainty honestly. Calibration research asks: when a model says it is 90% confident, is it right 90% of the time? For most current models the answer is no. They are systematically overconfident. RLHF, which trains models on human preference, makes this worse, because humans prefer confident-sounding answers to hedged ones, and the training signal rewards confidence regardless of accuracy.</p><p>Retrieval-augmented generation helps, but it relocates the problem rather than solving it. The model still has to decide when to retrieve, what to retrieve, and whether the retrieved content is relevant. Each of those decisions is a probabilistic one.</p><p>The honest version of where we are: these systems will always produce statistically likely outputs, and statistically likely outputs will sometimes be wrong. The question is whether the output <em>signals</em> when it might be wrong, and right now, for the most part, it doesn&#8217;t. The model has access to its own entropy at every token. It knows, in a mathematical sense, when it is uncertain. It is almost never trained to tell you.</p><p>That gap, between what the model knows about its own uncertainty and what it communicates to you, is not a technical limitation. It is a product decision. And it is the decision that makes hallucinations genuinely dangerous, rather than merely occasionally inconvenient.</p><p>The word &#8220;hallucination&#8221; was always a category error. A hallucination implies a mind that has temporarily lost contact with reality. </p><p>What&#8217;s actually happening is simpler and more tractable: a probability distribution being sampled in a region where it isn&#8217;t reliable, by a system that was never properly incentivised to say so.</p><p>Rename it and the problem becomes clearer. It&#8217;s not a hallucination. It&#8217;s an uncalibrated sample from a high-entropy distribution, presented without the uncertainty estimate it was always carrying.</p><p>Fix the incentive. Require the uncertainty estimate. The rest is arithmetic.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://gotomomento.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://gotomomento.substack.com/subscribe?"><span>Subscribe now</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://gotomomento.substack.com/p/there-are-no-hallucinations-only?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://gotomomento.substack.com/p/there-are-no-hallucinations-only?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_B8L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95087258-5878-482a-bb1c-bdc3e92c381a_300x376.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_B8L!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95087258-5878-482a-bb1c-bdc3e92c381a_300x376.webp 424w, https://substackcdn.com/image/fetch/$s_!_B8L!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95087258-5878-482a-bb1c-bdc3e92c381a_300x376.webp 848w, https://substackcdn.com/image/fetch/$s_!_B8L!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95087258-5878-482a-bb1c-bdc3e92c381a_300x376.webp 1272w, https://substackcdn.com/image/fetch/$s_!_B8L!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95087258-5878-482a-bb1c-bdc3e92c381a_300x376.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_B8L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95087258-5878-482a-bb1c-bdc3e92c381a_300x376.webp" width="300" height="376" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/95087258-5878-482a-bb1c-bdc3e92c381a_300x376.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:376,&quot;width&quot;:300,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:20628,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gotomomento.substack.com/i/193446966?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95087258-5878-482a-bb1c-bdc3e92c381a_300x376.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_B8L!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95087258-5878-482a-bb1c-bdc3e92c381a_300x376.webp 424w, https://substackcdn.com/image/fetch/$s_!_B8L!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95087258-5878-482a-bb1c-bdc3e92c381a_300x376.webp 848w, https://substackcdn.com/image/fetch/$s_!_B8L!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95087258-5878-482a-bb1c-bdc3e92c381a_300x376.webp 1272w, https://substackcdn.com/image/fetch/$s_!_B8L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95087258-5878-482a-bb1c-bdc3e92c381a_300x376.webp 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></figure></div><p><a href="https://www.wiley.com/en-gb/Machine+Learning%3A+Hands-On+for+Developers+and+Technical+Professionals%2C+2nd+Edition-p-9781119642190">Interesting in Machine Learning and Java?</a> </p>]]></content:encoded></item><item><title><![CDATA[The Hidden Invoice: What Nobody Tells Startups About AI App Builders]]></title><description><![CDATA[Pitches happening in accelerators and investor calls right now, it goes something like this: &#8220;Why are you paying a developer? Just use Lovable. Just use Bolt. You can have an MVP in a weekend."]]></description><link>https://gotomomento.substack.com/p/the-hidden-invoice-what-nobody-tells</link><guid isPermaLink="false">https://gotomomento.substack.com/p/the-hidden-invoice-what-nobody-tells</guid><dc:creator><![CDATA[Jason Bell]]></dc:creator><pubDate>Tue, 07 Apr 2026 07:30:58 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!XIwA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7681ad7b-6435-4bf0-ba03-af0308b8e67b_1110x1725.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It&#8217;s not wrong, exactly. You can have something that looks like an MVP in a weekend. The problem is what happens in the weeks after that weekend and who picks up the tab.</p><div><hr></div><h2>The new pressure on early-stage startups</h2><p>If you&#8217;re a non-technical founder in 2026, you are almost certainly being told to build with AI tools before hiring engineers. The logic is seductive: reduce burn, move fast, validate before you invest in &#8220;real&#8221; infrastructure. Lovable, Bolt, v0, Cursor, the ecosystem of AI-assisted and AI-generated app builders has exploded, and the implicit message from investors and accelerators is that reaching for one of these tools is simply what a smart, capital-efficient founder does now.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XIwA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7681ad7b-6435-4bf0-ba03-af0308b8e67b_1110x1725.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XIwA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7681ad7b-6435-4bf0-ba03-af0308b8e67b_1110x1725.jpeg 424w, https://substackcdn.com/image/fetch/$s_!XIwA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7681ad7b-6435-4bf0-ba03-af0308b8e67b_1110x1725.jpeg 848w, https://substackcdn.com/image/fetch/$s_!XIwA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7681ad7b-6435-4bf0-ba03-af0308b8e67b_1110x1725.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!XIwA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7681ad7b-6435-4bf0-ba03-af0308b8e67b_1110x1725.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XIwA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7681ad7b-6435-4bf0-ba03-af0308b8e67b_1110x1725.jpeg" width="1110" height="1725" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7681ad7b-6435-4bf0-ba03-af0308b8e67b_1110x1725.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1725,&quot;width&quot;:1110,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:114949,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://gotomomento.substack.com/i/193399807?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7681ad7b-6435-4bf0-ba03-af0308b8e67b_1110x1725.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XIwA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7681ad7b-6435-4bf0-ba03-af0308b8e67b_1110x1725.jpeg 424w, https://substackcdn.com/image/fetch/$s_!XIwA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7681ad7b-6435-4bf0-ba03-af0308b8e67b_1110x1725.jpeg 848w, https://substackcdn.com/image/fetch/$s_!XIwA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7681ad7b-6435-4bf0-ba03-af0308b8e67b_1110x1725.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!XIwA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7681ad7b-6435-4bf0-ba03-af0308b8e67b_1110x1725.jpeg 1456w" sizes="100vw" fetchpriority="high"></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></figure></div><p>Some of that pressure is well-meaning. Some of it is investors pattern-matching on a trend without having used the tools themselves, &#8220;If I can do it, you can too!&#8221;. Either way, the startups at the end of that advice are discovering a gap between the pitch and the reality and it&#8217;s costing them in ways that don&#8217;t show up in the original sales comparison.</p><div><hr></div><h2>How the credits model hides what you&#8217;re actually spending</h2><p>Most of these platforms charge on a credit or token basis, you buy a bundle, and each generation, each edit, each debugging attempt burns through it. This model is clever, because it decouples the cost from any intuitive sense of value. You&#8217;re not paying per feature. You&#8217;re paying per <em>attempt</em>.</p><p>And attempts multiply fast. Well done if you get it right first time, chances are though you won&#8217;t. And that, therefore, will cost you. </p><p>Here&#8217;s what a typical session actually looks like. You describe a feature. The tool generates something close but not quite right. You iterate. It fixes one thing and breaks another. You try a different prompt. It regresses further. You revert. You try again. By the time you have something working, you&#8217;ve burned through credits on six or eight generations that produced nothing you&#8217;ll ship. The cost of the feature you actually wanted is buried in the cost of all the features you didn&#8217;t.</p><p>You&#8217;ve run out of credits for today, come back tomorrow. It&#8217;s an addition, it&#8217;s like Pavlov&#8217;s dog. It&#8217;s the companies who are ringing the bell. </p><p>This isn&#8217;t a flaw in the tools, it&#8217;s the nature of generative, probabilistic systems. But it&#8217;s also not what gets communicated when an accelerator tells you to &#8220;just spin something up on Lovable.&#8221;</p><div><hr></div><h2>The debugging trap</h2><p>The dirty secret of AI-generated code is that it&#8217;s often easy to generate and expensive to debug. Not because the code is obviously bad, it frequently looks clean and plausible, but because it&#8217;s optimised for appearing correct rather than being maintainable. Edge cases get papered over. Dependencies get pulled in for convenience. Architectural decisions get made implicitly that you&#8217;d never make explicitly.</p><p>This is fine for a prototype that you&#8217;re going to throw away. It becomes a serious problem when investors see the prototype and say <em>&#8220;great, now just build the real thing on top of this.&#8221;</em></p><p>The moment you need to extend beyond what the AI tool generates cleanly, custom integrations, complex business logic, performance at scale and you&#8217;re either burning more credits on increasingly speculative generations, or you&#8217;re bringing in a human developer to work with a codebase they didn&#8217;t write, can&#8217;t fully trust, and often can&#8217;t easily modify without risking unravelling something upstream. </p><p>Experienced developers have a word for this kind of codebase. Several words, in fact, and most of them aren&#8217;t printable. </p><div><hr></div><h2>The scaling cliff</h2><p>There&#8217;s a point that almost every AI-built startup hits, and it usually arrives faster than expected. Call it the scaling cliff: the moment when the tool that served you well at prototype stage becomes an active liability.</p><p>The economics of these platforms don&#8217;t improve at scale, they worsen. More users means more edge cases the generated code didn&#8217;t anticipate. More features means more surface area for the architectural shortcuts to cause problems. And the credit costs, which felt manageable when you were building, start to look alarming when you&#8217;re running a live product and every bug fix is a credit spend with an uncertain outcome.</p><p>At this point, the choice is unpleasant: continue burning money on a platform that&#8217;s increasingly fighting you, or bring in engineers to rebuild, not from scratch, which is demoralising and expensive but from a foundation that someone else&#8217;s AI laid without any particular knowledge of your business requirements.</p><p>Rebuilding from AI-generated foundations is becoming a genuine category of consulting work. That should tell you something.</p><div><hr></div><h2>What investors aren&#8217;t accounting for</h2><p>The &#8220;build with AI tools&#8221; advice optimises for one metric: time to MVP. That&#8217;s a legitimate thing to optimise for, especially early. But it creates a hidden liability on the balance sheet that doesn&#8217;t show up until later, at which point it&#8217;s someone else&#8217;s problem often the founder&#8217;s.</p><p>The costs that don&#8217;t get discussed:</p><p><strong>Credit burn on failed iterations.</strong> Not just the final product, but every attempt along the way. Heavy users of these platforms report spending 3&#8211;5x their original estimate once you account for the exploratory, non-productive generations.</p><p><strong>Technical debt at an accelerated rate.</strong> AI-generated codebases accrue debt faster than human-written ones, because the &#8220;author&#8221; has no memory of past decisions and no stake in future maintainability.</p><p><strong>Developer remediation costs.</strong> When you eventually hire engineers, and you will, budget for them spending significant time understanding and stabilising what the AI built, before they can build anything new. This is billable time that produces no visible output.</p><p><strong>Platform dependency risk.</strong> Your application is often deeply coupled to the platform&#8217;s assumptions, infrastructure choices, and sometimes its proprietary abstractions. If pricing changes or the platform pivots or shuts down, your migration path is non-trivial.</p><p><strong>Founder time.</strong> This one is underrated. Wrestling with an AI tool that&#8217;s producing the wrong thing is not a zero-cost activity. It&#8217;s founder time that isn&#8217;t being spent on customers, fundraising, or product thinking the things that actually determine whether the company survives.</p><div><hr></div><h2>The tool isn&#8217;t the problem. The advice is.</h2><p>To be clear: these tools are genuinely impressive and genuinely useful. For the right use case rapid prototyping, internal tooling, validating an idea before investing in proper engineering they&#8217;re remarkable. The problem isn&#8217;t the technology. The problem is the framing.</p><p>When an investor says &#8220;just use Lovable,&#8221; they&#8217;re rarely thinking about what happens six months later. They&#8217;re thinking about burn rate and demo-readiness. Those are real concerns. But they&#8217;re not the only concerns, and founders who take the advice at face value without modelling the downstream costs are making a financial decision based on incomplete information.</p><p>The honest version of the advice would sound more like: <em>&#8220;These tools can get you to a demo fast, and that&#8217;s worth a lot. But go in with eyes open about the credit model, plan for a remediation phase when you hire your first engineer, and don&#8217;t let the prototype become the foundation unless you&#8217;re prepared for what that costs.&#8221;</em></p><p>That advice is longer and less punchy. Which is probably why it doesn&#8217;t get given.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://gotomomento.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://gotomomento.substack.com/subscribe?"><span>Subscribe now</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://gotomomento.substack.com/p/the-hidden-invoice-what-nobody-tells?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://gotomomento.substack.com/p/the-hidden-invoice-what-nobody-tells?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!O9uF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef2ca9fc-5aae-4319-b0d6-382aeac15892_300x376.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!O9uF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef2ca9fc-5aae-4319-b0d6-382aeac15892_300x376.webp 424w, https://substackcdn.com/image/fetch/$s_!O9uF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef2ca9fc-5aae-4319-b0d6-382aeac15892_300x376.webp 848w, https://substackcdn.com/image/fetch/$s_!O9uF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef2ca9fc-5aae-4319-b0d6-382aeac15892_300x376.webp 1272w, https://substackcdn.com/image/fetch/$s_!O9uF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef2ca9fc-5aae-4319-b0d6-382aeac15892_300x376.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!O9uF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef2ca9fc-5aae-4319-b0d6-382aeac15892_300x376.webp" width="300" height="376" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ef2ca9fc-5aae-4319-b0d6-382aeac15892_300x376.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:376,&quot;width&quot;:300,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:20628,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gotomomento.substack.com/i/193399807?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef2ca9fc-5aae-4319-b0d6-382aeac15892_300x376.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!O9uF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef2ca9fc-5aae-4319-b0d6-382aeac15892_300x376.webp 424w, https://substackcdn.com/image/fetch/$s_!O9uF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef2ca9fc-5aae-4319-b0d6-382aeac15892_300x376.webp 848w, https://substackcdn.com/image/fetch/$s_!O9uF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef2ca9fc-5aae-4319-b0d6-382aeac15892_300x376.webp 1272w, https://substackcdn.com/image/fetch/$s_!O9uF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef2ca9fc-5aae-4319-b0d6-382aeac15892_300x376.webp 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></figure></div><p><a href="https://www.wiley.com/en-gb/Machine+Learning%3A+Hands-On+for+Developers+and+Technical+Professionals%2C+2nd+Edition-p-9781119642190">Interest in Machine Learning and Java?</a> </p><p></p>]]></content:encoded></item><item><title><![CDATA[I Trained a Neural Network on XOR in Java. Here's How it Connects to Every LLM You've Ever Used.]]></title><description><![CDATA[That 4-line truth table is the same fundamental engine behind GPT, Gemini, and Claude, just scaled by a factor of billions.]]></description><link>https://gotomomento.substack.com/p/i-trained-a-neural-network-on-xor</link><guid isPermaLink="false">https://gotomomento.substack.com/p/i-trained-a-neural-network-on-xor</guid><dc:creator><![CDATA[Jason Bell]]></dc:creator><pubDate>Mon, 06 Apr 2026 19:56:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!COhg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62908fe7-92ea-4c20-9ae1-2d2728305d05_1859x949.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A few days ago I dusted off a piece of Java code, a simple feedforward neural network trained to predict the output of an XOR gate. Nothing flashy. Two inputs, one hidden layer, one output.  It was pure Java, not a machine learning library. The idea was to see how the math works during training.</p><p>Watching it converge after a few hundred epochs is quietly satisfying. Why? Well, why not? There ain&#8217;t nothing wrong with learning.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;86e144ac-f12b-4acc-bdd6-683b7d2d610d&quot;,&quot;duration&quot;:null}"></div><p>The accuracy after 100,000 training iterations was pretty good.</p><p><code>FINAL NETWORK TESTING</code></p><p><code>============================================================</code></p><p><code>Input: [0.0, 0.0] &#8594; Prediction: 0.0074, Expected: 0</code></p><p><code>Input: [0.0, 1.0] &#8594; Prediction: 0.9902, Expected: 1</code></p><p><code>Input: [1.0, 0.0] &#8594; Prediction: 0.9906, Expected: 1</code></p><p><code>Input: [1.0, 1.0] &#8594; Prediction: 0.0131, Expected: 0</code></p><p>Is this really any different from what&#8217;s inside a large language model? The answer is both yes and no, the &#8220;no&#8221; part is more profound than most people realise. </p><h1><strong>The XOR problem and why it matters</strong></h1><p>XOR (exclusive OR) is the classic benchmark because it&#8217;s not linearly separable. A single neuron with a straight-line decision boundary can&#8217;t solve it. You need at least one hidden layer to create the non-linear mapping.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!COhg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62908fe7-92ea-4c20-9ae1-2d2728305d05_1859x949.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!COhg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62908fe7-92ea-4c20-9ae1-2d2728305d05_1859x949.jpeg 424w, https://substackcdn.com/image/fetch/$s_!COhg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62908fe7-92ea-4c20-9ae1-2d2728305d05_1859x949.jpeg 848w, https://substackcdn.com/image/fetch/$s_!COhg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62908fe7-92ea-4c20-9ae1-2d2728305d05_1859x949.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!COhg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62908fe7-92ea-4c20-9ae1-2d2728305d05_1859x949.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!COhg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62908fe7-92ea-4c20-9ae1-2d2728305d05_1859x949.jpeg" width="1456" height="743" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/62908fe7-92ea-4c20-9ae1-2d2728305d05_1859x949.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:743,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:119947,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gotomomento.substack.com/i/193379849?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62908fe7-92ea-4c20-9ae1-2d2728305d05_1859x949.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!COhg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62908fe7-92ea-4c20-9ae1-2d2728305d05_1859x949.jpeg 424w, https://substackcdn.com/image/fetch/$s_!COhg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62908fe7-92ea-4c20-9ae1-2d2728305d05_1859x949.jpeg 848w, https://substackcdn.com/image/fetch/$s_!COhg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62908fe7-92ea-4c20-9ae1-2d2728305d05_1859x949.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!COhg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F62908fe7-92ea-4c20-9ae1-2d2728305d05_1859x949.jpeg 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></figure></div><p>Solving XOR forces you to build a Multi-Layer Perceptron (MLP), the same architectural primitive at the heart of every modern AI model. </p><h1><strong>What the Java implementation looks like</strong></h1><p>The core training loop in my implementation follows the standard forward-pass &#8594; loss &#8594; backprop cycle, here&#8217;s the general pseudocode:</p><p><code>// Forward pass</code></p><p><code>double[] hidden = activate(multiply(weights1, input));</code></p><p><code>double output = activate(dot(weights2, hidden));</code></p><p><code>// Backprop &#8212; compute deltas and update weights</code></p><p><code>double outputError = target - output;</code></p><p><code>double outputDelta = outputError * sigmoidDerivative(output);</code></p><p><code>for (int i = 0; i &lt; hidden.length; i++) {</code></p><p><code>  double hiddenError = outputDelta * weights2[i];</code></p><p><code>  double hiddenDelta = hiddenError *           sigmoidDerivative(hidden[i]);</code></p><p><code>  weights1[i] += learningRate * hiddenDelta * input[i];</code></p><p><code>}</code></p><p><code>weights2 += learningRate * outputDelta;</code></p><p>Three ingredients: weighted sums, an activation function (sigmoid here), and gradient descent via backpropagation. That&#8217;s the whole recipe.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aCD5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26910b4b-7165-4be1-af8e-d13929a03e16_1165x932.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aCD5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26910b4b-7165-4be1-af8e-d13929a03e16_1165x932.jpeg 424w, https://substackcdn.com/image/fetch/$s_!aCD5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26910b4b-7165-4be1-af8e-d13929a03e16_1165x932.jpeg 848w, https://substackcdn.com/image/fetch/$s_!aCD5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26910b4b-7165-4be1-af8e-d13929a03e16_1165x932.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!aCD5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26910b4b-7165-4be1-af8e-d13929a03e16_1165x932.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aCD5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26910b4b-7165-4be1-af8e-d13929a03e16_1165x932.jpeg" width="495" height="396" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/26910b4b-7165-4be1-af8e-d13929a03e16_1165x932.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:932,&quot;width&quot;:1165,&quot;resizeWidth&quot;:495,&quot;bytes&quot;:74536,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gotomomento.substack.com/i/193379849?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26910b4b-7165-4be1-af8e-d13929a03e16_1165x932.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!aCD5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26910b4b-7165-4be1-af8e-d13929a03e16_1165x932.jpeg 424w, https://substackcdn.com/image/fetch/$s_!aCD5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26910b4b-7165-4be1-af8e-d13929a03e16_1165x932.jpeg 848w, https://substackcdn.com/image/fetch/$s_!aCD5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26910b4b-7165-4be1-af8e-d13929a03e16_1165x932.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!aCD5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F26910b4b-7165-4be1-af8e-d13929a03e16_1165x932.jpeg 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></figure></div><p>A minimal MLP: 2 inputs &#8594; 3 hidden neurons &#8594; 1 output</p><h1><strong>Now scale that up, welcome to <s>WebScale</s> GenAI!</strong></h1><p>Here&#8217;s where it gets interesting. Modern large language models like GPT-4, Llama 3, or Claude are built on the Transformer architecture. But inside every Transformer block, there&#8217;s a component called the Feed-Forward Network (FFN) and it is, structurally, a MLP.</p><p>In a Transformer, each attention layer is followed by a two-layer MLP with a non-linear activation. This is where the model &#8220;stores&#8221; knowledge and applies reasoning not in the attention heads alone.</p><p>Well when I say reasoning&#8230;. it can&#8217;t reason. It&#8217;s just a numerical context of what reasoning is.</p><p>The attention mechanism decides what to focus on. The MLP then decides what to do with that information. They work in tandem across potentially hundreds of layers.</p><p>In a model like Llama 3 8B, the FFN alone accounts for roughly two-thirds of the total parameters. Your XOR network has ~10 weights. GPT-4 is estimated at ~1.8 trillion. Same structure, vastly different scale.</p><p><em>The gap between XOR and GPT isn&#8217;t architecture it&#8217;s data, depth, and compute. The mathematics is the same.</em></p><h1><strong>Activation functions: from sigmoid to SwiGLU</strong></h1><p>My Java network uses a sigmoid activation, smooth, bounded between 0 and 1, and the classic choice for learning XOR.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FX0M!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc50a2273-8317-48f9-aa87-361337b781cc_1192x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FX0M!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc50a2273-8317-48f9-aa87-361337b781cc_1192x800.png 424w, https://substackcdn.com/image/fetch/$s_!FX0M!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc50a2273-8317-48f9-aa87-361337b781cc_1192x800.png 848w, https://substackcdn.com/image/fetch/$s_!FX0M!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc50a2273-8317-48f9-aa87-361337b781cc_1192x800.png 1272w, https://substackcdn.com/image/fetch/$s_!FX0M!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc50a2273-8317-48f9-aa87-361337b781cc_1192x800.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FX0M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc50a2273-8317-48f9-aa87-361337b781cc_1192x800.png" width="1192" height="800" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c50a2273-8317-48f9-aa87-361337b781cc_1192x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:800,&quot;width&quot;:1192,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:59018,&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://gotomomento.substack.com/i/193379849?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc50a2273-8317-48f9-aa87-361337b781cc_1192x800.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_!FX0M!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc50a2273-8317-48f9-aa87-361337b781cc_1192x800.png 424w, https://substackcdn.com/image/fetch/$s_!FX0M!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc50a2273-8317-48f9-aa87-361337b781cc_1192x800.png 848w, https://substackcdn.com/image/fetch/$s_!FX0M!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc50a2273-8317-48f9-aa87-361337b781cc_1192x800.png 1272w, https://substackcdn.com/image/fetch/$s_!FX0M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc50a2273-8317-48f9-aa87-361337b781cc_1192x800.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></figure></div><p>Modern LLMs have moved on. The dominant activation in 2024&#8211;2025 FFN layers is SwiGLU, a gated variant of the Swish function. It empirically outperforms ReLU and GELU on large-scale language tasks. But the principle is identical: introduce non-linearity so the network can learn complex mappings.</p><p>Here&#8217;s the conceptual progression:</p><p><em><strong>Sigmoid</strong> (XOR, 1980s) &#8594; <strong>ReLU</strong> (deep learning, 2010s) &#8594; <strong>GELU</strong> (BERT, GPT-2) &#8594; <strong>SwiGLU</strong> (LLaMA, Mistral, Gemma)</em></p><h1><strong>Backpropagation hasn&#8217;t changed, the hardware has</strong></h1><p>The algorithm that trains my Java network backpropagation with stochastic gradient descent is the same algorithm used to train every LLM. Rumelhart, Hinton, and Williams described it in 1986. We haven&#8217;t replaced it; we&#8217;ve just parallelised it across thousands of GPU cores with frameworks like PyTorch and JAX.</p><p>What has changed:</p><p><strong>Batch size:</strong> My XOR network trains on 4 examples. LLMs train on trillions of tokens in massive parallel batches.</p><p><strong>Optimiser</strong>: Vanilla SGD &#8594; AdamW with learning rate schedulers, gradient clipping, and warm-up phases.</p><p><strong>Regularisation</strong>: Nothing in XOR. LLMs use dropout, weight decay, and layer normalisation throughout.</p><h1><strong>Why this matters if you&#8217;re building with AI</strong></h1><p>Understanding the MLP as a foundational primitive helps demystify a lot of what GenAI does and doesn&#8217;t do. When an LLM &#8220;hallucinates&#8221;, part of that is the FFN layers retrieving learned associations that don&#8217;t generalise correctly to your prompt. When you engineer prompts, you&#8217;re influencing which weights get activated through the attention + FFN pipeline. </p><p>My thoughts on model hallucinations and the use of the term in LLMs is widely known on <a href="https://www.linkedin.com/posts/jasonbelldata_machinelearning-llms-ai-activity-7353693695822438400-CYtN?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAB3fiOgBjDyC1Kz1hIMpHPh31whYytaOrY0">Linkedin.</a> It may have caused a bit of a stir. </p><p>It also reframes RAG (Retrieval Augmented Generation). You&#8217;re essentially compensating for the fixed parametric memory of the MLP layers by injecting external context giving the model facts its weights never learned. </p><p>It&#8217;s all numbers. That&#8217;s it.</p><h3><strong>If you&#8217;ve never trained a neural network from scratch</strong></h3><p>Do it! In any language, it doesn&#8217;t matter about language, whatever works best for you. Even a toy XOR network wires your intuition for what gradient descent, loss curves, and weight initialisation actually mean, the things that matter enormously when evaluating and fine-tuning foundation models.</p><p>The XOR gate may be a teaching toy, but the lesson is real: you&#8217;re one abstraction layer away from the engines running the most capable AI systems in the world. </p><p>That&#8217;s not a small thing, and you&#8217;ll sound really clever at meetups.</p><p>You can take a look at the <a href="https://gist.github.com/jasebell/011f3f60ab5062d0394e1bf66628dceb">Java code on my Github Gist</a>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://gotomomento.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://gotomomento.substack.com/subscribe?"><span>Subscribe now</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://gotomomento.substack.com/p/i-trained-a-neural-network-on-xor?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://gotomomento.substack.com/p/i-trained-a-neural-network-on-xor?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!L2BP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3621f00a-ee9b-4c86-b9b8-6c945415183d_300x376.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!L2BP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3621f00a-ee9b-4c86-b9b8-6c945415183d_300x376.webp 424w, https://substackcdn.com/image/fetch/$s_!L2BP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3621f00a-ee9b-4c86-b9b8-6c945415183d_300x376.webp 848w, https://substackcdn.com/image/fetch/$s_!L2BP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3621f00a-ee9b-4c86-b9b8-6c945415183d_300x376.webp 1272w, https://substackcdn.com/image/fetch/$s_!L2BP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3621f00a-ee9b-4c86-b9b8-6c945415183d_300x376.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!L2BP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3621f00a-ee9b-4c86-b9b8-6c945415183d_300x376.webp" width="300" height="376" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3621f00a-ee9b-4c86-b9b8-6c945415183d_300x376.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:376,&quot;width&quot;:300,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:20628,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gotomomento.substack.com/i/193379849?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3621f00a-ee9b-4c86-b9b8-6c945415183d_300x376.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!L2BP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3621f00a-ee9b-4c86-b9b8-6c945415183d_300x376.webp 424w, https://substackcdn.com/image/fetch/$s_!L2BP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3621f00a-ee9b-4c86-b9b8-6c945415183d_300x376.webp 848w, https://substackcdn.com/image/fetch/$s_!L2BP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3621f00a-ee9b-4c86-b9b8-6c945415183d_300x376.webp 1272w, https://substackcdn.com/image/fetch/$s_!L2BP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3621f00a-ee9b-4c86-b9b8-6c945415183d_300x376.webp 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></figure></div>]]></content:encoded></item><item><title><![CDATA[Agentic AI Won't Beat Aviation Yield Management.]]></title><description><![CDATA[Everyone is demoing AI agents that book cheaper flights. The demos work. The architecture doesn't.]]></description><link>https://gotomomento.substack.com/p/agentic-ai-wont-beat-aviation-yield</link><guid isPermaLink="false">https://gotomomento.substack.com/p/agentic-ai-wont-beat-aviation-yield</guid><pubDate>Sun, 29 Mar 2026 11:57:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!oK1V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82417430-1c16-4bf5-8fc3-8a535a432b6d_1388x746.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><br><br>Here's what the agentic AI travel pitch gets fundamentally wrong:<br><br>Yield management is server-side. It doesn't track your cookies, your session, or whether your request came from a human or an agent. It tracks aggregate demand on a route.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oK1V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82417430-1c16-4bf5-8fc3-8a535a432b6d_1388x746.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oK1V!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82417430-1c16-4bf5-8fc3-8a535a432b6d_1388x746.png 424w, https://substackcdn.com/image/fetch/$s_!oK1V!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82417430-1c16-4bf5-8fc3-8a535a432b6d_1388x746.png 848w, https://substackcdn.com/image/fetch/$s_!oK1V!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82417430-1c16-4bf5-8fc3-8a535a432b6d_1388x746.png 1272w, https://substackcdn.com/image/fetch/$s_!oK1V!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82417430-1c16-4bf5-8fc3-8a535a432b6d_1388x746.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oK1V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82417430-1c16-4bf5-8fc3-8a535a432b6d_1388x746.png" width="1388" height="746" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/82417430-1c16-4bf5-8fc3-8a535a432b6d_1388x746.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:746,&quot;width&quot;:1388,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:161618,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://gotomomento.substack.com/i/192499038?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82417430-1c16-4bf5-8fc3-8a535a432b6d_1388x746.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_!oK1V!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82417430-1c16-4bf5-8fc3-8a535a432b6d_1388x746.png 424w, https://substackcdn.com/image/fetch/$s_!oK1V!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82417430-1c16-4bf5-8fc3-8a535a432b6d_1388x746.png 848w, https://substackcdn.com/image/fetch/$s_!oK1V!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82417430-1c16-4bf5-8fc3-8a535a432b6d_1388x746.png 1272w, https://substackcdn.com/image/fetch/$s_!oK1V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82417430-1c16-4bf5-8fc3-8a535a432b6d_1388x746.png 1456w" sizes="100vw" fetchpriority="high"></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></figure></div><p><br><br>A diligent AI agent, doing exactly its job, generates 8&#8211;15 search events per booking intention. A human generates 2&#8211;3.<br><br>At scale, millions of agents searching simultaneously don't outsmart the pricing engine. They overfeed it. The yield system reads amplified demand signals and raises prices autonomously before the booking completes.<br><br>The incognito myth, scaled up and automated, doesn't find you cheaper flights. It triggers a market-wide inflation event on the routes where adoption is highest.<br><br>I've written a full technical breakdown with architecture diagrams covering:<br>&#8594; Why yield management pricing is immune to client-side manipulation<br>&#8594; How agentic search behaviour inflates demand signals structurally<br>&#8594; The GDS gatekeeping layer that gives agents no clean path to live inventory<br>&#8594; The feedback loop that makes widespread adoption self-defeating<br><br>The demo is not the architecture.</p><p>You can read the full article here on <a href="https://jasonbelldata.com/posts/2026-03-30-agentic-ai-aviation-yield-management.html">jasonbelldata.com</a>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://gotomomento.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Jason Bell! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA["You're the Man From Mozza!"]]></title><description><![CDATA[One pizza and the rest is history.]]></description><link>https://gotomomento.substack.com/p/youre-the-man-from-mozza</link><guid isPermaLink="false">https://gotomomento.substack.com/p/youre-the-man-from-mozza</guid><dc:creator><![CDATA[Jason Bell]]></dc:creator><pubDate>Tue, 13 Jan 2026 23:15:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!hYNT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe184305e-78ca-43eb-976b-4968b123ee18_1908x1175.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This is the story that keeps on giving. I get asked about this from friends, family, industry professionals&#8230; a lot of people. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hYNT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe184305e-78ca-43eb-976b-4968b123ee18_1908x1175.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hYNT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe184305e-78ca-43eb-976b-4968b123ee18_1908x1175.jpeg 424w, https://substackcdn.com/image/fetch/$s_!hYNT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe184305e-78ca-43eb-976b-4968b123ee18_1908x1175.jpeg 848w, https://substackcdn.com/image/fetch/$s_!hYNT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe184305e-78ca-43eb-976b-4968b123ee18_1908x1175.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!hYNT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe184305e-78ca-43eb-976b-4968b123ee18_1908x1175.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hYNT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe184305e-78ca-43eb-976b-4968b123ee18_1908x1175.jpeg" width="1456" height="897" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e184305e-78ca-43eb-976b-4968b123ee18_1908x1175.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:897,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:192419,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://jasebell.substack.com/i/184485887?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe184305e-78ca-43eb-976b-4968b123ee18_1908x1175.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hYNT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe184305e-78ca-43eb-976b-4968b123ee18_1908x1175.jpeg 424w, https://substackcdn.com/image/fetch/$s_!hYNT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe184305e-78ca-43eb-976b-4968b123ee18_1908x1175.jpeg 848w, https://substackcdn.com/image/fetch/$s_!hYNT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe184305e-78ca-43eb-976b-4968b123ee18_1908x1175.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!hYNT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe184305e-78ca-43eb-976b-4968b123ee18_1908x1175.jpeg 1456w" sizes="100vw" fetchpriority="high"></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">Yes, I am the Man From Mozza</figcaption></figure></div><h2>I Don&#8217;t Play Golf - I&#8217;ll Stick to Reading and Toasties</h2><p>When I visit St Andrews in Scotland there are two places I make a beeline for: <a href="https://www.toppingbooks.co.uk/">Toppings and Co Bookshop</a> and the <a href="https://www.facebook.com/thecheesytoastshack/?locale=en_GB">Cheesy Toast Shack</a>. Trust me there&#8217;s a few posts about St Andrews local businesses customer service but let&#8217;s not get ahead of ourselves, this is all about the toasties.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://gotomomento.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>I&#8217;d made it to the shack once before and fell in love with the New Yorker Cheese Toastie. </p><p>My commute a few times a year was long, 250+ miles and seven hours door-to-door, so my first port of call was the Shack. One year I saved myself for pizza instead with my daughter, Mozza was chosen as the destination and the pizza was most excellent. The next table was long and had about sixteen people on it. They were all having a great time so I didn&#8217;t take much notice. Pizza was consumed and my daughter and I left happy. </p><p>The next morning, in preparation for the return trip, I swung by the Toastie Shack. This time the Red Leicester, Chorizo and Rocket (astounding piece of work every time). Behind the window the staff member, rather pale looking, &#8220;Did you enjoy your pizza last night?&#8221;. I look confused, surprised and then he perked up, &#8220;We were the noisy table, hopefully it wasn&#8217;t a problem.&#8221;, &#8220;Not a problem to me, you were all enjoying yourselves.&#8221;, I said. Toastie made and a free coffee supplied for the journey home (Amazing customer service surprise #1). With that I drove off. </p><h2>Three months later&#8230;.</h2><p>Back to St Andrews, straight to the Shack. And this time without hesitation (and a different staff member) and with index finger firmly pointed, &#8220;YOU&#8217;RE THE MAN FROM MOZZA!&#8221;. Once again another apology about the noise, it was seriously no problem to me, turns out it might have been to some other patrons. I can neither confirm or deny. It also was brought to my attention that I missed the round of shots that were purchased. I was driving anyway&#8230;.</p><p>Another six months past. Another commute and once again my first port of call is for the lure of the Red Leicester. And every time, &#8220;YOU&#8217;RE THE MAN FROM MOZZA!&#8221;, same shock but different staff member.</p><p>For the next four years every visit was the same. Order tickets had #ManFromMozza written on them, then it became first name terms. Every time I visit it&#8217;s like a smile from a long lost friend you haven&#8217;t seen in years. I&#8217;ve had some really interesting conversations with folks in the queue about the weather (it&#8217;s Scotland, it&#8217;s cold), the food and even jazz. Chick Corea is certainly not boring. </p><p>Customers are willing to wait a long time for a toastie, this aspect alone is not lost on me. The Shack has some die hard fans.</p><p>I&#8217;m a delighted customer and I will shout as loudly as I can to support them. And that&#8217;s the whole point. </p><p>And how the Toastie Shack just does social media, marketing, events, branding - well it&#8217;s all just spot on. Controversy, they can handle it. Charitable giving, just search on Seagull Insurance. It&#8217;s perfect. </p><p>While I&#8217;m no longer doing the &#8220;commute&#8221; we still keep in touch once in a while. Replacement stickers for a laptop, sent without fuss. Messages about brilliant experiences, I can do that. </p><h3>What Can We Learn? </h3><p>Well there&#8217;s just a lot to learn here. That hatch on East Sands can only really deal with one person at a time, and that&#8217;s where it shines. The customer experience is one-to-one. There&#8217;s no online ordering (that I&#8217;m aware of) and that&#8217;s fine, if you want to experience it then you have to be there. </p><p>Kate Carter-Larg, Sam Larg and the rest of the team just ooze service, each and every time. They&#8217;ve got the thing down to a fine art in my eyes. Like I&#8217;ve already said, marketing for them seems to be natural. Their fanbase is made up of tourists and foodies alike, they&#8217;re all willing to shout as loud as I do about how good the Shack is. </p><h2>Jase, I want to visit!</h2><p>You can, here&#8217;s the <a href="https://maps.app.goo.gl/RoGXLwCoB6ZJq43C8">location on Google Maps</a>. And if you do go, just tell them that the #ManFromMozza sent you. :)</p><p></p><p></p><p></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://gotomomento.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>