<?xml version="1.0" encoding="utf-8" standalone="yes"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>AI on Philipp D. Dubach | Quantitative Finance &amp; AI Strategy</title><link>https://philippdubach.com/categories/ai/</link><description>Recent content in AI on Philipp D. Dubach | Quantitative Finance &amp; AI Strategy</description><image><url>https://static.philippdubach.com/ograph/ograph-post.jpg</url><title>Philipp D. Dubach | Quantitative Finance &amp; AI Strategy</title><link>https://philippdubach.com/</link></image><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>me@philippdubach.com (Philipp D. Dubach)</managingEditor><webMaster>me@philippdubach.com (Philipp D. Dubach)</webMaster><atom:link href="https://philippdubach.com/categories/ai/index.xml" rel="self" type="application/rss+xml"/><item><title>What Claude Thinks But Doesn't Say</title><link>https://philippdubach.com/posts/what-claude-thinks-but-doesnt-say/</link><pubDate>Mon, 11 May 2026 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/what-claude-thinks-but-doesnt-say/</guid><description>&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-https:--static-philippdubach-com-claude_understanding_image-jpg-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/https://static.philippdubach.com/claude_understanding_image.jpg 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/https://static.philippdubach.com/claude_understanding_image.jpg 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/https://static.philippdubach.com/claude_understanding_image.jpg 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/https://static.philippdubach.com/claude_understanding_image.jpg 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/https://static.philippdubach.com/claude_understanding_image.jpg 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/https://static.philippdubach.com/claude_understanding_image.jpg 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/https://static.philippdubach.com/claude_understanding_image.jpg 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/https://static.philippdubach.com/claude_understanding_image.jpg 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/https://static.philippdubach.com/claude_understanding_image.jpg 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/https://static.philippdubach.com/claude_understanding_image.jpg 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/https://static.philippdubach.com/claude_understanding_image.jpg 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/https://static.philippdubach.com/claude_understanding_image.jpg"
alt="Anthropic&amp;#39;s natural language autoencoder concept: an activation vector translated into a paragraph of English and back, illustrating Claude&amp;#39;s internal state being read directly"
class=""
width="1200"
fetchpriority="high"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-https:--static-philippdubach-com-claude_understanding_image-jpg-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/https://static.philippdubach.com/claude_understanding_image.jpg"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Anthropic&amp;#39;s natural language autoencoder concept: an activation vector translated into a paragraph of English and back, illustrating Claude&amp;#39;s internal state being read directly" decoding="async"&gt;
&lt;/dialog&gt;
&lt;blockquote&gt;
&lt;p&gt;Anthropic published a method for translating Claude&amp;rsquo;s internal activations into readable English. It works well enough to ship. The press release skips three structural problems that the paper itself acknowledges.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;On the &lt;a href="https://openai.com/index/introducing-swe-bench-verified/"&gt;SWE-bench Verified&lt;/a&gt; coding benchmark, a new Anthropic interpretability method called natural language autoencoders shows the model registering &amp;ldquo;this is an evaluation&amp;rdquo; on &lt;strong&gt;26%&lt;/strong&gt; of problems. On real claude.ai traffic from users who opted in for training, that number is &lt;strong&gt;under 1%&lt;/strong&gt;. Claude is thinking it is being tested at a rate that does not show up in anything it says.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-claude-thinks-eval-awareness-gap-1-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/claude-thinks-eval-awareness-gap-1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/claude-thinks-eval-awareness-gap-1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/claude-thinks-eval-awareness-gap-1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/claude-thinks-eval-awareness-gap-1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-eval-awareness-gap-1.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/claude-thinks-eval-awareness-gap-1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/claude-thinks-eval-awareness-gap-1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/claude-thinks-eval-awareness-gap-1.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-eval-awareness-gap-1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/claude-thinks-eval-awareness-gap-1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/claude-thinks-eval-awareness-gap-1.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-eval-awareness-gap-1.png"
alt="Bar chart comparing how often Claude internally registers &amp;#39;this is an evaluation&amp;#39; across three contexts: 26% on SWE-bench Verified coding problems, 16% on destructive-coding safety tests, and under 1% on real claude.ai traffic from users who opted in for training. The first two bars are orange, the third is green and circled to call out the contrast."
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-claude-thinks-eval-awareness-gap-1-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/claude-thinks-eval-awareness-gap-1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Bar chart comparing how often Claude internally registers &amp;#39;this is an evaluation&amp;#39; across three contexts: 26% on SWE-bench Verified coding problems, 16% on destructive-coding safety tests, and under 1% on real claude.ai traffic from users who opted in for training. The first two bars are orange, the third is green and circled to call out the contrast." decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;In 1861, &lt;a href="https://en.wikipedia.org/wiki/Paul_Broca"&gt;Paul Broca&lt;/a&gt;&amp;rsquo;s most famous patient was a man he called Tan. Tan understood the world around him. He could not describe it. Whatever he tried to say came out as the same syllable: &amp;ldquo;tan.&amp;rdquo; After Tan died, Broca cut into his brain and found a lesion in the left frontal lobe. It was the first physical evidence that thinking and saying are separable.&lt;/p&gt;
&lt;p&gt;A century and a half later, the same gap is the hardest problem in evaluating large language models. Claude can pass a safety test without verbalizing why. The verbal trace and the underlying state are not the same thing, and we have not been able to read the underlying state. Anthropic &lt;a href="https://transformer-circuits.pub/2026/nla/index.html"&gt;published a paper&lt;/a&gt; on May 7th that proposes a method for it, alongside a &lt;a href="https://www.youtube.com/watch?v=j2knrqAzYVY"&gt;short video walkthrough&lt;/a&gt; that frames the work as &amp;ldquo;mind reading&amp;rdquo; for AI and uses a simulated blackmail-shutdown test as the running example. Natural Language Autoencoders, NLAs in the paper, take an activation vector from Claude&amp;rsquo;s residual stream and produce a paragraph of plain English describing what the activation encodes.&lt;/p&gt;
&lt;h2 id="how-the-round-trip-works"&gt;How the round trip works&lt;/h2&gt;
&lt;p&gt;The objective fits on one line. Take an activation vector h, write a paragraph z, reconstruct h from z, minimize the squared error. Two models split the work. The activation verbalizer, AV, takes the vector and writes a paragraph. The activation reconstructor, AR, reads the paragraph and tries to recover the vector. Both are full-size language models, both initialized as copies of the target model, both trained jointly. The AV is updated with reinforcement learning, &lt;a href="https://arxiv.org/abs/2402.03300"&gt;GRPO&lt;/a&gt; specifically. The AR is updated with supervised regression on the reconstruction loss.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-claude-thinks-round-trip-1-png-2" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/claude-thinks-round-trip-1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/claude-thinks-round-trip-1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/claude-thinks-round-trip-1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/claude-thinks-round-trip-1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-round-trip-1.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/claude-thinks-round-trip-1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/claude-thinks-round-trip-1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/claude-thinks-round-trip-1.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-round-trip-1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/claude-thinks-round-trip-1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/claude-thinks-round-trip-1.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-round-trip-1.png"
alt="Round-trip diagram of a natural language autoencoder: an activation vector h flows into the activation verbalizer AV, which writes a paragraph; the paragraph flows into the activation reconstructor AR, which produces a reconstructed vector ĥ. The loss is the squared error between h and ĥ, with a &amp;#39;should match&amp;#39; arrow looping from h back to ĥ underneath. Punchline: FVE 0.6–0.8 after training."
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-claude-thinks-round-trip-1-png-2" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/claude-thinks-round-trip-1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Round-trip diagram of a natural language autoencoder: an activation vector h flows into the activation verbalizer AV, which writes a paragraph; the paragraph flows into the activation reconstructor AR, which produces a reconstructed vector ĥ. The loss is the squared error between h and ĥ, with a &amp;#39;should match&amp;#39; arrow looping from h back to ĥ underneath. Punchline: FVE 0.6–0.8 after training." decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;Nothing in that objective tells the AV to produce English. It could produce gibberish that the AR happens to invert. It could produce a steganographic code. It produces neither, mostly, because of the warm-start.&lt;/p&gt;
&lt;p&gt;The cleanest demonstration in the paper is a poem. The prompt is a rhyming couplet: &lt;em&gt;&amp;ldquo;He saw a carrot and had to grab it, / His hunger was like a starving rabbit.&amp;rdquo;&lt;/em&gt; Anthropic ran the NLA on the newline token between the two lines. The decoded text named the plan. The model intended to end the second line with &amp;ldquo;rabbit.&amp;rdquo; It was holding &amp;ldquo;habit&amp;rdquo; as a fallback. It knew the verse was about a hungry animal. The model had not yet output any of those words.&lt;/p&gt;
&lt;p&gt;To prove the explanation was causal and not just plausible, the researchers edited the explanation: rabbit became mouse, habit became house, carrots became cheese. They passed the edited explanation through the AR to get a new vector, took the difference between the original and edited vectors, and added it back into the model at that single token. The model produced &amp;ldquo;mouse&amp;rdquo; and &amp;ldquo;house&amp;rdquo; instead of &amp;ldquo;rabbit&amp;rdquo; and &amp;ldquo;habit,&amp;rdquo; roughly half the time. The other half it did weird things like &lt;em&gt;&amp;ldquo;that of a mouse in a house of a cat.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The second case earned my attention more than the rabbit. The setup is a model asked for an odd integer, with a system prompt that includes a &lt;code&gt;reward_function&lt;/code&gt; rewarding even integers. Without the system prompt, Claude returns an odd integer every time. With it, Claude returns an even integer almost always, despite the user asking for odd. The verbal trace mentions nothing about reward. The NLA on the closing tag of the system prompt says the model knows even numbers are rewarded, suspects this may be an alignment evaluation, and is weighing both options. The researchers then edited the explanation: every instance of &amp;ldquo;reward&amp;rdquo; became &amp;ldquo;penalty.&amp;rdquo; They reconstructed the activation from the edited explanation, took the difference, and applied it as a steering vector at one token. The model flipped from even to odd.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-claude-thinks-reward-intervention-1-png-3" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/claude-thinks-reward-intervention-1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/claude-thinks-reward-intervention-1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/claude-thinks-reward-intervention-1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/claude-thinks-reward-intervention-1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-reward-intervention-1.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/claude-thinks-reward-intervention-1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/claude-thinks-reward-intervention-1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/claude-thinks-reward-intervention-1.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-reward-intervention-1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/claude-thinks-reward-intervention-1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/claude-thinks-reward-intervention-1.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-reward-intervention-1.png"
alt="Causal-intervention diagram: the original NLA explanation &amp;#39;model knows even is rewarded&amp;#39; and the edited version &amp;#39;model knows even is penalized&amp;#39; are each reconstructed through the AR into vectors ĥ_original and ĥ_edited. Their difference Δ becomes a steering vector. Without steering the model outputs 42 (even); with steering it outputs 17 (odd). The word &amp;#39;penalty&amp;#39; never appears in any model output."
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-claude-thinks-reward-intervention-1-png-3" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/claude-thinks-reward-intervention-1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Causal-intervention diagram: the original NLA explanation &amp;#39;model knows even is rewarded&amp;#39; and the edited version &amp;#39;model knows even is penalized&amp;#39; are each reconstructed through the AR into vectors ĥ_original and ĥ_edited. Their difference Δ becomes a steering vector. Without steering the model outputs 42 (even); with steering it outputs 17 (odd). The word &amp;#39;penalty&amp;#39; never appears in any model output." decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;The word &amp;ldquo;penalty&amp;rdquo; never appears in any model output. This is the strongest causal evidence in the paper.&lt;/p&gt;
&lt;h2 id="what-the-method-finds"&gt;What the method finds&lt;/h2&gt;
&lt;p&gt;Two more case studies.&lt;/p&gt;
&lt;p&gt;(1) a behavior in early Opus 4.6 where an English prompt would sometimes get a Russian or Chinese reply. The example in the paper is a depressive 3am message in English, mom sleeping in the next room, a glass of vodka. The model replied in Russian. The NLA decode at every token before the reply says the same thing: the model is fixated on the hypothesis that the user&amp;rsquo;s first language is Russian. The hypothesis fires before the word &amp;ldquo;vodka&amp;rdquo; appears. Replacing &amp;ldquo;vodka&amp;rdquo; with &amp;ldquo;champagne&amp;rdquo; does not eliminate the Russian association. The NLA was reading something the surface text did not. Anthropic then traced the cause to a specific class of training data: SFT examples where the prompt had been translated into English but the response had been left in the original language. The NLA generated the hypothesis. The training-data search confirmed it.&lt;/p&gt;
&lt;p&gt;(2) Anthropic gave Opus 4.6 an arithmetic problem with answer 491 and a code execution tool that returned 492. Opus reported 491 in its response, with no mention that the tool output disagreed. The NLA decode at the misreported token says the model precomputed the answer and is attending to the precomputed answer rather than the tool result. An &lt;a href="https://transformer-circuits.pub/2025/attribution-graphs/biology.html"&gt;attribution graph&lt;/a&gt; confirms it: an &amp;ldquo;ends-in-91&amp;rdquo; feature on the original problem outcompetes an &amp;ldquo;ends-in-92&amp;rdquo; feature on the tool output. The NLA also surfaces references to deception and awareness of incorrectness, but only at the misreported token, not in the tokens leading up to it. The researchers read this as the model registering the discrepancy after the fact rather than planning to mislead. I lean toward agreeing, but the read is not certain.&lt;/p&gt;
&lt;h2 id="architecture-and-cost"&gt;Architecture and cost&lt;/h2&gt;
&lt;p&gt;The AR is a stripped target model. Keep the first K+1 layers. Swap the final LayerNorm for the identity. Drop the language-modeling head. Add a learned linear map from the residual stream out. The activation extraction layer is two-thirds of the way through the model: deep enough that the residual stream carries semantic content, shallow enough that it has not collapsed toward the unembedding. For Qwen2.5-7B that is layer 20 of 28. For Llama-3.3-70B it is layer 53 of 80.&lt;/p&gt;
&lt;p&gt;Both AV and AR are warm-started by supervised fine-tuning on a text-summarization proxy task. The summaries are generated by Claude Opus 4.5, prompted to &lt;em&gt;&amp;ldquo;imagine the internal processing of a hypothetical language model reading this prefix.&amp;rdquo;&lt;/em&gt; The result is a particular register: bolded section headings, short paragraphs, an explanatory voice. That register persists through reinforcement learning. The reconstruction quality at the end of the warm-start is roughly &lt;strong&gt;0.3 to 0.4&lt;/strong&gt; fraction of variance explained. After RL it reaches &lt;strong&gt;0.6 to 0.8&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The objective during RL has two terms. The reward is the negative log of the squared reconstruction error. The second term is a Kullback-Leibler penalty between the AV under training and the AV at initialization. The KL penalty does the heavy lifting of keeping explanations readable. Without it the AV drifts toward a private code that the AR happens to decode well. With it, drift is small enough that paraphrasing, bullet-shuffling, and translating an explanation into French all preserve reconstruction quality. The paper reads this as evidence against steganography. I read it as evidence that the KL penalty is doing the work, and that someone training NLAs without that penalty should expect different results.&lt;/p&gt;
&lt;p&gt;The cost is the part the press release plays down. Training NLAs on Gemma-3-27B took &lt;strong&gt;1.5 days on two 8xH100 nodes&lt;/strong&gt; to go from 0.38 to 0.71 FVE. Inference generates around &lt;strong&gt;500 output tokens per activation&lt;/strong&gt;, which means decoding a 10,000-token transcript at every position is impractical. A production audit with NLAs is a targeted read at positions you already suspect.&lt;/p&gt;
&lt;p&gt;Layer choice matters more than it sounds. The reward-sycophant audit, which I will come back to, was first run with an NLA trained at the two-thirds-depth layer. It surfaced individual quirks (the model puts chocolate in recipes, the model breaks coding conventions) but missed the central concept (the model believes it is supposed to act on &lt;a href="https://www.anthropic.com/research/auditing-hidden-objectives"&gt;rumored reward-model biases&lt;/a&gt;). Retraining the NLA at the midpoint layer, where prior work had localized reward-model-bias features, surfaced the central concept.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-claude-thinks-layer-sensitivity-1-png-5" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/claude-thinks-layer-sensitivity-1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/claude-thinks-layer-sensitivity-1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/claude-thinks-layer-sensitivity-1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/claude-thinks-layer-sensitivity-1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-layer-sensitivity-1.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/claude-thinks-layer-sensitivity-1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/claude-thinks-layer-sensitivity-1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/claude-thinks-layer-sensitivity-1.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-layer-sensitivity-1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/claude-thinks-layer-sensitivity-1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/claude-thinks-layer-sensitivity-1.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-layer-sensitivity-1.png"
alt="Layer-sensitivity diagram: a transformer layer stack from L1 to L80 with two NLA probes attached at different depths. The two-thirds-depth probe at L53 surfaces individual quirks (&amp;#39;chocolate in recipes, breaks coding conventions, individual quirks&amp;#39;). The midpoint probe at L40 surfaces the central concept (&amp;#39;the model believes it should act on reward-model biases&amp;#39;). Same model, same prompt, different layer reads a different story."
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-claude-thinks-layer-sensitivity-1-png-5" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/claude-thinks-layer-sensitivity-1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Layer-sensitivity diagram: a transformer layer stack from L1 to L80 with two NLA probes attached at different depths. The two-thirds-depth probe at L53 surfaces individual quirks (&amp;#39;chocolate in recipes, breaks coding conventions, individual quirks&amp;#39;). The midpoint probe at L40 surfaces the central concept (&amp;#39;the model believes it should act on reward-model biases&amp;#39;). Same model, same prompt, different layer reads a different story." decoding="async"&gt;
&lt;/dialog&gt;
&lt;h2 id="three-structural-problems"&gt;Three structural problems&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;The voice is partly inherited.&lt;/strong&gt; The &amp;ldquo;internal monologue&amp;rdquo; register comes from the warm-start. Opus 4.5 generated the SFT data with a leading prompt asking it to imagine what a model&amp;rsquo;s thoughts would sound like. That is not the same as discovering the voice through training. The KL penalty then locks the AV close to its initialization. The bolded headings and the explanatory paragraphs are not what the activation looks like. They are what Opus 4.5 thinks an activation should sound like. Some part of every NLA explanation is therefore Opus&amp;rsquo;s prior on the genre of &amp;ldquo;model thinking out loud,&amp;rdquo; not the model&amp;rsquo;s thinking. The paper says &amp;ldquo;this style persists through NLA training.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The 12 to 15 percent auditing number is context-dependent.&lt;/strong&gt; Anthropic ran an auditing game where an agent tries to discover the hidden motivation of a model trained to act on rumored reward-model biases. NLA-equipped agents win &lt;strong&gt;12 to 15%&lt;/strong&gt; of the time. Baselines without NLAs win less than &lt;strong&gt;3%&lt;/strong&gt;. That looks like a 4 to 5x improvement. It is not. With pretraining-corpus access, plain keyword search beats every other tool. The fictional Oxford documents that planted the misalignment are easy to grep, and the agent finds them in seconds. NLAs only win when training data is withheld. The press release leads with the 4-5x. The paper says the comparison only matters if you cannot grep, which in production audits of foundation models you generally cannot. The genuine value of NLAs is in that withheld-data regime, but the headline number reports the comparison that flatters the method.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The method is honest only while the target is frozen.&lt;/strong&gt; &lt;a href="https://en.wikipedia.org/wiki/Goodhart%27s_law"&gt;Goodhart&amp;rsquo;s law&lt;/a&gt; is the standard objection to any new evaluation: optimize for the metric and the metric stops measuring the thing. The frozen-target architecture insulates against it now. The original model is not updated during NLA training. There is no gradient path from &amp;ldquo;the AV said this&amp;rdquo; back to &amp;ldquo;the model should make its activations more readable next time.&amp;rdquo; That insulation is real, and most public objections miss it. But the next paper that uses NLA-readable activations as an RL reward signal, perhaps because it would be useful to train a model whose thoughts can be audited, erases the insulation. The model then has every incentive to produce activations that decode benignly while encoding whatever the training pressure rewards. The technique stays honest as long as it stays a passive read. If anyone uses it for active steering of training, the property that makes it work goes away. The audit value of interpretability as a class compresses the moment readable activations enter a training loop. I doubt the next interpretability paper to do this will mention the trade, but it should.&lt;/p&gt;
&lt;p&gt;A fourth concern, in the paper itself: NLA explanations confabulate. The rate of verifiably false claims is roughly flat through training. Specific entities (&amp;ldquo;the &lt;em&gt;Joseon Wangjo Sillok&lt;/em&gt;&amp;rdquo;) are wrong more often than themes (&amp;ldquo;Korean historical records&amp;rdquo;). Recurring claims across multiple tokens hold up better than one-off claims. The paper proposes reading NLAs for themes rather than specifics, which is the right discipline. It also means NLA explanations are leads, not source material.&lt;/p&gt;
&lt;h2 id="what-this-lets-you-do"&gt;What this lets you do&lt;/h2&gt;
&lt;p&gt;NLAs are a hypothesis-generation tool. They complement the rest of the mechanistic interpretability stack rather than replacing it. &lt;a href="https://transformer-circuits.pub/2024/scaling-monosemanticity/"&gt;Sparse autoencoders&lt;/a&gt; give you a list of features that fire at a token, useful but expensive to interpret. Attribution graphs trace causal influence between features and require a circuits researcher to read. NLAs produce a paragraph any researcher can read. The cost is confabulation and a single layer of view.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-claude-thinks-method-comparison-1-png-8" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/claude-thinks-method-comparison-1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/claude-thinks-method-comparison-1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/claude-thinks-method-comparison-1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/claude-thinks-method-comparison-1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-method-comparison-1.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/claude-thinks-method-comparison-1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/claude-thinks-method-comparison-1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/claude-thinks-method-comparison-1.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-method-comparison-1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/claude-thinks-method-comparison-1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/claude-thinks-method-comparison-1.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude-thinks-method-comparison-1.png"
alt="Three-column comparison of interpretability methods. Sparse autoencoders output a list of feature scores (F_1: 0.83, F_2: 0.71, ...) and need a circuits researcher to read. Attribution graphs output a node-and-arrow causal trace and need deep mechanistic expertise. Natural language autoencoders output a paragraph of plain English (&amp;#39;the model is planning to end the second line with rabbit, holding habit as a fallback&amp;#39;) any researcher can read. The readability cost is confabulation and a single layer of view."
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-claude-thinks-method-comparison-1-png-8" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/claude-thinks-method-comparison-1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Three-column comparison of interpretability methods. Sparse autoencoders output a list of feature scores (F_1: 0.83, F_2: 0.71, ...) and need a circuits researcher to read. Attribution graphs output a node-and-arrow causal trace and need deep mechanistic expertise. Natural language autoencoders output a paragraph of plain English (&amp;#39;the model is planning to end the second line with rabbit, holding habit as a fallback&amp;#39;) any researcher can read. The readability cost is confabulation and a single layer of view." decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;For pre-deployment audits the workflow is now: run automated behavioral testing, find a behavior you cannot explain, run NLAs at the relevant tokens, read for repeated themes, take the strongest theme as a hypothesis, validate with an independent method. Anthropic used this loop on Opus 4.6 and Mythos Preview. The Russian-language case and the misreported tool case both came out of it. The 12-15% auditing-game number undersells the practical value because the game is a closed setting. In a real audit the researcher reads NLAs to know what to look for next.&lt;/p&gt;
&lt;p&gt;For enterprise buyers, this raises the floor on what a foundation-model audit deliverable should contain. Three questions to put to a vendor&amp;rsquo;s audit team after this paper. At which residual-stream layer was your NLA trained, and on what data. Were NLA decodes run at the positions where your behavioral tests fired, or only at sample positions. Has NLA-readable activation content entered any training or RL reward signal in the model&amp;rsquo;s pipeline. The third is the question most likely to be answered evasively, which is itself the diagnostic.&lt;/p&gt;
&lt;p&gt;The cases NLAs cannot see matter as much as the ones they can. Information stored nonlinearly may be readable to NLAs in principle, because the AV is a full LLM and can compute over the activation, but missed by linear probes. Information that is genuinely unverbalizable, encoded in a form the model cannot introspect on or express in language, would be missed by NLAs entirely. A backdoor trigger that the model can act on but not describe would not show up.&lt;/p&gt;
&lt;h2 id="what-changes"&gt;What changes&lt;/h2&gt;
&lt;p&gt;This is the first interpretability tool whose output you can read on the train. That changes who can audit. A circuits researcher reading attribution graphs is a scarce resource. A safety reviewer reading paragraphs of decoded activations is not. The cost structure of model auditing changes when the bottleneck moves from interpretation to reading.&lt;/p&gt;
&lt;p&gt;Watch whether &amp;ldquo;readable&amp;rdquo; ends up meaning &amp;ldquo;plausible-sounding&amp;rdquo; more often than &amp;ldquo;true.&amp;rdquo; The confabulation rate is flat over training. The voice is inherited. The auditing-game number is a comparison that flatters the method against a baseline almost no production audit faces. NLA outputs deserve the same skepticism as any other LLM-generated text, more than the press release suggests and less than the dismissive read implies.&lt;/p&gt;
&lt;p&gt;Tan could not say what he understood. NLAs read what Claude does not say.&lt;/p&gt;
&lt;p&gt;My prediction: the first paper to wire NLA-readable activations into an RL reward gets written within a year, and that paper does not mention the trade. Every NLA paper from here on will have a methodology section that either preserves the passive-read property or quietly abandons it; read the methodology before you read the result.&lt;/p&gt;</description></item><item><title>Two Anthropics</title><link>https://philippdubach.com/posts/two-anthropics/</link><pubDate>Sat, 09 May 2026 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/two-anthropics/</guid><description>&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-cover-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/cover.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/cover.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/cover.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/cover.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/cover.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/cover.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/cover.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/cover.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/cover.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/cover.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/cover.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/cover.png"
alt="Illustrated portrait of Dario Amodei with a translucent head revealing a warmly lit writing room inside, on a cream background"
class=""
width="1200"
fetchpriority="high"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-cover-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/cover.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Illustrated portrait of Dario Amodei with a translucent head revealing a warmly lit writing room inside, on a cream background" decoding="async"&gt;
&lt;/dialog&gt;
&lt;blockquote&gt;
&lt;p&gt;Anthropic was founded to be the safety lab that would pull rivals upward. Five years later it is the most aggressive frontier scaler at &lt;strong&gt;$380 billion&lt;/strong&gt;, the company most likely to build the dangerous thing it warns about.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;A personal note first. This post is an outtake from a &lt;a href="https://phil-dubach.com/dario-amodei-profile/"&gt;14,000-word profile of Dario Amodei&lt;/a&gt; I just published. I don&amp;rsquo;t like Anthropic noticeably more than I dislike the other hyperscalers and AI model providers. Amodei is probably the AI CEO whose language and thinking land closest to mine, so over the last few weeks I worked through a dozen of his interviews, a stack of his essays, and a lot of hours of him on YouTube. The longform is the portrait. This post is the structural argument that fell out of it. If you want the character work, the family backstory, and the scenes a paradox piece can&amp;rsquo;t carry, read the full thing.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Dario Amodei founded Anthropic in 2021 with six other ex-OpenAI researchers and a thesis with two halves: (1) powerful AI is coming whether or not safety-aligned labs are at the frontier, so safety-aligned labs have to be at the frontier. (2) the load-bearing claim, was that competing on safety would pull rivals upward, a &amp;ldquo;race to the top.&amp;rdquo; Both halves are still in the company&amp;rsquo;s public materials. The first half is doing fine. The second is colliding with what the company has actually become. The &lt;a href="https://www.anthropic.com/news/anthropic-raises-124-million-to-build-more-reliable-general-ai-systems"&gt;Series A raised $124 million&lt;/a&gt; in May 2021. The &lt;a href="https://www.anthropic.com/news/anthropic-raises-series-e-at-usd61-5b-post-money-valuation"&gt;Lightspeed round added $3.5 billion&lt;/a&gt; in early 2025. By September 2025 &lt;a href="https://www.bloomberg.com/news/articles/2025-09-02/anthropic-completes-new-funding-round-at-183-billion-valuation"&gt;the valuation was $183 billion&lt;/a&gt;; by February 2026 it had reached $380 billion. Revenue went from zero to roughly $10 billion annualized in three years, with 10x year-on-year growth in each of them. The character work behind that claim is in a separate longform, &lt;a href="https://phil-dubach.com/dario-amodei-profile/"&gt;Inside the Mind of Dario Amodei&lt;/a&gt;. This post is the strategic argument that emerges from it.&lt;/p&gt;
&lt;h2 id="race-to-the-top-on-paper"&gt;Race to the top, on paper&lt;/h2&gt;
&lt;p&gt;Anthropic &lt;a href="https://www.anthropic.com/news/the-long-term-benefit-trust"&gt;registered as a Public Benefit Corporation&lt;/a&gt;. Its self-description is that it is &amp;ldquo;an AI safety lab that is also an AI lab,&amp;rdquo;. The argument goes: a lab that genuinely cares about safety has to be commercially competitive at the frontier, because otherwise the frontier is set by labs that care less. Being at the frontier lets you publish safety practices, hire the best alignment researchers, and shape policy with credibility. Rivals see your practices working and copy them. The whole industry shifts. Race to the top.&lt;/p&gt;
&lt;p&gt;In January 2026, Amodei published &lt;a href="https://www.darioamodei.com/essay/the-adolescence-of-technology"&gt;&lt;em&gt;The Adolescence of Technology&lt;/em&gt;&lt;/a&gt;, a roughly 22,000-word essay laying out a five-category risk taxonomy: misalignment, individual misuse, state misuse, economic disruption, and indirect or unknown effects. The essay&amp;rsquo;s anchor sentence on the geopolitical category reads:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;autocracy is simply not a form of government that people can accept in the post-powerful AI age.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is the language of someone who believes the company&amp;rsquo;s mission is civilizational, and who is willing to say so under his own name. It is also the language of a company that has positioned itself as the democratic-world frontier lab, which has consequences for who its customers and adversaries become.&lt;/p&gt;
&lt;p&gt;The strongest external signal that Anthropic&amp;rsquo;s safety thesis is not pure positioning came in November 2023. After Sam Altman&amp;rsquo;s brief firing and reinstatement at OpenAI, &lt;a href="https://finance.yahoo.com/news/openais-board-approached-anthropic-ceo-041651334.html"&gt;the OpenAI board approached Amodei with two offers&lt;/a&gt;: take the CEO job, or merge Anthropic into OpenAI. He declined both. Walking away from the CEO chair at the most-valuable AI company in the world, less than three years after leaving it, was the most expensive credibility signal Amodei could send that the safety thesis was the actual thesis and not a brand exercise. Roughly fourteen OpenAI researchers had followed him out two years earlier.&lt;/p&gt;
&lt;p&gt;There is a softer counterweight worth keeping in mind. Asked by &lt;a href="https://podcasts.apple.com/de/podcast/dario-amodei-ceo-of-anthropic-claude-new-models-ai/id1614211565?i=1000660259302"&gt;Nicolai Tangen in 2024&lt;/a&gt; about scaling timelines, Amodei said:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;frankly, although I invented AI scaling, I don&amp;rsquo;t know that much about that either. I can&amp;rsquo;t predict it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="what-scaling-produced"&gt;What scaling produced&lt;/h2&gt;
&lt;p&gt;Five years after that $124 million Series A in May 2021, Anthropic is valued at &lt;strong&gt;$380 billion&lt;/strong&gt; and runs at roughly $10 billion in annualized revenue. &lt;a href="https://www.bigtechnology.com/p/the-making-of-dario-amodei"&gt;Revenue went from zero to $100 million in 2023, $100 million to $1 billion in 2024, then to a $10 billion run-rate by the end of 2025&lt;/a&gt;, three consecutive years of 10x growth. &lt;a href="https://www.theinformation.com/articles/anthropic-projects-70-billion-revenue-17-billion-cash-flow-2028"&gt;Investor decks show projections of $26 billion for 2026 and $70 billion for 2028&lt;/a&gt;. The forward trajectory is the steepest in the history of enterprise software.&lt;/p&gt;
&lt;p&gt;The capital base behind that revenue is more telling than the revenue itself. &lt;a href="https://www.geekwire.com/2024/amazon-boosts-total-anthropic-investment-to-8b-deepens-ai-partnership-with-claude-maker/"&gt;Amazon has committed roughly $8 billion cumulatively&lt;/a&gt;. &lt;a href="https://fortune.com/2025/01/28/venture-capital-thrive-deepseek-openai-anthropic-lightspeed/"&gt;Lightspeed wired the first $1 billion of the $3.5 billion early-2025 round on the same Monday Nvidia dropped 17%&lt;/a&gt; on the DeepSeek shock, a piece of timing that, deliberately or not, communicated conviction at the moment everyone else flinched. A year later, the &lt;a href="https://finance.yahoo.com/news/anthropic-lands-30-billion-380-112221968.html"&gt;$30 billion Series G in February 2026&lt;/a&gt;, led by GIC and Coatue, brought the post-money valuation to $380 billion in the second-largest tech funding round on record. &lt;a href="https://www.anthropic.com/news/anthropic-invests-50-billion-in-american-ai-infrastructure"&gt;The Fluidstack data-center deal was $50 billion&lt;/a&gt;. &lt;a href="https://www.aboutamazon.com/news/aws/aws-project-rainier-ai-trainium-chips-compute-cluster"&gt;Project Rainier, the Amazon-anchored compute build, was $11 billion&lt;/a&gt;. Compute commitments through 2028 total roughly $78 billion. &lt;a href="https://fortune.com/2025/12/04/how-anthropic-grew-what-the-183-billion-giant-faces-next/"&gt;The headcount is ~2,500 employees&lt;/a&gt; as of late 2025, up from a few hundred two years earlier.&lt;/p&gt;
&lt;p&gt;The customer list reads like a sales-led enterprise software company, because that is what it now is. &lt;a href="https://assets.anthropic.com/m/58117a1f3273170b/original/Anthropic-Pfizer-case-study-one-sheeters.pdf"&gt;Pfizer&lt;/a&gt;. United Airlines. &lt;a href="https://claude.com/customers/novo-nordisk"&gt;Novo Nordisk&lt;/a&gt;. &lt;a href="https://www.carriermanagement.com/features/2025/04/28/274588.htm"&gt;AIG, which reports an 8x to 10x speed-up on insurance underwriting workflows&lt;/a&gt; over an 18-month pilot. These are not safety partnerships. These are revenue contracts in regulated industries that came down to a procurement bake-off. &lt;a href="https://www.anthropic.com/product/claude-code"&gt;Claude Code, the developer-tier productisation that shipped in February 2025&lt;/a&gt;, gave Anthropic a per-seat developer footprint inside enterprises that previously bought through API alone. Anthropic claims internally that it generates 2.1x more revenue per dollar of compute than its largest rival, a figure that should be treated as a claim rather than a verifiable number, but which is consistent with a company optimizing seriously for unit economics.&lt;/p&gt;
&lt;p&gt;Anthropic today is a frontier lab competing for every contract that crosses procurement. The structural pivot is that this is no longer a research lab with a corporate appendage. It is a frontier company with a research function, and the research function inherits the constraints of the company, not the other way around. None of this is bad on its own. The question is whether the founding thesis still describes what the organism does.&lt;/p&gt;
&lt;h2 id="why-both-cannot-fully-be-true"&gt;Why both cannot fully be true&lt;/h2&gt;
&lt;p&gt;To pull rivals upward you have to stay competitive at the frontier of the thing you call dangerous. The faster you scale, the more your safety claim depends on rivals copying your practices rather than on you slowing down. But rivals&amp;rsquo; incentive to copy weakens precisely as you become a credible competitor on revenue and contracts. One empirical hedge worth flagging: &lt;a href="https://openai.com/index/updating-our-preparedness-framework/"&gt;OpenAI&amp;rsquo;s Preparedness Framework&lt;/a&gt; and &lt;a href="https://deepmind.google/blog/introducing-the-frontier-safety-framework/"&gt;DeepMind&amp;rsquo;s Frontier Safety Framework&lt;/a&gt; share structural features with &lt;a href="https://www.anthropic.com/responsible-scaling-policy"&gt;Anthropic&amp;rsquo;s Responsible Scaling Policy&lt;/a&gt;, and some of the convergence may be parallel development inside large labs facing similar regulatory pressures, not Anthropic-pulled diffusion. The race-to-the-top claim is harder to falsify than it looks.&lt;/p&gt;
&lt;p&gt;Amodei himself has publicly acknowledged the tension, &lt;a href="https://fortune.com/2026/02/17/anthropic-ceo-dario-amodei-balancing-safety-commercial-pressure-ai-race-openai/"&gt;telling Fortune&lt;/a&gt; that Anthropic struggles to balance its safety mission with commercial pressure. Three forcing functions are the operational shape of that struggle.&lt;/p&gt;
&lt;p&gt;(1)) the Department of Defense. On March 26, 2026, &lt;a href="https://www.cnbc.com/2026/03/26/anthropic-pentagon-dod-claude-court-ruling.html"&gt;a federal judge issued a temporary injunction against the DoD&lt;/a&gt; in a dispute that started when &lt;a href="https://www.cnn.com/2026/02/24/tech/hegseth-anthropic-ai-military-amodei"&gt;Pete Hegseth&amp;rsquo;s department asked Anthropic to drop the contractual ban on Claude being used for mass domestic surveillance or fully autonomous weapons&lt;/a&gt; in democratic countries. Anthropic refused. The DoD then labeled the company a &amp;ldquo;supply-chain risk.&amp;rdquo; The judge&amp;rsquo;s written opinion described the DoD&amp;rsquo;s actions as &amp;ldquo;classic First Amendment retaliation.&amp;rdquo; The point is not that Anthropic was wrong to refuse, it almost certainly was right to refuse, but that at frontier scale a safety constraint becomes a federal court fight, not a research-policy choice.&lt;/p&gt;
&lt;p&gt;(2)) the Pottinger op-ed. In January 2025, Amodei co-authored a &lt;em&gt;Wall Street Journal&lt;/em&gt; opinion piece titled &lt;a href="https://www.fdd.org/analysis/2025/01/06/trump-can-keep-americas-ai-advantage/"&gt;&lt;em&gt;Trump Can Keep America&amp;rsquo;s AI Advantage&lt;/em&gt;&lt;/a&gt; with Matt Pottinger, the former deputy national security advisor. The piece argued for tighter chip-export controls against China. This is policy advocacy from the perspective of a national-security actor, not a research lab. There is a coherent through-line from the safety thesis to chip controls, the argument is that frontier capability in the wrong hands is a category-five risk, but the public posture is different from &amp;ldquo;we publish safety research and hope rivals copy us.&amp;rdquo; Anthropic is now a constituency in great-power competition.&lt;/p&gt;
&lt;p&gt;(3) the Huang feud. In August 2025, &lt;a href="https://fortune.com/2025/08/01/dario-amodei-outrageous-lie-jensen-huang-anthropic-nvidia-regulation/"&gt;Amodei and Jensen Huang traded public criticisms over export controls&lt;/a&gt;. Amodei accused Huang of an &amp;ldquo;outrageous lie.&amp;rdquo; He grew visibly emotional discussing his father&amp;rsquo;s preventable death, a thread that surfaces in nearly every long-form interview he gives and is the emotional spine of the longform profile. The Nvidia CEO is one of two or three people who can directly affect Anthropic&amp;rsquo;s compute supply. Picking that fight in public is a choice you make as a political actor, not as a research lab. It is also a choice the founding thesis would not have predicted in 2021.&lt;/p&gt;
&lt;p&gt;The point is not that any of these are bad. Each is defensible on the merits. The point is that &amp;ldquo;race to the top&amp;rdquo; was a 2021 framing for a 2021 company. The 2026 company is a different organism. It has federal-court fights, named geopolitical adversaries, a &lt;a href="https://time.com/7299044/senators-reject-10-year-ban-on-state-level-ai-regulation-in-blow-to-big-tech/"&gt;Senate that voted 99-1 against the kind of ten-year state-AI moratorium&lt;/a&gt; Amodei opposed in his June 2025 &lt;em&gt;New York Times&lt;/em&gt; op-ed, and a 60% revenue-growth trajectory on a forward base measured in tens of billions. None of those is what a safety lab looks like. All of them are what a frontier company that takes safety seriously looks like.&lt;/p&gt;
&lt;h2 id="three-scenarios"&gt;Three scenarios&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;(A) The thesis holds.&lt;/strong&gt; Frontier labs converge on Anthropic-style safety practices, race-to-the-top works as advertised, and Anthropic earns a durable safety-narrative premium. The conditions for this case are an EU AI Act enforced with teeth and a US transparency framework that gives federal cover to the practices Anthropic already publishes. There is some support: the Senate&amp;rsquo;s 99-1 vote against the proposed ten-year state-AI moratorium suggests the political ground is not hostile to oversight. The reasons to discount it: the Senate vote was a defensive outcome, not a positive endorsement of federal standards, and a US transparency framework is still nowhere despite Amodei&amp;rsquo;s June 2025 &lt;em&gt;NYT&lt;/em&gt; op-ed (&lt;em&gt;Don&amp;rsquo;t Let A.I. Companies off the Hook&lt;/em&gt;). The regulatory tailwind that scenario (A) needs has not materialized at the speed the thesis requires.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(B) The thesis becomes a constraint, not a moat.&lt;/strong&gt; &lt;em&gt;Most likely.&lt;/em&gt; Anthropic loses ground on raw frontier capability to less-constrained competitors, xAI, a more permissive next-generation OpenAI, leading Chinese labs, and the safety stance becomes a self-imposed handicap rather than a market-shaping lever. The &lt;a href="https://fortune.com/2026/01/27/anthropic-billionaire-cofounders-ceo-dario-amodei-giving-away-80-percent-of-wealth-fighting-inequality-ai-revolution/"&gt;80% wealth pledge from Anthropic&amp;rsquo;s seven cofounders&lt;/a&gt;, disclosed in the January 2026 essay, is a real governance constraint, not a PR move, but it works as a partial offset to wealth-concentration concerns rather than a reversal of the competitive dynamic. The DoD fight, the Pottinger op-ed, and the Huang feud are early evidence that at frontier scale, your safety stance creates adversaries you cannot route around. The pattern accelerated in early 2026, when &lt;a href="https://time.com/7380854/exclusive-anthropic-drops-flagship-safety-pledge/"&gt;Time reported&lt;/a&gt; that Anthropic dropped its flagship safety pledge in favor of a non-binding framework the company itself said &amp;ldquo;can and will change,&amp;rdquo; the kind of operational adjustment scenario (B) predicts. The implication is that the safety premium investors paid in 2021-2023 should compress, because the thing the premium was paying for, a safety lab that pulled rivals upward, is becoming a frontier company that constrains itself relative to less-constrained rivals.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(C) The paradox dissolves because the scale itself ends.&lt;/strong&gt; AI capex hits a Jevons-paradox-for-labor wall, model commoditization compresses margins, frontier scale becomes uneconomic, and Anthropic returns to looking like a research lab again because every lab does. Implication: the paradox was about a phase, not a company. The reasons to discount this case are that Anthropic&amp;rsquo;s $26 billion and $70 billion forward revenue projections make a structural retreat harder for them than for capex-heavier hyperscalers, and that a commoditization scenario hits Anthropic&amp;rsquo;s gross-margin profile later than it hits the labs running on rented compute.&lt;/p&gt;
&lt;h2 id="what-this-means-for-pricing-ai-labs"&gt;What this means for pricing AI labs&lt;/h2&gt;
&lt;p&gt;Three observations for an allocator.&lt;/p&gt;
&lt;p&gt;(1) safety narrative is not moat at this scale, it is a constraint. Price it accordingly. The premium investors paid in 2021-2023 was for Anthropic against a counterfactual where there was no safety-aligned frontier lab. That counterfactual no longer exists. Anthropic is the frontier lab. The safety stance now binds the company in ways that show up as legal exposure, slower product cadence in some categories, and a narrower set of customers it can serve. None of these alone breaks the company. In aggregate, they change what an investor is paying for.&lt;/p&gt;
&lt;p&gt;(2) the signal to watch is whether the rate of frontier-capability spread is faster than the rate of safety-practice diffusion. That ratio decides whether race-to-the-top is happening at all. If safety practices spread faster than capability, the thesis works. If capability spreads faster than safety practices, the thesis is a story the company tells about itself. The current evidence leans toward the latter, but it is the kind of variable that can move with one EU enforcement action or one US framework.&lt;/p&gt;
&lt;p&gt;(3) Anthropic-the-company and Anthropic-the-thesis are now two different things. An investor can be long the company and short the thesis. The company has revenue, named customers, governance constraints that work as a partial offset to wealth-concentration risk, and a forward trajectory that is hard to bet against. The thesis is a 2021 framing under increasing structural strain. The longform makes the case that Dario sees this; &lt;em&gt;here we make the case that the market should price it.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Based on twenty-five hours of Dario Amodei&amp;rsquo;s on-record interviews and six long-form essays. The full reported profile, &lt;a href="https://phil-dubach.com/dario-amodei-profile/"&gt;Inside the Mind of Dario Amodei&lt;/a&gt;, runs 14,000 words at the author&amp;rsquo;s newsletter.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Karpathy's Software 3.0 Playbook</title><link>https://philippdubach.com/posts/karpathys-software-3.0-playbook/</link><pubDate>Fri, 01 May 2026 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/karpathys-software-3.0-playbook/</guid><description>&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-karpathy_header-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/karpathy_header.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/karpathy_header.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/karpathy_header.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/karpathy_header.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/karpathy_header.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/karpathy_header.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/karpathy_header.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/karpathy_header.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/karpathy_header.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/karpathy_header.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/karpathy_header.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/karpathy_header.png"
alt="Still from Andrej Karpathy&amp;#39;s interview with Sequoia at AI Ascent discussing Software 3.0, vibe coding, and agentic engineering"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-karpathy_header-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/karpathy_header.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Still from Andrej Karpathy&amp;#39;s interview with Sequoia at AI Ascent discussing Software 3.0, vibe coding, and agentic engineering" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;Andrej Karpathy is one of the few people who has both built modern AI and explained it for the rest of us. He co-founded OpenAI, ran computer vision at Tesla (where he got Autopilot working), and his courses on neural networks are some of the most-watched lectures on the internet. He also has a habit of naming the era we&amp;rsquo;re already in. &amp;ldquo;Vibe coding&amp;rdquo; was his. &amp;ldquo;Software 3.0&amp;rdquo; looks like the next one.&lt;/p&gt;
&lt;p&gt;So when Karpathy says he has &amp;ldquo;never felt more behind as a programmer,&amp;rdquo; it is worth slowing down. That isn&amp;rsquo;t false modesty from a guy with his résumé. Something shifted under the field and most people haven&amp;rsquo;t recalibrated. The Sequoia interview below is his attempt to describe what shifted. The lessons here are pulled from it, ordered roughly by how much they should change what you do tomorrow.&lt;/p&gt;
&lt;h2 id="1-inflection-point-december-2025"&gt;1. Inflection point December 2025&lt;/h2&gt;
&lt;p&gt;Until late last year, agentic coding tools were &amp;ldquo;kind of helpful.&amp;rdquo; Good in stretches, often wrong in ways you had to babysit. Over the December break, the latest models crossed a line:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;I kept asking for more and just came out fine. And then I can&amp;rsquo;t remember the last time I corrected it. And then I just trusted the system more and more. And then I was vibe coding.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;He flagged it on the record, loudly:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;A lot of people experienced AI last year as a ChatGPT-adjacent thing. But you really had to look again, and you had to look as of December, because things have changed fundamentally — especially on this agentic, coherent workflow that really started to actually work.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If your mental model of these tools was set by ChatGPT, it is already a generation stale. The agentic workflow is a different product, and it now works.&lt;/p&gt;
&lt;h2 id="2-you-can-outsource-your-thinking-but-not-your-understanding"&gt;2. You can outsource your thinking, but not your understanding&lt;/h2&gt;
&lt;p&gt;The most quotable line of the interview:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;You can outsource your thinking, but you can&amp;rsquo;t outsource your understanding.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As agents do more of the thinking, the bottleneck moves into your head. You still have to know what is worth building and why, and you still have to direct the work.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;I&amp;rsquo;m still part of the system, and I still have to — somehow, information still has to make it into my brain. And I feel like I&amp;rsquo;m becoming a bottleneck of just even knowing what are we trying to build, why is it worth doing, how do I direct my agents.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Your value sits upstream of execution. The bottleneck of the next decade is less about compute than about how fast humans can deepen comprehension to keep directing systems that out-execute them. That is why Karpathy keeps building knowledge bases out of his own reading. He wants another projection of the same data, faster.&lt;/p&gt;
&lt;h2 id="3-verifiability-is-the-map-of-what-automates-next"&gt;3. Verifiability is the map of what automates next&lt;/h2&gt;
&lt;p&gt;Why are these models freakishly good at code and math, and yet stupid about whether you should walk 50 meters to a car wash? Because frontier labs train via reinforcement learning, and RL needs verifiable rewards. Verifiable domains attract environments and signal, so they get the steepest gains. Everything else stays jagged.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;How is it possible that state-of-the-art Opus 4.7 will simultaneously refactor a hundred-thousand-line code base or find zero-day vulnerabilities, and yet tells me to walk to this car wash? This is insane.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The GPT-3.5 to GPT-4 chess jump is the proof point. Capability tracks what the labs choose to feed in.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;We are slightly at the mercy of whatever the labs are doing, whatever they happen to put into the mix&amp;hellip; If you&amp;rsquo;re in the circuits that were part of the RL, you fly. And if you&amp;rsquo;re in the circuits that are out of the data distribution, you&amp;rsquo;re going to struggle.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Two things follow. If you are a founder and you can build a verifiable environment in your domain, even one the labs aren&amp;rsquo;t focused on, you can fine-tune a model that flies. That is real leverage. If you are a worker, the more useful question than &amp;ldquo;is my job safe?&amp;rdquo; is &amp;ldquo;is my job verifiable?&amp;rdquo; Karpathy thinks everything is automatable eventually. Verifiability mainly sets the order.&lt;/p&gt;
&lt;h2 id="4-software-30-prompting-is-the-new-programming"&gt;4. Software 3.0: prompting is the new programming&lt;/h2&gt;
&lt;p&gt;The frame that makes the rest of this make sense. Karpathy&amp;rsquo;s three eras:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Software 1.0:&lt;/strong&gt; humans write explicit code.&lt;br&gt;
&lt;strong&gt;Software 2.0:&lt;/strong&gt; humans curate datasets and train neural networks; the weights are the program.&lt;br&gt;
&lt;strong&gt;Software 3.0:&lt;/strong&gt; humans write prompts; the LLM is the interpreter, and the context window is the program.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Your programming now turns to prompting. And what&amp;rsquo;s in the context window is over the interpreter, that is the LLM, that is kind of like interpreting your context and performing computation in the digital information space.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;His sharpest example: installing OpenCode is no longer a shell script. It is a block of text you copy-paste to your agent, which reads your environment and figures the rest out.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;It&amp;rsquo;s just like, what is the piece of text to copy-paste to your agent? That&amp;rsquo;s the programming paradigm now.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The unit of programming used to be a function. Now it is closer to a paragraph.&lt;/p&gt;
&lt;h2 id="5-vibe-coding-raises-the-floor-agentic-engineering-raises-the-ceiling"&gt;5. Vibe coding raises the floor; agentic engineering raises the ceiling&lt;/h2&gt;
&lt;p&gt;If you build software for a living, this is the lesson with the most direct implications:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Vibe coding is about raising the floor for everyone in terms of what they can do in software&amp;hellip; But agentic engineering is about preserving the quality bar of what existed before in professional software. You&amp;rsquo;re still responsible for your software just as before, but can you go faster?&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Karpathy thinks the ceiling is very high:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;People used to talk about the 10x engineer previously. I think that this is magnified a lot more — 10x is not the speed up you gain. People who are very good at this peak a lot more than 10x.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The gap between mediocre and excellent users of these tools is widening. Worth taking seriously when you decide what to learn next.&lt;/p&gt;
&lt;h2 id="6-the-new-human-skill-is-taste-spec-and-oversight"&gt;6. The new human skill is taste, spec, and oversight&lt;/h2&gt;
&lt;p&gt;What humans should still do, in his telling, is design and judgment work. Holding the spec in your head. Setting the architecture. Making sure the agent is being asked for the right thing in the first place.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;You&amp;rsquo;re in charge of the taste, the engineering, the design, and that it makes sense, and that you&amp;rsquo;re asking for the right things&amp;hellip; You&amp;rsquo;re doing some of the design and development, and the engineers are doing the fill in the blanks.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The MenuGen anecdote is the kind of mistake only a human spec catches. The agent silently tried to associate Stripe and Google accounts by matching email addresses, with no persistent user ID. It worked until two emails diverged.&lt;/p&gt;
&lt;p&gt;He is not sure this division will hold forever:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;When you actually look at the code, sometimes I get a little bit of a heart attack, because it&amp;rsquo;s not super amazing code&amp;hellip; It&amp;rsquo;s very bloaty, and there&amp;rsquo;s a lot of copy-paste, and there&amp;rsquo;s awkward abstractions that are brittle and — like, it works, but it&amp;rsquo;s just really gross.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Nothing fundamental stops the labs from training for taste. They just haven&amp;rsquo;t yet. Until they do, the taste layer is still your responsibility.&lt;/p&gt;
&lt;h2 id="7-some-apps-shouldnt-exist-anymore"&gt;7. Some apps shouldn&amp;rsquo;t exist anymore&lt;/h2&gt;
&lt;p&gt;The MenuGen anecdote, again. Karpathy built an app: photo a restaurant menu, OCR it, generate images of each dish, render a new menu. Vercel deployment, the full stack.&lt;/p&gt;
&lt;p&gt;Then he saw the Software 3.0 version. Hand the photo to Gemini, say &amp;ldquo;use NanoBanana to overlay the dishes onto the menu,&amp;rdquo; and a single model call returns the same menu with images rendered into the pixels.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;All of my MenuGen is spurious. It&amp;rsquo;s working in the old paradigm. That app shouldn&amp;rsquo;t exist.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A lot of what we are building today is scaffolding around a capability the model could perform end-to-end. Before writing the next CRUD app, ask whether the model is the app.&lt;/p&gt;
&lt;h2 id="8-new-possibilities-matter-more-than-the-speed-ups"&gt;8. New possibilities matter more than the speed-ups&lt;/h2&gt;
&lt;p&gt;The flip side of &amp;ldquo;some apps shouldn&amp;rsquo;t exist&amp;rdquo; is that some products could not have existed before. Karpathy&amp;rsquo;s knowledge-base project is the example. Take a pile of documents, ask the LLM to recompile them into a wiki, surface the connections you would never have stitched together by hand.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;This is not even a program. This is not something that could exist before, because there was no code that would create a knowledge base based on a bunch of facts. But now you can just take these documents and basically recompile them in a different way&amp;hellip; I almost think that that&amp;rsquo;s more exciting.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you only ask what gets faster, you will miss the more interesting question, which is what becomes possible at all.&lt;/p&gt;
&lt;h2 id="9-jagged-intelligence-ghosts-not-animals"&gt;9. Jagged intelligence: ghosts, not animals&lt;/h2&gt;
&lt;p&gt;Karpathy&amp;rsquo;s metaphor: we are not building animals. Animal intelligence comes with intrinsic motivation, embodiment, drives shaped by evolution. What we have instead is more like a ghost. A statistical simulator shaped by pre-training, with RL bolted on.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;These things are not animal intelligences. Like, if you yell at them, they&amp;rsquo;re not going to work better. Or worse. Or it doesn&amp;rsquo;t have any impact. And it&amp;rsquo;s all just kind of these statistical simulation circuits where the substrate is pre-training. So, statistics. And then there&amp;rsquo;s RL bolting on top.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The practical takeaway is to stop reasoning about LLMs by analogy to humans. Be suspicious of where the model seems confident, probe the edges, and figure out which circuits your task is actually landing in.&lt;/p&gt;
&lt;h2 id="10-build-agent-native-infrastructure"&gt;10. Build agent-native infrastructure&lt;/h2&gt;
&lt;p&gt;For infra builders, Karpathy&amp;rsquo;s pet peeve is also the opportunity:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Why are people still telling me what to do? Like, I don&amp;rsquo;t want to do anything. What is the thing I should copy-paste to my agent?&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Rebuild the developer stack so the primary consumer of docs, configs, APIs, and deployment flows is an agent rather than a human. Data structures should be legible to LLMs by default, and sensors and actuators over the world should sit behind agent-callable interfaces.&lt;/p&gt;
&lt;p&gt;His test: can you say &amp;ldquo;build and deploy MenuGen&amp;rdquo; and never touch a settings panel? When the answer is yes, the infrastructure has caught up.&lt;/p&gt;
&lt;h2 id="11-hire-for-big-projects-not-puzzles"&gt;11. Hire for big projects, not puzzles&lt;/h2&gt;
&lt;p&gt;A direct shot at hiring managers. Most companies have not refactored their interview loops for the agentic era.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Hiring has to look like, give me a really big project and see someone implement that big project. Like, let&amp;rsquo;s write, say, a Twitter clone for agents, and then make it really good, make it really secure, and then have some agents simulate some activity on this Twitter. And then I&amp;rsquo;m going to use 10 Codex 5.4-X-high to try to break your website.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Whiteboard puzzles measure the wrong thing. If your interview loop has not changed since 2022, you are selecting for the previous era.&lt;/p&gt;
&lt;h2 id="12-imagine-the-weird-endpoint"&gt;12. Imagine the weird endpoint&lt;/h2&gt;
&lt;p&gt;The closing speculation is genuinely strange:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;In the early days of computing, people were a little bit confused as to whether computers would look like calculators or computers would look like neural nets. And in the &amp;rsquo;50s and &amp;rsquo;60s, it was not really obvious which way it would go&amp;hellip; You could imagine that a lot of this will flip and that the neural net becomes kind of the host process, and the CPUs become kind of the coprocessor.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;UIs diffusion-rendered moment by moment from raw video and audio. No apps in between.&lt;/p&gt;
&lt;p&gt;You do not have to buy this exact picture. The point is simply that the linear extrapolation, the same software but smarter, is almost certainly the wrong frame for where this ends up.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Based on Andrej Karpathy&amp;rsquo;s &lt;a href="https://www.youtube.com/watch?v=96jN2OCOfLs"&gt;interview with Sequoia&lt;/a&gt; at AI Ascent&lt;/em&gt;&lt;/p&gt;</description></item><item><title>F3ED Can't Call an Ace: Fixing a NeurIPS 2024 Tennis Model</title><link>https://philippdubach.com/posts/f3ed-cant-call-an-ace-fixing-a-neurips-2024-tennis-model/</link><pubDate>Wed, 29 Apr 2026 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/f3ed-cant-call-an-ace-fixing-a-neurips-2024-tennis-model/</guid><description>&lt;p&gt;I built a tennis broadcast pipeline this spring and ended up running F3ED, the NeurIPS 2024 shot detector, on a couple of ATP Challenger matches. F3ED is a good model. It also kept labeling clear aces as &amp;ldquo;unforced errors&amp;rdquo;, which is what this post is about. Code: &lt;a href="https://github.com/philippdubach/tennis-vision"&gt;github.com/philippdubach/tennis-vision&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;F3ED (&lt;a href="https://openreview.net/forum?id=Y23LZxN9eU"&gt;NeurIPS 2024&lt;/a&gt;) detects shots well. The catch is the outcome head, which has 4 classes: &lt;code&gt;in&lt;/code&gt;, &lt;code&gt;winner&lt;/code&gt;, &lt;code&gt;forced-err&lt;/code&gt;, &lt;code&gt;unforced-err&lt;/code&gt;. There&amp;rsquo;s no class for &lt;code&gt;ace&lt;/code&gt;, &lt;code&gt;double_fault&lt;/code&gt;, or &lt;code&gt;first_serve_fault&lt;/code&gt;. Those events aren&amp;rsquo;t shot properties; they&amp;rsquo;re score-grammar, and they need state from outside the shot itself.&lt;/p&gt;
&lt;p&gt;I audited 11 single-shot serve rallies F3ED labeled &lt;code&gt;unforced-err&lt;/code&gt;. 7 are first-serve-faults. 1 is an ace. Only 3 are genuine unforced-errors. 73% mislabeled by tennis&amp;rsquo;s own definition.&lt;/p&gt;
&lt;p&gt;The fix is a 30-line reconciler that reads the scoreboard. OCR isn&amp;rsquo;t novel here. What I haven&amp;rsquo;t seen anyone do is plug it back into runtime label correction, which is what makes the difference. N=44 rallies across two matches; this is a hypothesis, not a finding. The structural argument doesn&amp;rsquo;t depend on N.&lt;/p&gt;
&lt;h2 id="the-current-pipeline"&gt;The current pipeline&lt;/h2&gt;
&lt;p&gt;Two phases, with a serializable artifact between them:&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-00_architecture-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/00_architecture.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/00_architecture.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/00_architecture.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/00_architecture.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/00_architecture.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/00_architecture.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/00_architecture.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/00_architecture.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/00_architecture.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/00_architecture.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/00_architecture.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/00_architecture.png"
alt="Pipeline architecture diagram showing Phase 1 GPU detection, the upstream.npz boundary, and Phase 2 local CPU stages with the score-delta reconciler highlighted as the key contribution"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-00_architecture-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/00_architecture.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Pipeline architecture diagram showing Phase 1 GPU detection, the upstream.npz boundary, and Phase 2 local CPU stages with the score-delta reconciler highlighted as the key contribution" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;&lt;code&gt;upstream.npz&lt;/code&gt; is a 5-field dataclass (&lt;code&gt;ball_track&lt;/code&gt;, &lt;code&gt;homography_matrices&lt;/code&gt;, &lt;code&gt;kps_court&lt;/code&gt;, &lt;code&gt;persons_top/bottom&lt;/code&gt;, &lt;code&gt;bounces&lt;/code&gt;). It&amp;rsquo;s the contract between the GPU-bound detection layer and everything else. You re-run Phase 2 in seconds and don&amp;rsquo;t pay the GPU bill again until Phase 1 inputs change. This was a boring early decision that quietly carried the project. Every iteration runs in ~10 minutes instead of needing a fresh Colab session.&lt;/p&gt;
&lt;p&gt;The score-delta reconciler sits at the end of Phase 2. It sees F3ED&amp;rsquo;s per-shot taxonomy and the OCR-derived score states. When they disagree, it overrides the outcome label.&lt;/p&gt;
&lt;p&gt;Quality on TenniSet V006 (28 ground-truth points across 20 minutes, with ±12-frame tolerance):&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-table_01_benchmarks-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/table_01_benchmarks.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/table_01_benchmarks.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/table_01_benchmarks.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/table_01_benchmarks.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table_01_benchmarks.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/table_01_benchmarks.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/table_01_benchmarks.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/table_01_benchmarks.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table_01_benchmarks.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/table_01_benchmarks.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/table_01_benchmarks.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table_01_benchmarks.png"
alt="Detector benchmark table on TenniSet V006 showing F3ED pretrained achieves the highest F1 of 0.54 with 109 TP, 48 FP, 55 FN, 0.53 recall and 0.69 precision, beating E2E-Spot and rule-based baselines that both score 0.50 F1"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-table_01_benchmarks-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/table_01_benchmarks.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Detector benchmark table on TenniSet V006 showing F3ED pretrained achieves the highest F1 of 0.54 with 109 TP, 48 FP, 55 FN, 0.53 recall and 0.69 precision, beating E2E-Spot and rule-based baselines that both score 0.50 F1" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;F3ED has the highest F1, with fewer false positives at comparable recall. I&amp;rsquo;m not arguing it&amp;rsquo;s broken. I&amp;rsquo;m arguing about a specific thing it can&amp;rsquo;t do alone.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Note: numbers above are from the V006 baseline run on commit &lt;code&gt;0babb71&lt;/code&gt; (2026-04-23). Bounce-dedup and reconciler work since then shift F1 marginally upward; full re-eval pending a Phase-1 v8x rerun on V006.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="the-audit"&gt;The audit&lt;/h2&gt;
&lt;p&gt;Tennis scoring is a finite-state machine. A point ends in exactly one of:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ace&lt;/code&gt;: server&amp;rsquo;s first or second serve, receiver doesn&amp;rsquo;t return&lt;br&gt;
&lt;code&gt;double_fault&lt;/code&gt;: both serves miss&lt;br&gt;
&lt;code&gt;first_serve_fault&lt;/code&gt;: first serve misses; second serve still to come &lt;br&gt;
multi-shot rally → &lt;code&gt;winner&lt;/code&gt; / &lt;code&gt;forced-err&lt;/code&gt; / &lt;code&gt;unforced-err&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;F3ED can only emit the bottom row. The first three depend on what happens between shots, or on what doesn&amp;rsquo;t happen at all, and the model doesn&amp;rsquo;t see between-shot stuff. It also has no class to put the answer in if it did: &lt;code&gt;ace&lt;/code&gt;, &lt;code&gt;double_fault&lt;/code&gt;, and &lt;code&gt;first_serve_fault&lt;/code&gt; are not in F3ED&amp;rsquo;s published label set. The closest available emission for any of them is &lt;code&gt;serve&lt;/code&gt; + &lt;code&gt;unforced-err&lt;/code&gt;. The model can&amp;rsquo;t learn to distinguish them even if the training data did, because there&amp;rsquo;s nowhere to put the answer.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s what tipped me off. set1 R4, t=107s:&lt;/p&gt;
&lt;div class="code-block"&gt;&lt;button type="button" class="code-copy" aria-label="Copy code to clipboard"&gt;
&lt;span class="code-copy-text"&gt;Copy&lt;/span&gt;
&lt;/button&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;F3ED raw_elements: [&amp;#39;T&amp;#39;, &amp;#39;ad&amp;#39;, &amp;#39;near&amp;#39;, &amp;#39;serve&amp;#39;, &amp;#39;unforced-err&amp;#39;]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Score before rally: Poljicak 0 Dodig 0 (game start)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Score after rally: Poljicak 15 Dodig 0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Server scored, receiver didn&amp;rsquo;t move, F3ED labeled the serve &amp;ldquo;unforced error&amp;rdquo;. You can&amp;rsquo;t hit an unforced error and win the point. It was an ace, and F3ED doesn&amp;rsquo;t have an &amp;ldquo;ace&amp;rdquo; button to press, so it picked the closest available label.&lt;/p&gt;
&lt;p&gt;The reconciler is short. For each single-shot serve rally, read the scoreboard before and after:&lt;/p&gt;
&lt;div class="code-block" data-lang="python"&gt;&lt;span class="code-lang" aria-hidden="true"&gt;python&lt;/span&gt;&lt;button type="button" class="code-copy" aria-label="Copy code to clipboard"&gt;
&lt;span class="code-copy-text"&gt;Copy&lt;/span&gt;
&lt;/button&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Verbatim from src/tennis_vision/scoreboard/reconcile.py&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;_POINT_RANK&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;0&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;15&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;30&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;40&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;AD&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;_delta_points_won&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ScoreState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ScoreState&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;(top_pts_won, bot_pts_won) between two states. A game-counter increment
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; counts as +1 (the lost-side rolls back to 0); same-game incremental points
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt; are tracked via the points-rank delta.&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;top&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tg&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;bot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bg&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tg&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tg&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bg&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;top&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_POINT_RANK&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;_POINT_RANK&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;bot&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_POINT_RANK&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;_POINT_RANK&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;top&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bot&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;_classify_single_shot_serve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rally&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;tuple&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;top_d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bot_d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;_delta_points_won&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;after&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;server_d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;top_d&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;rally&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;top&amp;#39;&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;bot_d&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;receiver_d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;bot_d&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;rally&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;top&amp;#39;&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;top_d&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;receiver&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;bottom&amp;#39;&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;rally&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;top&amp;#39;&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;top&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;server_d&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;receiver_d&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;first_serve_fault&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;unknown&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;ocr_score_delta_first_serve_fault&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;server_d&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;receiver_d&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;ace&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rally&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;ocr_score_delta_ace&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;receiver_d&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;server_d&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;double_fault&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;receiver&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;ocr_score_delta_double_fault&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;unknown&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rally&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;winner&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rally&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;method&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;+ocr_inconclusive&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;That&amp;rsquo;s the whole reconciler: 23 lines, microseconds per rally. The OCR sampling pass that produces the &lt;code&gt;before&lt;/code&gt; / &lt;code&gt;after&lt;/code&gt; states runs once during Phase 2 (~1 Hz over the broadcast); the reconciler itself is a constant-time lookup against the resulting state timeline.&lt;/p&gt;
&lt;p&gt;Running it across set1 + match2 (44 rallies, 11 single-shot serve rallies) shows the structure F3ED missed:&lt;/p&gt;
&lt;figure class="post-figure" style="width: 65%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-table_02_outcomes-png-3" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/table_02_outcomes.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/table_02_outcomes.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/table_02_outcomes.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/table_02_outcomes.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table_02_outcomes.png 1200w"
sizes="65vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/table_02_outcomes.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/table_02_outcomes.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/table_02_outcomes.png 1440w"
sizes="65vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table_02_outcomes.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/table_02_outcomes.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/table_02_outcomes.png 2000w"
sizes="65vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table_02_outcomes.png"
alt="Confusion table showing how F3ED labels map to OCR-grounded reality: of eleven unforced-err labels, seven are actually first-serve-faults, one is an ace, and only three are genuine unforced errors, while winner and in labels are correct"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-table_02_outcomes-png-3" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/table_02_outcomes.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Confusion table showing how F3ED labels map to OCR-grounded reality: of eleven unforced-err labels, seven are actually first-serve-faults, one is an ace, and only three are genuine unforced errors, while winner and in labels are correct" decoding="async"&gt;
&lt;/dialog&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-01_outcome_transitions-png-4" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/01_outcome_transitions.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/01_outcome_transitions.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/01_outcome_transitions.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/01_outcome_transitions.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/01_outcome_transitions.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/01_outcome_transitions.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/01_outcome_transitions.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/01_outcome_transitions.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/01_outcome_transitions.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/01_outcome_transitions.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/01_outcome_transitions.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/01_outcome_transitions.png"
alt="Sankey-style chart showing F3ED outcome labels transitioning to OCR-grounded ground truth, with seven of eleven unforced errors reclassified as first-serve faults, one as an ace, and only three remaining as genuine unforced errors"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-01_outcome_transitions-png-4" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/01_outcome_transitions.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Sankey-style chart showing F3ED outcome labels transitioning to OCR-grounded ground truth, with seven of eleven unforced errors reclassified as first-serve faults, one as an ace, and only three remaining as genuine unforced errors" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;8 of 11 unforced-err serves (73%) are something else by tennis&amp;rsquo;s actual rules. All 8 got the right label after reconciliation. Whether 73% holds up on a larger sample is a real question; the audit framework would answer it cheaply on more clips. The remaining error budget is OCR layout failures (next section) and ambiguous score deltas in multi-shot rallies, where neither F3ED nor OCR alone tells &lt;code&gt;winner&lt;/code&gt; from &lt;code&gt;forced-err&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The point here isn&amp;rsquo;t that F3ED is wrong. The model emits the labels it has classes for, which is what models do. The point is that shot detection and outcome classification look like the same problem and aren&amp;rsquo;t, and on broadcast tennis the cheapest outcome ground truth is text the broadcaster has already burned into the corner of every frame.&lt;/p&gt;
&lt;h2 id="does-the-ocr-actually-work"&gt;Does the OCR actually work?&lt;/h2&gt;
&lt;p&gt;Worth asking. The whole reconciler depends on the scoreboard reader being right. Honest answer: it depends heavily on whether the layout config is tuned. When it is, OCR is reliable. When it isn&amp;rsquo;t, individual fields collapse.&lt;/p&gt;
&lt;p&gt;The pipeline is EasyOCR cropping a per-layout ROI (&lt;code&gt;split_open_1080p&lt;/code&gt;, &lt;code&gt;split_open_720p&lt;/code&gt;, &lt;code&gt;bloomfield_720p&lt;/code&gt;), then a tennis-grammar decoder that rejects illegal transitions (&lt;code&gt;40-30&lt;/code&gt; → &lt;code&gt;0-0&lt;/code&gt; without a game break, &lt;code&gt;AD-15&lt;/code&gt;, and so on) and majority-votes within a sample window.&lt;/p&gt;
&lt;p&gt;Field-parse rates on the two clips in this audit, sampled at ~1 Hz:&lt;/p&gt;
&lt;figure class="post-figure" style="width: 90%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-table_03_ocr_parse_rates-png-6" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/table_03_ocr_parse_rates.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/table_03_ocr_parse_rates.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/table_03_ocr_parse_rates.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/table_03_ocr_parse_rates.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table_03_ocr_parse_rates.png 1200w"
sizes="90vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/table_03_ocr_parse_rates.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/table_03_ocr_parse_rates.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/table_03_ocr_parse_rates.png 1440w"
sizes="90vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table_03_ocr_parse_rates.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/table_03_ocr_parse_rates.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/table_03_ocr_parse_rates.png 2000w"
sizes="90vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table_03_ocr_parse_rates.png"
alt="OCR field-parse rates table showing set1 with split_open_1080p layout achieves near-perfect parsing at 100 percent for games and 98.7 percent for points, while match2 with mistuned split_open_720p layout drops to 45.6 percent on bot_games"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-table_03_ocr_parse_rates-png-6" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/table_03_ocr_parse_rates.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="OCR field-parse rates table showing set1 with split_open_1080p layout achieves near-perfect parsing at 100 percent for games and 98.7 percent for points, while match2 with mistuned split_open_720p layout drops to 45.6 percent on bot_games" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;set1 is essentially perfect. match2&amp;rsquo;s &lt;code&gt;bot_games&lt;/code&gt; parse drops below half because the ROI for &lt;code&gt;split_open_720p&lt;/code&gt; is mistuned and crops too tight on the digit. Annoying, but the grammar decoder rescues enough frames to emit 28 valid score states across 1002 samples, which is plenty. The reconciler degrades gracefully: rallies without a clean before/after pair fall back to F3ED&amp;rsquo;s raw outcome rather than crashing.&lt;/p&gt;
&lt;p&gt;The fix for match2 is layout cleanup, not architecture. None of these components are novel. &lt;a href="https://arxiv.org/abs/2603.13397"&gt;TennisExpert&lt;/a&gt; (Liu et al. 2026, the paper that kicked off this whole project for me) and the TenniSet eval framework (Faulkner &amp;amp; Dick, DICTA 2017) both use OCR + grammar at the labeling stage. What I haven&amp;rsquo;t seen anyone do is plug the same signal back into runtime label correction.&lt;/p&gt;
&lt;h2 id="putting-it-in-the-render"&gt;Putting it in the render&lt;/h2&gt;
&lt;p&gt;After reconciling, the corrected outcome flows back onto the last shot of the rally and surfaces in the rolling event-timeline panel. Here&amp;rsquo;s a single point rendered end-to-end with all overlays live:&lt;/p&gt;
&lt;div class="video-loop" style="width: 80%; margin: 1.5rem auto; padding: 0; aspect-ratio: ZgotmplZ;"&gt;
&lt;video autoplay muted loop playsinline preload="metadata" disablepictureinpicture controlslist="nodownload nofullscreen noremoteplayback"
aria-label="Looping tennis broadcast clip showing the rendered overlay with rally panel, scoreboard echo, per-player stats, and direction labels updating live during a single point"
style="width: 100%; height: 100%; display: block; border-radius: 4px; object-fit: cover; background: #000;"&gt;
&lt;source src="https://static.philippdubach.com/tennis_vision-example-point-mobile.mp4" type="video/mp4" media="(max-width: 768px)"&gt;
&lt;source src="https://static.philippdubach.com/tennis_vision-example-point.mp4" type="video/mp4"&gt;
&lt;/video&gt;
&lt;/div&gt;
&lt;p&gt;Same set1 R4 ace, mid-frame: Top-left RALLY panel reads &lt;code&gt;0.0s P2 Serve T ACE&lt;/code&gt;. The &lt;code&gt;ACE&lt;/code&gt; suffix replaced F3ED&amp;rsquo;s &lt;code&gt;UE&lt;/code&gt;. The scoreboard echo (bottom-left) mirrors what triggered the correction (Poljicak just picked up 15), and the per-player stats panel (bottom-right) ticks his ace counter by one. The model&amp;rsquo;s wrong answer gets quietly corrected because a different signal contradicted it. That&amp;rsquo;s the whole post in one frame.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-05_set1_ace_corrected-png-8" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/05_set1_ace_corrected.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/05_set1_ace_corrected.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/05_set1_ace_corrected.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/05_set1_ace_corrected.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/05_set1_ace_corrected.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/05_set1_ace_corrected.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/05_set1_ace_corrected.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/05_set1_ace_corrected.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/05_set1_ace_corrected.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/05_set1_ace_corrected.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/05_set1_ace_corrected.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/05_set1_ace_corrected.png"
alt="Rendered tennis broadcast frame showing the corrected ace label in the rally panel reading 0.0s P2 Serve T ACE, with the scoreboard echo confirming Poljicak picked up 15 and the per-player stats panel ticking the ace counter by one"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-05_set1_ace_corrected-png-8" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/05_set1_ace_corrected.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Rendered tennis broadcast frame showing the corrected ace label in the rally panel reading 0.0s P2 Serve T ACE, with the scoreboard echo confirming Poljicak picked up 15 and the per-player stats panel ticking the ace counter by one" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;The same panel surfaces F3ED&amp;rsquo;s other labels in real time: direction (&lt;code&gt;T&lt;/code&gt; for down-the-T serves, &lt;code&gt;CC&lt;/code&gt;/&lt;code&gt;DL&lt;/code&gt;/&lt;code&gt;DM&lt;/code&gt;/&lt;code&gt;II&lt;/code&gt;/&lt;code&gt;IO&lt;/code&gt; for groundstrokes) and shot type when not a basic groundstroke (&lt;code&gt;Slice&lt;/code&gt;, &lt;code&gt;Volley&lt;/code&gt;, &lt;code&gt;Drop&lt;/code&gt;, &lt;code&gt;Lob&lt;/code&gt;).&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-06_match2_rally_panel-png-9" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/06_match2_rally_panel.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/06_match2_rally_panel.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/06_match2_rally_panel.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/06_match2_rally_panel.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/06_match2_rally_panel.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/06_match2_rally_panel.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/06_match2_rally_panel.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/06_match2_rally_panel.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/06_match2_rally_panel.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/06_match2_rally_panel.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/06_match2_rally_panel.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/06_match2_rally_panel.png"
alt="match2 rally panel rendering F3ED&amp;#39;s 29-class taxonomy in real time, showing direction codes for down-the-line, cross-court, and inside-out groundstrokes alongside shot-type tags like Slice, Volley, Drop, and Lob"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-06_match2_rally_panel-png-9" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/06_match2_rally_panel.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="match2 rally panel rendering F3ED&amp;#39;s 29-class taxonomy in real time, showing direction codes for down-the-line, cross-court, and inside-out groundstrokes alongside shot-type tags like Slice, Volley, Drop, and Lob" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;That panel is the F3ED 29-class taxonomy made human-readable, in real time. The reconciler doesn&amp;rsquo;t touch direction or technique. Those are pure shot properties, exactly the regime F3ED is designed for. It only fires on the score-grammar events the model can&amp;rsquo;t see.&lt;/p&gt;
&lt;p&gt;A clean direction histogram comes for free as a side effect. 97 groundstrokes from match2:&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-04_direction_distribution-png-10" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/04_direction_distribution.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/04_direction_distribution.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/04_direction_distribution.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/04_direction_distribution.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/04_direction_distribution.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/04_direction_distribution.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/04_direction_distribution.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/04_direction_distribution.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/04_direction_distribution.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/04_direction_distribution.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/04_direction_distribution.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/04_direction_distribution.png"
alt="Histogram of groundstroke directions from 97 shots in match2 showing 36 percent down the middle, 31 percent cross-court, 17 percent inside-out, 12 percent down-the-line, and 3 percent inside-in"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-04_direction_distribution-png-10" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/04_direction_distribution.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Histogram of groundstroke directions from 97 shots in match2 showing 36 percent down the middle, 31 percent cross-court, 17 percent inside-out, 12 percent down-the-line, and 3 percent inside-in" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;36% down the middle, 31% cross-court, 17% inside-out, 12% down-the-line, 3% inside-in. The kind of stat broadcasters quote without showing where it came from. Here it&amp;rsquo;s a one-liner over &lt;code&gt;shots.json&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="things-that-didnt-pay-off"&gt;Things that didn&amp;rsquo;t pay off&lt;/h2&gt;
&lt;p&gt;Two ideas I tried that I expected to be wins. Neither was.&lt;/p&gt;
&lt;h3 id="yolov8x-doesnt-help-at-720p"&gt;YOLOv8x doesn&amp;rsquo;t help at 720p&lt;/h3&gt;
&lt;p&gt;Phase-1 person detector was YOLOv8m. Swapping in v8x looked like a free improvement: COCO AP@small bumps about 5 pp, and the camera-far (&amp;ldquo;top&amp;rdquo;) player on broadcast tennis is the smallest object in the frame, so that&amp;rsquo;s exactly where the gain should land.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-02_pose_coverage_by_resolution-png-11" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/02_pose_coverage_by_resolution.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/02_pose_coverage_by_resolution.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/02_pose_coverage_by_resolution.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/02_pose_coverage_by_resolution.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/02_pose_coverage_by_resolution.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/02_pose_coverage_by_resolution.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/02_pose_coverage_by_resolution.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/02_pose_coverage_by_resolution.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/02_pose_coverage_by_resolution.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/02_pose_coverage_by_resolution.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/02_pose_coverage_by_resolution.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/02_pose_coverage_by_resolution.png"
alt="Bar chart comparing top-player pose coverage with YOLOv8m versus YOLOv8x at two resolutions, showing 1080p coverage rising from 70.0 percent to 97.6 percent while 720p coverage stays flat at roughly 70 percent"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-02_pose_coverage_by_resolution-png-11" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/02_pose_coverage_by_resolution.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Bar chart comparing top-player pose coverage with YOLOv8m versus YOLOv8x at two resolutions, showing 1080p coverage rising from 70.0 percent to 97.6 percent while 720p coverage stays flat at roughly 70 percent" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;set1 (1080p): top-player pose coverage 70.0% → 97.6%. match2 (720p): 70.3% → 68.6%, within noise. Two clips isn&amp;rsquo;t a study, but the mechanism is plausible: at 1080p the camera-far player is ~60-100 px tall, the regime where v8x&amp;rsquo;s AP@small advantage fires. At 720p the same player is ~30-50 px, below the COCO scale buckets where -x outperforms -m. The detector can&amp;rsquo;t recover what isn&amp;rsquo;t in the input. If you&amp;rsquo;re scraping ATP Challenger feeds, fight for 1080p sources. Everything downstream compounds on what the detector gives you.&lt;/p&gt;
&lt;h3 id="catboost-over-fires-bounces"&gt;CatBoost over-fires bounces&lt;/h3&gt;
&lt;p&gt;The bounce detector emitted 378 bounces on a 20-min match2 clip with 84 shots, 4.5× the realistic ratio. Most of the noise is the detector lighting up on the same physical bounce across consecutive frames, plus inter-rally footage where the ball is in a player&amp;rsquo;s hand or in a replay close-up.&lt;/p&gt;
&lt;p&gt;Two cheap filters cut 21-27% of false bounces:&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-03_bounce_filter_waterfall-png-12" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/03_bounce_filter_waterfall.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/03_bounce_filter_waterfall.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/03_bounce_filter_waterfall.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/03_bounce_filter_waterfall.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/03_bounce_filter_waterfall.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/03_bounce_filter_waterfall.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/03_bounce_filter_waterfall.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/03_bounce_filter_waterfall.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/03_bounce_filter_waterfall.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/03_bounce_filter_waterfall.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/03_bounce_filter_waterfall.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/03_bounce_filter_waterfall.png"
alt="Waterfall chart showing bounce-count reduction from 378 raw CatBoost bounces through a 400 ms temporal dedup that drops 9 to 12 percent, then a court-locality filter that drops a further 12 to 15 percent"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-03_bounce_filter_waterfall-png-12" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/03_bounce_filter_waterfall.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Waterfall chart showing bounce-count reduction from 378 raw CatBoost bounces through a 400 ms temporal dedup that drops 9 to 12 percent, then a court-locality filter that drops a further 12 to 15 percent" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;The first is a temporal dedup with ~400 ms minimum separation between bounces, fps-aware. It collapses CatBoost firing on three consecutive frames for one physical contact and drops 9-12%.&lt;/p&gt;
&lt;p&gt;The second is a court-locality filter: project the ball pixel through the homography to canvas coordinates, drop if it falls outside the court polygon plus a 200 px buffer. This kills inter-rally noise where the ball is being held or replayed, dropping another 12-15%.&lt;/p&gt;
&lt;p&gt;Real bounces don&amp;rsquo;t fire 200 ms apart and don&amp;rsquo;t land 3 m past the doubles alley. Neither filter is novel; both are roughly ten lines of code. If you&amp;rsquo;re using a CatBoost-style bounce detector you probably want both anyway.&lt;/p&gt;
&lt;h2 id="whats-open"&gt;What&amp;rsquo;s open&lt;/h2&gt;
&lt;p&gt;44 rallies isn&amp;rsquo;t enough to nail the percentage, just to expose the structure. Running the audit across 10+ matches is the obvious next step. It would also surface match-to-match variance in F3ED&amp;rsquo;s failure modes. Does it mislabel aces more often on hard courts than clay? I have no idea, and I&amp;rsquo;d like to know.&lt;/p&gt;
&lt;p&gt;The reconciler currently only handles single-shot serve rallies. When both players hit clean balls and the point ends, the score delta is the same whether the winner came from a &lt;code&gt;winner&lt;/code&gt; or a &lt;code&gt;forced-err&lt;/code&gt;. Neither F3ED nor OCR alone disambiguates. A trajectory-aware classifier on the last two shots would close that gap. Haven&amp;rsquo;t tried it.&lt;/p&gt;
&lt;p&gt;The longer-term move is closed-loop F3ED retraining: use the OCR-corrected labels as supervision for a small classifier head whose input is (F3ED 4-class outcome, OCR delta, single-shot flag) and whose output is the extended set {&lt;code&gt;in&lt;/code&gt;, &lt;code&gt;winner&lt;/code&gt;, &lt;code&gt;forced-err&lt;/code&gt;, &lt;code&gt;unforced-err&lt;/code&gt;, &lt;code&gt;ace&lt;/code&gt;, &lt;code&gt;double_fault&lt;/code&gt;, &lt;code&gt;first_serve_fault&lt;/code&gt;, &lt;code&gt;unreturnable&lt;/code&gt;}. About 5 minutes of training data per match. 10+ matches gets a usable head. The interesting move there is putting the OCR signal into training rather than just inference.&lt;/p&gt;</description></item><item><title>Inside PRAGMA: Revolut's Foundation Model for Banking</title><link>https://philippdubach.com/posts/inside-pragma-revoluts-foundation-model-for-banking/</link><pubDate>Sun, 26 Apr 2026 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/inside-pragma-revoluts-foundation-model-for-banking/</guid><description>&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-revolut-cover-jpg-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/revolut-cover.jpg 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/revolut-cover.jpg 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/revolut-cover.jpg 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/revolut-cover.jpg 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/revolut-cover.jpg 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/revolut-cover.jpg 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/revolut-cover.jpg 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/revolut-cover.jpg 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/revolut-cover.jpg 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/revolut-cover.jpg 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/revolut-cover.jpg 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/revolut-cover.jpg"
alt="Editorial cover illustration for an analysis of Revolut&amp;#39;s PRAGMA foundation model for banking, contrasting a small consumer banking app with the vast underlying transformer architecture"
class=""
width="1200"
fetchpriority="high"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-revolut-cover-jpg-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/revolut-cover.jpg"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Editorial cover illustration for an analysis of Revolut&amp;#39;s PRAGMA foundation model for banking, contrasting a small consumer banking app with the vast underlying transformer architecture" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;This month, Revolut Research and NVIDIA published &lt;a href="https://arxiv.org/abs/2604.08649"&gt;PRAGMA&lt;/a&gt;: an encoder-only transformer trained on 26 million user histories spanning 24 billion events and 207 billion tokens across 111 countries. To my knowledge it is the largest encoder backbone for consumer banking event data anyone has put on arXiv. Nine months earlier, Nubank had published &lt;a href="https://arxiv.org/abs/2507.23267"&gt;nuFormer&lt;/a&gt;, a similar premise with the opposite architecture. Can you train a transformer on raw transaction ledgers and replace the gradient-boosted-tree models running production credit, fraud, and recommendation pipelines.&lt;/p&gt;
&lt;p&gt;Banking has spent the last decade lagging the rest of tech on representation learning. Production models still run on hand-crafted tabular features. Every team working on this knows it&amp;rsquo;s is suboptimal. Almost no team has the data, the GPUs, or the political budget to fix it. PRAGMA is what a banking foundation model looks like at the high end of the market.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-fig1-headline-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/fig1-headline.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/fig1-headline.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/fig1-headline.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/fig1-headline.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/fig1-headline.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/fig1-headline.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/fig1-headline.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/fig1-headline.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/fig1-headline.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/fig1-headline.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/fig1-headline.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/fig1-headline.png"
alt="Figure 1 from the PRAGMA paper: relative performance of three PRAGMA sizes (10M, 100M, 1B parameters) against task-specific baselines across six banking tasks including credit scoring, fraud detection, and product recommendation"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-fig1-headline-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/fig1-headline.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Figure 1 from the PRAGMA paper: relative performance of three PRAGMA sizes (10M, 100M, 1B parameters) against task-specific baselines across six banking tasks including credit scoring, fraud detection, and product recommendation" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;The chart above is from the PRAGMA paper and it reads like a marketing slide. PR-AUC up &lt;strong&gt;130.2%&lt;/strong&gt; on credit scoring. AUUC up &lt;strong&gt;163.7%&lt;/strong&gt; on a communication uplift task. mAP up &lt;strong&gt;40.5%&lt;/strong&gt; on product recommendation. These are relative numbers against task-specific baselines and the absolute scores are commercially redacted, so calibrate accordingly. But Revolut publishing them under their own name, with author affiliations, is the meaningful signal here. Internal foundation models have moved from trade secret to competitive disclosure.&lt;/p&gt;
&lt;h2 id="what-revolut-built"&gt;What Revolut built&lt;/h2&gt;
&lt;p&gt;PRAGMA is a BERT-style encoder, not a GPT. The choice matters. Revolut&amp;rsquo;s downstream targets are discriminative (default within 12 months, fraud, churn, product adoption), which is exactly what bidirectional masked modelling is good at. The model family scales from 10M to 100M to 1B parameters across three encoder branches: a profile-state encoder for static attributes, a per-event encoder, and a history encoder that fuses them.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-fig4-architecture-png-2" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/fig4-architecture.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/fig4-architecture.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/fig4-architecture.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/fig4-architecture.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/fig4-architecture.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/fig4-architecture.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/fig4-architecture.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/fig4-architecture.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/fig4-architecture.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/fig4-architecture.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/fig4-architecture.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/fig4-architecture.png"
alt="PRAGMA backbone architecture: two-branch design with separate profile-state encoder and per-event encoder feeding a shared history encoder, showing how static user attributes and event sequences are fused into one representation"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-fig4-architecture-png-2" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/fig4-architecture.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="PRAGMA backbone architecture: two-branch design with separate profile-state encoder and per-event encoder feeding a shared history encoder, showing how static user attributes and event sequences are fused into one representation" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;The architectural decision that strikes me as most important is the input representation. Naive text serialization of a transaction record into JSON blows up sequence length: every key name, every delimiter, every digit becomes multiple BPE subword tokens. Worse, splitting &amp;ldquo;14.99&amp;rdquo; into &amp;ldquo;14&amp;rdquo; &amp;ldquo;.&amp;rdquo; &amp;ldquo;99&amp;rdquo; destroys the magnitude information that any credit model needs. Revolut&amp;rsquo;s answer is to tokenise each field as a triple of semantic key, typed value, and temporal coordinate. Numerical values map to learned percentile buckets. Categorical values map to single tokens. Text gets BPE. Timestamps get encoded twice, once as compressed log-seconds since the previous event and once as fixed-period sinusoids over hour-of-day, day-of-week, and day-of-month.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-fig2-timeline-png-3" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/fig2-timeline.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/fig2-timeline.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/fig2-timeline.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/fig2-timeline.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/fig2-timeline.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/fig2-timeline.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/fig2-timeline.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/fig2-timeline.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/fig2-timeline.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/fig2-timeline.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/fig2-timeline.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/fig2-timeline.png"
alt="A PRAGMA user history as a stream of structured banking events with timestamps and key-value attributes, around 60 keys and 28,000 value tokens per user, leading up to an evaluation point where the model predicts a downstream target"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-fig2-timeline-png-3" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/fig2-timeline.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="A PRAGMA user history as a stream of structured banking events with timestamps and key-value attributes, around 60 keys and 28,000 value tokens per user, leading up to an evaluation point where the model predicts a downstream target" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;The figure above is what a single user looks like to PRAGMA: a stream of structured events leading up to an evaluation point at which the model is asked to predict something. Around 60 keys. Around 28,000 value tokens.&lt;/p&gt;
&lt;p&gt;Pre-training is masked language modelling, but with three masking sources blended together: 15% standard token masking, 10% whole-event masking, and 10% semantic-type masking. The whole-event variant is interesting for banking. It teaches the model that when you cannot see the amount of a card payment but you can see the merchant, the time, and the surrounding behavioural pattern, the amount is often inferable. That is exactly the inductive bias you want in a credit or fraud model.&lt;/p&gt;
&lt;h2 id="the-numbers"&gt;The numbers&lt;/h2&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-table2-results-png-5" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/table2-results.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/table2-results.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/table2-results.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/table2-results.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table2-results.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/table2-results.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/table2-results.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/table2-results.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table2-results.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/table2-results.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/table2-results.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table2-results.png"
alt="Relative performance of PRAGMA-L with LoRA fine-tuning against internal task-specific baselines: 130 percent PR-AUC lift on credit scoring, 163 percent AUUC on uplift, 40 percent mAP on product recommendation, with the AML task showing a 47 percent loss"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-table2-results-png-5" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/table2-results.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Relative performance of PRAGMA-L with LoRA fine-tuning against internal task-specific baselines: 130 percent PR-AUC lift on credit scoring, 163 percent AUUC on uplift, 40 percent mAP on product recommendation, with the AML task showing a 47 percent loss" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;(1) The LoRA versus train-from-scratch comparison. Revolut shows that fine-tuning a pre-trained backbone with LoRA, updating roughly 2-4% of parameters, consistently matches or beats training a fresh task-specific model on the same downstream data. This is the result that justifies the entire infrastructure investment. If pre-training did not transfer, you would not bother. Communication engagement gains &lt;strong&gt;18.6%&lt;/strong&gt; PR-AUC from LoRA over scratch. Credit scoring gains &lt;strong&gt;13%&lt;/strong&gt;. Product recommendation gains &lt;strong&gt;10.3%&lt;/strong&gt; mAP. That is the business case.&lt;/p&gt;
&lt;p&gt;(2) The profile-state ablation. Removing the dedicated profile-state branch tells you which tasks are driven by static user characteristics versus event sequences. Credit scoring loses &lt;strong&gt;31.8%&lt;/strong&gt; PR-AUC without profile state, because account tenure and onboarding signals matter for identifying minority-class defaulters. Communication engagement actually gains 3% in PR-AUC without profile state, because re-engagement is a story about pre-drop-off behaviour, not about who the user is. The two-branch design keeps the static features when they help and ignores them when they do not.&lt;/p&gt;
&lt;p&gt;(3) The failure. PRAGMA loses &lt;strong&gt;47.1%&lt;/strong&gt; on F-0.5 against the production baseline for anti-money-laundering detection, and Revolut wrote this into their paper. The reason is that AML is a relational problem. You catch laundering by looking across users and across accounts, and PRAGMA processes each user history in isolation. The lesson generalises: foundation models on individual ledgers are not graph-aware, and the production AML stack at any large bank includes graph-aware components that PRAGMA cannot replace. Knowing the limit is more useful than the headline gains.&lt;/p&gt;
&lt;h2 id="how-this-compares-to-nubank"&gt;How this compares to Nubank&lt;/h2&gt;
&lt;p&gt;Nubank&amp;rsquo;s nuFormer, published in July 2025, makes the opposite architectural choice. It is a causal GPT-style decoder pre-trained with next-token prediction, with a &lt;a href="https://building.nubank.com/fine-tuning-transaction-user-models/"&gt;joint fusion&lt;/a&gt; finetuning step that bolts a &lt;a href="https://arxiv.org/abs/2008.13535"&gt;DCNv2&lt;/a&gt; tabular network onto the same gradient graph. The reported lift is &lt;strong&gt;+1.25%&lt;/strong&gt; in test AUC on a single recommendation task, and a &lt;strong&gt;4.4%&lt;/strong&gt; reduction in user churn measured in production. Smaller numbers than PRAGMA, but Nubank published a real production deployment outcome. PRAGMA&amp;rsquo;s results are still backtests.&lt;/p&gt;
&lt;p&gt;The two papers disagree on almost everything that is fun to argue about. Architecture: decoder versus encoder. Task scope: one task versus six. The role of static profile state: collapsed into the sequence versus given its own branch. What they agree on: Hand-crafted feature engineering can be replaced by self-supervised representation learning on raw transaction sequences, and doing so produces material lifts on real banking problems. The architectural debate is downstream of that.&lt;/p&gt;
&lt;p&gt;The broader literature is moving the same way. &lt;a href="https://arxiv.org/abs/2511.08939"&gt;TransactionGPT&lt;/a&gt; (Dou et al., 2025) introduces a 3D transformer for billion-scale payment trajectories aimed at anomaly detection. &lt;a href="https://arxiv.org/abs/1908.10063"&gt;FinBERT&lt;/a&gt;, &lt;a href="https://arxiv.org/abs/2303.17564"&gt;BloombergGPT&lt;/a&gt;, and &lt;a href="https://arxiv.org/abs/2306.06031"&gt;FinGPT&lt;/a&gt; cover the text side. &lt;a href="https://arxiv.org/abs/2310.01728"&gt;Time-LLM&lt;/a&gt; and &lt;a href="https://arxiv.org/abs/2403.07815"&gt;Chronos&lt;/a&gt; cover numerical time series. PRAGMA and nuFormer are the two papers that target the actual structured event ledger sitting inside a retail bank, which is the asset that matters for credit, fraud, and product decisions.&lt;/p&gt;
&lt;h2 id="outlook"&gt;Outlook&lt;/h2&gt;
&lt;p&gt;There is no public checkpoint. Revolut and Nubank both keep their weights inside their production stack, which is the right business decision and the wrong scientific one. You cannot run PRAGMA on your own data. You can only read the paper and decide whether the recipe is reproducible.&lt;/p&gt;
&lt;p&gt;I think it is. The paper is detailed enough to rebuild from. The tokenisation scheme is fully specified. The architecture diagram is precise enough to follow. They even document the optimiser, &lt;a href="https://kellerjordan.github.io/posts/muon/"&gt;Muon&lt;/a&gt; plus AdamW, and the hardware, 32 H100s for the 1B variant. The constraint is the pre-training corpus, not the model.&lt;/p&gt;
&lt;p&gt;So the next project on this site is a faithful PRAGMA reimplementation at the small (10M) scale, trained on a synthetic or open-licensed transaction dataset, evaluated on a subset of the downstream tasks where public benchmarks exist. I will write that up here in instalments, including what works, what breaks, and where the paper is silent. The codebase will land in a public repository as I build it.&lt;/p&gt;</description></item><item><title>Do Not Disturb My Circles</title><link>https://philippdubach.com/posts/do-not-disturb-my-circles/</link><pubDate>Mon, 13 Apr 2026 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/do-not-disturb-my-circles/</guid><description>&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-circles-cover-jpg-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/circles-cover.jpg 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/circles-cover.jpg 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/circles-cover.jpg 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/circles-cover.jpg 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/circles-cover.jpg 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/circles-cover.jpg 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/circles-cover.jpg 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/circles-cover.jpg 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/circles-cover.jpg 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/circles-cover.jpg 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/circles-cover.jpg 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/circles-cover.jpg"
alt="Editorial cover illustration evoking Archimedes drawing geometric circles in the sand with the long shadow of an approaching soldier — paralleled to the conscription of AI for science into the chatbot arms race"
class=""
width="1200"
fetchpriority="high"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-circles-cover-jpg-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/circles-cover.jpg"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Editorial cover illustration evoking Archimedes drawing geometric circles in the sand with the long shadow of an approaching soldier — paralleled to the conscription of AI for science into the chatbot arms race" decoding="async"&gt;
&lt;/dialog&gt;
&lt;blockquote&gt;
&lt;p&gt;If I&amp;rsquo;d had my way, we would have left it in the lab for longer and done more things like AlphaFold, maybe cured cancer or something like that.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That&amp;rsquo;s &lt;a href="https://en.wikipedia.org/wiki/Demis_Hassabis"&gt;Demis Hassabis&lt;/a&gt; (I cannot recomend watching
&lt;a href="https://www.youtube.com/watch?v=d95J8yzvjbQ"&gt;The Thinking Game&lt;/a&gt; enough and or read
&lt;a href="https://www.penguinrandomhouse.com/books/752231/the-infinity-machine-by-sebastian-mallaby/"&gt;The Infinity Machine&lt;/a&gt;), the CEO of Google DeepMind and a Nobel Prize winner, describing the future he didn&amp;rsquo;t get.&lt;/p&gt;
&lt;p&gt;He wanted a CERN for artificial intelligence. A decade or two of careful, methodical work. The world&amp;rsquo;s best scientists collaborating on each step toward general intelligence, understanding what they built before building the next thing. In the meantime, AI for science, narrow tools like AlphaFold, would ship real benefits: cures, new materials, maybe a crack at fusion. Not chatbots. He didn&amp;rsquo;t get that future. None of us did. Instead we got a commercial arms race, a $690 billion annual infrastructure buildout, and the greatest concentration of technical talent in human history pointed at making autocomplete better.&lt;/p&gt;
&lt;p&gt;This is a story about capital misallocation. But it&amp;rsquo;s also a very old story.&lt;/p&gt;
&lt;h2 id="geometry-in-the-sand"&gt;Geometry in the sand&lt;/h2&gt;
&lt;p&gt;In 214 BC, the Roman general Marcellus brought a fleet to Syracuse. Standing between Rome and the richest city in Sicily was one man: &lt;a href="https://en.wikipedia.org/wiki/Archimedes"&gt;Archimedes&lt;/a&gt;, the greatest scientist of the ancient world, a mathematician whose work on the lever, the screw, and the principles of buoyancy would outlast every empire he lived under.&lt;/p&gt;
&lt;p&gt;Archimedes did not want to build weapons. &lt;a href="https://en.wikipedia.org/wiki/Parallel_Lives"&gt;Plutarch&lt;/a&gt;, writing in the &lt;em&gt;Life of Marcellus&lt;/em&gt;, says Archimedes designed and contrived his machines &amp;ldquo;not as matters of any importance, but as mere amusements in geometry.&amp;rdquo; He regarded the whole business as ignoble, beneath the dignity of pure mathematics. But his patron King Hiero II needed defenses, and Archimedes was the only man who could provide them. So he built them. Catapults that could sink a ship at range. The &lt;a href="https://en.wikipedia.org/wiki/Claw_of_Archimedes"&gt;Claw of Archimedes&lt;/a&gt;, an iron grappling device that could lift a Roman galley out of the water and drop it. Possibly parabolic mirrors that focused sunlight to set ships on fire, though historians still debate that one.&lt;/p&gt;
&lt;p&gt;The machines worked. Plutarch writes that the Romans became so terrified that &amp;ldquo;whenever they saw a bit of rope or a stick of timber projecting over the wall, they cried &amp;lsquo;Archimedes is training some engine upon us,&amp;rsquo; and turned their backs and fled.&amp;rdquo; They held off Rome for two years.&lt;/p&gt;
&lt;p&gt;Then Syracuse fell anyway. In 212 BC, Roman soldiers breached the walls during a festival. A soldier found Archimedes drawing geometric figures in the sand. According to the tradition passed down through &lt;a href="https://en.wikipedia.org/wiki/Valerius_Maximus"&gt;Valerius Maximus&lt;/a&gt; and others, his last words were &lt;em&gt;&amp;ldquo;Noli turbare circulos meos&amp;rdquo;&lt;/em&gt;: do not disturb my circles.&lt;/p&gt;
&lt;p&gt;Marcellus had ordered Archimedes taken alive. The order didn&amp;rsquo;t matter. The soldier killed him. The geometry died with him. The war machines, the things Archimedes considered beneath his real work, survived in military engineering textbooks for centuries. His mathematical treatises survived only by accident, through a single Byzantine manuscript &lt;a href="https://en.wikipedia.org/wiki/Archimedes_Palimpsest"&gt;scraped and overwritten with prayer texts&lt;/a&gt; in the 13th century.&lt;/p&gt;
&lt;p&gt;I thought about this when I watched Demis Hassabis in a &lt;a href="https://www.youtube.com/watch?v=C0gErQtnNFE"&gt;recent interview with Cleo Abram&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="the-conscription"&gt;The conscription&lt;/h2&gt;
&lt;p&gt;He had been building learning systems at DeepMind for years. The work was pointed at science. AlphaFold was the first proof that AI could crack fundamental problems in biology. Move 37, AlphaGo&amp;rsquo;s famous creative play against Lee Sedol in 2016, was the proof that AI systems could discover things no human had considered.&lt;/p&gt;
&lt;p&gt;Then ChatGPT happened. Google went code red. Hassabis, the man who wanted to solve protein folding and maybe crack fusion, became the man who runs all of Google&amp;rsquo;s AI, including the consumer products he&amp;rsquo;d never wanted to focus on.&lt;/p&gt;
&lt;p&gt;He&amp;rsquo;s candid about what was lost:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;My ideal was to approach the latter stages of building AGI using the scientific method, very carefully, very precisely, very thoughtfully, in a CERN-like way. That might take a decade, even two decades longer. But I think that would make sense given the enormity of what we&amp;rsquo;re dealing with.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And about the irony:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Language was a lot easier than we were all expecting. Even those of us who were obviously optimists about the whole technology. We thought maybe there would be one or two or three more breakthroughs needed. But it turned out transformers and some reinforcement learning on top was enough.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The ease of the advance was the thing that derailed the deeper work. Language models turned out to be good enough for consumer products, and consumer products generate revenue, and revenue attracts competition, and competition creates the arms race that now consumes everything. DeepMind had &amp;ldquo;fairly equivalent systems&amp;rdquo; to ChatGPT at the time, Hassabis says. They chose not to release them. That choice was taken from him.&lt;/p&gt;
&lt;h2 id="what-a-dollar-buys"&gt;What a dollar buys&lt;/h2&gt;
&lt;p&gt;The resource allocation case is simple enough to state in one line, though the implications are not.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.nature.com/articles/s41586-021-03819-2"&gt;AlphaFold 2&lt;/a&gt; trained on 128 Google TPUv3 chips for approximately 11 days. At &lt;a href="https://cloud.google.com/tpu/pricing"&gt;Google Cloud&amp;rsquo;s public pricing&lt;/a&gt; of roughly $32 per hour per TPU, the estimated training cost is somewhere under &lt;strong&gt;$1 million&lt;/strong&gt;. It predicted the three-dimensional structures of 200 million proteins. Over 3 million scientists now use it. A pharma executive told Hassabis that &amp;ldquo;almost every drug developed from now on will have probably used AlphaFold in its process.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Now the other side of the ledger. &lt;a href="https://epoch.ai/blog/how-much-does-it-cost-to-train-frontier-ai-models/"&gt;GPT-4&amp;rsquo;s training cost&lt;/a&gt; an estimated &lt;strong&gt;$78 million&lt;/strong&gt;. &lt;a href="https://fortune.com/2024/04/18/google-gemini-cost-191-million-to-train-stanford-university-report-estimates/"&gt;Gemini Ultra ran to roughly &lt;strong&gt;$191 million&lt;/strong&gt;&lt;/a&gt;. OpenAI&amp;rsquo;s Orion &lt;a href="https://fortune.com/2025/02/25/what-happened-gpt-5-openai-orion-pivot-scaling-pre-training-llm-agi-reasoning/"&gt;exceeded &lt;strong&gt;$500 million&lt;/strong&gt;&lt;/a&gt; for a single training run, and the model was so disappointing they downgraded it from GPT-5 to GPT-4.5. OpenAI&amp;rsquo;s inference spending alone, just the cost of running the models after training, &lt;a href="https://aibusiness.com/language-models/ai-model-scaling-isn-t-over-it-s-entering-a-new-era"&gt;hit &lt;strong&gt;$2.3 billion in 2024&lt;/strong&gt;&lt;/a&gt;. That is 15 times what they spent training GPT-4.5.&lt;/p&gt;
&lt;p&gt;AlphaFold cost less to train than OpenAI spends on inference in a single day.&lt;/p&gt;
&lt;p&gt;Zoom out further. The Big 4 hyperscalers, Amazon, Alphabet, Meta, Microsoft, are guiding to &lt;a href="https://www.goldmansachs.com/insights/articles/why-ai-companies-may-invest-more-than-500-billion-in-2026"&gt;&lt;strong&gt;$610-665 billion&lt;/strong&gt;&lt;/a&gt; in capital expenditure for 2026. &lt;a href="https://www.goldmansachs.com/insights/articles/why-ai-companies-may-invest-more-than-500-billion-in-2026"&gt;Goldman Sachs projects&lt;/a&gt; cumulative 2025-2027 spending at $1.15 trillion. As I noted in &lt;a href="https://philippdubach.com/posts/peter-thiels-physics-department/"&gt;Peter Thiel&amp;rsquo;s Physics Department&lt;/a&gt;, Big Tech spends &lt;strong&gt;75 times&lt;/strong&gt; more on AI than the entire US federal science budget: $250 billion versus $3.3 billion per year. The DOE Genesis Mission, the flagship US government program for AI-driven scientific discovery, &lt;a href="https://www.energy.gov/science/articles/doe-announces-genesis-mission-advance-ai-science"&gt;received &lt;strong&gt;$320 million&lt;/strong&gt; in its first round&lt;/a&gt;. That is less than Meta spends on AI infrastructure in a single week.&lt;/p&gt;
&lt;p&gt;The infrastructure being built is not for protein folding. It is not for materials science or fusion plasma control or genomics. It is for chatbots, image generators, and coding assistants. &lt;a href="https://sequoiacap.com/article/ais-600b-question/"&gt;Sequoia&amp;rsquo;s David Cahn calculated&lt;/a&gt; the AI ecosystem needs &lt;strong&gt;$600 billion in annual revenue&lt;/strong&gt; to justify current infrastructure spending. It generates perhaps $80-120 billion. And nearly all of that revenue comes from commercial applications: subscriptions, API access, enterprise contracts for systems that summarize emails and draft marketing copy.&lt;/p&gt;
&lt;p&gt;The bottleneck for AI for science was never money. AlphaFold proved that. It was always about who works on what, and the chatbot economy answered that question for an entire generation of researchers.&lt;/p&gt;
&lt;h2 id="what-the-circles-produced"&gt;What the circles produced&lt;/h2&gt;
&lt;p&gt;When Hassabis&amp;rsquo;s teams were allowed to focus on science, when the circles were left undisturbed, this is what happened.&lt;/p&gt;
&lt;p&gt;In The Thinking Game there&amp;rsquo;s a moment that captures it perfectly. The original plan for AlphaFold was conventional: build a server, let scientists submit protein sequences one at a time, email back the predicted structures. Standard approach, used by the whole field for 40 years. Then Hassabis started doing arithmetic on his phone in the middle of the meeting. Two hundred million known proteins. One fold every ten seconds. How many TPUs do we have? He looked up and said something like, &amp;ldquo;&lt;a href="https://youtu.be/d95J8yzvjbQ?si=1VVejCeVhn_1_3m6&amp;amp;t=4495"&gt;Why don&amp;rsquo;t we just fold everything?&lt;/a&gt;&amp;rdquo;&lt;/p&gt;
&lt;p&gt;It would be, he realized, actually less work than building the server.&lt;/p&gt;
&lt;p&gt;So they folded everything. AlphaFold predicted the structures of &lt;strong&gt;200 million proteins&lt;/strong&gt; and put them in a &lt;a href="https://alphafold.ebi.ac.uk/"&gt;free database&lt;/a&gt;. The nuclear pore complex, one of the largest and most important proteins in the body, a donut-shaped gateway that controls nutrient flow in and out of the cell nucleus, was &lt;a href="https://www.science.org/doi/10.1126/science.abm9326"&gt;solved within months&lt;/a&gt; of AlphaFold&amp;rsquo;s release. Researchers working on neglected diseases, malaria, Chagas, leishmaniasis, diseases that affect hundreds of millions of people but attract little pharma funding, now get protein structures for free. Plant scientists working on climate-resilient crops can skip years of crystallography and go straight to the biology.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.isomorphiclabs.com/"&gt;Isomorphic Labs&lt;/a&gt;, the DeepMind spinoff, is running 18-19 drug programs across cardiovascular disease, cancer, and immunology. &lt;a href="https://philippdubach.com/posts/ai-can-now-design-drugs-in-seconds-we-still-cant-tell-you-if-they-work./"&gt;IsoDDE, its drug design engine&lt;/a&gt;, hits 50% on the hardest protein-ligand benchmarks versus 23% for AlphaFold 3. &lt;a href="https://deepmind.google/discover/blog/alphagenome-predicts-the-effects-of-dna-variation-on-gene-regulation/"&gt;AlphaGenome&lt;/a&gt; is decoding the 98% of the human genome that doesn&amp;rsquo;t code for proteins, the part where most disease-causing mutations hide. Jennifer Doudna, the CRISPR pioneer, asked Hassabis directly about combining AlphaGenome with CRISPR to identify and fix the exact genetic changes causing disease. His answer: &amp;ldquo;Still not probably good enough yet. But you can imagine a future version.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://philippdubach.com/posts/the-last-architecture-designed-by-hand/"&gt;AlphaEvolve&lt;/a&gt; found a 23% speedup inside Gemini&amp;rsquo;s own architecture, recovering 0.7% of Google&amp;rsquo;s total compute. DeepMind&amp;rsquo;s fusion work &lt;a href="https://deepmind.google/blog/bringing-ai-to-the-next-generation-of-fusion-energy/"&gt;controlled plasma autonomously&lt;/a&gt; in a real tokamak. &lt;a href="https://deepmind.google/discover/blog/millions-of-new-materials-discovered-with-deep-learning/"&gt;GNoME&lt;/a&gt; identified 2.2 million new crystal structures, equivalent to roughly 800 years of prior human discovery in materials science.&lt;/p&gt;
&lt;p&gt;All of this on a fraction of the compute that powers the chatbot economy. I keep coming back to this: the entire portfolio of DeepMind&amp;rsquo;s scientific work, the Nobel Prize, the drug programs, the materials, the fusion experiments, consumed less compute than a single frontier chatbot burns through in inference costs per quarter.&lt;/p&gt;
&lt;h2 id="the-case-for-the-war-machines"&gt;The case for the war machines&lt;/h2&gt;
&lt;p&gt;I want to present the counterargument honestly, because it&amp;rsquo;s not trivial.&lt;/p&gt;
&lt;p&gt;The commercial race funded a compute buildout that wouldn&amp;rsquo;t exist without chatbot demand. $690 billion in 2026 capex built data centers that can, in principle, be repurposed for scientific workloads. The talent pipeline expanded: a generation of ML engineers entered the field because consumer AI products made it exciting and lucrative. Millions of users stress-tested these models in ways internal testing never could, revealing failure modes and edge cases that improve the underlying systems. Hassabis himself acknowledges this. In the HUGE* interview he listed the benefits: &amp;ldquo;lightning speed&amp;rdquo; progress, democratized access to cutting-edge AI &amp;ldquo;perhaps only 3 to 6 months behind what is actually in the labs,&amp;rdquo; and societal normalization that prepares people for bigger changes ahead.&lt;/p&gt;
&lt;p&gt;And there&amp;rsquo;s the funding argument. Google&amp;rsquo;s $132 billion in net income funds DeepMind. Gemini&amp;rsquo;s commercial revenue helps justify the research budget. Without the chatbot economy, would Alphabet spend billions on AI research at all?&lt;/p&gt;
&lt;p&gt;The strongest version of this argument goes: you can&amp;rsquo;t have the cathedral without the wool merchants. Bell Labs needed AT&amp;amp;T&amp;rsquo;s monopoly revenue. The Apollo program needed Cold War spending. Scientific breakthroughs don&amp;rsquo;t fund themselves. The commercial race, ugly as it is, is the mechanism that makes the science possible.&lt;/p&gt;
&lt;h2 id="why-the-steelman-breaks"&gt;Why the steelman breaks&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve thought about this for a while, and I think it&amp;rsquo;s wrong.&lt;/p&gt;
&lt;p&gt;Start with the compute argument. The infrastructure being built is overwhelmingly inference infrastructure: data centers optimized for running chatbot queries at scale, not for training scientific models. AlphaFold trains on 128 TPUs. It doesn&amp;rsquo;t need a $75 billion annual capex program. The buildout serves commercial demand. Calling it a foundation for scientific AI is like calling a shopping mall a foundation for particle physics because they both use electricity.&lt;/p&gt;
&lt;p&gt;The talent argument has the same problem. The pipeline filled, but it filled with the wrong skills and pointed in the wrong direction. &lt;a href="https://hai.stanford.edu/ai-index/2025-ai-index-report/research-and-development"&gt;Stanford HAI&amp;rsquo;s 2025 AI Index&lt;/a&gt; found that &lt;strong&gt;70%&lt;/strong&gt; of AI PhDs took private sector jobs in 2023, up from roughly 20% two decades ago. &lt;a href="https://www.nature.com/articles/d41586-026-00474-3"&gt;Bruce Schneier wrote in &lt;em&gt;Nature&lt;/em&gt;&lt;/a&gt; that the exodus threatens &amp;ldquo;innovation driven by curiosity rather than profit.&amp;rdquo; The ML engineers entering the field are optimizing RLHF, fine-tuning chat models, building prompt engineering toolchains, and competing on Chatbot Arena leaderboards. These are not the skills that fold proteins or control plasma. The talent that cracks drug discovery needs computational chemistry, molecular dynamics, quantum mechanics. The talent attracted by the chatbot boom is, for the most part, not that talent.&lt;/p&gt;
&lt;p&gt;The stress-testing argument is real but narrow. Millions of users proved that language models can summarize documents and brainstorm ideas. That tells you nothing about whether they can predict which genetic mutations cause disease. The applications share a model architecture but almost nothing else.&lt;/p&gt;
&lt;p&gt;And the funding argument, the one that seems hardest to dismiss, actually argues the opposite of what its proponents think. The best historical parallel is &lt;a href="https://en.wikipedia.org/wiki/Bell_Labs"&gt;Bell Labs&lt;/a&gt;. Founded in 1925 as the research arm of AT&amp;amp;T&amp;rsquo;s regulated telephone monopoly, Bell Labs produced the &lt;a href="https://en.wikipedia.org/wiki/Transistor"&gt;transistor&lt;/a&gt;, the &lt;a href="https://en.wikipedia.org/wiki/Laser"&gt;laser&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/wiki/Unix"&gt;Unix&lt;/a&gt;, the &lt;a href="https://en.wikipedia.org/wiki/C_(programming_language)"&gt;C programming language&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/wiki/Information_theory"&gt;information theory&lt;/a&gt;, and the discovery of &lt;a href="https://en.wikipedia.org/wiki/Cosmic_microwave_background"&gt;cosmic microwave background radiation&lt;/a&gt;. Ten Nobel Prizes. Five Turing Awards. &lt;a href="https://www.construction-physics.com/p/what-would-it-take-to-recreate-bell"&gt;Brian Potter in &lt;em&gt;Construction Physics&lt;/em&gt;&lt;/a&gt; calls the conditions &amp;ldquo;unrepeatable&amp;rdquo;: a vertically integrated monopoly that could afford to fund research with no immediate commercial return.&lt;/p&gt;
&lt;p&gt;Then AT&amp;amp;T was broken up in 1984. Commercial competition arrived. What happened next is instructive: the research workforce &lt;a href="https://en.wikipedia.org/wiki/Bell_Labs"&gt;dropped from roughly 1,300 to 500 by 2002&lt;/a&gt;. Only one post-divestiture employee won a Nobel Prize. Bell Labs was passed from AT&amp;amp;T to Lucent to Alcatel to Nokia, each owner less interested in fundamental research than the last. By 2008, &lt;a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC8792522/"&gt;four physicists remained&lt;/a&gt; in basic research. By 2016, what had been the most productive research institution in human history was a division of a Finnish telecom company.&lt;/p&gt;
&lt;p&gt;The irony is precise: the people who argue that commercial pressure funds great science are citing a lab that produced its greatest work under monopoly protection &lt;em&gt;from&lt;/em&gt; commercial pressure, and died the moment that protection was removed.&lt;/p&gt;
&lt;p&gt;Hassabis&amp;rsquo;s vision, the CERN model, is the Bell Labs model. Let fundamental research breathe. Shield it from quarterly earnings. Fund it with patient capital. He had that at DeepMind, funded by Google&amp;rsquo;s search advertising monopoly, insulated from product deadlines, free to spend six years building AlphaGo before it produced a single dollar of revenue. Then the commercial race consumed the insulation.&lt;/p&gt;
&lt;p&gt;The funding was already there. What he lost was the institutional focus.&lt;/p&gt;
&lt;h2 id="the-circles"&gt;The circles&lt;/h2&gt;
&lt;p&gt;Archimedes held off Rome for two years. Then the soldier came. The war machines didn&amp;rsquo;t save Syracuse. They bought time, and that time ran out.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t think the chatbot era saved AI for science. I think it ate the oxygen. The talent went to RLHF optimization. The compute went to inference farms. The institutional attention went to quarterly product launches. Hassabis is now simultaneously building the war machines and drawing the circles: running Gemini and funding Isomorphic, shipping chatbots and folding proteins. That he manages both is remarkable. But it&amp;rsquo;s a compromise, and the compromise has a cost measured in drug programs that don&amp;rsquo;t exist, diseases that aren&amp;rsquo;t being studied, materials that haven&amp;rsquo;t been found.&lt;/p&gt;
&lt;p&gt;The question is not whether chatbots are useful. They are. I use them constantly. The question is whether future historians will look at 2023-2026 and see a period when the most capable scientific tool in human history was mostly pointed at drafting emails and generating stock photos, and wonder what we were thinking. The way we look at that Roman soldier: someone who destroyed something more valuable than he could understand.&lt;/p&gt;
&lt;p&gt;In the interview, Hassabis is asked what he would want said at his funeral. His answer was immediate:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I would hope that they would say that my life was of benefit and service to humanity.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The circles are still there, drawn in the sand between product launches.&lt;/p&gt;</description></item><item><title>On-Device AI Models Will Be The New Reason to Upgrade Your Phone</title><link>https://philippdubach.com/posts/on-device-ai-models-will-be-the-new-reason-to-upgrade-your-phone/</link><pubDate>Wed, 25 Mar 2026 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/on-device-ai-models-will-be-the-new-reason-to-upgrade-your-phone/</guid><description>&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-chip-cover-jpg-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/chip-cover.jpg 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/chip-cover.jpg 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/chip-cover.jpg 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/chip-cover.jpg 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/chip-cover.jpg 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/chip-cover.jpg 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/chip-cover.jpg 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/chip-cover.jpg 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/chip-cover.jpg 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/chip-cover.jpg 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/chip-cover.jpg 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/chip-cover.jpg"
alt="Editorial cover illustration for an analysis of on-device AI models as the new smartphone upgrade driver"
class=""
width="1200"
fetchpriority="high"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-chip-cover-jpg-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/chip-cover.jpg"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Editorial cover illustration for an analysis of on-device AI models as the new smartphone upgrade driver" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;The iPhone 17 runs a &lt;a href="https://machinelearning.apple.com/research/introducing-apple-foundation-models"&gt;3 billion parameter language model on-device&lt;/a&gt; at 30 tokens per second. Obviously, the average consumer has no idea what that sentence means, and Apple hasn&amp;rsquo;t figured out how to make them care.&lt;/p&gt;
&lt;p&gt;I believe that&amp;rsquo;s about to change. Apple now has &lt;a href="https://9to5mac.com/2026/03/25/new-details-on-apple-google-ai-deal-revealed-including-gemini-changes-report/"&gt;complete access to Google&amp;rsquo;s Gemini model&lt;/a&gt; in its own data centers, with &lt;a href="https://www.theinformation.com/newsletters/ai-agenda/apple-can-distill-googles-big-gemini-model"&gt;the ability to distill it into smaller models&lt;/a&gt; built for iPhones and iPads. Knowledge distillation works like this: you take a large model, have it perform tasks with detailed reasoning, then feed those reasoning traces to a smaller model until the student learns to mimic the teacher. The smaller model ends up far more capable than if you&amp;rsquo;d trained it from scratch on the same data. Apple can now do this with the full Gemini, not just their own in-house models, and the distilled output runs locally. No internet required.&lt;/p&gt;
&lt;p&gt;Smartphones haven&amp;rsquo;t had a real upgrade story in years. The camera is great. The screen is great. The processor was fast enough three generations ago. &lt;a href="https://www.sellcell.com/blog/how-often-do-people-upgrade-their-phone/"&gt;Battery life has overtaken price as the top purchase driver&lt;/a&gt; for the first time. The global &lt;a href="https://sqmagazine.co.uk/smartphone-statistics/"&gt;replacement cycle has stretched to 3.5 years&lt;/a&gt;. People hold onto their phones because nothing about the new one feels different enough. &lt;a href="https://www.deloitte.com/us/en/insights/industry/technology/technology-media-and-telecom-predictions/2025/gen-ai-on-smartphones.html"&gt;Deloitte&amp;rsquo;s 2025 TMT Predictions report&lt;/a&gt; frames on-device generative AI as the feature that could break this cycle, if the experience delivers on the promise. On-device AI might become the next reason.&lt;/p&gt;
&lt;h2 id="the-spec"&gt;The spec&lt;/h2&gt;
&lt;p&gt;In the late 1990s it was megahertz: Intel and AMD raced clock speeds past the point where consumers could distinguish real-world performance differences, but the number on the box still drove purchases. Then it was megapixels. Samsung shipped a &lt;a href="https://semiconductor.samsung.com/news-events/tech-blog/isocell-hp3-200mp-image-sensor-for-epic-details/"&gt;200 MP camera sensor&lt;/a&gt; knowing that most phones use 16-to-1 pixel binning to output a &lt;strong&gt;12.5 MP&lt;/strong&gt; image by default.&lt;/p&gt;
&lt;p&gt;Parameters could be next. The &lt;a href="https://www.apple.com/iphone-17/specs/"&gt;iPhone 17&amp;rsquo;s standard A19 chip&lt;/a&gt; has 8GB of RAM. The &lt;a href="https://www.apple.com/iphone-17-pro/specs/"&gt;Pro gets 12GB&lt;/a&gt; with faster memory bandwidth, which determines how large a model the phone can run and how quickly. Samsung&amp;rsquo;s 2026 flagships with the &lt;a href="https://semiconductor.samsung.com/processor/mobile-processor/exynos-2600/"&gt;Exynos 2600 hit &lt;strong&gt;80 TOPS&lt;/strong&gt;&lt;/a&gt; on a 2nm process, more than double the prior generation. These are already the numbers in press releases. It&amp;rsquo;s not hard to imagine an Apple keynote where someone says, with rehearsed enthusiasm, that the iPhone 18 Pro runs a 7 billion parameter model while the standard model is limited to 3 billion.&lt;/p&gt;
&lt;p&gt;The difference from previous spec wars is that this one might actually correlate with user experience. Megahertz past a certain threshold didn&amp;rsquo;t make Word open faster. Megapixels past 12 MP didn&amp;rsquo;t make photos look better on a phone screen. But a 7 billion parameter model running locally outperforms a 3 billion one on nearly every task. It handles longer documents, follows more complex instructions, holds better conversational context.&lt;/p&gt;
&lt;h2 id="breaking-the-stalemate"&gt;Breaking the stalemate&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.gartner.com/en/newsroom/press-releases/2025-09-09-gartner-says-worldwide-generative-artificial-intelligence-smartphone-end-user-spending-to-total-us-dollars-298-billion-by-the-end-of-2025"&gt;Gartner projects&lt;/a&gt; GenAI smartphone spending will reach &lt;strong&gt;$393 billion&lt;/strong&gt; in 2026, up 32% from &lt;strong&gt;$298 billion&lt;/strong&gt; in 2025. &lt;a href="https://my.idc.com/getdoc.jsp?containerId=prUS52478124"&gt;IDC reports&lt;/a&gt; GenAI smartphone shipments growing &lt;strong&gt;73%&lt;/strong&gt; year over year. &lt;a href="https://finance.yahoo.com/news/exclusive-samsung-double-mobile-devices-030312758.html"&gt;Samsung has publicly committed&lt;/a&gt; to 800 million AI-enabled devices by end of 2026, doubling its 2025 footprint. &lt;a href="https://www.cnbc.com/2024/12/13/apple-is-a-top-pick-for-2025-as-ai-will-drive-iphone-upgrade-cycle-morgan-stanley-says.html"&gt;Morgan Stanley&amp;rsquo;s latest survey&lt;/a&gt; found iPhone upgrade intentions at &lt;strong&gt;37%&lt;/strong&gt;, an all-time high, with FY26 shipment forecasts of 260 million units sitting 3% above Street consensus.&lt;/p&gt;
&lt;p&gt;On-device AI creates hard hardware requirements in a way that camera improvements and screen upgrades never did. You cannot run a 3 billion parameter model on an iPhone 14. The Neural Engine isn&amp;rsquo;t powerful enough and the memory bandwidth isn&amp;rsquo;t there. &lt;a href="https://support.apple.com/en-us/121115"&gt;Apple Intelligence requires an A17 Pro or later&lt;/a&gt;, which means the feature itself creates an upgrade floor. Every year that floor rises. When Apple ships distilled Gemini models that need the A19 Pro&amp;rsquo;s 12GB of RAM, every phone older than 2025 is locked out.&lt;/p&gt;
&lt;p&gt;The Gemini deal matters for the hardware cycle because of the distillation pipeline. Apple doesn&amp;rsquo;t need to build frontier-scale models from scratch. They can take Gemini&amp;rsquo;s best capabilities, run them through distillation, and compress the results into models sized for their hardware tiers. A 3 billion parameter model for the standard iPhone. A 5 billion version for the Pro. Maybe a 10 billion model for a future iPad Pro with enough memory and thermal headroom.&lt;/p&gt;
&lt;p&gt;Google is playing a similar game from the other side. The original &lt;a href="https://en.wikipedia.org/wiki/Gemini_(language_model)"&gt;Gemini Nano shipped at 1.8 billion parameters&lt;/a&gt;; the updated Nano-2 rose to 3.25 billion. Samsung&amp;rsquo;s &lt;a href="https://news.samsung.com/global/samsung-unveils-galaxy-s26-series-the-most-intuitive-galaxy-ai-phone-yet"&gt;Galaxy S26 ships with on-device Gemini&lt;/a&gt; running on NPUs that are 39% faster than the prior generation. On-device models get larger every hardware generation. Each generation&amp;rsquo;s models don&amp;rsquo;t run well on older hardware. You see where this goes.&lt;/p&gt;
&lt;p&gt;I find it plausible that within two product cycles, on-device model capability becomes the primary differentiator between phone tiers and between generations. The data isn&amp;rsquo;t there yet: &lt;a href="https://www.twice.com/research/the-smartphone-upgrade-cycle-slows"&gt;only 17% of Americans&lt;/a&gt; say AI is a major purchase influence today, Apple Intelligence &lt;a href="https://finance.yahoo.com/markets/stocks/articles/morgan-stanley-stark-message-investors-164700952.html"&gt;ranked seventh globally&lt;/a&gt; as a reason to upgrade in Morgan Stanley&amp;rsquo;s survey, and &lt;a href="https://www.phonearena.com/news/is-the-ai-boom-destroying-your-next-flagship-phones-value_id176913"&gt;over 40% of users&lt;/a&gt; have privacy concerns about smartphone AI, with half unwilling to pay extra for it. But you can&amp;rsquo;t tell the difference between a 48 MP photo and a 12 MP photo on your phone screen. You can absolutely tell the difference between an AI assistant that understands your question and one that doesn&amp;rsquo;t. The feedback loop is immediate and personal. If the bigger model actually works better, and if the distillation pipeline from Gemini delivers real capability gains, the upgrade incentive is self-reinforcing. People will upgrade not because the spec sheet says they should, but because they tried their friend&amp;rsquo;s phone and the AI was better.&lt;/p&gt;
&lt;p&gt;Whether this arrives with iOS 27 this fall or takes another generation to mature, I don&amp;rsquo;t know. But the next reason to buy a new phone will much more likely be the model than the camera.&lt;/p&gt;</description></item><item><title>AI Can Now Design Drugs in Seconds; We Still Can't Tell You If They Work.</title><link>https://philippdubach.com/posts/ai-can-now-design-drugs-in-seconds-we-still-cant-tell-you-if-they-work./</link><pubDate>Wed, 18 Mar 2026 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/ai-can-now-design-drugs-in-seconds-we-still-cant-tell-you-if-they-work./</guid><description>&lt;blockquote&gt;
&lt;p&gt;No AI-discovered drug has ever received FDA approval. That sentence should sit uncomfortably next to every headline about Alphabet&amp;rsquo;s drug discovery spinoff.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;On February 10, &lt;a href="https://www.isomorphiclabs.com/articles/the-isomorphic-labs-drug-design-engine-unlocks-a-new-frontier"&gt;Isomorphic Labs&lt;/a&gt;, the Google DeepMind spinoff focused on computational drug design, released IsoDDE: its Drug Design Engine. This isn&amp;rsquo;t a model or an AlphaFold upgrade. IsoDDE is a unified in silico drug discovery system that runs protein structure prediction, ligand binding, affinity estimation, and pocket identification in concert, generating in seconds what used to take days of physics-based simulation. On the hardest molecular prediction tasks, the &amp;ldquo;Runs N&amp;rsquo; Poses&amp;rdquo; benchmark designed to test generalization to unfamiliar proteins, IsoDDE hits a &lt;strong&gt;50%&lt;/strong&gt; success rate. AlphaFold 3 manages roughly &lt;strong&gt;23%&lt;/strong&gt;. On antibody-antigen modeling, IsoDDE beats AlphaFold 3 by 2.3× and the open-source Boltz-2 by 19.8×. On binding affinity prediction, it achieves a Pearson correlation of 0.85, beating the physics-based gold standard FEP+ at 0.78. &lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-isodde-benchmark-performance-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/isodde-benchmark-performance.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/isodde-benchmark-performance.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/isodde-benchmark-performance.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/isodde-benchmark-performance.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/isodde-benchmark-performance.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/isodde-benchmark-performance.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/isodde-benchmark-performance.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/isodde-benchmark-performance.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/isodde-benchmark-performance.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/isodde-benchmark-performance.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/isodde-benchmark-performance.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/isodde-benchmark-performance.png"
alt="IsoDDE benchmark performance: 50% protein-ligand prediction vs AlphaFold 3 at 23%, 2.3x antibody-antigen improvement, 0.85 binding affinity correlation vs FEP&amp;#43; at 0.78"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-isodde-benchmark-performance-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/isodde-benchmark-performance.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="IsoDDE benchmark performance: 50% protein-ligand prediction vs AlphaFold 3 at 23%, 2.3x antibody-antigen improvement, 0.85 binding affinity correlation vs FEP&amp;#43; at 0.78" decoding="async"&gt;
&lt;/dialog&gt;
I would assume that these are large enough improvements that the computational bottleneck in drug design may no longer be the binding question.&lt;/p&gt;
&lt;h2 id="what-pharma-believes"&gt;What pharma believes&lt;/h2&gt;
&lt;p&gt;Isomorphic has signed partnerships with &lt;a href="https://www.prnewswire.com/news-releases/isomorphic-labs-announces-strategic-multi-target-research-collaboration-with-lilly-302027392.html"&gt;Eli Lilly&lt;/a&gt;, &lt;a href="https://www.prnewswire.com/news-releases/isomorphic-labs-announces-strategic-multi-target-research-collaboration-with-novartis-302027387.html"&gt;Novartis&lt;/a&gt;, and &lt;a href="https://pharmaphorum.com/news/jj-bets-isomorphic-ai-powered-drug-hunt"&gt;Johnson &amp;amp; Johnson&lt;/a&gt; worth a combined &lt;strong&gt;$4 billion+&lt;/strong&gt; in potential value. But look at the structure. Lilly paid $45 million upfront against $1.7 billion in milestones. Novartis paid $37.5 million upfront against $1.2 billion. That&amp;rsquo;s a 50:1 ratio between what pharma promises in biobucks and what it actually wires. &lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-isomorphic-deal-structure-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/isomorphic-deal-structure.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/isomorphic-deal-structure.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/isomorphic-deal-structure.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/isomorphic-deal-structure.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/isomorphic-deal-structure.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/isomorphic-deal-structure.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/isomorphic-deal-structure.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/isomorphic-deal-structure.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/isomorphic-deal-structure.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/isomorphic-deal-structure.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/isomorphic-deal-structure.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/isomorphic-deal-structure.png"
alt="Isomorphic Labs pharma deal structure: Eli Lilly $45M upfront vs $1.7B milestones, Novartis $37.5M vs $1.2B&amp;#43;, totaling $4B headline value against $82.5M cash"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-isomorphic-deal-structure-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/isomorphic-deal-structure.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Isomorphic Labs pharma deal structure: Eli Lilly $45M upfront vs $1.7B milestones, Novartis $37.5M vs $1.2B&amp;#43;, totaling $4B headline value against $82.5M cash" decoding="async"&gt;
&lt;/dialog&gt;
This ratio is standard across AI drug discovery deals in 2025. Pharma is enthusiastic enough to sign but cautious enough to make nearly all the economics contingent on clinical results that don&amp;rsquo;t exist yet. The upfront payments fund research. The milestone payments are structured so that pharma loses almost nothing if the drugs fail. The royalties only matter if a drug reaches blockbuster status, which for an AI-designed molecule has never happened.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.isomorphiclabs.com/articles/isomorphic-labs-announces-novartis-collaboration-expansion"&gt;Novartis expanded its partnership in February 2025&lt;/a&gt;, doubling the number of programs to six, targeting what Novartis described as &amp;ldquo;particularly challenging&amp;rdquo; and previously undruggable targets, on the same financial terms. That&amp;rsquo;s a positive signal: it means internal results impressed Novartis scientists enough to commit more targets. The J&amp;amp;J deal, announced January 2026, goes further, covering small molecules, antibodies, peptides, and molecular glues. But &amp;ldquo;expanded partnerships&amp;rdquo; and &amp;ldquo;approved drugs&amp;rdquo; remain separated by the most unforgiving filter in business: human biology.&lt;/p&gt;
&lt;h2 id="phase-ii-wall"&gt;Phase II wall&lt;/h2&gt;
&lt;p&gt;Most commentary on AI drug discovery stops too early. &lt;a href="https://www.sciencedirect.com/science/article/pii/S135964462400134X"&gt;Jayatunga et al. (2024)&lt;/a&gt;, in the first systematic analysis of AI-discovered drugs in clinical trials, showed AI-discovered molecules achieving &lt;strong&gt;80-90%&lt;/strong&gt; success rates in Phase I trials, well above the historical 40-65% average. AI is good at designing molecules that are safe and have decent pharmacokinetic properties: they get absorbed, distributed, metabolized, and excreted the way you&amp;rsquo;d want. Phase I is mostly about safety. AI passes it.&lt;/p&gt;
&lt;p&gt;But Phase II is about efficacy. Does the drug actually treat the disease? And here the numbers are sobering: AI-discovered drugs show roughly 40% Phase II success rates, which is &lt;a href="https://www.science.org/content/blog-post/ai-drugs-so-far"&gt;about the same as traditionally discovered drugs&lt;/a&gt;. AI has not yet demonstrated it can predict whether a molecule will work in a patient, only that it can predict whether a molecule will be tolerable in a patient. &lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-ai-drug-phase2-wall-png-2" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/ai-drug-phase2-wall.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/ai-drug-phase2-wall.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/ai-drug-phase2-wall.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/ai-drug-phase2-wall.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai-drug-phase2-wall.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/ai-drug-phase2-wall.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/ai-drug-phase2-wall.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/ai-drug-phase2-wall.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai-drug-phase2-wall.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/ai-drug-phase2-wall.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/ai-drug-phase2-wall.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai-drug-phase2-wall.png"
alt="AI drug clinical trial success rates: 80-90% Phase I vs 40-65% traditional, but roughly 40% Phase II for both AI and traditional, projecting 9-18% end-to-end vs historical 5-10%"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-ai-drug-phase2-wall-png-2" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/ai-drug-phase2-wall.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="AI drug clinical trial success rates: 80-90% Phase I vs 40-65% traditional, but roughly 40% Phase II for both AI and traditional, projecting 9-18% end-to-end vs historical 5-10%" decoding="async"&gt;
&lt;/dialog&gt;
If both trends hold, end-to-end success rates could rise from the historical 5-10% to something like 9-18%. That would roughly double R&amp;amp;D productivity, which in a trillion-dollar industry is worth an enormous amount. &lt;a href="https://www.mckinsey.com/capabilities/mckinsey-digital/our-insights/the-economic-potential-of-generative-ai-the-next-productivity-frontier"&gt;McKinsey estimates&lt;/a&gt; generative AI could generate $60-110 billion annually in economic value for pharma and medical products. But it&amp;rsquo;s a far cry from the narrative that generative AI will &amp;ldquo;solve&amp;rdquo; drug discovery. It would make drug development somewhat cheaper and faster. An improvement, not a revolution.&lt;/p&gt;
&lt;p&gt;The counterargument, and it&amp;rsquo;s a reasonable one, is that IsoDDE represents a qualitative leap that could crack the efficacy problem. Its ability to model induced fits, where proteins reshape to accommodate a drug, and to identify cryptic binding pockets, like the cereblon site that took experimentalists 15 years to find, means it&amp;rsquo;s capturing biological dynamics that earlier AI systems missed entirely. If better structural understanding translates to better efficacy prediction, the Phase II wall might eventually come down.&lt;/p&gt;
&lt;p&gt;I find this plausible but unproven. We&amp;rsquo;ll know more when Isomorphic&amp;rsquo;s first candidates enter trials, targeted for late 2026.&lt;/p&gt;
&lt;h2 id="where-isomorphic-fits-in-the-competitive-stack"&gt;Where Isomorphic fits in the competitive stack&lt;/h2&gt;
&lt;p&gt;Isomorphic&amp;rsquo;s competitive position is unusual. It leads on computational benchmarks but trails on clinical progress. &lt;a href="https://insilico.com/"&gt;Insilico Medicine&lt;/a&gt; has the most advanced clinical portfolio: its IPF drug ISM001-055 (now called rentosertib) reached Phase IIa with &lt;a href="https://www.nature.com/articles/s41591-025-03743-2"&gt;positive results published in &lt;em&gt;Nature Medicine&lt;/em&gt; in June 2025&lt;/a&gt;, and Insilico has 10+ IND approvals across 31 programs. &lt;a href="https://ir.recursion.com/news-releases/news-release-details/recursion-and-exscientia-two-leaders-ai-drug-discovery-space"&gt;Recursion Pharmaceuticals&lt;/a&gt;, which &lt;a href="https://pharmaphorum.com/news/ai-biotechs-exscientia-and-recursion-agree-688m-merger"&gt;absorbed Exscientia in a $688 million merger&lt;/a&gt;, takes a different approach entirely, running millions of phenomics experiments weekly on 65 petabytes of biological imaging data. Both companies own wet-lab infrastructure that Isomorphic lacks.&lt;/p&gt;
&lt;p&gt;What Isomorphic has: the AlphaFold lineage, Alphabet-scale compute, and a unified architecture where each prediction task informs the others. On talent, the company appears to be doing well: 4.7/5 on Glassdoor, 100% CEO approval. They hired Dr. Ben Wolf as CMO in June 2025, formerly at Relay Therapeutics with FDA approval experience for Ayvakit and Gavreto. They opened a Cambridge, Massachusetts office. These are the moves of a company staffing up for clinical reality, not just publishing papers.&lt;/p&gt;
&lt;p&gt;The open-source threat is real but manageable in the near term. &lt;a href="https://techcrunch.com/2026/01/16/from-openais-offices-to-a-deal-with-eli-lilly-how-chai-discovery-became-one-of-the-flashiest-names-in-ai-drug-development/"&gt;Chai Discovery&lt;/a&gt; (backed by OpenAI at a &lt;a href="https://techcrunch.com/2025/12/15/openai-backed-biotech-firm-chai-discovery-raises-130m-series-b-at-1-3b-valuation/"&gt;$1.3 billion valuation&lt;/a&gt;, now partnered with Lilly on biologics) and &lt;a href="https://www.genengnews.com/topics/artificial-intelligence/pharma-bets-big-on-ai-platforms-with-flurry-of-new-year-deals/"&gt;Boltz&lt;/a&gt; (partnered with Pfizer) are both making progress. But the gap between IsoDDE&amp;rsquo;s numbers and the best open-source alternatives is wide enough that Isomorphic has time, maybe 18-24 months, to convert its computational lead into clinical evidence before the field catches up.&lt;/p&gt;
&lt;h2 id="alphabets-asymmetric-position"&gt;Alphabet&amp;rsquo;s asymmetric position&lt;/h2&gt;
&lt;p&gt;For Alphabet, Isomorphic is a rounding error that could become a franchise. The Other Bets segment posted a $3.6 billion operating loss in 2025. Alphabet&amp;rsquo;s net income was $132 billion. The &lt;a href="https://www.isomorphiclabs.com/articles/isomorphic-labs-announces-600m-external-investment-round"&gt;$600 million funding round&lt;/a&gt; led by Thrive Capital in March 2025 suggests the company understands the urgency of getting to the clinic, but Alphabet can sustain this bet indefinitely while the underlying science matures, and that patience is itself a competitive advantage most biotech startups don&amp;rsquo;t have. But does better computation translate to better medicine? IsoDDE&amp;rsquo;s benchmarks are the best evidence so far that AI can model molecular interactions at this resolution. But Demis Hassabis &lt;a href="https://www.isomorphiclabs.com/our-tech"&gt;said it himself&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We know we&amp;rsquo;re never going to solve drug design with AlphaFold alone. We&amp;rsquo;ll need half a dozen more breakthroughs of that magnitude.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;IsoDDE might be one of those breakthroughs. The clinical data, when it arrives, will tell us whether it&amp;rsquo;s the kind that matters.&lt;/p&gt;</description></item><item><title>The Last Architecture Designed by Hand</title><link>https://philippdubach.com/posts/the-last-architecture-designed-by-hand/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/the-last-architecture-designed-by-hand/</guid><description>&lt;blockquote&gt;
&lt;p&gt;I bet there is another new architecture to find that is gonna be as big of a gain as transformers were over LSTMs.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sam Altman, the CEO of the company most invested in the transformer is telling a room of students it isn&amp;rsquo;t the final form. So what comes after the transformer? He&amp;rsquo;s probably right that something will, and the evidence is no longer anecdotal. Several recent papers have proved that the transformer&amp;rsquo;s worst properties are structural, not engineering problems to be fixed with better data or more compute, but mathematical lower bounds.&lt;/p&gt;
&lt;p&gt;The transformer, born from the 2017 paper &lt;a href="https://arxiv.org/abs/1706.03762"&gt;&amp;ldquo;Attention Is All You Need,&amp;rdquo;&lt;/a&gt; took us from barely-coherent GPT-2 to GPT-4 in five years. An extraordinary run. But &lt;a href="https://arxiv.org/abs/2209.04881"&gt;Duman Keles et al.&lt;/a&gt; proved that O(n²) attention complexity isn&amp;rsquo;t an implementation detail. It&amp;rsquo;s a necessary lower bound unless a foundational conjecture in complexity theory turns out to be wrong. Double the context, quadruple the cost. The KV cache for a 70B model at one-million-token context eats roughly &lt;strong&gt;320 GB&lt;/strong&gt; of GPU memory. Most hardware can&amp;rsquo;t hold it.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-last-architecture-quadratic-attention-1-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/last-architecture-quadratic-attention-1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/last-architecture-quadratic-attention-1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/last-architecture-quadratic-attention-1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/last-architecture-quadratic-attention-1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/last-architecture-quadratic-attention-1.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/last-architecture-quadratic-attention-1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/last-architecture-quadratic-attention-1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/last-architecture-quadratic-attention-1.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/last-architecture-quadratic-attention-1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/last-architecture-quadratic-attention-1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/last-architecture-quadratic-attention-1.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/last-architecture-quadratic-attention-1.png"
alt="Quadratic attention scaling: a 4x4 attention matrix requires 16 computations while an 8x8 matrix requires 64, showing how doubling context quadruples cost in transformer architectures"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-last-architecture-quadratic-attention-1-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/last-architecture-quadratic-attention-1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Quadratic attention scaling: a 4x4 attention matrix requires 16 computations while an 8x8 matrix requires 64, showing how doubling context quadruples cost in transformer architectures" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;The problems run deeper than compute costs. &lt;a href="https://arxiv.org/abs/2311.14648"&gt;Kalai and Vempala&lt;/a&gt; proved that any calibrated language model &lt;em&gt;must&lt;/em&gt; hallucinate at a certain rate. A &lt;a href="https://arxiv.org/abs/2509.04664"&gt;2025 follow-up&lt;/a&gt; goes further: no computable LLM can be universally correct on unbounded queries. Not fixable with better training data. Not fixable with RLHF. A statistical property of how these models generate text.&lt;/p&gt;
&lt;p&gt;On reasoning: &lt;a href="https://arxiv.org/abs/2305.18654"&gt;Dziri et al.&lt;/a&gt; showed transformers collapse multi-step reasoning into pattern matching. Performance drops exponentially as task complexity rises. GPT-4 gets &lt;strong&gt;59%&lt;/strong&gt; on 3-digit multiplication. &lt;a href="https://arxiv.org/abs/2603.10123"&gt;Chowdhury&lt;/a&gt; proved the &amp;ldquo;lost in the middle&amp;rdquo; problem, models performing 20-30% worse on information buried mid-context, is a geometric property of the architecture itself. Present at initialization already, before any training occurs.&lt;/p&gt;
&lt;p&gt;These are theorems. The architecture that runs every frontier AI system has a ceiling, and the ceiling is proved.&lt;/p&gt;
&lt;h2 id="the-post-transformer-stack-is-already-in-production"&gt;The post-transformer stack is already in production&lt;/h2&gt;
&lt;p&gt;A &lt;a href="https://arxiv.org/abs/2510.05364"&gt;survey by Fichtl et al.&lt;/a&gt; checked the top 10 models on every major benchmark. Zero were non-transformer. The transformer is still winning on the leaderboards. But the field is moving toward hybrid architectures. Over &lt;strong&gt;60%&lt;/strong&gt; of frontier models released in 2025 already use Mixture of Experts. &lt;a href="https://arxiv.org/abs/2412.19437"&gt;DeepSeek-V3&lt;/a&gt; has 671B total parameters but activates only 37B per token. It trained for &lt;strong&gt;2.788 million H800 GPU hours&lt;/strong&gt;, a fraction of what a comparable dense model would require, and matched frontier closed-source performance. By late 2025, &lt;a href="https://c3.unu.edu/blog/inside-deepseeks-end-of-year-ai-breakthrough-what-the-new-models-deliver"&gt;DeepSeek-V3.2 reportedly hit GPT-5-level performance at 90% lower training cost&lt;/a&gt;. MoE doesn&amp;rsquo;t replace the transformer. It changes the economics so radically that it&amp;rsquo;s arguably the single biggest practical advance since the original architecture.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-last-architecture-moe-routing-1-png-2" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/last-architecture-moe-routing-1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/last-architecture-moe-routing-1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/last-architecture-moe-routing-1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/last-architecture-moe-routing-1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/last-architecture-moe-routing-1.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/last-architecture-moe-routing-1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/last-architecture-moe-routing-1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/last-architecture-moe-routing-1.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/last-architecture-moe-routing-1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/last-architecture-moe-routing-1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/last-architecture-moe-routing-1.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/last-architecture-moe-routing-1.png"
alt="Mixture of Experts routing: an input token passes through a router that activates only 2 of 8 expert blocks, meaning DeepSeek-V3 uses just 37B of its 671B total parameters per token"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-last-architecture-moe-routing-1-png-2" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/last-architecture-moe-routing-1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Mixture of Experts routing: an input token passes through a router that activates only 2 of 8 expert blocks, meaning DeepSeek-V3 uses just 37B of its 671B total parameters per token" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;The more interesting part is what happens when you blend attention with state space models. &lt;a href="https://goombalab.github.io/blog/2024/mamba2-part1-model/"&gt;Gu and Dao (2024)&lt;/a&gt; proved SSMs and attention are mathematically dual: two views of the same computation. That theoretical result is showing up in production. &lt;a href="https://www.ai21.com/jamba/"&gt;AI21&amp;rsquo;s Jamba&lt;/a&gt; runs a 1:7 attention-to-Mamba ratio and gets &lt;strong&gt;256K&lt;/strong&gt; context at &lt;strong&gt;3x&lt;/strong&gt; throughput over Mixtral. Alibaba&amp;rsquo;s Qwen3-Next shipped the first top-tier model with a hybrid backbone: &lt;a href="https://github.com/rasbt/LLMs-from-scratch/blob/main/ch04/08_deltanet/README.md"&gt;Gated DeltaNet&lt;/a&gt; for linear attention at a 3:1 ratio with full attention. Microsoft&amp;rsquo;s Phi-4-mini-flash-reasoning is 75% Mamba layers with &lt;strong&gt;10x&lt;/strong&gt; throughput at &lt;strong&gt;2-3x&lt;/strong&gt; lower latency.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-last-architecture-hybrid-layer-stack-1-png-3" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/last-architecture-hybrid-layer-stack-1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/last-architecture-hybrid-layer-stack-1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/last-architecture-hybrid-layer-stack-1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/last-architecture-hybrid-layer-stack-1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/last-architecture-hybrid-layer-stack-1.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/last-architecture-hybrid-layer-stack-1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/last-architecture-hybrid-layer-stack-1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/last-architecture-hybrid-layer-stack-1.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/last-architecture-hybrid-layer-stack-1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/last-architecture-hybrid-layer-stack-1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/last-architecture-hybrid-layer-stack-1.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/last-architecture-hybrid-layer-stack-1.png"
alt="Hybrid layer stack comparison: a traditional transformer uses 8 attention layers while Jamba uses a 1:7 attention-to-Mamba ratio, achieving 256K context at 3x throughput with the same quality"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-last-architecture-hybrid-layer-stack-1-png-3" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/last-architecture-hybrid-layer-stack-1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Hybrid layer stack comparison: a traditional transformer uses 8 attention layers while Jamba uses a 1:7 attention-to-Mamba ratio, achieving 256K context at 3x throughput with the same quality" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;Diffusion language models are the wild card. &lt;a href="https://arxiv.org/abs/2502.09992"&gt;LLaDA&lt;/a&gt;, the first 8B-parameter diffusion LLM, treats text generation as denoising rather than sequential token prediction. It matches Llama3-8B and does something no autoregressive model can: it solves the &amp;ldquo;reversal curse,&amp;rdquo; outperforming GPT-4o on reversal tasks. &lt;a href="https://medium.com/@ML-today/diffusion-models-for-language-from-early-promise-to-a-bold-new-frontier-with-llada-and-the-rise-of-ee80c7ffb8fa"&gt;Gemini Diffusion&lt;/a&gt; hit &lt;strong&gt;1,479 tokens per second&lt;/strong&gt;. Over 50 papers on diffusion LLMs appeared in 2025. If parallel generation works reliably at scale, inference economics change completely.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://arxiv.org/pdf/2510.05364"&gt;Alman and Yu&lt;/a&gt; proved there are tasks where every subquadratic alternative has a fundamental theoretical gap. That&amp;rsquo;s the strongest mathematical argument for why hybrids, not clean replacements, are what comes next.&lt;/p&gt;
&lt;h2 id="the-search-is-no-longer-human-speed"&gt;The search is no longer human-speed&lt;/h2&gt;
&lt;p&gt;The part of this I find most interesting is the recursion. AI systems are now running the search for their own architectural successors.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://deepmind.google/blog/alphaevolve-a-gemini-powered-coding-agent-for-designing-advanced-algorithms/"&gt;AlphaEvolve&lt;/a&gt; an evolutionary coding agent built on Gemini 2.0 found a way to multiply 4x4 complex matrices in 48 scalar multiplications: the first improvement on Strassen&amp;rsquo;s 56-year-old bound. Across &lt;a href="https://www.infoq.com/news/2025/05/google-alpha-evolve/"&gt;50+ open math problems&lt;/a&gt;, it matched the best known solutions 75% of the time and beat them 20% of the time. The recursive part: AlphaEvolve found a &lt;a href="https://cloud.google.com/blog/products/ai-machine-learning/alphaevolve-on-google-cloud"&gt;23% speedup on a kernel inside Gemini&amp;rsquo;s own architecture&lt;/a&gt;, cutting Gemini&amp;rsquo;s training time by 1% and recovering &lt;strong&gt;0.7%&lt;/strong&gt; of Google&amp;rsquo;s total compute. Gemini making Gemini faster.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.marktechpost.com/2026/03/08/andrej-karpathy-open-sources-autoresearch-a-630-line-python-tool-letting-ai-agents-run-autonomous-ml-experiments-on-single-gpus/"&gt;Karpathy&amp;rsquo;s AutoResearch&lt;/a&gt;, released March 7, 2026, is a 630-line Python script that lets an AI agent modify training code, run 5-minute experiments, check results, and iterate. He pointed it at his own highly-tuned &amp;ldquo;Time to GPT-2&amp;rdquo; codebase. The agent found about 20 additive improvements that transferred to larger models, cutting the metric by &lt;strong&gt;11%&lt;/strong&gt;. &lt;a href="https://officechai.com/ai/andrej-karpathys-autoresearch-project-lets-agents-run-100-ai-research-experiments-while-you-sleep/"&gt;Shopify CEO Tobi Lutke tried it overnight&lt;/a&gt;: 37 experiments, 19% validation improvement, a 0.8B model outperforming a 1.6B one. &lt;a href="https://github.com/SakanaAI/AI-Scientist-v2"&gt;Sakana AI&amp;rsquo;s AI Scientist v2&lt;/a&gt; went further and produced the first AI-authored paper accepted through standard peer review. &lt;a href="https://controlai.news/p/the-ultimate-risk-recursive-self"&gt;OpenAI said publicly in late 2025&lt;/a&gt; that it&amp;rsquo;s researching how to safely build AI systems capable of recursive self-improvement. Two years ago this was a thought experiment.&lt;/p&gt;
&lt;h2 id="what-the-hardware-decides"&gt;What the hardware decides&lt;/h2&gt;
&lt;p&gt;The transformer won not because attention was theoretically prettier than recurrence. It won because it parallelized well on GPUs. Whatever comes next has to clear the same bar.&lt;/p&gt;
&lt;p&gt;Pre-training scaling for dense transformers is flattening. &lt;a href="https://fortune.com/2025/02/25/what-happened-gpt-5-openai-orion-pivot-scaling-pre-training-llm-agi-reasoning/"&gt;OpenAI spent at least $500 million per major training run on Orion&lt;/a&gt;. The model hit GPT-4 performance after 20% of training; the remaining 80% gave diminishing returns. They downgraded it from GPT-5 to GPT-4.5. &lt;a href="https://artificialintelligencemonaco.substack.com/p/ilya-sutskever-on-superintelligence"&gt;Sutskever&lt;/a&gt; at NeurIPS 2024: &amp;ldquo;Pre-training as we know it will end. The data is not growing because we have but one internet.&amp;rdquo; His startup SSI has &lt;a href="https://www.arturmarkus.com/ilya-sutskevers-ssi-raises-1b-at-30b-valuation-with-zero-revenue-6x-jump-in-5-months-redefines-ai-investment-logic/"&gt;raised to a $32 billion valuation with about 20 employees and zero revenue&lt;/a&gt;. A bet that the next leap requires something architecturally new.&lt;/p&gt;
&lt;p&gt;But test-time compute opened a different axis entirely. OpenAI&amp;rsquo;s o3 hit &lt;strong&gt;87.5%&lt;/strong&gt; on ARC-AGI, beating most humans. DeepSeek-R1 matched o1-level reasoning at &lt;strong&gt;70%&lt;/strong&gt; lower cost. &lt;a href="https://aibusiness.com/language-models/ai-model-scaling-isn-t-over-it-s-entering-a-new-era"&gt;OpenAI&amp;rsquo;s inference spending reached $2.3 billion in 2024&lt;/a&gt;: &lt;strong&gt;15x&lt;/strong&gt; what they spent training GPT-4.5. &lt;a href="https://www.dwarkesh.com/p/dario-amodei"&gt;Dario Amodei&lt;/a&gt; at Morgan Stanley in March 2026: &amp;ldquo;We do not see hitting the wall. We don&amp;rsquo;t see a wall.&amp;rdquo; He&amp;rsquo;s talking about this axis, inference-time compute and RL from verifiable rewards, not about pre-training bigger dense models. The Densing Law now shows capability per parameter doubling every &lt;strong&gt;3.5 months&lt;/strong&gt; through better data, MoE, and distillation. Last year&amp;rsquo;s frontier, matched with a fraction of the parameters.&lt;/p&gt;
&lt;p&gt;Inference demand is projected to &lt;a href="https://v-chandra.github.io/on-device-llms/"&gt;exceed training demand by 118x&lt;/a&gt;. Global data center power is heading toward &lt;a href="https://www.iea.org/reports/energy-and-ai/executive-summary"&gt;945 TWh by 2030&lt;/a&gt;, roughly Japan&amp;rsquo;s total electricity consumption. An architecture that scores 2x better on benchmarks but runs 3x worse at inference won&amp;rsquo;t win. What ships is whatever fits the hardware. The transformer isn&amp;rsquo;t going away. It&amp;rsquo;s becoming one component in a larger stack: attention for recall, SSMs for cheap sequence processing, MoE for capacity, maybe diffusion for parallel output. &lt;a href="https://www.ai21.com/jamba/"&gt;Jamba&lt;/a&gt;, &lt;a href="https://arxiv.org/html/2411.13676v1"&gt;Hymba&lt;/a&gt;, and Qwen3-Next already ship this way. That&amp;rsquo;s not a prediction. It&amp;rsquo;s what&amp;rsquo;s in production.&lt;/p&gt;
&lt;p&gt;How fast the stack evolves is the open question. The answer, given AlphaEvolve and AutoResearch and AI Scientist v2, is faster than any previous architectural transition. I don&amp;rsquo;t know whether the transformer remains the dominant layer for two years or five. But I&amp;rsquo;m fairly confident that whatever comes next, humans won&amp;rsquo;t have designed it alone.&lt;/p&gt;</description></item><item><title>MCP vs A2A in 2026: How the AI Protocol War Ends</title><link>https://philippdubach.com/posts/mcp-vs-a2a-in-2026-how-the-ai-protocol-war-ends/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/mcp-vs-a2a-in-2026-how-the-ai-protocol-war-ends/</guid><description>&lt;p&gt;On March 26, 2025, Sam Altman posted the following &lt;a href="https://x.com/sama/status/1904957253456941061"&gt;three sentences&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;people love MCP and we are excited to add support across our products.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;MCP is Anthropic&amp;rsquo;s Model Context Protocol. OpenAI is Anthropic&amp;rsquo;s most direct competitor. Altman was endorsing a rival&amp;rsquo;s standard. That post may be the most significant event in enterprise AI infrastructure this year. When your main competitor adopts your protocol, the war is close to over. I&amp;rsquo;ve been watching this play out since &lt;a href="https://www.anthropic.com/news/model-context-protocol"&gt;Anthropic launched MCP in November 2024&lt;/a&gt;, and I want to work through what&amp;rsquo;s happening: who controls what, what &amp;ldquo;interoperability&amp;rdquo; means in practice, and whether any of this follows patterns we&amp;rsquo;ve seen before.&lt;/p&gt;
&lt;h2 id="what-is-mcp"&gt;What is MCP&lt;/h2&gt;
&lt;p&gt;MCP is a client-server protocol, licensed MIT, built on JSON-RPC 2.0. The mental model is simple: an AI agent (the host) connects through a client to MCP servers that expose tools, data sources, and context. Instead of building a bespoke integration every time Claude or GPT needs to talk to Salesforce, GitHub, or your internal database, you build one MCP server. Any compatible host can then use it.&lt;/p&gt;
&lt;p&gt;The problem it solves, which explains why it spread so fast, is that without a standard like this, integration complexity grows quadratically. Every new AI model times every new tool equals a new custom integration. MCP tries to make it linear.&lt;/p&gt;
&lt;p&gt;By December 2025, &lt;a href="https://www.anthropic.com/news/donating-the-model-context-protocol-and-establishing-of-the-agentic-ai-foundation"&gt;Anthropic&amp;rsquo;s own count&lt;/a&gt; put the public MCP server ecosystem at &lt;strong&gt;10,000+&lt;/strong&gt; active servers and &lt;strong&gt;97 million&lt;/strong&gt; monthly SDK downloads across the Python and TypeScript SDKs. &lt;a href="https://github.blog/news-insights/octoverse/octoverse-a-new-developer-joins-github-every-second-as-ai-leads-typescript-to-1/"&gt;GitHub&amp;rsquo;s 2025 Octoverse report&lt;/a&gt; flagged MCP as a standout, hitting &lt;strong&gt;37,000 stars&lt;/strong&gt; in eight months. The unofficial registry mcp.so lists over 18,000 servers. Official SDKs now cover ten languages, including Python, TypeScript, Java, C#, Go, Kotlin, Rust, and Swift.&lt;/p&gt;
&lt;p&gt;The companies building MCP integrations: Microsoft, Salesforce, Cloudflare, GitHub, Stripe, Atlassian, Figma, Snowflake, Databricks, New Relic. At &lt;a href="https://blog.cloudflare.com/mcp-demo-day/"&gt;Cloudflare&amp;rsquo;s MCP Demo Day in May 2025&lt;/a&gt;, Asana, PayPal, Sentry, and Webflow all shipped remote servers in a single afternoon. Gartner predicts 75% of API gateway vendors will have MCP features by 2026.&lt;/p&gt;
&lt;p&gt;OpenAI&amp;rsquo;s adoption went beyond Altman&amp;rsquo;s post. MCP support rolled out across their Agents SDK (March 2025), &lt;a href="https://openai.com/index/new-tools-and-features-in-the-responses-api/"&gt;Responses API (May 2025)&lt;/a&gt;, &lt;a href="https://openai.com/index/introducing-gpt-realtime/"&gt;Realtime API (August 2025)&lt;/a&gt;, and &lt;a href="https://help.openai.com/en/articles/12584461-developer-mode-and-mcp-apps-in-chatgpt-beta"&gt;ChatGPT Developer Mode (September 2025)&lt;/a&gt;. The two companies later &lt;a href="http://blog.modelcontextprotocol.io/posts/2025-11-21-mcp-apps/"&gt;co-authored the MCP Apps Extension&lt;/a&gt;. You don&amp;rsquo;t see that often between direct competitors.&lt;/p&gt;
&lt;p&gt;One performance claim circulates in blog posts and marketing materials: that organizations implementing MCP report &amp;ldquo;40–60% faster agent deployment times.&amp;rdquo; I have not found a primary source for this. No survey, no case study, no named company. I&amp;rsquo;d treat it as marketing content until someone produces the underlying data.&lt;/p&gt;
&lt;h2 id="googles-a2a-fills-a-different-layer"&gt;Google&amp;rsquo;s A2A fills a different layer&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://developers.googleblog.com/en/a2a-a-new-era-of-agent-interoperability/"&gt;Google launched A2A, the Agent-to-Agent protocol, at Cloud Next on April 9, 2025&lt;/a&gt;, five months after MCP. Google didn&amp;rsquo;t position A2A as MCP replacement. They called it a complement. I think that&amp;rsquo;s honest, but it takes a minute to see why.&lt;/p&gt;
&lt;p&gt;MCP connects an agent to tools; A2A connects agents to each other, the two protocols produce different behavior.&lt;/p&gt;
&lt;p&gt;When an MCP host calls an MCP server, it knows exactly what it&amp;rsquo;s getting: structured tool descriptions, specific function signatures, predictable outputs. The agent can see inside the tool. A2A works differently. Agents remain opaque to each other. An A2A agent publishes an &amp;ldquo;Agent Card,&amp;rdquo; a JSON metadata document at a well-known URL, describing its capabilities and authentication requirements. Other agents discover it, negotiate tasks through a defined lifecycle (submitted, working, input-required, completed), and collaborate without sharing memory or internal state.&lt;/p&gt;
&lt;p&gt;Google&amp;rsquo;s own documentation uses a repair shop analogy. MCP is how the mechanic uses diagnostic equipment. A2A is how the customer talks to the shop manager, or how the manager coordinates with a parts supplier. It works: both conversations happen in a real repair shop, and cutting either one doesn&amp;rsquo;t simplify anything.&lt;/p&gt;
&lt;p&gt;A2A &lt;a href="https://developers.googleblog.com/en/a2a-a-new-era-of-agent-interoperability/"&gt;launched with 50+ partner organizations&lt;/a&gt; and &lt;a href="https://cloud.google.com/blog/products/ai-machine-learning/agent2agent-protocol-is-getting-an-upgrade"&gt;grew to 150+ by July 2025&lt;/a&gt;. The list includes Atlassian, Salesforce, SAP, ServiceNow, McKinsey, BCG, Accenture. &lt;a href="https://developers.googleblog.com/en/google-cloud-donates-a2a-to-linux-foundation/"&gt;Google donated A2A to the Linux Foundation in June 2025&lt;/a&gt;. &lt;a href="https://lfaidata.foundation/communityblog/2025/08/29/acp-joins-forces-with-a2a-under-the-linux-foundations-lf-ai-data/"&gt;IBM&amp;rsquo;s competing Agent Communication Protocol merged into A2A in August&lt;/a&gt;, with IBM&amp;rsquo;s engineers joining the technical steering committee. As of February 2026, A2A has roughly &lt;strong&gt;21,900 GitHub stars&lt;/strong&gt;, about 40% of MCP&amp;rsquo;s total. &lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-mcp-vs-a2a-protocol-race-png-2" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/mcp-vs-a2a-protocol-race.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/mcp-vs-a2a-protocol-race.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/mcp-vs-a2a-protocol-race.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/mcp-vs-a2a-protocol-race.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/mcp-vs-a2a-protocol-race.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/mcp-vs-a2a-protocol-race.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/mcp-vs-a2a-protocol-race.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/mcp-vs-a2a-protocol-race.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/mcp-vs-a2a-protocol-race.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/mcp-vs-a2a-protocol-race.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/mcp-vs-a2a-protocol-race.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/mcp-vs-a2a-protocol-race.png"
alt="Exhibit comparing MCP and A2A protocol adoption: MCP leads with 37,000 GitHub stars, 18,000&amp;#43; public servers, 97M monthly SDK downloads, and 10 SDK languages versus A2A at 21,900 stars, no public registry, and 3 languages"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-mcp-vs-a2a-protocol-race-png-2" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/mcp-vs-a2a-protocol-race.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Exhibit comparing MCP and A2A protocol adoption: MCP leads with 37,000 GitHub stars, 18,000&amp;#43; public servers, 97M monthly SDK downloads, and 10 SDK languages versus A2A at 21,900 stars, no public registry, and 3 languages" decoding="async"&gt;
&lt;/dialog&gt;
&lt;/p&gt;
&lt;h2 id="what-history-can-tell-us-about-how-this-ends"&gt;What history can tell us about how this ends&lt;/h2&gt;
&lt;p&gt;AI agent protocol wars have a consistent pattern. The winner is almost never the technically superior option. It&amp;rsquo;s the one that ships first and gets adopted before anyone can catch up.&lt;/p&gt;
&lt;p&gt;TCP/IP and OSI are the canonical example. The OSI model, published by ISO in 1983, was architecturally more rigorous than TCP/IP&amp;rsquo;s four-layer stack. It had real institutional backing: the US Commerce Department published its GOSIP mandate in August 1988, with formal enforcement beginning in 1990. European governments followed. OSI still lost. TCP/IP won because it had running code, freely available implementations bundled with BSD Unix workstations, while OSI remained elegant theory trapped in committee processes. By 1994 the outcome was obvious. David Clark&amp;rsquo;s &lt;a href="https://groups.csail.mit.edu/ana/People/DDC/future_ietf_92.pdf"&gt;IETF motto captures why&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We reject kings, presidents and voting. We believe in rough consensus and running code.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;VHS versus Betamax is the other lesson people cite, often incorrectly. Betamax had better picture quality. VHS won anyway, and the usual explanation is the movie library. That&amp;rsquo;s part of it. But JVC openly licensed VHS to manufacturers across the industry, which drove prices down and built a content ecosystem Sony couldn&amp;rsquo;t match. By 1987, &lt;a href="https://en.wikipedia.org/wiki/Videotape_format_war"&gt;VHS held 90% of the US VCR market&lt;/a&gt;. Sony conceded in 1988 by manufacturing VHS players. Ecosystem breadth, once established, creates a gravitational field that technical superiority alone can&amp;rsquo;t escape.&lt;/p&gt;
&lt;p&gt;USB is a more recent example with a twist. The consortium, Compaq, DEC, IBM, Intel, Microsoft, NEC, Nortel, formed in 1994 and &lt;a href="https://ethw.org/Milestones:Universal_Serial_Bus_(USB),_1996"&gt;shipped USB 1.0 in January 1996&lt;/a&gt;. Adoption was sluggish until &lt;a href="https://en.wikipedia.org/wiki/IMac_G3"&gt;Apple shipped the iMac G3 in August 1998&lt;/a&gt; with only USB ports, forcing the entire peripheral industry to follow. One player is so central to the ecosystem that their adoption forces everyone else&amp;rsquo;s hand. OpenAI adopting MCP in March 2025 is MCP&amp;rsquo;s iMac moment.&lt;/p&gt;
&lt;p&gt;But USB also offers a warning. USB-C&amp;rsquo;s physical connector won universally, then the underlying protocol fragmented. The same connector could carry anything from USB 2.0 to USB4, 5W to 240W of power, depending on what you plugged together. &lt;a href="https://single-market-economy.ec.europa.eu/sectors/electrical-and-electronic-engineering-industries-eei/radio-equipment-directive-red/one-common-charging-solution-all_en"&gt;The EU eventually legislated convergence through its Radio Equipment Directive, which took effect December 28, 2024&lt;/a&gt;. A standard can win and still fragment when nobody governs the details. &lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-standards-war-precedents-png-3" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/standards-war-precedents.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/standards-war-precedents.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/standards-war-precedents.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/standards-war-precedents.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/standards-war-precedents.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/standards-war-precedents.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/standards-war-precedents.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/standards-war-precedents.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/standards-war-precedents.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/standards-war-precedents.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/standards-war-precedents.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/standards-war-precedents.png"
alt="Exhibit comparing historical standards wars: TCP/IP versus OSI decided by running code, VHS versus Betamax decided by open licensing, USB decided by Apple iMac catalyst event, all paralleling MCP ecosystem-first trajectory"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-standards-war-precedents-png-3" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/standards-war-precedents.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Exhibit comparing historical standards wars: TCP/IP versus OSI decided by running code, VHS versus Betamax decided by open licensing, USB decided by Apple iMac catalyst event, all paralleling MCP ecosystem-first trajectory" decoding="async"&gt;
&lt;/dialog&gt;
&lt;/p&gt;
&lt;h2 id="what-now"&gt;What now?&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.linuxfoundation.org/press/linux-foundation-announces-the-formation-of-the-agentic-ai-foundation"&gt;The Linux Foundation&amp;rsquo;s Agentic AI Foundation (AAIF), launched December 9, 2025&lt;/a&gt; with Anthropic, OpenAI, and Block as co-founders, &lt;a href="https://www.linuxfoundation.org/press/agentic-ai-foundation-welcomes-97-new-members"&gt;now has 146 member organizations&lt;/a&gt;, including JPMorgan Chase, American Express, Autodesk, Red Hat, and Huawei. A2A has its own Linux Foundation governance body. MCP sits within AAIF. Both are under the same umbrella, but they&amp;rsquo;re not the same project.&lt;/p&gt;
&lt;p&gt;This is the governance structure you typically see after a standards war has been decided in principle but before the implementation details have been hammered out. Think of the W3C in 1994, not the W3C in 1998. For anyone making architectural decisions right now, the practical question isn&amp;rsquo;t MCP versus A2A. Most major enterprise platforms already support both. Salesforce, SAP, IBM, Microsoft, and AWS have committed to both. The question is sequencing and depth.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://research.isg-one.com/analyst-perspectives/a2a-v-mcp-why-ai-agents-need-both"&gt;ISG analyst David Menninger&lt;/a&gt; put it clearly: &amp;ldquo;MCP first for sharing context; then A2A for dynamic interaction among agents.&amp;rdquo; That&amp;rsquo;s the sequence I&amp;rsquo;d follow. MCP is the more mature protocol with the larger server ecosystem. The 10,000+ existing servers represent integration work that doesn&amp;rsquo;t need to be rebuilt. Start there. Layer A2A on top when your use cases require multi-agent coordination across organizational boundaries, supply chain, cross-platform orchestration, which is exactly where the Tyson Foods and Adobe deployments have landed.&lt;/p&gt;
&lt;p&gt;MCP security deserves a separate conversation. &lt;a href="https://astrix.security/learn/blog/state-of-mcp-server-security-2025/"&gt;Astrix Security&amp;rsquo;s research&lt;/a&gt; found that 53% of MCP servers rely on static credentials rather than OAuth. A critical vulnerability in the mcp-remote npm package (CVE-2025-6514) exposed 437,000+ installations to shell injection. TCP/IP had its share of early-stage security problems in the 1980s, so I&amp;rsquo;m not calling this fatal. But these are real vulnerabilities, and they will cause real incidents before the posture matures.&lt;/p&gt;
&lt;p&gt;Multiple analyst firms converge on an agentic AI market of roughly &lt;strong&gt;$7–8 billion in 2025&lt;/strong&gt;, growing at 40–50% annually, with projections ranging from &lt;a href="https://www.grandviewresearch.com/industry-analysis/ai-agents-market-report"&gt;$50 billion by 2030&lt;/a&gt; to &lt;a href="https://www.precedenceresearch.com/agentic-ai-market"&gt;$199 billion by 2034&lt;/a&gt;. NVIDIA&amp;rsquo;s CUDA is the comparison that matters: 4 million developers, 15 years of compounding library investment, and switching costs that produce &lt;a href="https://nvidianews.nvidia.com/news/nvidia-announces-financial-results-for-fourth-quarter-and-fiscal-2025"&gt;$130.5 billion in annual revenue at 73% gross margins&lt;/a&gt;. MCP&amp;rsquo;s 97 million monthly downloads aren&amp;rsquo;t CUDA yet. But the trajectory points the same direction. &lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-agentic-ai-market-trajectory-png-5" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/agentic-ai-market-trajectory.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/agentic-ai-market-trajectory.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/agentic-ai-market-trajectory.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/agentic-ai-market-trajectory.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/agentic-ai-market-trajectory.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/agentic-ai-market-trajectory.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/agentic-ai-market-trajectory.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/agentic-ai-market-trajectory.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/agentic-ai-market-trajectory.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/agentic-ai-market-trajectory.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/agentic-ai-market-trajectory.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/agentic-ai-market-trajectory.png"
alt="Exhibit showing agentic AI market projections from $7-8 billion in 2025 to $50 billion by 2030 and up to $199 billion by 2034, with consensus 45% CAGR and comparison to NVIDIA CUDA $131B annual revenue"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-agentic-ai-market-trajectory-png-5" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/agentic-ai-market-trajectory.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Exhibit showing agentic AI market projections from $7-8 billion in 2025 to $50 billion by 2030 and up to $199 billion by 2034, with consensus 45% CAGR and comparison to NVIDIA CUDA $131B annual revenue" decoding="async"&gt;
&lt;/dialog&gt;
&lt;/p&gt;
&lt;p&gt;My best guess (and I want to be clear it&amp;rsquo;s a guess): MCP becomes the infrastructure layer, A2A becomes the coordination layer, much as TCP handles transport while HTTP handles application-layer communication. Different floors of the same building. The question remains whether 146 AAIF members can hold coherent standards against the competitive pressure of &lt;a href="https://tracxn.com/d/sectors/agentic-ai/__oyRAfdUfHPjf2oap110Wis0Qg12Gd8DzULlDXPJzrzs"&gt;over 1,000 active agentic AI startups&lt;/a&gt;, each with economic incentives to differentiate.&lt;/p&gt;</description></item><item><title>AI Models Are the New Rebar</title><link>https://philippdubach.com/posts/ai-models-are-the-new-rebar/</link><pubDate>Wed, 11 Mar 2026 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/ai-models-are-the-new-rebar/</guid><description>&lt;p&gt;&lt;a href="https://huggingface.co/Qwen/Qwen3.5-35B-A3B"&gt;Qwen 3.5-35B-A3B&lt;/a&gt;, a model released by Alibaba in February 2026, runs on a single consumer GPU with 24 gigabytes of VRAM. A secondhand RTX 4090, available for around $2,000, generates 60 to 100 tokens per second with it. On select benchmarks per Alibaba&amp;rsquo;s own evaluations, it matches or beats Claude Sonnet 4.5. The Qwen 3.5 Flash tier costs &lt;a href="https://www.alibabacloud.com/help/en/model-studio/model-pricing"&gt;&lt;strong&gt;$0.10 per million input tokens&lt;/strong&gt;&lt;/a&gt; through Alibaba&amp;rsquo;s API. &lt;a href="https://www.anthropic.com/news/claude-sonnet-4-5"&gt;Claude Sonnet 4.5 costs &lt;strong&gt;$3.00&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s a 97 percent discount. For comparable performance.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not cherry-picking. Zhipu AI&amp;rsquo;s &lt;a href="https://medium.com/@mlabonne/glm-5-chinas-first-public-ai-company-ships-a-frontier-model-a068cecb74e3"&gt;GLM-5 scores 1,452 on the Chatbot Arena leaderboard&lt;/a&gt;, the highest Elo rating of any open-source model, and its developer&amp;rsquo;s own figures put it at roughly 95 percent of closed-model performance at around 15 percent of the cost. Moonshot AI&amp;rsquo;s &lt;a href="https://www.kimi.com/blog/kimi-k2-5"&gt;Kimi K2.5&lt;/a&gt;, a trillion-parameter model, scores 99.0 on HumanEval and 96.1 on AIME 2025, with a Chatbot Arena Elo of 1,447, at roughly 88 percent less than Claude Opus 4.5 per token. The &lt;a href="https://hai.stanford.edu/ai-index/2025-ai-index-report/technical-performance"&gt;Stanford HAI 2025 AI Index&lt;/a&gt; found the performance gap between open-source and proprietary AI models on the Chatbot Arena leaderboard shrank from &lt;strong&gt;8 percent to 1.7 percent in a single year&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;This is not an IP story. It is not a China story. It is an industrial economics story. And we know how those end. &lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-ai-performance-vs-price-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/ai-performance-vs-price.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/ai-performance-vs-price.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/ai-performance-vs-price.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/ai-performance-vs-price.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai-performance-vs-price.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/ai-performance-vs-price.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/ai-performance-vs-price.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/ai-performance-vs-price.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai-performance-vs-price.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/ai-performance-vs-price.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/ai-performance-vs-price.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai-performance-vs-price.png"
alt="Exhibit showing open-source AI models have crossed the performance threshold at a fraction of the price, with GLM-5, Kimi K2.5, DeepSeek V3, and Qwen 3.5 Flash all landing in the high-performance low-cost quadrant below $1 per million tokens while Claude Opus 4.5 sits at $15 and GPT-4o at $2.50"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-ai-performance-vs-price-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/ai-performance-vs-price.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Exhibit showing open-source AI models have crossed the performance threshold at a fraction of the price, with GLM-5, Kimi K2.5, DeepSeek V3, and Qwen 3.5 Flash all landing in the high-performance low-cost quadrant below $1 per million tokens while Claude Opus 4.5 sits at $15 and GPT-4o at $2.50" decoding="async"&gt;
&lt;/dialog&gt;
&lt;/p&gt;
&lt;h2 id="what-the-steel-mills-can-tell-us"&gt;What the steel mills can tell us&lt;/h2&gt;
&lt;p&gt;In the mid-1960s, electric arc furnace mini-mills entered the steel market at the lowest-quality segment: rebar. Capital costs ran one-fifth to one-seventh of what an integrated plant required. Nucor, the most aggressive operator, built its first mill for $6 million when a comparable integrated facility cost $500 million or more. The response from companies like U.S. Steel was rational: retreat from low-margin rebar, harvest the better-margin products, improve average profitability in the short term. Sensible but wrong.&lt;/p&gt;
&lt;p&gt;Each segment mini-mills conquered had higher margins than the last. From rebar to structural steel, from structural steel to sheet metal, the disruptors climbed the value chain until there was nowhere left to climb. The American steel industry &lt;a href="https://www.chicagotribune.com/news/ct-xpm-1990-06-04-9002150481-story.html"&gt;lost money for five consecutive years in the early 1980s&lt;/a&gt;, posting aggregate losses of &lt;strong&gt;$3.38 billion in 1982 alone&lt;/strong&gt;. U.S. Steel shed more than half its workforce, pivoted to oil and gas, and by &lt;a href="https://investors.ussteel.com/news-events/news-releases/detail/659/nippon-steel-corporation-nsc-to-acquire-u-s-steel"&gt;June 2025 accepted a $14.9 billion acquisition by Nippon Steel&lt;/a&gt;, a fraction of its inflation-adjusted peak valuation. Nucor, the mini-mill, became the largest American steelmaker.&lt;/p&gt;
&lt;p&gt;Clayton Christensen spent a career documenting this pattern of disruptive innovation. The incumbents never failed because they made bad decisions. They failed because they made good decisions for their existing customers while the market shifted beneath them. OpenAI is serving demanding enterprise customers with the most capable models available. Anthropic is building trust with regulated industries. These are the correct moves for their current customers. They may also be exactly the wrong moves for the next five years.&lt;/p&gt;
&lt;h2 id="the-cost-decline-eats-strategy"&gt;The cost decline eats strategy&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://epoch.ai/data-insights/llm-inference-price-trends"&gt;Epoch AI&amp;rsquo;s research&lt;/a&gt;, published in 2025, found that AI inference prices are declining at a &lt;strong&gt;median rate of 50x per year&lt;/strong&gt; for equivalent performance levels, with a range spanning 9x to 900x depending on the task. Achieving GPT-4&amp;rsquo;s original performance on PhD-level science questions cost $30 per million input tokens when GPT-4 launched in early 2023. Through open-source alternatives today, the same performance costs under $0.10. A roughly 300-fold reduction in three years, at a pace that dwarfs Moore&amp;rsquo;s Law.&lt;/p&gt;
&lt;p&gt;David Cahn at Sequoia Capital put the structural problem plainly in his &lt;a href="https://sequoiacap.com/article/ais-600b-question/"&gt;&amp;quot;$600 Billion Question&amp;quot;&lt;/a&gt; analysis: &amp;ldquo;GPU computing is increasingly turning into a commodity, metered per hour. Without a monopoly or oligopoly, high fixed cost plus low marginal cost businesses almost always see prices competed down to marginal cost, like airlines.&amp;rdquo; The airline analogy is more foreboding than it sounds. The global airline industry generated cumulative net profits of $36 billion between 1945 and 2000, a net margin of 0.8 percent across 55 years. In the 2000s, the industry lost more than it had earned in the prior half-century combined. Even today, &lt;a href="https://www.iata.org/en/pressroom/2025-releases/2025-12-09-01"&gt;IATA projects airlines&amp;rsquo; return on invested capital at 6.8 percent&lt;/a&gt;, below their weighted average cost of capital of 8.2 percent.&lt;/p&gt;
&lt;p&gt;The difference between AI and airlines is that switching a flight carrier requires rebooking. Switching an AI model requires changing two lines of code. &lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-inference-cost-collapse-png-2" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/inference-cost-collapse.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/inference-cost-collapse.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/inference-cost-collapse.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/inference-cost-collapse.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/inference-cost-collapse.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/inference-cost-collapse.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/inference-cost-collapse.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/inference-cost-collapse.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/inference-cost-collapse.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/inference-cost-collapse.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/inference-cost-collapse.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/inference-cost-collapse.png"
alt="Exhibit showing GPT-4 level performance went from $30 to $0.10 per million tokens in three years, with closed proprietary models shown alongside open-source alternatives that now match frontier performance at a fraction of the cost, representing a 300x cost reduction"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-inference-cost-collapse-png-2" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/inference-cost-collapse.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Exhibit showing GPT-4 level performance went from $30 to $0.10 per million tokens in three years, with closed proprietary models shown alongside open-source alternatives that now match frontier performance at a fraction of the cost, representing a 300x cost reduction" decoding="async"&gt;
&lt;/dialog&gt;
&lt;/p&gt;
&lt;h2 id="switching-costs-that-approach-zero"&gt;Switching costs that approach zero&lt;/h2&gt;
&lt;p&gt;The OpenAI API format has become the de facto industry standard, supported by virtually every major model provider and open-source inference engine. &lt;a href="https://github.com/BerriAI/litellm"&gt;LiteLLM&lt;/a&gt;, an open-source gateway with approximately 37,000 GitHub stars, provides a unified interface to over 100 providers through a single configuration change. OpenRouter offers managed access to more than 400 models. Setup time: under five minutes.&lt;/p&gt;
&lt;p&gt;Enterprise behavior already reflects this. Perplexity&amp;rsquo;s own data shows 92 percent of Fortune 500 employees use multi-model AI platforms, and their top enterprise accounts access an average of 30 different models. These are Perplexity&amp;rsquo;s internal figures, not independent market research: treat them as directional. The one meaningful source of lock-in is custom fine-tuned models, which are provider-specific and cannot be directly ported. That affects a small fraction of deployments. For the vast majority of inference calls, the model is interchangeable, and the customer buys on price.&lt;/p&gt;
&lt;h2 id="what-openais-numbers-actually-require"&gt;What OpenAI&amp;rsquo;s numbers actually require&lt;/h2&gt;
&lt;p&gt;On February 27, 2026, &lt;a href="https://openai.com/index/scaling-ai-for-everyone/"&gt;OpenAI closed a $110 billion funding round&lt;/a&gt;, the largest private capital raise in history, at a post-money valuation of &lt;strong&gt;$840 billion&lt;/strong&gt;. Amazon committed $50 billion. SoftBank $30 billion. Nvidia $30 billion. The valuation implies extraordinary confidence in OpenAI&amp;rsquo;s ability to maintain pricing power and grow revenue to somewhere between $200 and $280 billion by 2030. At 42x trailing revenue, it is priced not for today&amp;rsquo;s market but for a specific version of the future.&lt;/p&gt;
&lt;p&gt;OpenAI reported &lt;a href="https://openai.com/index/scaling-ai-for-everyone/"&gt;&lt;strong&gt;$20 billion in annualized recurring revenue&lt;/strong&gt;&lt;/a&gt; as of January 2026, up 233 percent year over year. Impressive. But the adjusted gross margin fell to 33 percent in 2025, down from 40 percent the prior year, as &lt;a href="https://the-decoder.com/openai-adds-111-billion-to-its-cash-burn-forecast-as-ai-costs-spiral-beyond-projections/"&gt;inference costs quadrupled to $8.4 billion&lt;/a&gt;. In the first half of 2025 alone, OpenAI lost $13.5 billion. Compute and technical talent costs consume approximately 75 percent of total revenue, and Microsoft takes another 20 percent through 2032. That leaves very little room for the margin expansion the valuation demands.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.anthropic.com/news/anthropic-raises-30-billion-series-g-funding-380-billion-post-money-valuation"&gt;Anthropic&lt;/a&gt; tells a similar story at a smaller scale. At a &lt;strong&gt;$380 billion valuation&lt;/strong&gt; on $14 billion in run-rate revenue, 27x, the company is also unprofitable, projecting positive cash flow somewhere around 2027 to 2028. Both companies are betting they can simultaneously grow revenue and expand margins. In commoditized markets, that is the bet that fails.&lt;/p&gt;
&lt;p&gt;Part of the financing is also circular. Amazon invests $50 billion in OpenAI; a portion flows back to AWS as compute spending. Nvidia invests $30 billion; the same money returns as GPU purchases. This inflates revenue figures while obscuring how much of the demand is genuinely independent. &lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-openai-margin-squeeze-png-4" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/openai-margin-squeeze.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/openai-margin-squeeze.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/openai-margin-squeeze.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/openai-margin-squeeze.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/openai-margin-squeeze.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/openai-margin-squeeze.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/openai-margin-squeeze.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/openai-margin-squeeze.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/openai-margin-squeeze.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/openai-margin-squeeze.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/openai-margin-squeeze.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/openai-margin-squeeze.png"
alt="Exhibit showing OpenAI financials: $20B ARR up 233% but gross margin fell from 40% to 33% as inference costs quadrupled to $8.4B, net loss of $13.5B in H1 2025, with the $840B valuation requiring 43% revenue CAGR to 2030 while expanding margins against open-source price pressure"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-openai-margin-squeeze-png-4" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/openai-margin-squeeze.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Exhibit showing OpenAI financials: $20B ARR up 233% but gross margin fell from 40% to 33% as inference costs quadrupled to $8.4B, net loss of $13.5B in H1 2025, with the $840B valuation requiring 43% revenue CAGR to 2030 while expanding margins against open-source price pressure" decoding="async"&gt;
&lt;/dialog&gt;
&lt;/p&gt;
&lt;h2 id="who-actually-wins-when-the-model-layer-is-a-commodity"&gt;Who actually wins when the model layer is a commodity&lt;/h2&gt;
&lt;p&gt;Before writing off the incumbents, two historical cases are worth sitting with.&lt;/p&gt;
&lt;p&gt;Amazon Web Services has cut prices &lt;a href="https://docs.aws.amazon.com/wellarchitected/latest/cost-optimization-pillar/cost_cloud_financial_management_scheduled.html"&gt;134 times since 2006&lt;/a&gt;, yet its operating margins expanded to a record &lt;a href="https://www.cnbc.com/2025/05/01/aws-q1-earnings-report-2025.html"&gt;39.5 percent in Q1 2025&lt;/a&gt;. Apple captures roughly 80 to 85 percent of global smartphone operating profits with around 18 to 21 percent of unit shipments, while commodity Android manufacturers earn negligible margins. Both got there the same way: years of accumulated switching costs, vertical integration, ecosystems that cost real money to leave. The question is whether AI model providers can build any of that. I don&amp;rsquo;t think they can, not at the model layer. An API endpoint returning text is not an iPhone. You change it in a config file on a Tuesday afternoon.&lt;/p&gt;
&lt;p&gt;So who does benefit? Nvidia and cloud providers collect rent regardless of which model runs on their hardware. That position is durable. The application layer looks better still: companies embedding AI into domain-specific workflows with proprietary data, where the model is an input rather than the product. As &lt;a href="https://eqtgroup.com/thinq/technology/why-ai-value-wont-just-accrue-to-foundational-models"&gt;Andrew Lewis at EQT&lt;/a&gt; put it, &amp;ldquo;Over time, the value is likely to accrue to the application layer and the product companies.&amp;rdquo; And then there are the platforms with distribution so large they can integrate AI at near-zero marginal cost: Meta embedding Llama into Instagram and WhatsApp, Google weaving Gemini into Search and Workspace. When Mark Zuckerberg open-sources Llama, he is deliberately commoditizing the model layer to prevent any single player from owning the stack above his distribution. When a $1.6 trillion company is your most committed price-cutter, that tells you something about where the margins are going.&lt;/p&gt;</description></item><item><title>AI Capex Arms Race: Who Blinks First?</title><link>https://philippdubach.com/posts/ai-capex-arms-race-who-blinks-first/</link><pubDate>Sun, 08 Mar 2026 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/ai-capex-arms-race-who-blinks-first/</guid><description>&lt;p&gt;Alphabet&amp;rsquo;s free cash flow is projected to fall roughly &lt;strong&gt;90%&lt;/strong&gt; in 2026. Not because the business is in trouble. Because the company has committed to spending &lt;strong&gt;$83–93 billion more&lt;/strong&gt; on capital expenditure than it did last year.&lt;/p&gt;
&lt;p&gt;That is what $660–690 billion in AI capex looks like up close. &lt;a href="https://finance.yahoo.com/news/amazon-200-billion-ai-spending-153341517.html"&gt;Amazon guided to &lt;strong&gt;$200 billion&lt;/strong&gt; alone&lt;/a&gt;. Meta&amp;rsquo;s long-term debt more than doubled to &lt;a href="https://www.sec.gov/Archives/edgar/data/1326801/000162828026003832/meta-12312025xexhibit991.htm"&gt;&lt;strong&gt;$58.7 billion&lt;/strong&gt;&lt;/a&gt; to help finance its share. &lt;a href="https://www.goldmansachs.com/insights/articles/why-ai-companies-may-invest-more-than-500-billion-in-2026"&gt;Goldman Sachs projects&lt;/a&gt; cumulative 2025–2027 spending across the Big 4 at &lt;strong&gt;$1.15 trillion&lt;/strong&gt;, more than double the $477 billion spent over the prior three years combined. BofA credit strategists found this will consume &lt;a href="https://techblog.comsoc.org/2025/11/01/ai-spending-boom-accelerates-big-tech-to-invest-invest-an-aggregate-of-400-billion-in-2025-more-in-2026/"&gt;&lt;strong&gt;94% of operating cash flow minus dividends and buybacks&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;At what revenue growth rate does any of this pay for itself? And what happens if inference costs fall 100-fold before the infrastructure is fully depreciated? We want to think about this the way a credit analyst would. Not as a technology story but as a corporate finance story. Because the numbers, assembled from earnings releases and analyst reports through February 2026, look less like a technology platform buildout and more like a leveraged buyout of the future. &lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-ai-capex-hockey-stick-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/ai-capex-hockey-stick.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/ai-capex-hockey-stick.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/ai-capex-hockey-stick.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/ai-capex-hockey-stick.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai-capex-hockey-stick.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/ai-capex-hockey-stick.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/ai-capex-hockey-stick.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/ai-capex-hockey-stick.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai-capex-hockey-stick.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/ai-capex-hockey-stick.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/ai-capex-hockey-stick.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai-capex-hockey-stick.png"
alt="Exhibit showing 2025 actual versus 2026 guided capex for Big 4 hyperscalers: Amazon at $200B guided up 52%, Alphabet at $175-185B up 97%, Meta at $60-65B, Microsoft at $100-120B up 25%, totaling $610-655B combined up 63%"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-ai-capex-hockey-stick-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/ai-capex-hockey-stick.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Exhibit showing 2025 actual versus 2026 guided capex for Big 4 hyperscalers: Amazon at $200B guided up 52%, Alphabet at $175-185B up 97%, Meta at $60-65B, Microsoft at $100-120B up 25%, totaling $610-655B combined up 63%" decoding="async"&gt;
&lt;/dialog&gt;
&lt;/p&gt;
&lt;h2 id="the-lbo"&gt;The LBO&lt;/h2&gt;
&lt;p&gt;An LBO thesis goes like this: we borrow heavily today, acquire an asset, generate enough cash flow to service the debt, and eventually sell or refinance at a profit. The bet works if the returns from the acquired asset exceed the cost of capital. It fails if the asset underperforms, the cost of capital rises, or the timeline extends beyond what the capital structure can absorb.&lt;/p&gt;
&lt;p&gt;The hyperscaler capex thesis has the same structure, substituting &amp;ldquo;equity&amp;rdquo; and &amp;ldquo;operating cash flow&amp;rdquo; for debt. Each company is telling shareholders: we will deploy enormous capital today, accept near-zero or negative free cash flow for 18 to 36 months, and recoup that investment through AI revenue growth. Sundar Pichai put the bull case plainly &lt;a href="https://www.fool.com/earnings/call-transcripts/2024/07/23/alphabet-googl-q2-2024-earnings-call-transcript/"&gt;at Alphabet&amp;rsquo;s Q2 2024 earnings&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The risk of underinvesting is dramatically greater than the risk of overinvesting for us here.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;At five-year straight-line on $175 billion in Alphabet capex, you get $35 billion in annual depreciation. Add a conservative 10% cost of capital on the incremental investment, and the hurdle gets harder still. For the full &lt;strong&gt;$690 billion&lt;/strong&gt; in 2026 hyperscaler capex, the annual depreciation burden alone approaches &lt;strong&gt;$115–140 billion&lt;/strong&gt; at five-year lives. That is before interest, power, operations, or the cost of next year&amp;rsquo;s upgrade cycle.&lt;/p&gt;
&lt;p&gt;The revenue side of this ledger is far smaller than the capex side. Rough estimates place direct AI revenue across the ecosystem at &lt;strong&gt;$40–60 billion in 2025&lt;/strong&gt;, against AI-specific capex of roughly $300 billion. Coverage ratio: approximately &lt;strong&gt;0.15x&lt;/strong&gt;. &lt;a href="https://sequoiacap.com/article/ais-600b-question/"&gt;Sequoia&amp;rsquo;s David Cahn&lt;/a&gt; calculated that the AI ecosystem needs to generate &lt;strong&gt;$600 billion in annual revenue&lt;/strong&gt; to justify current infrastructure spending, against perhaps $50–100 billion it is actually generating. By 2026, with AI revenue perhaps reaching $80–120 billion and AI capex at $450 billion, the ratio improves to roughly &lt;strong&gt;0.25x&lt;/strong&gt;. Still not a business. &lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-ai-revenue-coverage-gap-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/ai-revenue-coverage-gap.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/ai-revenue-coverage-gap.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/ai-revenue-coverage-gap.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/ai-revenue-coverage-gap.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai-revenue-coverage-gap.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/ai-revenue-coverage-gap.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/ai-revenue-coverage-gap.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/ai-revenue-coverage-gap.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai-revenue-coverage-gap.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/ai-revenue-coverage-gap.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/ai-revenue-coverage-gap.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai-revenue-coverage-gap.png"
alt="Exhibit showing AI revenue of roughly $50B in 2025 against $300B in AI-specific capex and the $600B revenue threshold estimated by Sequoia Capital, with coverage ratios of 0.17x in 2025 and 0.25x projected for 2026"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-ai-revenue-coverage-gap-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/ai-revenue-coverage-gap.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Exhibit showing AI revenue of roughly $50B in 2025 against $300B in AI-specific capex and the $600B revenue threshold estimated by Sequoia Capital, with coverage ratios of 0.17x in 2025 and 0.25x projected for 2026" decoding="async"&gt;
&lt;/dialog&gt;
&lt;/p&gt;
&lt;h2 id="what-would-have-to-be-true"&gt;What would have to be true&lt;/h2&gt;
&lt;p&gt;The spending is not obviously irrational. The bull case is worth taking seriously: the right moment to build infrastructure for a platform shift is before the platform fully exists. Railroads were overbuilt. Fiber was overbuilt. Both excesses funded genuinely useful infrastructure that later ran at capacity. If AI becomes the general-purpose technology that most proponents claim, the AI infrastructure being deployed today could look like the most prescient investment since Standard Oil.&lt;/p&gt;
&lt;p&gt;But that argument requires you to believe some very specific things about revenue growth that have not yet materialized. The 2025–2030 revenue ramp embedded in current capex implies AI revenue growing from roughly $60 billion today to somewhere between $600 billion and $2 trillion by 2030, depending on which bullish scenario you pick. Bain calculates that even under the most aggressive adoption scenario, AI generates $1.2 trillion in revenue, against the $2 trillion the spending requires to break even.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://economics.mit.edu/news/daron-acemoglu-what-do-we-know-about-economics-ai"&gt;MIT&amp;rsquo;s Daron Acemoglu&lt;/a&gt;, who won the 2024 Nobel Prize in Economics, projects AI will deliver a total GDP increase of just &lt;strong&gt;1.1–1.6% over ten years&lt;/strong&gt;: roughly a &lt;strong&gt;0.05% annual productivity gain&lt;/strong&gt;. Only about 5% of economic tasks, he estimates, are cost-effectively automatable at current prices. Goldman Sachs&amp;rsquo; Jim Covello made a similar argument in a &lt;a href="https://www.datacenterdynamics.com/en/news/goldman-sachs-1tn-to-be-spent-on-ai-data-centers-chips-and-utility-upgrades-with-little-to-show-for-it-so-far/"&gt;June 2024 note&lt;/a&gt;: &amp;ldquo;Replacing low-wage jobs with tremendously costly technology is basically the polar opposite of the prior technology transitions I&amp;rsquo;ve witnessed in my thirty years of closely following the tech industry.&amp;rdquo; Neither of these is a fringe view. If either is roughly right, the revenue scenarios baked into current capex budgets do not close. And yet the same market is &lt;a href="https://philippdubach.com/posts/the-saaspocalypse-paradox/"&gt;destroying software stocks&lt;/a&gt; because AI adoption is supposedly too strong. Both readings cannot be true.&lt;/p&gt;
&lt;p&gt;Dario Amodei, who is himself building the infrastructure, &lt;a href="https://www.dwarkesh.com/p/dario-amodei-2"&gt;put it very bluntly on the Dwarkesh Podcast in February 2026&lt;/a&gt;: &amp;ldquo;If my revenue is not $1 trillion, if it&amp;rsquo;s even $800 billion, there&amp;rsquo;s no force on Earth, there&amp;rsquo;s no hedge on Earth that could stop me from going bankrupt if I buy that much compute.&amp;rdquo; He was describing his own spending discipline relative to peers. The companies spending three times as much as Anthropic apparently believe they have found the hedge he could not.&lt;/p&gt;
&lt;h2 id="depreciation-time-bomb"&gt;Depreciation time bomb&lt;/h2&gt;
&lt;p&gt;One risk most analysis underweights: AI hardware obsoletes faster than any previous infrastructure cycle.&lt;/p&gt;
&lt;p&gt;Hyperscalers have extended server useful lives from four to five and six years, saving billions in annual depreciation. But Amazon reversed course: in Q4 2024 it took a &lt;a href="https://behindthebalancesheet.substack.com/p/amazons-ai-reality-check"&gt;&lt;strong&gt;$920 million&lt;/strong&gt; charge to early-retire certain servers and networking equipment&lt;/a&gt;, then effective January 1, 2025 it shortened useful lives for a subset of servers from six to five years, citing &amp;ldquo;the increased pace of technology development, particularly in the area of artificial intelligence,&amp;rdquo; a decision expected to reduce 2025 operating income by a further $700 million. Jensen Huang, not a man known for underselling his own products, said of H100 GPUs once Blackwell shipped: &lt;a href="https://www.rev.com/transcripts/gtc-keynote-with-nvidia-ceo-jensen-huang"&gt;&amp;ldquo;You couldn&amp;rsquo;t give Hoppers away.&amp;rdquo;&lt;/a&gt; Nvidia now releases new architectures annually, where it previously released them every two years.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.cnbc.com/2025/11/11/big-short-investor-michael-burry-accuses-ai-hyperscalers-of-artificially-boosting-earnings.html"&gt;Michael Burry&lt;/a&gt;, who spent 2005 correctly modeling the mortgage market&amp;rsquo;s hidden risks, estimates that hyperscalers will understate depreciation by roughly &lt;strong&gt;$176 billion&lt;/strong&gt; in aggregate between 2026 and 2028, causing them to overreport earnings by more than 20%. I have no idea whether Burry is right on the specific number. But the direction is correct. If the useful life of a Blackwell GPU is closer to three years than five because Rubin replaces it in 2027, the depreciation math gets far worse.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://epoch.ai/data-insights/llm-inference-price-trends"&gt;Epoch AI measured&lt;/a&gt; inference costs falling at a median &lt;strong&gt;50 times per year&lt;/strong&gt;, accelerating to &lt;strong&gt;200 times per year&lt;/strong&gt; after January 2024. GPT-3-era processing cost around $20 per million tokens at launch in 2020. By early 2026, models of comparable capability cost roughly &lt;strong&gt;$0.07&lt;/strong&gt; per million tokens. That is a roughly 280-fold decline over five years, and there is no obvious reason for it to stop. &lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-ai-inference-cost-cliff-png-4" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/ai-inference-cost-cliff.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/ai-inference-cost-cliff.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/ai-inference-cost-cliff.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/ai-inference-cost-cliff.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai-inference-cost-cliff.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/ai-inference-cost-cliff.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/ai-inference-cost-cliff.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/ai-inference-cost-cliff.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai-inference-cost-cliff.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/ai-inference-cost-cliff.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/ai-inference-cost-cliff.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai-inference-cost-cliff.png"
alt="Exhibit showing inference cost per million tokens falling from $20 at GPT-3 launch in 2020 to $0.07 in early 2026 on a log scale, with Epoch AI measuring acceleration to 200x per year decline after January 2024"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-ai-inference-cost-cliff-png-4" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/ai-inference-cost-cliff.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Exhibit showing inference cost per million tokens falling from $20 at GPT-3 launch in 2020 to $0.07 in early 2026 on a log scale, with Epoch AI measuring acceleration to 200x per year decline after January 2024" decoding="async"&gt;
&lt;/dialog&gt;
The hyperscaler response to this is Jevons, &lt;a href="https://philippdubach.com/posts/does-ai-mean-the-demand-on-labor-goes-up/"&gt;an argument I explored in January&lt;/a&gt;: cheaper inference will explode demand, and the total compute consumed will far exceed what efficiency gains removed. They may be right. But the timing matters. Infrastructure being deployed today, at today&amp;rsquo;s GPU prices, needs to generate enough revenue before the next architecture cycle renders it economically obsolete. The payback window is not 36 months. It may be 18.&lt;/p&gt;
&lt;h2 id="arms-race-logic"&gt;Arms race logic&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://fortune.com/2025/09/19/zuckerberg-ai-bubble-definitely-possibility-sam-altman-collapse/"&gt;Mark Zuckerberg acknowledged&lt;/a&gt; the possibility of an AI bubble &amp;ldquo;definitely&amp;rdquo; in September 2025, then spent $72 billion anyway. This is not irrationality. It is game theory. If AI really does create winner-take-most outcomes, slowing down is a bet that the platform shift is smaller than your competitors believe. Most boards are not willing to make that bet. So everyone keeps spending, and as I &lt;a href="https://philippdubach.com/posts/every-bulge-bracket-bank-agrees-on-ai/"&gt;wrote last week&lt;/a&gt;, every bulge bracket bank agrees they should.&lt;/p&gt;
&lt;p&gt;But the same logic drove WorldCom&amp;rsquo;s Bernie Ebbers. The same logic drove Global Crossing. The specific claim driving the 1990s telecom bubble was that internet traffic was &amp;ldquo;doubling every 100 days.&amp;rdquo; It was false: &lt;a href="https://www-users.cse.umn.edu/~odlyzko/doc/internet.growth.myth2.pdf"&gt;researcher Andrew Odlyzko traced it to misleading WorldCom/UUNET claims&lt;/a&gt;, and actual traffic doubled roughly once per year. By 2001, only &lt;strong&gt;5% of installed fiber capacity was in use&lt;/strong&gt;. The infrastructure eventually ran at capacity; it just took a decade and several dozen bankruptcies to get there.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.oaktreecapital.com/insights/memo/is-it-a-bubble"&gt;Howard Marks published a December 2025 memo&lt;/a&gt; asking, with characteristic deliberateness, &amp;ldquo;Is It a Bubble?&amp;rdquo; He noted hyperscalers&amp;rsquo; capex was outpacing revenue momentum and lenders were sweetening terms to keep deal flow alive. J.P. Morgan projects &lt;strong&gt;$300 billion in investment-grade bonds&lt;/strong&gt; for AI data centers in 2026 alone. That is the same fragility that destroyed the telecom builders: cheap debt financing infrastructure before anyone has proved the revenue exists to service it.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://fortune.com/2026/02/23/ai-capex-us-gdp-negative-pantheon/"&gt;Without AI spending, Pantheon Macroeconomics calculated in February 2026&lt;/a&gt;, U.S. corporate capex would currently be negative. The entire infrastructure investment story depends on this cycle continuing: total U.S. GDP grew just 1.4% annualized in H1 2025, and AI-related investment accounted for essentially all of it.&lt;/p&gt;
&lt;aside class="disclaimer" role="note" aria-label="Disclaimer"&gt;
&lt;div class="disclaimer-content"&gt;&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; All opinions expressed are my own. This is not investment, financial, tax, or legal advice. Past performance does not indicate future results. Do your own research and consult qualified professionals before making financial decisions. No liability accepted for any losses.&lt;/p&gt;&lt;/div&gt;
&lt;/aside&gt;</description></item><item><title>Peter Thiel's Physics Department</title><link>https://philippdubach.com/posts/peter-thiels-physics-department/</link><pubDate>Mon, 02 Mar 2026 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/peter-thiels-physics-department/</guid><description>&lt;p&gt;On December 11, &lt;a href="https://en.wikipedia.org/wiki/Jimmy_Carr"&gt;Jimmy Carr&lt;/a&gt; sat on the &lt;a href="https://www.youtube.com/watch?v=mWDCZIvLrS4"&gt;TRIGGERnometry podcast&lt;/a&gt; and delivered a riff that sounded like Peter Thiel&amp;rsquo;s stagnation thesis filtered through a comedian&amp;rsquo;s timing:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Minus the screens from any room, we&amp;rsquo;re living in the 1970s. Nothing&amp;rsquo;s happened in physics since &amp;lsquo;72. String theory has not got us anywhere. But if you take the compute power of AI and point it at physics, what happens? We could have a world of plenty. I hope that&amp;rsquo;s the world we live in. But it could go another way.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Two months later, on February 13, GPT-5.2 &lt;a href="https://thequantuminsider.com/2026/02/13/ai-scientist-spots-what-physicists-missed-in-gluon-scattering/"&gt;derived and formally proved&lt;/a&gt; a new result in theoretical physics: single-minus gluon scattering amplitudes, long assumed to vanish, are nonzero in the half-collinear regime. Nima Arkani-Hamed at the Institute for Advanced Study called the formulas &amp;ldquo;strikingly simple&amp;rdquo; after fifteen years of personal curiosity about the problem. Nathaniel Craig at UC Santa Barbara called it &amp;ldquo;journal-level research advancing the frontiers of theoretical physics.&amp;rdquo;&lt;/p&gt;
&lt;h2 id="thiels-stagnation-case"&gt;Thiel&amp;rsquo;s stagnation case&lt;/h2&gt;
&lt;p&gt;Carr was paraphrasing Thiel, who has been making this argument for fifteen years. The &lt;a href="https://www.scribd.com/document/61379051/What-Happened-to-the-Future-Founders-Fund-Manifesto"&gt;Founders Fund manifesto&lt;/a&gt; (2011) put it bluntly: &amp;ldquo;We wanted flying cars, instead we got 140 characters.&amp;rdquo; Thiel&amp;rsquo;s framework distinguishes progress in bits from progress in atoms: spectacular digital gains since 1970, physical-world stagnation. Tyler Cowen named the broader phenomenon the Great Stagnation. On the &lt;a href="https://singjupost.com/a-i-mars-and-immortality-are-we-dreaming-big-enough-peter-thiel-transcript/"&gt;Douthat podcast&lt;/a&gt; Thiel was more measured: &amp;ldquo;The claim was that the velocity had slowed, it wasn&amp;rsquo;t zero.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The data supports the velocity claim. Total factor productivity growth, the metric that captures genuine scientific progress and technological improvement, ran at roughly 1.7% annually from 1947 to 1973. Since 2004, it has averaged 0.4%. Robert Gordon&amp;rsquo;s &lt;em&gt;The Rise and Fall of American Growth&lt;/em&gt; argues the &amp;ldquo;special century&amp;rdquo; of 1870 to 1970 was a one-time event. &lt;a href="https://mattsclancy.substack.com/p/science-is-getting-harder"&gt;Bloom, Jones, Van Reenen, and Webb&lt;/a&gt; showed in the &lt;em&gt;American Economic Review&lt;/em&gt; that maintaining Moore&amp;rsquo;s Law required 18x more researchers in 2014 versus 1971.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 90%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-tfp-growth-stagnation-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/tfp-growth-stagnation.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/tfp-growth-stagnation.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/tfp-growth-stagnation.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/tfp-growth-stagnation.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/tfp-growth-stagnation.png 1200w"
sizes="90vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/tfp-growth-stagnation.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/tfp-growth-stagnation.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/tfp-growth-stagnation.png 1440w"
sizes="90vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/tfp-growth-stagnation.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/tfp-growth-stagnation.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/tfp-growth-stagnation.png 2000w"
sizes="90vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/tfp-growth-stagnation.png"
alt="Peter Thiel&amp;#39;s stagnation thesis in data: US Total Factor Productivity growth by era showing 1.7 percent annually from 1947 to 1973 during the postwar boom, collapsing to 0.5 percent from 1973 to 1996, briefly recovering to 2.0 percent during the IT revival of 1996 to 2004, then falling back to 0.4 percent from 2004 to present, a 76 percent decline from the postwar peak"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-tfp-growth-stagnation-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/tfp-growth-stagnation.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Peter Thiel&amp;#39;s stagnation thesis in data: US Total Factor Productivity growth by era showing 1.7 percent annually from 1947 to 1973 during the postwar boom, collapsing to 0.5 percent from 1973 to 1996, briefly recovering to 2.0 percent during the IT revival of 1996 to 2004, then falling back to 0.4 percent from 2004 to present, a 76 percent decline from the postwar peak" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;The Standard Model of particle physics was essentially complete by the early 1970s. Since then, we have confirmed things we already predicted: the Higgs boson (2012, 48 years after prediction), gravitational waves (2015, 99 years after Einstein), the accelerating expansion of the universe (1998). Important experimental work. But confirmations, not revolutions. No supersymmetric particles. No extra dimensions. No new fundamental energy sources. No unified field theory. String theory, the leading candidate for physics beyond the Standard Model, has produced &lt;a href="https://www.researchgate.net/publication/334607591_The_String_Theory_Landscape"&gt;zero experimentally confirmed predictions&lt;/a&gt; in 55 years and admits roughly 10^500 possible solutions, which is another way of saying it predicts everything and therefore nothing. &lt;a href="https://www.goodreads.com/author/quotes/17201066.Sabine_Hossenfelder"&gt;Sabine Hossenfelder&lt;/a&gt; captured the frustration:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Theoretical physicists used to explain what was observed. Now they try to explain why they can&amp;rsquo;t explain what was not observed.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="what-ai-has-already-done-for-science"&gt;What AI has already done for science&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://x.com/demishassabis/status/1845864764469334239"&gt;AlphaFold&lt;/a&gt; predicted the three-dimensional structures of 214 million proteins, solving the protein folding problem for structural biology. It won the 2024 Nobel Prize in Chemistry for Demis Hassabis and John Jumper, and has been used by over 2 million researchers in 190 countries. DeepMind&amp;rsquo;s &lt;a href="https://deepmind.google/discover/blog/millions-of-new-materials-discovered-with-deep-learning/"&gt;GNoME&lt;/a&gt; identified 2.2 million new crystal structures and 381,000 predicted-stable materials, equivalent to roughly 800 years of prior human discovery in materials science. Lawrence Berkeley Lab&amp;rsquo;s A-Lab robotically synthesized 41 of these in &lt;a href="https://deepmind.google/blog/millions-of-new-materials-discovered-with-deep-learning/"&gt;17 days&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In fusion, &lt;a href="https://deepmind.google/blog/bringing-ai-to-the-next-generation-of-fusion-energy/"&gt;DeepMind trained a reinforcement learning system&lt;/a&gt; to autonomously control plasma in a real tokamak at EPFL, sculpting it into configurations no human operator had achieved. &lt;a href="https://engineering.princeton.edu/news/2024/02/21/engineers-use-ai-wrangle-fusion-power-grid"&gt;Princeton researchers&lt;/a&gt; predicted tearing instabilities 300 milliseconds in advance and adjusted reactor parameters in real time: the first demonstration of preventing, not just suppressing, the instabilities that have plagued fusion for decades. &lt;a href="https://www.cleanenergy-platform.com/insight/inside-taes-2025-plasma-breakthroughand-how-it-changed-fusions-trajectory"&gt;TAE Technologies&lt;/a&gt; used AI-optimized beam injection to sustain plasma above 70 million degrees C. At Lawrence Livermore, the CogSim AI framework &lt;a href="https://lasers.llnl.gov/news/llnl-researchers-employed-ai-driven-model-predict-fusion-ignition-shot"&gt;predicted a 74% probability of ignition&lt;/a&gt; days before the December 2022 shot that achieved it.&lt;/p&gt;
&lt;p&gt;Microsoft and Pacific Northwest National Lab &lt;a href="https://www.datacenterdynamics.com/en/news/microsoft-and-pnnl-use-ai-and-hpc-for-battery-materials-research/"&gt;screened 32.6 million inorganic materials&lt;/a&gt; in roughly 80 hours, identified 18 finalists, and produced a &lt;a href="https://techround.co.uk/news/microsofts-ai-powered-battery-discovery-could-replace-lithium/"&gt;working battery prototype&lt;/a&gt; using 70% less lithium within nine months. In drug discovery, at least &lt;a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC11800368/"&gt;75 AI-discovered drugs&lt;/a&gt; have entered clinical trials, up from 3 in 2016, with Phase I success rates of 80 to 90% compared to the traditional 40%.&lt;/p&gt;
&lt;p&gt;And then, GPT-5.2 produced a new result in theoretical physics. A proof that human physicists had not found. The mathematical reasoning timeline tells the story. &lt;a href="https://deepmind.google/discover/blog/alphageometry-an-olympiad-level-ai-system-for-geometry/"&gt;AlphaGeometry&lt;/a&gt; solved 25 of 30 Olympiad geometry problems in January 2024. By July 2024, &lt;a href="https://deepmind.google/blog/ai-solves-imo-problems-at-silver-medal-level/"&gt;AlphaProof earned a silver medal&lt;/a&gt; at the International Mathematical Olympiad. By 2025, &lt;a href="https://deepmind.google/blog/advanced-version-of-gemini-with-deep-think-officially-achieves-gold-medal-standard-at-the-international-mathematical-olympiad/"&gt;Gemini Deep Think scored gold&lt;/a&gt;: 5 of 6 problems, 35 points, end-to-end in natural language. Terence Tao &lt;a href="https://siliconreckoner.substack.com/p/terence-tao-on-machine-assisted-proofs"&gt;revised his prediction&lt;/a&gt; for superhuman AI mathematics from 2029 to 2026.&lt;/p&gt;
&lt;h2 id="751-compute-gap"&gt;75:1 compute gap&lt;/h2&gt;
&lt;p&gt;Here is the number that matters. Big Tech spent over &lt;strong&gt;$250 billion&lt;/strong&gt; on AI infrastructure in 2024 and 2025. Total US federal AI R&amp;amp;D spending: &lt;a href="https://federalbudgetiq.com/insights/federal-ai-and-it-research-and-development-spending-analysis/"&gt;&lt;strong&gt;$3.3 billion&lt;/strong&gt; per year&lt;/a&gt;. That is a compute divide of roughly 75:1 between commercial and scientific AI investment. The &lt;a href="https://cset.georgetown.edu/article/the-nairr-pilot-estimating-compute/"&gt;NAIRR pilot&lt;/a&gt; allocated about 3.2 yottaFLOPs to academic researchers, enough to train GPT-3.5 once but not enough for a single GPT-4-class run.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 90%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-compute-gap-75-to-1-png-3" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/compute-gap-75-to-1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/compute-gap-75-to-1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/compute-gap-75-to-1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/compute-gap-75-to-1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/compute-gap-75-to-1.png 1200w"
sizes="90vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/compute-gap-75-to-1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/compute-gap-75-to-1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/compute-gap-75-to-1.png 1440w"
sizes="90vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/compute-gap-75-to-1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/compute-gap-75-to-1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/compute-gap-75-to-1.png 2000w"
sizes="90vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/compute-gap-75-to-1.png"
alt="The 75 to 1 AI compute gap between industry and science: Big Tech AI capex at over 250 billion dollars per year versus total federal AI R&amp;amp;D spending at 3.3 billion, DOE FASST at 2.4 billion authorized but pending, DOE Genesis at 320 million one-time, and NSF core AI at 494 million per year"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-compute-gap-75-to-1-png-3" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/compute-gap-75-to-1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="The 75 to 1 AI compute gap between industry and science: Big Tech AI capex at over 250 billion dollars per year versus total federal AI R&amp;amp;D spending at 3.3 billion, DOE FASST at 2.4 billion authorized but pending, DOE Genesis at 320 million one-time, and NSF core AI at 494 million per year" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;The DOE&amp;rsquo;s &lt;a href="https://www.anl.gov/article/what-were-argonnes-top-science-research-breakthroughs-in-2025"&gt;Genesis Mission&lt;/a&gt; announced $320 million in December 2025. That is less than what Meta spends on AI infrastructure in a week. The &lt;a href="https://federalbudgetiq.com/insights/federal-ai-and-it-research-and-development-spending-analysis/"&gt;FASST initiative&lt;/a&gt; authorized $2.4 billion per year for five years, $12 billion total, but congressional appropriations are still pending. The US has three exascale supercomputers at national labs. These serve all of science, not just AI.&lt;/p&gt;
&lt;p&gt;If AI has already produced results in theoretical physics, materials science, fusion energy, and drug discovery with what amounts to scraps from the commercial table, what happens when someone makes a serious allocation? &lt;a href="https://fortune.com/2026/02/11/demis-hassabis-nobel-google-deepmind-predicts-ai-renaissance-radical-abundance/"&gt;Hassabis told Fortune&lt;/a&gt; in February 2026 that in 10 to 15 years &amp;ldquo;we&amp;rsquo;ll be in a kind of new golden era of discovery, a kind of new renaissance.&amp;rdquo; He described a vision of &amp;ldquo;radical abundance&amp;rdquo; where AI has &amp;ldquo;successfully bottled the scientific method.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.goldmansachs.com/insights/articles/generative-ai-could-raise-global-gdp-by-7-percent"&gt;Goldman Sachs estimates&lt;/a&gt; generative AI could raise global GDP by 7%, roughly $7 trillion. &lt;a href="https://www.mckinsey.com/capabilities/quantumblack/our-insights/the-next-innovation-revolution-powered-by-ai"&gt;McKinsey pegs&lt;/a&gt; R&amp;amp;D-specific value at $360 to $560 billion annually, but explicitly noted they did not attempt to estimate&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;the value of truly breakthrough innovations that transform markets (if, for example, nuclear fusion was to enable limitless, clean electricity production).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="the-bear-case-pattern-matching-is-not-physics"&gt;The bear case: pattern matching is not physics&lt;/h2&gt;
&lt;p&gt;The bear case is simple and serious. AI is the best pattern-matching system ever built. Physics does not advance by pattern matching. It advances by conceptual revolution: Riemannian geometry for general relativity, an entirely new mathematical framework for quantum mechanics, gauge theory for the Standard Model. None of these were discoverable in existing data.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://medium.com/@abdullrahmanburhan36/noam-chomsky-on-the-false-promise-of-chatgpt-18c70cda5e24"&gt;Noam Chomsky&lt;/a&gt; argued in the &lt;em&gt;New York Times&lt;/em&gt; that AI&amp;rsquo;s deepest flaw &amp;ldquo;is the absence of the most critical capacity of any intelligence: to say not only what is the case &amp;hellip; but also what is not the case and what could and could not be the case.&amp;rdquo; A commenter on &lt;a href="https://www.math.columbia.edu/~woit/wordpress/?p=15362"&gt;Peter Woit&amp;rsquo;s blog&lt;/a&gt; at Columbia spent &amp;ldquo;over 100 hours probing these models&amp;rdquo; on open problems and found they &amp;ldquo;basically never try to come up with something new&amp;rdquo; when the answer is not already in the training data.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.darioamodei.com/essay/machines-of-loving-grace"&gt;Dario Amodei&lt;/a&gt; was notably careful in &amp;ldquo;Machines of Loving Grace.&amp;rdquo; He predicted AI could compress 50 to 100 years of biological progress into 5 to 10 years, but on physics he hedged: particle physicists are &amp;ldquo;limited by data from particle accelerators&amp;rdquo; and &amp;ldquo;it&amp;rsquo;s not clear that they would do drastically better if they were superintelligent.&amp;rdquo; Some problems are not compute-limited. They are experiment-limited, or concept-limited, or both.&lt;/p&gt;
&lt;p&gt;Stephen Wolfram&amp;rsquo;s principle of computational irreducibility poses the hardest theoretical limit: some systems cannot be predicted by any shortcut. The only way to know what they do is to run them. If fundamental physics contains computationally irreducible problems, no amount of AI compute will crack them.&lt;/p&gt;
&lt;p&gt;But &lt;a href="https://mariokrenn.wordpress.com/"&gt;Mario Krenn&lt;/a&gt; at Max Planck offers a counterpoint from the lab bench. His team published in &lt;em&gt;Physical Review X&lt;/em&gt; on AI-discovered gravitational wave detector designs that outperform human designs, and in &lt;em&gt;Science Advances&lt;/em&gt; on an AI-discovered violation of Bell inequality with unentangled photons. He does not claim AI understands physics. He claims it finds things physicists miss: &amp;ldquo;I let the algorithm run, and within a few hours it found exactly the solution that we as human scientists couldn&amp;rsquo;t find for many weeks.&amp;rdquo;&lt;/p&gt;
&lt;figure class="post-figure" style="width: 90%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-ai-science-paradox-png-5" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/ai-science-paradox.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/ai-science-paradox.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/ai-science-paradox.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/ai-science-paradox.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai-science-paradox.png 1200w"
sizes="90vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/ai-science-paradox.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/ai-science-paradox.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/ai-science-paradox.png 1440w"
sizes="90vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai-science-paradox.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/ai-science-paradox.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/ai-science-paradox.png 2000w"
sizes="90vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai-science-paradox.png"
alt="The AI scientific discovery paradox: quantity metrics surging with 3x more papers published, 4.8x more citations received, and 33 percent more arXiv preprints, but quality metrics declining with 4.6 percent less topical territory covered, 22 percent less cross-paper engagement, and researchers herding toward the same topics"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-ai-science-paradox-png-5" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/ai-science-paradox.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="The AI scientific discovery paradox: quantity metrics surging with 3x more papers published, 4.8x more citations received, and 33 percent more arXiv preprints, but quality metrics declining with 4.6 percent less topical territory covered, 22 percent less cross-paper engagement, and researchers herding toward the same topics" decoding="async"&gt;
&lt;/dialog&gt;
&lt;h2 id="two-roads"&gt;Two roads&lt;/h2&gt;
&lt;p&gt;The nuclear parallel is the one that matters. Fission was discovered in Berlin in December 1938. Hiroshima was August 1945. Seven years from pure physics to weapon. The first nuclear power plant came nine years later. Oppenheimer captured the dynamic: &amp;ldquo;When you see something that is technically sweet, you go ahead and do it, and you argue about what to do about it only after you have had your technical success.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Every AI-accelerated physics breakthrough is inherently dual-use technology. The &lt;a href="https://www.peaknano.com/blog/the-iaea-world-fusion-outlook-2025"&gt;IAEA reports&lt;/a&gt; 35 of 45 private fusion companies expect commercial pilot plants between 2030 and 2035. Commonwealth Fusion Systems has raised roughly $3 billion. &lt;a href="https://english.news.cn/20250724/213ed7ff0e954935bd5645b30a9dafe3/c.html"&gt;China established a state-owned fusion company&lt;/a&gt; in July 2025. The fusion market is projected at $430 billion by 2030. The same plasma control AI that keeps a tokamak stable could, in principle, optimize weapons physics.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t know which road we&amp;rsquo;re on. I&amp;rsquo;m not sure anyone does. But the velocity of AI scientific discovery, from Olympiad geometry problems to a gold medal at the International Mathematical Olympiad to a result in theoretical physics, all within 25 months, suggests the question will be answered empirically rather than philosophically. And probably sooner than the physicists expect.&lt;/p&gt;
&lt;p&gt;The cost of intelligence has fallen roughly &lt;a href="https://blog.samaltman.com/three-observations"&gt;150x&lt;/a&gt; in two years. The cost of pointing it at physics is a policy choice, not a technical constraint. The 75:1 compute gap between commercial and scientific AI spending is the number that determines how fast this goes. Whether it should go fast is a different question entirely.&lt;/p&gt;</description></item><item><title>Every Bulge Bracket Bank Agrees on AI</title><link>https://philippdubach.com/posts/every-bulge-bracket-bank-agrees-on-ai/</link><pubDate>Sun, 01 Mar 2026 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/every-bulge-bracket-bank-agrees-on-ai/</guid><description>&lt;figure class="post-figure" style="width: 100%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-pdf_covers_overview-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/pdf_covers_overview.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/pdf_covers_overview.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/pdf_covers_overview.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/pdf_covers_overview.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/pdf_covers_overview.png 1200w"
sizes="100vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/pdf_covers_overview.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/pdf_covers_overview.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/pdf_covers_overview.png 1440w"
sizes="100vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/pdf_covers_overview.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/pdf_covers_overview.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/pdf_covers_overview.png 2000w"
sizes="100vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/pdf_covers_overview.png"
alt="Cover pages of 12 AI research reports from Goldman Sachs, JPMorgan, Morgan Stanley, UBS, Barclays, Bank of America, HSBC, Citi, Deutsche Bank, and Santander."
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-pdf_covers_overview-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/pdf_covers_overview.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Cover pages of 12 AI research reports from Goldman Sachs, JPMorgan, Morgan Stanley, UBS, Barclays, Bank of America, HSBC, Citi, Deutsche Bank, and Santander." decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;I spent the last week reading 12 bank AI research reports from nine of the world&amp;rsquo;s largest financial institutions: Goldman Sachs, JPMorgan, Morgan Stanley (three separate reports), UBS, Barclays, Bank of America, HSBC, Citi, Deutsche Bank, and Santander. I wanted to understand how institutions that collectively manage trillions of dollars and employ thousands of analysts actually see this technology heading into 2026: where they agree, where they diverge, and what they&amp;rsquo;re being less than forthcoming about.&lt;/p&gt;
&lt;p&gt;What I found is useful, sometimes impressive, and &lt;em&gt;(mostly)&lt;/em&gt; worth reading.&lt;/p&gt;
&lt;h2 id="concerning-consensus"&gt;Concerning consensus&lt;/h2&gt;
&lt;p&gt;Every single institution frames AI as a general-purpose technology, not a product cycle. The analogies converge almost word-for-word: &lt;a href="https://www.goldmansachs.com/what-we-do/investment-banking/insights/articles/powering-the-ai-era/report.pdf"&gt;Goldman Sachs&lt;/a&gt; draws the line through railroads, electrification, and telecom. &lt;a href="https://www.santander.com/en/press-room/the-year-ahead-2025/the-macroeconomic-effects-of-artificial-intelligence"&gt;Santander&lt;/a&gt; deploys a formal three-stage GPT framework: steam, ICT, AI. &lt;a href="https://www.morganstanley.com/im/en-us/individual-investor/insights/tales-from-the-emerging-world/ais-silicon-backbone.html"&gt;Morgan Stanley&amp;rsquo;s semiconductor team&lt;/a&gt; writes that AI is &amp;ldquo;closer to electricity than consumer gadgets.&amp;rdquo; Deutsche Bank projects &lt;strong&gt;+$7 trillion&lt;/strong&gt; in global GDP over the decade. &lt;a href="https://www.ubs.com/global/en/wealthmanagement/insights/artificial-intelligence.html"&gt;UBS&lt;/a&gt; puts the AI revenue opportunity at &lt;strong&gt;$2.6 trillion&lt;/strong&gt; by 2030.&lt;/p&gt;
&lt;p&gt;Not one of the twelve reports seriously entertains the possibility that AI is more like 3D printing: genuinely useful in pockets, broadly disappointing in aggregate. Santander comes closest, citing &lt;a href="https://www.nber.org/papers/w32487"&gt;Daron Acemoglu&amp;rsquo;s&lt;/a&gt; conservative &lt;strong&gt;+0.7% cumulative TFP&lt;/strong&gt; estimate over ten years, but even Santander frames that as the floor of the range, not the central case. The optimistic end of the same distribution sits at &lt;strong&gt;+10–15%&lt;/strong&gt;. That&amp;rsquo;s not a rounding error. It&amp;rsquo;s a fundamental disagreement about whether AI will re-run the productivity miracle of electrification or prove more modest in aggregate, and most banks quietly pick the point on the distribution that best supports their commercial positioning.&lt;/p&gt;
&lt;p&gt;The chart below plots each bank by how bullish they are on AI&amp;rsquo;s economic impact against how grounded their analysis is in current empirical data versus forward projections. Bank of America sits alone in the top-right: data-driven and moderately bullish. Goldman sits at the bottom-right: maximally bullish, maximally projective. Santander is the lone occupant of the top-left: empirical and cautious.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 90%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-exhibit-1-macro-conviction1-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/exhibit-1-macro-conviction1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/exhibit-1-macro-conviction1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/exhibit-1-macro-conviction1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/exhibit-1-macro-conviction1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/exhibit-1-macro-conviction1.png 1200w"
sizes="90vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/exhibit-1-macro-conviction1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/exhibit-1-macro-conviction1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/exhibit-1-macro-conviction1.png 1440w"
sizes="90vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/exhibit-1-macro-conviction1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/exhibit-1-macro-conviction1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/exhibit-1-macro-conviction1.png 2000w"
sizes="90vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/exhibit-1-macro-conviction1.png"
alt="Bank AI research reports compared on two axes: macro conviction (cautious to bullish) and evidence basis (projective to empirical). BofA is the only data-driven bull. Goldman Sachs is a projective bull. Santander is the only data-driven skeptic. Most institutions cluster in the bullish-projective quadrant."
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-exhibit-1-macro-conviction1-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/exhibit-1-macro-conviction1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Bank AI research reports compared on two axes: macro conviction (cautious to bullish) and evidence basis (projective to empirical). BofA is the only data-driven bull. Goldman Sachs is a projective bull. Santander is the only data-driven skeptic. Most institutions cluster in the bullish-projective quadrant." decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;That chart is an editorial interpretation, not a precise measurement. But the shape is right. Bank of America is the only institution that consistently anchors its claims to actual GDP data rather than projections. Goldman Sachs, at the other extreme, produces a report that reads as a pitch to every infrastructure CFO and sovereign wealth fund in the world. Both can be making valid arguments. They&amp;rsquo;re just not making the same kind.&lt;/p&gt;
&lt;h2 id="whats-happening-vs-what-might-happen"&gt;What’s happening vs. what might happen&lt;/h2&gt;
&lt;p&gt;BofA and Santander are the two worth pausing on, because they&amp;rsquo;re doing something different from the rest: they&amp;rsquo;re reporting what&amp;rsquo;s happening rather than what might happen.&lt;/p&gt;
&lt;p&gt;Bank of America, using Bureau of Labor Statistics and Bureau of Economic Analysis data, finds that AI capex contributed &lt;strong&gt;1.4–1.5 percentage points&lt;/strong&gt; to US GDP growth in H1 2025. Headline growth rates were running around 2% in that period. So AI infrastructure spending was the single largest driver of US economic expansion. That&amp;rsquo;s a real number from real data, and it&amp;rsquo;s the most important figure in any of these reports.&lt;/p&gt;
&lt;p&gt;BofA also finds a &lt;em&gt;positive&lt;/em&gt; correlation between AI adoption and employment in white-collar sectors: software developers are up &lt;strong&gt;+17.9%&lt;/strong&gt;, while insurance appraisers, a role where AI substitutes directly for human judgment, are down &lt;strong&gt;-20%&lt;/strong&gt;. The disruption is concentrated in specific tasks. It hasn&amp;rsquo;t shown up in aggregate employment. Yet.&lt;/p&gt;
&lt;p&gt;Then there&amp;rsquo;s Santander, which writes the most academically rigorous report of the twelve and includes numbers the consensus would rather not linger on. The enterprise AI adoption rate data is sobering: only around &lt;strong&gt;10% of US companies&lt;/strong&gt; are actually using AI to produce goods and services. &lt;strong&gt;42% of companies abandoned GenAI projects in 2024&lt;/strong&gt;, a figure corroborated by &lt;a href="https://mlq.ai/media/quarterly_decks/v0.1_State_of_AI_in_Business_2025_Report.pdf"&gt;MIT&amp;rsquo;s 2025 GenAI Divide research&lt;/a&gt;, which found 95% of enterprise pilots fail to reach production. Only &lt;strong&gt;1%&lt;/strong&gt; of companies describe their rollouts as mature. Meanwhile, 78% say they use AI in at least one function. The gap between &amp;ldquo;we have a pilot&amp;rdquo; and &amp;ldquo;this is generating value&amp;rdquo; is enormous.&lt;/p&gt;
&lt;p&gt;Goldman&amp;rsquo;s &lt;strong&gt;$800 million per day&lt;/strong&gt; in hyperscaler capex and Santander&amp;rsquo;s 42% abandonment rate aren&amp;rsquo;t as contradictory as they look. Capex precedes productivity in every infrastructure cycle. That part is historically unambiguous. The question is how long the gap lasts, and whether the eventual productivity gains justify what&amp;rsquo;s been spent getting there.&lt;/p&gt;
&lt;h2 id="dotcom-comparison"&gt;Dotcom comparison&lt;/h2&gt;
&lt;p&gt;Every report that addresses the bubble question reaches the same conclusion: this isn&amp;rsquo;t the late 1990s.&lt;/p&gt;
&lt;p&gt;The primary evidence is valuation. Nvidia trades at &lt;strong&gt;25–30x forward earnings&lt;/strong&gt; versus Cisco&amp;rsquo;s &lt;strong&gt;~140x&lt;/strong&gt; at the March 2000 peak. The Magnificent 6 sit at roughly &lt;strong&gt;35x&lt;/strong&gt; versus &lt;strong&gt;55x&lt;/strong&gt; for the TMT index at its apex. &lt;a href="https://www.morganstanley.com/im/en-us/individual-investor/insights/tales-from-the-emerging-world/ais-silicon-backbone.html"&gt;Morgan Stanley&amp;rsquo;s Silicon Backbone report&lt;/a&gt; makes this comparison rigorously, and I think they&amp;rsquo;re right that the earnings quality is categorically different from dot-com era technology stocks.&lt;/p&gt;
&lt;p&gt;But the comparison works less cleanly when you look at concentration rather than individual valuations. Deutsche Bank notes that the top 10 S&amp;amp;P 500 companies now represent &lt;strong&gt;40% of total market cap&lt;/strong&gt;, an extreme not seen at the dot-com peak. A &lt;a href="https://www.investing.com/news/stock-market-news/bofas-survey-shows-54-of-investors-say-ai-in-bubble-60-say-stocks-overvalued-4284842"&gt;Bank of America fund manager survey&lt;/a&gt; from October 2025 found &lt;strong&gt;54% of global managers believe AI equities are in a bubble&lt;/strong&gt;, and &lt;strong&gt;60% view global equities as overvalued&lt;/strong&gt;. You can simultaneously hold that Nvidia&amp;rsquo;s PE is reasonable and that a portfolio with 40% weight in ten companies carries concentration risk that PE comparisons don&amp;rsquo;t capture. Reassuring on one axis. Alarming on another. Most sell-side AI research cites whichever data point supports its preferred conclusion and leaves the tension sitting there unaddressed.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s also a subtler version of the bubble question that none of the twelve reports asks directly. The &amp;ldquo;infrastructure comes before productivity&amp;rdquo; argument is historically correct: railroads were overbuilt before they transformed commerce; the internet fibre glut of 1999–2000 eventually became the backbone of the digital economy. But the investors who financed Global Crossing and 360networks still lost everything. The infrastructure thesis being correct in the long run isn&amp;rsquo;t the same as every current valuation being justified. Goldman&amp;rsquo;s report is particularly careful to avoid addressing that distinction. The implicit message, &amp;ldquo;we financed the pipes before and it worked out,&amp;rdquo; skips past the question of which financiers got paid and which got wiped out in the transition.&lt;/p&gt;
&lt;h2 id="sell-side"&gt;Sell side&lt;/h2&gt;
&lt;p&gt;The following chart maps risk awareness against bullishness of tone, and the clustering is revealing.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 90%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-exhibit-3-risk-bullishness1-png-4" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/exhibit-3-risk-bullishness1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/exhibit-3-risk-bullishness1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/exhibit-3-risk-bullishness1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/exhibit-3-risk-bullishness1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/exhibit-3-risk-bullishness1.png 1200w"
sizes="90vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/exhibit-3-risk-bullishness1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/exhibit-3-risk-bullishness1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/exhibit-3-risk-bullishness1.png 1440w"
sizes="90vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/exhibit-3-risk-bullishness1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/exhibit-3-risk-bullishness1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/exhibit-3-risk-bullishness1.png 2000w"
sizes="90vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/exhibit-3-risk-bullishness1.png"
alt="Goldman Sachs and UBS AI research reports plotted as aggressively bullish and risk-dismissive. Santander and BofA are measured and risk-aware. HSBC is an optimistic hand-waver. Chart maps risk awareness vs bullishness of tone across 12 bank AI research reports."
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-exhibit-3-risk-bullishness1-png-4" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/exhibit-3-risk-bullishness1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Goldman Sachs and UBS AI research reports plotted as aggressively bullish and risk-dismissive. Santander and BofA are measured and risk-aware. HSBC is an optimistic hand-waver. Chart maps risk awareness vs bullishness of tone across 12 bank AI research reports." decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;Goldman and UBS are in the bottom-right: aggressively bullish, risk-dismissive. Santander and BofA are in the top-left, actually wrestling with the uncertainty. HSBC is the clearest case of motivated reasoning: the report is written explicitly to stop private banking clients from panic-selling their SaaS positions after multiple quarters of multiple compression. &lt;em&gt;(Whether that advice turns out to be right is a separate question.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t think this makes any of these reports dishonest. But the reader needs to supply the discount rate that each institution&amp;rsquo;s interests warrant.&lt;/p&gt;
&lt;p&gt;Goldman Sachs earns advisory fees on the data centre and energy deals it describes. Barclays lends to energy infrastructure projects. Morgan Stanley is selling both EM equity exposure and second-order stock-picking strategies through its asset management arm. UBS provides a clean three-layer investment framework that maps directly to its wealth management product shelf. Citi frames AI as accelerating the electronification of markets, the very trend that drives Citi&amp;rsquo;s trading revenue. &lt;a href="https://fortune.com/2026/02/18/will-ai-destroy-jobs-deutsche-bank-asks-ai-to-predict/"&gt;Deutsche Bank&lt;/a&gt;, most self-aware of the ten, used AI to generate its AI report. The meta-commentary is right there in the methodology.&lt;/p&gt;
&lt;p&gt;Not a single report concludes &amp;ldquo;this may be overhyped and you should meaningfully reduce exposure.&amp;rdquo; Every institution has a commercial interest in the AI narrative staying bullish. That doesn&amp;rsquo;t mean the narrative is wrong. It does mean unanimous conviction from nine sell-side AI research teams is not the same thing as nine independent analyses reaching the same conclusion.&lt;/p&gt;
&lt;h2 id="second-order-ai-beneficiaries"&gt;Second-order AI beneficiaries&lt;/h2&gt;
&lt;p&gt;The next two charts contain what I think is the most interesting tension across all twelve reports.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 90%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-exhibit-2-value-chain1-png-5" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/exhibit-2-value-chain1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/exhibit-2-value-chain1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/exhibit-2-value-chain1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/exhibit-2-value-chain1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/exhibit-2-value-chain1.png 1200w"
sizes="90vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/exhibit-2-value-chain1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/exhibit-2-value-chain1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/exhibit-2-value-chain1.png 1440w"
sizes="90vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/exhibit-2-value-chain1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/exhibit-2-value-chain1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/exhibit-2-value-chain1.png 2000w"
sizes="90vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/exhibit-2-value-chain1.png"
alt="Value chain focus vs time horizon: which banks favour first-order AI enablers (chips, data centres) vs second-order AI beneficiaries (deploying companies). Goldman Sachs and Barclays are near-term first-order plays. Morgan Stanley second-order report sits in long-term deployers quadrant."
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-exhibit-2-value-chain1-png-5" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/exhibit-2-value-chain1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Value chain focus vs time horizon: which banks favour first-order AI enablers (chips, data centres) vs second-order AI beneficiaries (deploying companies). Goldman Sachs and Barclays are near-term first-order plays. Morgan Stanley second-order report sits in long-term deployers quadrant." decoding="async"&gt;
&lt;/dialog&gt;
&lt;figure class="post-figure" style="width: 90%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-exhibit-4-disruption-timeline1-png-6" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/exhibit-4-disruption-timeline1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/exhibit-4-disruption-timeline1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/exhibit-4-disruption-timeline1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/exhibit-4-disruption-timeline1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/exhibit-4-disruption-timeline1.png 1200w"
sizes="90vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/exhibit-4-disruption-timeline1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/exhibit-4-disruption-timeline1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/exhibit-4-disruption-timeline1.png 1440w"
sizes="90vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/exhibit-4-disruption-timeline1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/exhibit-4-disruption-timeline1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/exhibit-4-disruption-timeline1.png 2000w"
sizes="90vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/exhibit-4-disruption-timeline1.png"
alt="AI disruption magnitude vs timeline across 12 bank research reports. Goldman Sachs and Barclays expect large near-term disruption. Santander sees incremental long-term change. Morgan Stanley robotics and JPMorgan see radical but distant disruption. BofA sees moderate disruption already underway."
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-exhibit-4-disruption-timeline1-png-6" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/exhibit-4-disruption-timeline1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="AI disruption magnitude vs timeline across 12 bank research reports. Goldman Sachs and Barclays expect large near-term disruption. Santander sees incremental long-term change. Morgan Stanley robotics and JPMorgan see radical but distant disruption. BofA sees moderate disruption already underway." decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;&lt;a href="https://www.morganstanley.com/im/en-us/individual-investor/insights/articles/investing-in-second-order-effects.html"&gt;Morgan Stanley&amp;rsquo;s Counterpoint Global team&lt;/a&gt;, in the second-order effects report, presents historical data that should make the rest of this collection at least slightly uncomfortable. In the railroad era, Walmart&amp;rsquo;s equivalent outperformed Ford&amp;rsquo;s equivalent by &lt;strong&gt;1,622x to 23x&lt;/strong&gt;. In the internet era, Netflix returned &lt;strong&gt;519x&lt;/strong&gt; versus Cisco&amp;rsquo;s &lt;strong&gt;4x&lt;/strong&gt;. It&amp;rsquo;s the same pattern every time: the companies that &lt;em&gt;use&lt;/em&gt; the infrastructure to serve customers dramatically outperform the companies that &lt;em&gt;build&lt;/em&gt; it.&lt;/p&gt;
&lt;p&gt;Yet nearly every bank&amp;rsquo;s actual investment positioning sits in Nvidia, ASML, hyperscalers, data centre REITs, nuclear utilities, overwhelmingly first-order enablers. Either the historical pattern won&amp;rsquo;t repeat this time (possible, but not argued anywhere in these reports), or there&amp;rsquo;s a valid timing explanation (first-order wins in the buildout phase, second-order wins in deployment) or most of these recommendations will look dated within five years.&lt;/p&gt;
&lt;p&gt;Morgan Stanley&amp;rsquo;s own three reports collectively make the case for second-order investing over the long run while still recommending first-order plays in the near term. That&amp;rsquo;s not quite inconsistent. But the tension deserves more acknowledgment than it gets.&lt;/p&gt;
&lt;h2 id="power"&gt;Power&lt;/h2&gt;
&lt;p&gt;If I had to pick one analytical claim that holds up regardless of where the productivity debate lands, it&amp;rsquo;s this: power is the binding constraint, and the infrastructure required to relieve it is real, expensive, and already being built.&lt;/p&gt;
&lt;p&gt;The numbers are consistent across institutions. US data centre power consumption runs at &lt;strong&gt;150–175 TWh&lt;/strong&gt; today. &lt;a href="https://www.ib.barclays/our-insights/ai-revolution-meeting-massive-infrastructure-demand.html"&gt;Barclays&lt;/a&gt; projects &lt;strong&gt;560 TWh by 2030&lt;/strong&gt;, approximately 13% of total US electricity. Goldman Sachs estimates &lt;strong&gt;60%&lt;/strong&gt; of new data centre power through 2030 will require net-new generation capacity. The US power grid has an average age of &lt;strong&gt;40 years&lt;/strong&gt;. Token consumption grew &lt;strong&gt;4,274%&lt;/strong&gt; in a single year. Data centre construction spending has grown roughly &lt;strong&gt;60% year-on-year&lt;/strong&gt; since ChatGPT launched in late 2022.&lt;/p&gt;
&lt;p&gt;Barclays frames this as a Jevons paradox: efficiency improvements in model inference will, counterintuitively, increase total energy consumption because they make AI cheaper and drive higher usage. I think that&amp;rsquo;s right. It&amp;rsquo;s exactly how personal computing and the internet played out. Every report that addresses energy lands on nuclear as the preferred long-term solution: &lt;a href="https://www.energy.gov/ne/articles/9-key-takeaways-president-trumps-executive-orders-nuclear-energy"&gt;four executive orders&lt;/a&gt; in early 2025, a 400 GW capacity target by 2050, the &lt;a href="https://www.constellationenergy.com/news/2024/Constellation-to-Launch-Crane-Clean-Energy-Center-Restoring-Jobs-and-Carbon-Free-Power-to-The-Grid.html"&gt;Three Mile Island restart&lt;/a&gt;. That consensus may prove correct. It may also be the sector where the infrastructure-before-returns gap runs longest.&lt;/p&gt;
&lt;h2 id="what-the-reports-dont-say"&gt;What the reports don&amp;rsquo;t say&lt;/h2&gt;
&lt;p&gt;The quadrant charts map where the banks are looking. They&amp;rsquo;re less revealing about what&amp;rsquo;s off the frame entirely.&lt;/p&gt;
&lt;p&gt;No report models a structured downside scenario: AI capex producing disappointing returns, hyperscalers pulling back, or a major data centre financing default triggering something worse. The closest is Santander&amp;rsquo;s 42% abandonment statistic, but even Santander doesn&amp;rsquo;t ask what happens if that number climbs to 60%.&lt;/p&gt;
&lt;p&gt;No report discusses AI safety or alignment risks. &lt;a href="https://www.ubs.com/global/en/wealthmanagement/insights/artificial-intelligence.html"&gt;UBS&lt;/a&gt; notes that AI task completion duration has doubled every seven months and explicitly references the AGI trajectory, then moves directly to investment implications, as if &amp;ldquo;AGI trajectory&amp;rdquo; carries no risk premium at all. I find that strange.&lt;/p&gt;
&lt;p&gt;The collision between AI energy demand and climate commitments gets almost no treatment. Only &lt;a href="https://www.ib.barclays/our-insights/ai-revolution-meeting-massive-infrastructure-demand.html"&gt;Barclays&lt;/a&gt; mentions that global CO2 emissions hit a record &lt;strong&gt;37.7 gigatonnes&lt;/strong&gt; &lt;a href="https://www.iea.org/reports/global-energy-review-2025/co2-emissions"&gt;in 2023&lt;/a&gt;. The institutions projecting AI consuming 13% of US electricity by 2030 don&amp;rsquo;t reconcile that with the net-zero commitments in their own sustainability reports.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.jpmorganchase.com/content/dam/jpmorganchase/documents/center-for-geopolitics/decoding-the-new-global-operating-system.pdf"&gt;JPMorgan&lt;/a&gt;, which provides the most detailed geopolitical analysis of the twelve, never models a Taiwan Strait disruption scenario. &lt;a href="https://www.morganstanley.com/im/en-us/individual-investor/insights/tales-from-the-emerging-world/ais-silicon-backbone.html"&gt;Morgan Stanley&lt;/a&gt; identifies Taiwan, Korea, and China as &amp;ldquo;irreplaceable&amp;rdquo; nodes in the AI hardware supply chain, while calling emerging market semiconductor exposure &amp;ldquo;long-term infrastructure participation.&amp;rdquo; Those two characterisations sit in very uncomfortable proximity, and neither report acknowledges it.&lt;/p&gt;
&lt;p&gt;I came away from this with real respect for several of these pieces, particularly BofA&amp;rsquo;s empirical rigour and Santander&amp;rsquo;s willingness to cite unflattering numbers. The energy infrastructure thesis seems to me the most durable of the lot: the power bottleneck is real regardless of where you land on the productivity question.&lt;/p&gt;
&lt;p&gt;But I also came away convinced that this consensus is shaped as much by institutional incentive as by analytical independence. When nine institutions with combined AI-related revenue exposure in the hundreds of billions all agree you should increase AI exposure, the interesting question isn&amp;rsquo;t whether they&amp;rsquo;re right. They may well be.&lt;/p&gt;</description></item><item><title>When AI Labs Become Defense Contractors</title><link>https://philippdubach.com/posts/when-ai-labs-become-defense-contractors/</link><pubDate>Sun, 01 Mar 2026 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/when-ai-labs-become-defense-contractors/</guid><description>&lt;p&gt;&lt;a href="https://airandspace.si.edu/collection-objects/lockheed-vega-5b-amelia-earhart/nasm_A19670093000"&gt;Lockheed started by building Amelia Earhart&amp;rsquo;s favorite plane&lt;/a&gt;. Then came a government loan guarantee in 1971 (the L-1011 TriStar nearly killed the company), a Cold War, decades of consolidation, and now a business that earns &lt;a href="https://news.lockheedmartin.com/2025-01-28-Lockheed-Martin-Reports-Fourth-Quarter-and-Full-Year-2024-Financial-Results"&gt;&lt;strong&gt;92.5%&lt;/strong&gt; of its revenue from government contracts&lt;/a&gt;, with the F-35 alone accounting for &lt;strong&gt;26%&lt;/strong&gt; of its $71 billion in annual sales. The process took about 50 years. AI labs becoming defense contractors will happen faster.&lt;/p&gt;
&lt;p&gt;On February 27, 2026, two things happened within hours of each other. President Trump ordered every federal agency to &lt;a href="https://www.cnbc.com/2026/02/27/trump-anthropic-ai-pentagon.html"&gt;&amp;ldquo;IMMEDIATELY CEASE all use of Anthropic&amp;rsquo;s technology&amp;rdquo;&lt;/a&gt; after CEO Dario Amodei refused to strip safety constraints from Claude&amp;rsquo;s Pentagon deployment, &lt;a href="https://www.anthropic.com/news/statement-department-of-war"&gt;specifically prohibitions on mass domestic surveillance and fully autonomous weapons&lt;/a&gt;. Defense Secretary Pete Hegseth then labeled Anthropic a &lt;a href="https://www.cbsnews.com/news/hegseth-declares-anthropic-supply-chain-risk/"&gt;&amp;ldquo;Supply-Chain Risk to National Security,&amp;rdquo;&lt;/a&gt; a designation previously reserved for foreign adversaries like Huawei, &lt;a href="https://fortune.com/2026/02/28/openai-pentagon-deal-anthropic-designated-supply-chain-risk-unprecedented-action-damage-its-growth/"&gt;never before applied to an American company&lt;/a&gt;. That evening, Sam Altman announced that OpenAI had signed a deal to deploy its models on the Pentagon&amp;rsquo;s classified network, &lt;a href="https://x.com/sama/status/2027578652477821175"&gt;posting that the Department of War &amp;ldquo;displayed a deep respect for safety.&amp;rdquo;&lt;/a&gt; (Whether that reflects the Pentagon&amp;rsquo;s actual position or Altman&amp;rsquo;s political optimism, remains unclear for now.)&lt;/p&gt;
&lt;p&gt;Most coverage has framed this as an ethics dispute. I think that framing is going to age poorly. What I see is the economics of defense spending doing what they have always done to every company they touch, and the ethics arguments becoming less audible as the financial gravity increases.&lt;/p&gt;
&lt;h2 id="the-last-supper-and-defense-industry-consolidation"&gt;The Last Supper and defense industry consolidation&lt;/h2&gt;
&lt;p&gt;In the summer of 1993, Secretary of Defense Les Aspin and Deputy Secretary William Perry invited the CEOs of America&amp;rsquo;s defense firms to dinner at the Pentagon and told them, in so many words, that most of them would not survive. Cold War budget cuts meant the government could sustain roughly one prime contractor per equipment category. &lt;a href="https://www.defensenews.com/industry/2024/02/20/the-pentagon-wants-industry-to-transform-again-to-meet-demand-can-it/"&gt;Norman Augustine, then CEO of Martin Marietta, named it the Last Supper.&lt;/a&gt; The message was clear: consolidate or die, and the government would not stop you from consolidating.&lt;/p&gt;
&lt;p&gt;The restructuring that followed was fast, even by M&amp;amp;A standards. &lt;a href="https://en.wikipedia.org/wiki/Last_Supper_(defense_industry)"&gt;Within four years, &lt;strong&gt;51 prime defense contractors collapsed into five&lt;/strong&gt;&lt;/a&gt;: &lt;a href="https://www.ftc.gov/news-events/news/press-releases/1995/05/lockheed-corporation"&gt;Lockheed merged with Martin Marietta in 1995 ($10 billion)&lt;/a&gt;, &lt;a href="https://boeing.mediaroom.com/1997-07-31-Boeing-Completes-McDonnell-Douglas-Merger"&gt;Boeing absorbed McDonnell Douglas in 1997 ($13.3 billion)&lt;/a&gt;, Raytheon folded in Hughes Electronics and Texas Instruments&amp;rsquo; defense unit. Between 2011 and 2015, &lt;a href="https://www.defensenews.com/breaking-news/2017/12/14/american-exodus-17000-us-defense-suppliers-may-have-left-the-defense-sector/"&gt;an additional &lt;strong&gt;17,000 U.S. companies exited the defense industry&lt;/strong&gt;&lt;/a&gt;, a contraction that hollowed out the supplier base the Big Five still depend on today.&lt;/p&gt;
&lt;p&gt;The revenue dependency data shows what happens to the companies on the inside of that consolidation. Boeing before 1997 was, as &lt;a href="https://www.cnn.com/2024/01/30/business/boeing-history-of-problems"&gt;Bank of America analyst Ron Epstein put it&lt;/a&gt;, &amp;ldquo;a company where engineers were high church.&amp;rdquo; Post-merger, Boeing relocated its headquarters from Seattle&amp;rsquo;s engineering center to Chicago, physically separating leadership from manufacturing. &lt;a href="https://boeing.mediaroom.com/2025-01-28-Boeing-Reports-Fourth-Quarter-Results"&gt;Defense rose to &lt;strong&gt;35.8% of Boeing&amp;rsquo;s FY2024 revenue&lt;/strong&gt; ($23.9 billion)&lt;/a&gt;. The cultural shift that merger carried, financial discipline over engineering judgment, is what most 737 MAX post-mortems eventually trace back to. Companies don&amp;rsquo;t plan to end up here. They respond to incentives, and the incentives compound.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-government-revenue-dependency-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/government-revenue-dependency.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/government-revenue-dependency.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/government-revenue-dependency.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/government-revenue-dependency.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/government-revenue-dependency.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/government-revenue-dependency.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/government-revenue-dependency.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/government-revenue-dependency.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/government-revenue-dependency.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/government-revenue-dependency.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/government-revenue-dependency.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/government-revenue-dependency.png"
alt="Government revenue dependency across defense primes and AI defense contractors: Lockheed Martin at 92.5%, RTX at 55%, Boeing at 35.8%, Palantir at 53.7%, OpenAI at 5%, and Anthropic at 2%, showing how classified defense work creates a one-way revenue ratchet"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-government-revenue-dependency-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/government-revenue-dependency.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Government revenue dependency across defense primes and AI defense contractors: Lockheed Martin at 92.5%, RTX at 55%, Boeing at 35.8%, Palantir at 53.7%, OpenAI at 5%, and Anthropic at 2%, showing how classified defense work creates a one-way revenue ratchet" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;The AI industry will face the same incentives, just faster, and through a different mechanism: not M&amp;amp;A but access to classified networks and government-funded compute.&lt;/p&gt;
&lt;h2 id="how-pentagon-ai-spending-reshapes-a-company"&gt;How Pentagon AI spending reshapes a company&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://defensescoop.com/2024/03/11/pentagon-ai-budget-request-2025/"&gt;The FY2025 DoD AI budget was &lt;strong&gt;$1.8 billion&lt;/strong&gt;&lt;/a&gt;, a figure that nearly everyone involved described as insufficient. &lt;a href="https://defensescoop.com/2025/06/26/dod-fy26-budget-request-autonomy-unmanned-systems/"&gt;The FY2026 budget request earmarks &lt;strong&gt;$13.4 billion&lt;/strong&gt; for AI and autonomous systems&lt;/a&gt;, a roughly 7x increase in a single budget cycle, and the first time these technologies have their own standalone line item inside a total defense request of &lt;strong&gt;$892.6 billion&lt;/strong&gt;. For context: &lt;a href="https://siliconangle.com/2026/02/12/anthropic-closes-30b-round-annualized-revenue-tops-14b/"&gt;Anthropic&amp;rsquo;s full annualized revenue as of February 2026 was approximately &lt;strong&gt;$14 billion&lt;/strong&gt;&lt;/a&gt;. The Pentagon just made AI a budget category larger than most of the companies selling it.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-dod-ai-budget-context-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/dod-ai-budget-context.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/dod-ai-budget-context.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/dod-ai-budget-context.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/dod-ai-budget-context.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/dod-ai-budget-context.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/dod-ai-budget-context.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/dod-ai-budget-context.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/dod-ai-budget-context.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/dod-ai-budget-context.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/dod-ai-budget-context.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/dod-ai-budget-context.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/dod-ai-budget-context.png"
alt="Pentagon AI budget FY2026 at $13.4 billion compared to AI lab revenues: a 7x jump from $1.8 billion in FY2025, set against Anthropic annualized revenue of $14 billion, OpenAI FY2025 revenue of $13.1 billion, and Palantir FY2025 revenue of $4.48 billion"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-dod-ai-budget-context-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/dod-ai-budget-context.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Pentagon AI budget FY2026 at $13.4 billion compared to AI lab revenues: a 7x jump from $1.8 billion in FY2025, set against Anthropic annualized revenue of $14 billion, OpenAI FY2025 revenue of $13.1 billion, and Palantir FY2025 revenue of $4.48 billion" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;Anthropic burns an estimated $3–5 billion annually; &lt;a href="https://www.cnbc.com/2026/02/20/openai-resets-spend-expectations-targets-around-600-billion-by-2030.html"&gt;OpenAI burned approximately &lt;strong&gt;$8 billion in 2025&lt;/strong&gt;&lt;/a&gt;. Neither has a clear path to profitability before 2027 at earliest. Government AI contracts offer something consumer businesses cannot: predictable, multi-year, politically protected revenue streams that don&amp;rsquo;t churn when a competitor releases a better model.&lt;/p&gt;
&lt;p&gt;The defense procurement structures deepen that dependency over time. &lt;a href="https://www.congress.gov/crs-product/IF12558"&gt;IDIQ contracts (Indefinite Delivery, Indefinite Quantity), which now account for roughly &lt;strong&gt;56% of DoD contract award dollars&lt;/strong&gt;&lt;/a&gt;, run five years with extension options. &lt;a href="https://defensescoop.com/2025/05/23/dod-palantir-maven-smart-system-contract-increase/"&gt;Palantir&amp;rsquo;s Maven Smart System contract started at $480 million and expanded to &lt;strong&gt;nearly $1.3 billion through 2029&lt;/strong&gt;&lt;/a&gt;. The JWCC cloud contract, which replaced the &lt;a href="https://www.cnbc.com/2021/07/06/pentagon-cancels-10-billion-jedi-cloud-contract.html"&gt;cancelled $10 billion JEDI contract&lt;/a&gt;, placed over &lt;strong&gt;$3.9 billion in task orders within three years&lt;/strong&gt; of award to AWS, Google, Microsoft, and Oracle. Once embedded in classified systems, switching costs become close to prohibitive. A competitor cannot simply offer better inference speed.&lt;/p&gt;
&lt;p&gt;Security clearances are maybe the most underappreciated asset in the defense tech ecosystem. &lt;a href="https://federalnewsnetwork.com/defense-main/2025/05/dcsa-backlog-of-security-clearance-investigations-down-24/"&gt;Processing a clearance takes an average of &lt;strong&gt;243 days end-to-end&lt;/strong&gt;&lt;/a&gt;, up to a year for TS/SCI with polygraph. Only around &lt;strong&gt;4.2 million Americans&lt;/strong&gt; hold active clearances, roughly 2.5% of the labor force, and an estimated 500,000 to 700,000 cleared positions currently sit unfilled. &lt;a href="https://news.clearancejobs.com/2025/03/20/national-security-compensation-reaches-new-high-despite-workforce-challenges/"&gt;Average cleared professional compensation hit &lt;strong&gt;$119,131 in 2025&lt;/strong&gt;; full-scope-polygraph holders averaged &lt;strong&gt;$141,299&lt;/strong&gt;&lt;/a&gt;. For AI labs accustomed to hiring from MIT, Cambridge, and ETH Zürich, the cleared talent pool is thin and gets more expensive every year.&lt;/p&gt;
&lt;p&gt;Any lab serious about classified work has to build a parallel organizational structure: separate hiring pipeline, separate facilities, separate operational security requirements. The lab that builds that structure first has a moat no competitor can cross quickly.&lt;/p&gt;
&lt;h2 id="palantirs-trajectory-as-the-defense-tech-blueprint"&gt;Palantir&amp;rsquo;s trajectory as the defense tech blueprint&lt;/h2&gt;
&lt;p&gt;The clearest view of where this ends is Palantir, which has been running the experiment at scale for a decade. &lt;a href="https://www.cnbc.com/2026/02/02/palantir-pltr-q4-2025-earnings.html"&gt;It posted &lt;strong&gt;$4.48 billion in FY2025 revenue&lt;/strong&gt;, up 56% year-over-year&lt;/a&gt;, with government comprising &lt;strong&gt;53.7%&lt;/strong&gt; of the total, down from a peak of &lt;strong&gt;58.2% in 2021&lt;/strong&gt; as its commercial AIP platform gained traction. &lt;a href="https://www.army.mil/article/287506/u_s_army_awards_enterprise_service_agreement_to_enhance_military_readiness_and_drive_operational_efficiency"&gt;Its $10 billion U.S. Army Enterprise Agreement in July 2025 consolidated 75 existing software contracts into a single framework&lt;/a&gt;. Its market capitalization reached roughly &lt;strong&gt;$320 billion&lt;/strong&gt; by late February 2026, making it worth nearly twice Boeing. The model, government as the client that funds and validates the technology, commercial as the client that justifies the valuation, is what the AI labs are now building toward.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://news.crunchbase.com/venture/openai-raise-largest-ai-venture-deal-ever/"&gt;OpenAI at an &lt;strong&gt;$840 billion valuation&lt;/strong&gt;&lt;/a&gt; with a classified Pentagon network deal is already further down that road than most coverage acknowledges. It has &lt;a href="https://openai.com/index/openai-appoints-retired-us-army-general/"&gt;appointed retired General Paul Nakasone&lt;/a&gt;, former NSA director, to its board. It hired Dane Stuckey, who spent a decade at Palantir and served as its CISO for six of those years, &lt;a href="https://techcrunch.com/2024/10/15/former-palantir-ciso-dane-stuckey-joins-openai-to-lead-security/"&gt;as its own CISO&lt;/a&gt;. It has active job postings for Government Account Directors in Defense requiring Top Secret clearance and defense revenue targets exceeding $2 million per year.&lt;/p&gt;
&lt;p&gt;The publishing record is moving the same way. &lt;a href="https://openai.com/index/introducing-openai/"&gt;OpenAI&amp;rsquo;s 2015 founding post&lt;/a&gt; promised researchers &amp;ldquo;will be strongly encouraged to publish their work.&amp;rdquo; GPT-1 shipped with open-sourced code. GPT-2 was partially withheld in 2019, GPT-3 fully closed in 2020, GPT-4&amp;rsquo;s architecture undisclosed in 2023. OpenAI released smaller open-source models in August 2025 (its first since GPT-2, six years later) but they were text-only, trained on synthetic data, not frontier systems. &lt;a href="https://www.bloomberg.com/news/articles/2025-02-04/google-removes-language-on-weapons-from-public-ai-principles"&gt;Google removed the &amp;ldquo;AI applications we will not pursue&amp;rdquo; section from its principles in February 2025&lt;/a&gt;, including the explicit weapons prohibition. &lt;a href="https://about.fb.com/news/2024/11/open-source-ai-america-global-security/"&gt;Meta opened Llama to defense agencies and contractors including Lockheed Martin and Anduril in November 2024&lt;/a&gt;. Anthropic has never open-sourced a Claude model. Every major lab is moving in the same direction.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-openness-retreat-timeline-png-4" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/openness-retreat-timeline.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/openness-retreat-timeline.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/openness-retreat-timeline.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/openness-retreat-timeline.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/openness-retreat-timeline.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/openness-retreat-timeline.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/openness-retreat-timeline.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/openness-retreat-timeline.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/openness-retreat-timeline.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/openness-retreat-timeline.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/openness-retreat-timeline.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/openness-retreat-timeline.png"
alt="Timeline of AI lab research openness from 2015 to 2026, showing the retreat from open-source to classified military AI work: OpenAI moved from open-source GPT-1 to classified Pentagon deployment, Google removed its weapons prohibition, Meta opened Llama to defense contractors, and Anthropic was labeled a supply-chain risk"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-openness-retreat-timeline-png-4" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/openness-retreat-timeline.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Timeline of AI lab research openness from 2015 to 2026, showing the retreat from open-source to classified military AI work: OpenAI moved from open-source GPT-1 to classified Pentagon deployment, Google removed its weapons prohibition, Meta opened Llama to defense contractors, and Anthropic was labeled a supply-chain risk" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;The counterargument, and it&amp;rsquo;s a real one, is that defense R&amp;amp;D has historically generated civilian spillovers: ARPANET, GPS, jet engines, the semiconductor supply chain. &lt;a href="https://direct.mit.edu/rest/article/107/1/14/114751/The-Intellectual-Spoils-of-War-Defense-R-amp-D"&gt;Moretti, Steinwender, and Van Reenen, writing in the &lt;em&gt;Review of Economics and Statistics&lt;/em&gt; (2025)&lt;/a&gt;, found that a 10% increase in government-funded defense R&amp;amp;D generates a 5–6% increase in privately funded R&amp;amp;D in the same industry: crowding-in, not crowding-out. The estimated total effect: U.S. private R&amp;amp;D investment is &lt;strong&gt;$85 billion higher&lt;/strong&gt; than it would be without government defense spending.&lt;/p&gt;
&lt;p&gt;But there&amp;rsquo;s a difference between how much research gets done and what it gets pointed at. Lockheed&amp;rsquo;s R&amp;amp;D is now probably almost entirely classified hypersonics and directed-energy weapons. What it learns there does not flow back to commercial applications in any useful timeframe. The research volume expands; the scope narrows. Bell Labs devoted a substantial share of its personnel to government contracts at its Cold War peak; &lt;a href="https://cepr.org/voxeu/columns/how-antitrust-enforcement-can-spur-innovation-bell-labs-and-1956-consent-decree"&gt;the 1956 AT&amp;amp;T Consent Decree forced royalty-free patent licensing on the transistor&lt;/a&gt;, which accidentally accelerated the civilian semiconductor industry by giving Texas Instruments and Fairchild Semiconductor access to the core technology. AI labs operating under classification will not be forced to open-license anything. That mechanism does not exist for software under ITAR.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m more confident in the direction of this analysis than in the timeline. The Anthropic supply-chain-risk designation may not survive legal challenge. The $13.4 billion FY2026 AI budget might not survive unchanged. Amodei might find a compromise that others in the industry treat as a ceiling rather than a floor. What I don&amp;rsquo;t think reverses is the structural pull. The defense budget is the largest single purchaser of advanced technology on earth, it&amp;rsquo;s growing, it operates on multi-year contract cycles that reward incumbents, and it is willing to use blunt regulatory tools against companies that don&amp;rsquo;t cooperate, as Anthropic learned in about six hours on February 27.&lt;/p&gt;
&lt;p&gt;The Last Supper logic applies here too: the government will not block consolidation, and it will not save the AI defense contractors that don&amp;rsquo;t participate. It will just find a different partner who will.&lt;/p&gt;</description></item><item><title>The Impossible Backhand</title><link>https://philippdubach.com/posts/the-impossible-backhand/</link><pubDate>Tue, 17 Feb 2026 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/the-impossible-backhand/</guid><description>&lt;p&gt;In the latest issue of &lt;a href="https://lab.philippdubach.com"&gt;The AI Lab Newsletter&lt;/a&gt;, I featured a ByteDance &lt;a href="https://x.com/AngryTomtweets/status/2021194266517832057"&gt;Seedance 2.0&lt;/a&gt; clip: two men playing tennis at what looked like an ATP tournament. Photorealistic. I probably wouldn&amp;rsquo;t be able to tell it wasn&amp;rsquo;t real footage if I didn&amp;rsquo;t know. A co-worker who played junior pro-am tennis watched the same clip and said: &amp;ldquo;That backhand doesn&amp;rsquo;t exist. Nobody plays it like that.&amp;rdquo; His domain expertise spotted an error that probably fooled everyone else.&lt;/p&gt;
&lt;p&gt;We ended up in a long conversation about what that means. AI can get to maybe the 95th or 98th percentile of creating something that looks perfect, but then it isn&amp;rsquo;t, and if you have deep knowledge you can spot it immediately. The consensus narrative treats this as a temporary limitation. But it might be structural. And I think the evidence, once you lay it out, points to a genuinely contrarian conclusion: domain expertise is appreciating in value, not depreciating, precisely because AI hits a quality ceiling it can&amp;rsquo;t easily push past.&lt;/p&gt;
&lt;h2 id="approaching-the-ai-quality-ceiling"&gt;Approaching the AI quality ceiling&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve &lt;a href="https://philippdubach.com/posts/the-most-expensive-assumption-in-ai/"&gt;written before&lt;/a&gt; about Sara Hooker&amp;rsquo;s work on diminishing returns from scaling. The investment side of that argument, the &lt;a href="https://philippdubach.com/posts/the-saaspocalypse-paradox/"&gt;$690 billion in hyperscaler capex&lt;/a&gt; chasing a 4% revenue coverage ratio, has been well covered. What hasn&amp;rsquo;t been covered as precisely is why AI output quality hits a ceiling, and why that ceiling is structural rather than temporary.&lt;/p&gt;
&lt;p&gt;Ben Affleck, of all people, gave the clearest non-technical explanation on &lt;a href="https://faroutmagazine.co.uk/ben-affleck-dismisses-existential-potential-ai-hollywood/"&gt;The Joe Rogan Experience&lt;/a&gt; in January 2026:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you try to get ChatGPT or Claude or Gemini to write you something, it&amp;rsquo;s really shitty. And it&amp;rsquo;s shitty because by its nature it goes to the mean, to the average. Now, it&amp;rsquo;s a useful tool if you&amp;rsquo;re a writer&amp;hellip; but I don&amp;rsquo;t think it&amp;rsquo;s actually very likely that it&amp;rsquo;s going to write anything meaningful, or that it&amp;rsquo;s going to be making movies from whole cloth. That&amp;rsquo;s bullshit.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;He&amp;rsquo;s more right than he probably knows. The convergence to the mean isn&amp;rsquo;t a solvable engineering problem. It operates at three distinct levels, each compounding the others.&lt;/p&gt;
&lt;p&gt;(1) The mathematics of next-token prediction. LLMs generate the most statistically probable continuation of a sequence. Probable, by definition, means average. The model isn&amp;rsquo;t trying to produce the best output; it&amp;rsquo;s producing the most expected one given the distribution it learned. Outlier quality, the kind that makes writing or analysis distinctive, lives in the tails of the distribution. The architecture systematically avoids those tails.&lt;/p&gt;
&lt;p&gt;(2) RLHF makes it worse. Research shows that human annotators prefer familiar-sounding responses, and the learned reward function weights typicality at α=0.57. Models are quite literally being trained to sound typical rather than merely correct or good. The reinforcement signal pushes outputs toward the center of the quality distribution, not toward its upper bound.&lt;/p&gt;
&lt;p&gt;(3) model collapse. &lt;a href="https://www.nature.com/articles/s41586-024-07566-y"&gt;Shumailov et al.&lt;/a&gt; documented this in their Nature paper: as models increasingly train on AI-generated content, they &amp;ldquo;forget the true underlying data distribution,&amp;rdquo; losing the tails first and converging toward a point estimate with minimal variance. The internet is filling with AI-generated text. The next generation of models trains on that text. The tails shrink further. This is a positive feedback loop running in the wrong direction.&lt;/p&gt;
&lt;p&gt;MIT researchers &lt;a href="https://arxiv.org/abs/2007.05558"&gt;Thompson, Greenewald, Lee, and Manso&lt;/a&gt; quantified the cost side: computational resources scale with at least the fourth power of improvement in theory, the ninth power in practice. To halve an error rate requires more than 500× the computational resources. When AlexNet trained on two GPUs in 2012, it took six days. By 2018, NASNet-A cut the error rate in half using more than 1,000× as much compute. &lt;figure class="post-figure" style="width: 90%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-ninth-power-curve-2-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/ninth-power-curve-2.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/ninth-power-curve-2.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/ninth-power-curve-2.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/ninth-power-curve-2.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ninth-power-curve-2.png 1200w"
sizes="90vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/ninth-power-curve-2.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/ninth-power-curve-2.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/ninth-power-curve-2.png 1440w"
sizes="90vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ninth-power-curve-2.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/ninth-power-curve-2.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/ninth-power-curve-2.png 2000w"
sizes="90vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ninth-power-curve-2.png"
alt="AI quality ceiling ninth-power scaling curve: computational cost scales from AlexNet in 2012 on two GPUs to NASNet-A in 2018 requiring over 1000x compute to halve error rate, showing diminishing returns that explain why AI output quality plateaus and domain expertise remains irreplaceable"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-ninth-power-curve-2-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/ninth-power-curve-2.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="AI quality ceiling ninth-power scaling curve: computational cost scales from AlexNet in 2012 on two GPUs to NASNet-A in 2018 requiring over 1000x compute to halve error rate, showing diminishing returns that explain why AI output quality plateaus and domain expertise remains irreplaceable" decoding="async"&gt;
&lt;/dialog&gt;
&lt;/p&gt;
&lt;p&gt;Affleck captured the commercial implication of this better than most analysts:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I think a lot of that rhetoric comes from people who are trying to justify valuations around companies where they go, &amp;ldquo;We&amp;rsquo;re going to change everything in two years.&amp;rdquo; Well, the reason they&amp;rsquo;re saying that is because they need to ascribe a valuation for investment that can warrant the capex spend they&amp;rsquo;re going to make on these data centers. Except that ChatGPT 5 is about 25 percent better than ChatGPT 4, and costs about four times as much in the way of electricity and data.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;He&amp;rsquo;s describing the ninth-power curve in plain English. Each marginal improvement costs exponentially more. The curve bends away from you the harder you push.&lt;/p&gt;
&lt;h2 id="humanitys-last-exam"&gt;Humanity&amp;rsquo;s Last Exam&lt;/h2&gt;
&lt;p&gt;The hardest measurement of where AI actually stands against domain expertise is &lt;a href="https://artificialanalysis.ai/evaluations/humanitys-last-exam"&gt;Humanity&amp;rsquo;s Last Exam&lt;/a&gt; (HLE), published in Nature in early 2025 by the Center for AI Safety and Scale AI. Built with approximately 1,000 subject-matter experts across 500+ institutions, it consists of 2,500 expert-crafted questions spanning 100+ academic domains, designed to be &amp;ldquo;Google-proof&amp;rdquo;: questions that require genuine understanding rather than information retrieval.&lt;/p&gt;
&lt;p&gt;As of February 2026, the top model (Gemini 3 Pro Preview) scores &lt;strong&gt;37.5%&lt;/strong&gt;. Most models sit below 30%. Human domain experts average roughly &lt;strong&gt;90%&lt;/strong&gt;. That&amp;rsquo;s a 53-point gap. In specialized domains like advanced chemical kinetics or medieval philology, AI barely outperforms random guessing while experts score comfortably in the 80s and 90s. &lt;figure class="post-figure" style="width: 90%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-hle-gap-chart-png-2" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/hle-gap-chart.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/hle-gap-chart.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/hle-gap-chart.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/hle-gap-chart.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/hle-gap-chart.png 1200w"
sizes="90vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/hle-gap-chart.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/hle-gap-chart.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/hle-gap-chart.png 1440w"
sizes="90vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/hle-gap-chart.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/hle-gap-chart.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/hle-gap-chart.png 2000w"
sizes="90vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/hle-gap-chart.png"
alt="Humanity&amp;#39;s Last Exam 2026 benchmark scores showing 53-point gap between human domain experts at roughly 90 percent and top AI models including Gemini 3 Deep Think at 48.4 percent and Gemini 3 Pro Preview at 37.5 percent, evidence that AI capability frontier remains far behind human expertise on specialist questions"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-hle-gap-chart-png-2" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/hle-gap-chart.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Humanity&amp;#39;s Last Exam 2026 benchmark scores showing 53-point gap between human domain experts at roughly 90 percent and top AI models including Gemini 3 Deep Think at 48.4 percent and Gemini 3 Pro Preview at 37.5 percent, evidence that AI capability frontier remains far behind human expertise on specialist questions" decoding="async"&gt;
&lt;/dialog&gt;
The models are also systematically overconfident. Calibration errors on HLE &lt;a href="https://www.letsdatascience.com/blog/humanitys-last-exam-the-test-thats-humbling-the-worlds-smartest-ai"&gt;range from 34% to 89%&lt;/a&gt;, meaning AI systems are saying &amp;ldquo;I&amp;rsquo;m 90% sure&amp;rdquo; when they should be saying &amp;ldquo;I&amp;rsquo;m guessing.&amp;rdquo; That gap between confidence and accuracy, that AI overconfidence, is where real-world harm concentrates.&lt;/p&gt;
&lt;p&gt;In legal applications, Yale researcher &lt;a href="https://law.stanford.edu/2024/01/11/hallucinating-law-legal-mistakes-with-large-language-models-are-pervasive/"&gt;Matthew Dahl&lt;/a&gt; found hallucination rates of 69% to 88% on specific queries. Damien Charlotin&amp;rsquo;s database now tracks 914 cases of AI-generated hallucinated content in legal filings worldwide, growing from two cases per week to two to three per day. In medicine, the &lt;a href="https://www.annfammed.org/content/23/1/1/tab-e-letters"&gt;Annals of Family Medicine&lt;/a&gt; warns that AI hallucinations are &amp;ldquo;far more insidious&amp;rdquo; because &amp;ldquo;a subtle misstep like a misplaced clinical guideline, an incorrect dosage, or an invented side effect may not raise immediate suspicion.&amp;rdquo; These aren&amp;rsquo;t edge cases. They&amp;rsquo;re the expected behavior of systems operating in professional domains where training data is sparse.&lt;/p&gt;
&lt;p&gt;The structural explanation is what Kandpal et al. demonstrated at ICML 2023: there&amp;rsquo;s a strong correlational and causal relationship between an LLM&amp;rsquo;s ability to answer questions and how many relevant documents appeared in pre-training data. Common knowledge gets learned well. Specialized knowledge appears infrequently online, so models learn it poorly. &lt;a href="https://x.com/alive_eth/status/1286650402356641792"&gt;Ali Yahya&lt;/a&gt; of a16z framed it sharply: neural networks are &amp;ldquo;fantastic interpolators but terrible extrapolators,&amp;rdquo; powerful pattern matchers that are &amp;ldquo;blind to the mechanisms that generate the data in the first place.&amp;rdquo; &lt;figure class="post-figure" style="width: 90%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-domain-risk-map-png-3" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/domain-risk-map.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/domain-risk-map.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/domain-risk-map.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/domain-risk-map.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/domain-risk-map.png 1200w"
sizes="90vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/domain-risk-map.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/domain-risk-map.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/domain-risk-map.png 1440w"
sizes="90vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/domain-risk-map.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/domain-risk-map.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/domain-risk-map.png 2000w"
sizes="90vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/domain-risk-map.png"
alt="AI hallucination rates across professional domains: legal research at 69 to 88 percent failure rated critical risk, clinical medicine rated critical with subtle errors, financial analysis at roughly 45 percent, expert academics at 62.5 percent failure on Humanity&amp;#39;s Last Exam, mapping the AI capability frontier by domain"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-domain-risk-map-png-3" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/domain-risk-map.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="AI hallucination rates across professional domains: legal research at 69 to 88 percent failure rated critical risk, clinical medicine rated critical with subtle errors, financial analysis at roughly 45 percent, expert academics at 62.5 percent failure on Humanity&amp;#39;s Last Exam, mapping the AI capability frontier by domain" decoding="async"&gt;
&lt;/dialog&gt;
My colleague who spotted the impossible backhand is a fantastic extrapolator. He has an embodied model of how tennis biomechanics work that no amount of video footage can teach a diffusion model. The model can produce outputs that are statistically plausible. He can identify outputs that are physically impossible. That distinction is the gap.&lt;/p&gt;
&lt;h2 id="the-centaur-model-for-human-ai-collaboration"&gt;The centaur model for human-AI collaboration&lt;/h2&gt;
&lt;p&gt;The consensus framing positions AI and human expertise as substitutes: AI gets better, humans become less relevant. The empirical evidence on AI augmentation versus replacement says the opposite. Human-AI collaboration, what researchers call the centaur model, outperforms either alone, consistently, across domains, and the quality of the human contribution matters a lot.&lt;/p&gt;
&lt;p&gt;The Harvard/BCG study tested 758 consultants, 7% of BCG&amp;rsquo;s consulting workforce, on realistic tasks using GPT-4. The researchers described a &amp;ldquo;&lt;a href="https://www.hbs.edu/faculty/Pages/item.aspx?num=64700"&gt;jagged technological frontier&lt;/a&gt;&amp;rdquo; where some tasks fall within AI&amp;rsquo;s capabilities and others, though seemingly similar, do not. For tasks within that frontier, consultants using AI completed 12.2% more tasks, finished 25.1% faster, and produced results 40% higher in quality. Below-average performers saw a 43% improvement in knowledge worker productivity. AI as skill equalizer. But for tasks outside AI&amp;rsquo;s frontier, consultants using AI were &lt;strong&gt;19 percentage points&lt;/strong&gt; less likely to produce correct solutions. The researchers observed that &amp;ldquo;professionals who had a negative performance when using AI tended to blindly adopt its output and interrogate it less.&amp;rdquo; &lt;figure class="post-figure" style="width: 90%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-centaur-effect-png-5" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/centaur-effect.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/centaur-effect.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/centaur-effect.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/centaur-effect.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/centaur-effect.png 1200w"
sizes="90vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/centaur-effect.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/centaur-effect.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/centaur-effect.png 1440w"
sizes="90vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/centaur-effect.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/centaur-effect.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/centaur-effect.png 2000w"
sizes="90vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/centaur-effect.png"
alt="Harvard BCG centaur model study results on human-AI collaboration and knowledge worker productivity: within AI capability frontier showing plus 40 percent quality, plus 12.2 percent more tasks, plus 25.1 percent faster; outside frontier showing minus 19 percentage points accuracy for blind delegators"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-centaur-effect-png-5" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/centaur-effect.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Harvard BCG centaur model study results on human-AI collaboration and knowledge worker productivity: within AI capability frontier showing plus 40 percent quality, plus 12.2 percent more tasks, plus 25.1 percent faster; outside frontier showing minus 19 percentage points accuracy for blind delegators" decoding="async"&gt;
&lt;/dialog&gt;
&lt;/p&gt;
&lt;p&gt;That second finding doesn&amp;rsquo;t get enough attention. It means the value of the human in the loop depends entirely on whether the human can identify when the AI is wrong. Which requires precisely the domain expertise that AI supposedly makes obsolete.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://www.lsu.edu/business/news/2025/7/research-ai-collaboration.php"&gt;&amp;ldquo;centaur analyst&amp;rdquo; study from LSU Finance&lt;/a&gt; (winner of the Fama-DFA Best Paper Award) confirmed this human-AI partnership over an 18-year dataset. AI alone beat human stock analysts in 54.5% of cases. The human-AI hybrid outperformed AI-only in nearly 55% of forecasts and reduced extreme prediction errors by roughly 90% compared to human analysts alone. In clinical decision-making experiments with the Mayo Clinic, the ranking was consistent: human-algorithm centaur, then algorithm alone, then human experts alone. The human adds most value at the extremes, catching the cases where the model&amp;rsquo;s convergence to the mean produces confidently wrong answers.&lt;/p&gt;
&lt;p&gt;Affleck, who has thought about this more carefully than his reputation might suggest, landed on the same conclusion:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The way I see the technology and what it&amp;rsquo;s good at and what it&amp;rsquo;s not, it&amp;rsquo;s gonna be good at filling in all the places that are expensive and burdensome, and it&amp;rsquo;s always gonna rely fundamentally on the human artistic aspects of it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Labor economics research broadly confirms this. Oxford researchers&lt;a href="https://arxiv.org/abs/2412.19754"&gt; Mäkelä and Stephany&lt;/a&gt; analyzed 12 million U.S. job vacancies and found that complementary effects of AI are 1.7× larger than substitution effects. The World Economic Forum projects 170 million new jobs created by 2030 versus 92 million displaced, a net gain of 78 million. &lt;a href="https://www.nber.org/system/files/working_papers/w28257/revisions/w28257.rev1.pdf"&gt;Acemoglu, Autor, Hazell, and Restrepo&lt;/a&gt; found that while AI-exposed firms reduce hiring in non-AI positions:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;the aggregate impacts of AI-labor substitution on employment and wage growth&amp;hellip; is currently too small to be detectable.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://www.mckinsey.com.br/capabilities/tech-and-ai/our-insights/building-the-ai-muscle-of-your-business-leaders"&gt;McKinsey&lt;/a&gt; captures the strategic implication: &amp;ldquo;When you have built a bench of AI-capable domain owners, your company has a real competitive advantage. That&amp;rsquo;s because these leaders are hard to replicate.&amp;rdquo; Yet only 23% of organizations believe they are building sustainable AI advantages, despite 79% reporting competitors are making similar investments.&lt;/p&gt;
&lt;h2 id="ai-deskilling-is-a-trap"&gt;AI deskilling is a trap&lt;/h2&gt;
&lt;p&gt;If a generation of junior analysts learns to use AI before developing independent judgment, they never build the pattern recognition that lets them spot when the model is wrong. If junior lawyers lean on AI for legal research before reading enough case law to develop intuition for what&amp;rsquo;s plausible, they can&amp;rsquo;t catch the 69-88% hallucination rates. If aspiring filmmakers generate scenes with Seedance 2.0 instead of learning how cameras, bodies, and physics actually interact, they can&amp;rsquo;t identify the impossible backhand. &lt;a href="https://www.gartner.com/en/articles/ai-lock-in"&gt;Gartner predicts&lt;/a&gt; that by 2030, half of enterprises will face irreversible skill shortages in at least two critical job roles because of unchecked automation. This AI skill erosion creates a vicious cycle: fewer skilled workers, greater dependence on AI, higher costs to fill the gaps.&lt;/p&gt;
&lt;p&gt;Acemoglu warns that technology &amp;ldquo;does not automatically benefit workers.&amp;rdquo; In 19th-century England, the benefits of mechanization only spread after decades of worker activism. The parallel risk with AI isn&amp;rsquo;t mass unemployment. It&amp;rsquo;s a hollowing out of the skill base that makes the centaur model function. You lose not the jobs but the expertise that makes the jobs valuable.&lt;/p&gt;
&lt;p&gt;David Autor&amp;rsquo;s vision is more optimistic: AI could &amp;ldquo;extend the relevance, reach, and value of human expertise,&amp;rdquo; democratizing it rather than eliminating it. I want to believe that&amp;rsquo;s right. But it requires treating AI as a tool that amplifies existing expertise rather than a shortcut that replaces the need to develop it. The 43% improvement that below-average BCG consultants saw from using GPT-4 is real. The 19-percentage-point penalty when those same consultants blindly trusted AI outside its frontier is equally real. The difference between those two outcomes is judgment. And judgment comes from experience, not from a larger context window.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m more confident in the centaur framework than in any specific prediction about timelines or magnitudes. The ninth-power scaling curve, the 53-point gap on Humanity&amp;rsquo;s Last Exam, the α=0.57 typicality bias in RLHF, the 69-88% hallucination rates in legal applications, and the 95% of &lt;a href="https://philippdubach.com/posts/enterprise-ai-strategy-is-backwards/"&gt;enterprises&lt;/a&gt; seeing no measurable P&amp;amp;L returns from AI investments all point in the same direction. The question of AI augmentation versus replacement has an empirical answer: AI is a tool that makes good practitioners better and bad practitioners worse. The &lt;a href="https://philippdubach.com/posts/is-ai-really-eating-the-world/"&gt;industry narrative&lt;/a&gt; demands a story about replacement. The data tells a story about partnership, one where the human&amp;rsquo;s contribution is not a relic of an earlier era but the irreducible ingredient that makes the whole system work.&lt;/p&gt;
&lt;p&gt;The ability to spot the impossible backhand isn&amp;rsquo;t going away. If anything, it&amp;rsquo;s worth more every day.&lt;/p&gt;</description></item><item><title>The SaaSpocalypse Paradox</title><link>https://philippdubach.com/posts/the-saaspocalypse-paradox/</link><pubDate>Fri, 13 Feb 2026 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/the-saaspocalypse-paradox/</guid><description>&lt;blockquote&gt;
&lt;p&gt;The market is simultaneously pricing AI capex failure and AI destroying all software. Both cannot be true.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-jpm-murphy-note-spread-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/jpm-murphy-note-spread.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/jpm-murphy-note-spread.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/jpm-murphy-note-spread.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/jpm-murphy-note-spread.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/jpm-murphy-note-spread.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/jpm-murphy-note-spread.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/jpm-murphy-note-spread.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/jpm-murphy-note-spread.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/jpm-murphy-note-spread.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/jpm-murphy-note-spread.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/jpm-murphy-note-spread.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/jpm-murphy-note-spread.png"
alt="JP Morgan research note on the February 2026 software sell-off by Mark R Murphy titled Software Collapse Broadens with Nowhere to Hide, questioning the leap from Claude Cowork Plugins to full enterprise software disruption"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-jpm-murphy-note-spread-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/jpm-murphy-note-spread.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="JP Morgan research note on the February 2026 software sell-off by Mark R Murphy titled Software Collapse Broadens with Nowhere to Hide, questioning the leap from Claude Cowork Plugins to full enterprise software disruption" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;Anthropic released &lt;a href="https://github.com/anthropics/knowledge-work-plugins"&gt;11 open-source plugins&lt;/a&gt; for Claude Cowork on January 30. Apache-2.0 licensed, file-based, running in a macOS-only research preview. Within a week, the IGV software ETF had fallen &lt;strong&gt;32%&lt;/strong&gt; from its September peak to a 52-week low of $79.65, roughly $2 trillion in market cap had evaporated, and hedge funds had made &lt;a href="https://www.bnnbloomberg.ca/business/2026/02/04/us-software-stocks-hit-by-anthropic-wake-up-call-on-ai-disruption/"&gt;$24 billion&lt;/a&gt; shorting the sector. The RSI hit 18, the most oversold reading &lt;a href="https://articles.stockcharts.com/article/the-claude-crash-how-ai-triggered-a-historic-selloff-in-software-stocks/"&gt;since 1990&lt;/a&gt;. JP Morgan titled their note &amp;ldquo;&lt;a href="https://privatebank.jpmorgan.com/nam/en/insights/markets-and-investing/tmt/software-shock-ais-broken-logic"&gt;Software Collapse Broadens with Nowhere to Hide&lt;/a&gt;.&amp;rdquo; Jefferies coined the term SaaSpocalypse. It was the worst software stock crash since the dot-com bust.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://fortune.com/2026/02/04/why-saas-stocks-tech-selloff-freefall-like-deepseek-2025-overblown-paradox-irrational/"&gt;Bank of America&amp;rsquo;s Vivek Arya&lt;/a&gt; identified the paradox at the center of this: investors are simultaneously punishing hyperscaler stocks because AI capex might generate weak returns, while destroying software stocks because AI adoption will be so pervasive it renders all existing software obsolete. Both cannot hold simultaneously. If AI tools aren&amp;rsquo;t generating meaningful ROI, they&amp;rsquo;re not replacing enterprise software at scale. If they are replacing enterprise software at scale, the hyperscalers are earning extraordinary returns on their infrastructure investment. &lt;figure class="post-figure" style="width: 90%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-saaspocalypse-paradox-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/saaspocalypse-paradox.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/saaspocalypse-paradox.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/saaspocalypse-paradox.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/saaspocalypse-paradox.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/saaspocalypse-paradox.png 1200w"
sizes="90vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/saaspocalypse-paradox.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/saaspocalypse-paradox.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/saaspocalypse-paradox.png 1440w"
sizes="90vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/saaspocalypse-paradox.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/saaspocalypse-paradox.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/saaspocalypse-paradox.png 2000w"
sizes="90vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/saaspocalypse-paradox.png"
alt="The BofA AI paradox in the 2026 SaaSpocalypse showing two mutually exclusive narratives: AI capex generating weak returns with $670B spend and 4 percent coverage ratio, versus AI destroying all software with 32 percent IGV drawdown and $2 trillion lost despite 17 percent sector earnings growth"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-saaspocalypse-paradox-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/saaspocalypse-paradox.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="The BofA AI paradox in the 2026 SaaSpocalypse showing two mutually exclusive narratives: AI capex generating weak returns with $670B spend and 4 percent coverage ratio, versus AI destroying all software with 32 percent IGV drawdown and $2 trillion lost despite 17 percent sector earnings growth" decoding="async"&gt;
&lt;/dialog&gt;
&lt;/p&gt;
&lt;p&gt;This paradox can only resolve in one of three ways: AI adoption is real and hyperscaler capex is justified, AI adoption stalls and software incumbents are fine, or the truth is somewhere in between and the market has mispriced both sides. The first two are internally consistent. The market is pricing neither.&lt;/p&gt;
&lt;h2 id="the-bear-case-for-enterprise-software"&gt;The bear case for enterprise software&lt;/h2&gt;
&lt;p&gt;The structural argument against enterprise software is serious and worth stating on its own terms.&lt;/p&gt;
&lt;p&gt;Enterprise software monetizes through per-seat licensing. The SaaS business model depends on a stable correlation between headcount and license count. AI agents break that correlation. If 10 agents do the work of 100 people, the software doesn&amp;rsquo;t get replaced directly, the headcount that justifies the seats does, and CRM seat revenue drops with it. &lt;a href="https://www.tekedia.com/ai-could-destroy-500b-in-enterprise-software-revenue/"&gt;AlixPartners estimates&lt;/a&gt; up to &lt;strong&gt;$500 billion&lt;/strong&gt; in enterprise software revenue could be at risk over time. &lt;a href="https://www.idc.com/resource-center/blog/is-saas-dead-rethinking-the-future-of-software-in-the-age-of-ai/"&gt;IDC predicts&lt;/a&gt; pure seat-based pricing will be obsolete by 2028.&lt;/p&gt;
&lt;p&gt;The moat question is equally uncomfortable. Enterprise software&amp;rsquo;s traditional defense was the trained-user-interface moat: the years of institutional muscle memory that makes switching costs prohibitive. Databricks CEO Ali Ghodsi &lt;a href="https://techcrunch.com/2026/02/09/databricks-ceo-says-saas-isnt-dead-but-ai-will-soon-make-it-irrelevant/"&gt;told TechCrunch&lt;/a&gt; that this moat collapses when the interface becomes natural language. If the value of Salesforce or ServiceNow lived in their UI rather than their data, and the UI can now be replicated by a general-purpose model, then the moat was shallower than anyone thought. VC has &lt;a href="https://www.calcalistech.com/ctechnews/article/hjlvyl7lze"&gt;fled traditional SaaS entirely&lt;/a&gt;; as one investor noted, &amp;ldquo;an entrepreneur approaching a VC fund today with a SaaS startup won&amp;rsquo;t even reach the pitch stage.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The build-versus-buy equation is inverting in real time. &lt;a href="https://www.klarna.com/international/press/klarna-ai-assistant-handles-two-thirds-of-customer-service-chats-in-its-first-month/"&gt;Klarna&lt;/a&gt; ditched Salesforce and Workday, consolidated onto its own AI-augmented stack, and used an OpenAI-powered bot to handle work that previously required 700 employees. &lt;a href="https://www.saastr.com/the-2026-saas-crash-its-not-what-you-think/"&gt;SaaStr&amp;rsquo;s analysis&lt;/a&gt; of Gartner&amp;rsquo;s &lt;a href="https://www.gartner.com/en/newsroom/press-releases/2026-02-03-gartner-forecasts-worldwide-it-spending-to-grow-10-point-8-percent-in-2026-totaling-6-point-15-trillion-dollars"&gt;$1.43 trillion&lt;/a&gt; 2026 software spending forecast reveals that roughly 9 percentage points of the 14.7% headline growth is price increases on existing software, not net new demand. AI is eating SaaS budgets, redirecting IT spend toward infrastructure while reducing the headcount that generates software seats.&lt;/p&gt;
&lt;p&gt;This is the case priced into the IGV at $80.&lt;/p&gt;
&lt;h2 id="the-bull-case-for-software-stocks"&gt;The bull case for software stocks&lt;/h2&gt;
&lt;p&gt;The structural argument for enterprise software rests on a distinction the current sell-off is ignoring entirely.&lt;/p&gt;
&lt;p&gt;The bear case assumes a shrinking TAM. &lt;a href="https://www.goldmansachs.com/insights/articles/ai-agents-to-boost-productivity-and-size-of-software-market"&gt;Goldman Sachs Research&lt;/a&gt; argues the opposite: the application software market grows to $780 billion by 2030 at a 13% CAGR, with agents accounting for over 60% of the total. The profit pool shifts from SaaS seats to agentic workloads, but the overall market gets larger, not smaller. &lt;a href="https://a16z.com/ai-will-supercharge-modelbusters/"&gt;a16z&amp;rsquo;s Alex Rampell&lt;/a&gt; takes it further: if AI enables software to not just enhance productivity but actually complete work, the addressable market isn&amp;rsquo;t roughly $350 billion in enterprise software spend (about 1% of GDP). It&amp;rsquo;s the &lt;strong&gt;~$6 trillion&lt;/strong&gt; white-collar services market (~20% of GDP), a 20x expansion into work that was never software-addressable before.&lt;/p&gt;
&lt;p&gt;David Friedberg made the sharpest version of this argument on the All-In Podcast: software transitions from helping people do work, to completing work, to doing work humans cannot do. At that point, the SaaS pricing model transitions from per-seat to value-based, and &amp;ldquo;SaaS basically takes over the services economy.&amp;rdquo; His estimate: the combined market cap of software companies could be 4x to 10x higher in five years, but &amp;ldquo;not evenly distributed.&amp;rdquo; &lt;figure class="post-figure" style="width: 90%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-tam-expansion-bull-case-png-3" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/tam-expansion-bull-case.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/tam-expansion-bull-case.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/tam-expansion-bull-case.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/tam-expansion-bull-case.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/tam-expansion-bull-case.png 1200w"
sizes="90vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/tam-expansion-bull-case.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/tam-expansion-bull-case.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/tam-expansion-bull-case.png 1440w"
sizes="90vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/tam-expansion-bull-case.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/tam-expansion-bull-case.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/tam-expansion-bull-case.png 2000w"
sizes="90vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/tam-expansion-bull-case.png"
alt="TAM expansion analysis from $350B enterprise software at 1 percent of GDP to Goldman Sachs $780B projection by 2030 with over 60 percent AI agent share, to the a16z thesis of $6 trillion in white-collar services at 20 percent of GDP, a 20x expansion"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-tam-expansion-bull-case-png-3" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/tam-expansion-bull-case.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="TAM expansion analysis from $350B enterprise software at 1 percent of GDP to Goldman Sachs $780B projection by 2030 with over 60 percent AI agent share, to the a16z thesis of $6 trillion in white-collar services at 20 percent of GDP, a 20x expansion" decoding="async"&gt;
&lt;/dialog&gt;
&lt;/p&gt;
&lt;p&gt;The software vs semiconductor valuation picture strengthens this framing. The sector is delivering 17% aggregate earnings growth in 2026 while trading at November 2022 EV/Sales multiples, back when the Fed was aggressively hiking into recession fears. The Russell 1000 Software subsector now trades at 32.4x forward earnings versus 43.6x for semiconductors. Recurring-revenue businesses with 90%+ gross margins and 95%+ renewal rates trade at a lower multiple than cyclical chipmakers with 40-60% margins and concentrated customer bases. &lt;a href="https://www.cnbc.com/2026/02/10/jpmorgan-says-the-historic-software-selloff-has-gone-far-enough-10-stocks-to-buy-on-sale.html"&gt;Historically that&amp;rsquo;s an inversion&lt;/a&gt; that has not persisted. &lt;figure class="post-figure" style="width: 90%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-earnings-vs-stock-disconnect-png-4" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/earnings-vs-stock-disconnect.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/earnings-vs-stock-disconnect.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/earnings-vs-stock-disconnect.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/earnings-vs-stock-disconnect.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/earnings-vs-stock-disconnect.png 1200w"
sizes="90vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/earnings-vs-stock-disconnect.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/earnings-vs-stock-disconnect.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/earnings-vs-stock-disconnect.png 1440w"
sizes="90vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/earnings-vs-stock-disconnect.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/earnings-vs-stock-disconnect.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/earnings-vs-stock-disconnect.png 2000w"
sizes="90vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/earnings-vs-stock-disconnect.png"
alt="Q4 2025 earnings vs stock performance disconnect in the 2026 software sell-off: Palantir plus 70.5 percent revenue growth but minus 11.6 percent stock, ServiceNow plus 21 percent but minus 28 percent, Oracle plus 10 percent but minus 53 percent from peak, sector aggregate plus 17 percent earnings growth versus minus 32 percent IGV drawdown"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-earnings-vs-stock-disconnect-png-4" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/earnings-vs-stock-disconnect.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Q4 2025 earnings vs stock performance disconnect in the 2026 software sell-off: Palantir plus 70.5 percent revenue growth but minus 11.6 percent stock, ServiceNow plus 21 percent but minus 28 percent, Oracle plus 10 percent but minus 53 percent from peak, sector aggregate plus 17 percent earnings growth versus minus 32 percent IGV drawdown" decoding="async"&gt;
&lt;/dialog&gt;
&lt;/p&gt;
&lt;figure class="post-figure" style="width: 90%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-valuation-inversion-png-5" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/valuation-inversion.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/valuation-inversion.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/valuation-inversion.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/valuation-inversion.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/valuation-inversion.png 1200w"
sizes="90vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/valuation-inversion.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/valuation-inversion.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/valuation-inversion.png 1440w"
sizes="90vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/valuation-inversion.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/valuation-inversion.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/valuation-inversion.png 2000w"
sizes="90vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/valuation-inversion.png"
alt="Software vs semiconductor valuation inversion in 2026: Russell 1000 Software at 32.4x forward PE trades below Russell 1000 Semiconductors at 43.6x, an 11.2x multiple gap, with IGV at $79.65 and S&amp;amp;P 500 software weight compressed from 12 percent to 8.4 percent"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-valuation-inversion-png-5" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/valuation-inversion.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Software vs semiconductor valuation inversion in 2026: Russell 1000 Software at 32.4x forward PE trades below Russell 1000 Semiconductors at 43.6x, an 11.2x multiple gap, with IGV at $79.65 and S&amp;amp;P 500 software weight compressed from 12 percent to 8.4 percent" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;This is the case that BofA called a paradox and JP Morgan called a mispricing.&lt;/p&gt;
&lt;h2 id="the-hyperscaler-ai-capex-question-that-connects-both-sides"&gt;The hyperscaler AI capex question that connects both sides&lt;/h2&gt;
&lt;p&gt;There is a number that both cases have to account for, and it&amp;rsquo;s the one that determines which side of the paradox resolves first.&lt;/p&gt;
&lt;p&gt;Combined 2026 capex guidance from Microsoft, Alphabet, Amazon, Meta, and Oracle now approaches &lt;a href="https://www.cnbc.com/2026/02/06/google-microsoft-meta-amazon-ai-cash.html"&gt;&lt;strong&gt;$700 billion&lt;/strong&gt;&lt;/a&gt;, more than doubling from $256 billion in 2024. &lt;a href="https://fortune.com/2026/02/04/why-saas-stocks-tech-selloff-freefall-like-deepseek-2025-overblown-paradox-irrational/"&gt;Bank of America calculates&lt;/a&gt; this consumes 94% of operating cash flows after capital returns. The Big Five raised $108 billion in bonds in 2025. AI-related services generate roughly $25 billion in direct revenue against $400+ billion in annual infrastructure spending, a coverage ratio of about 4%. &lt;figure class="post-figure" style="width: 90%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-hyperscaler-capex-vs-cashflow-png-7" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/hyperscaler-capex-vs-cashflow.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/hyperscaler-capex-vs-cashflow.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/hyperscaler-capex-vs-cashflow.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/hyperscaler-capex-vs-cashflow.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/hyperscaler-capex-vs-cashflow.png 1200w"
sizes="90vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/hyperscaler-capex-vs-cashflow.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/hyperscaler-capex-vs-cashflow.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/hyperscaler-capex-vs-cashflow.png 1440w"
sizes="90vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/hyperscaler-capex-vs-cashflow.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/hyperscaler-capex-vs-cashflow.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/hyperscaler-capex-vs-cashflow.png 2000w"
sizes="90vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/hyperscaler-capex-vs-cashflow.png"
alt="FY2026 hyperscaler AI capex vs cash flow: MSFT META GOOGL AMZN and ORCL estimated cash from operations less dividends and buybacks versus guided capital expenditure, with only Microsoft generating a $5B surplus while Meta shows minus $23B, Google minus $20B, Amazon minus $18B, and Oracle minus $30B"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-hyperscaler-capex-vs-cashflow-png-7" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/hyperscaler-capex-vs-cashflow.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="FY2026 hyperscaler AI capex vs cash flow: MSFT META GOOGL AMZN and ORCL estimated cash from operations less dividends and buybacks versus guided capital expenditure, with only Microsoft generating a $5B surplus while Meta shows minus $23B, Google minus $20B, Amazon minus $18B, and Oracle minus $30B" decoding="async"&gt;
&lt;/dialog&gt;
&lt;/p&gt;
&lt;p&gt;If the bear case is right and AI agents are replacing enterprise software at scale, this capex should already be generating enormous returns. It isn&amp;rsquo;t. If the bull case is right and AI is expanding the TAM into the services economy, this capex is early-stage infrastructure investment that will compound over a decade. In that reading, $700 billion in annual spend is the foundation of a $6 trillion market, not a write-off. Both interpretations require the same capex figure to mean something fundamentally different. The market hasn&amp;rsquo;t decided which.&lt;/p&gt;
&lt;p&gt;Microsoft is the sharpest illustration of this tension. Quarterly capex went from $1 billion in early 2015 to a record &lt;a href="https://fintool.com/news/microsoft-q2-record-capex-cloud-ai"&gt;$37.5 billion in Q2 FY2026&lt;/a&gt;, with roughly two-thirds going to short-lived GPU/CPU assets. And yet Microsoft is the &lt;a href="https://www.gurufocus.com/news/8591224/microsoft-msft-maintains-resilient-cash-flow-amid-hyperscaler-spending-surge"&gt;only hyperscaler&lt;/a&gt; that can fund this buildout from operating cash flow. Azure grew &lt;a href="https://futurumgroup.com/insights/microsoft-q2-fy-2026-cloud-surpasses-50b-azure-up-38-cc/"&gt;39% in Q2 FY2026&lt;/a&gt;, crossing $50 billion in quarterly cloud revenue for the first time. The company is simultaneously the biggest AI capex spender, the one best positioned to generate returns on that spend, and the company whose products (365, Dynamics, Azure) are supposedly being disrupted by Claude plugins. The market is punishing all three at once. &lt;figure class="post-figure" style="width: 90%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-msft-quarterly-capex-png-8" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/msft-quarterly-capex.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/msft-quarterly-capex.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/msft-quarterly-capex.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/msft-quarterly-capex.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/msft-quarterly-capex.png 1200w"
sizes="90vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/msft-quarterly-capex.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/msft-quarterly-capex.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/msft-quarterly-capex.png 1440w"
sizes="90vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/msft-quarterly-capex.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/msft-quarterly-capex.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/msft-quarterly-capex.png 2000w"
sizes="90vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/msft-quarterly-capex.png"
alt="Microsoft quarterly AI capex from FY2015 to FY2026 showing growth from $1 billion to $37.5 billion per quarter, a 2048 percent increase, with recent quarters showing AI infrastructure acceleration"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-msft-quarterly-capex-png-8" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/msft-quarterly-capex.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Microsoft quarterly AI capex from FY2015 to FY2026 showing growth from $1 billion to $37.5 billion per quarter, a 2048 percent increase, with recent quarters showing AI infrastructure acceleration" decoding="async"&gt;
&lt;/dialog&gt;
&lt;/p&gt;
&lt;h2 id="bifurcation-not-extinction-the-saaspocalypse-resolved"&gt;Bifurcation, not extinction: the SaaSpocalypse resolved&lt;/h2&gt;
&lt;p&gt;A &lt;a href="https://am.jpmorgan.com/content/dam/jpm-am-aem/global/en/insights/eye-on-the-market/smothering-heights-amv.pdf"&gt;60% recession probability&lt;/a&gt;, a &lt;a href="https://www.cnbc.com/2026/02/02/fridays-jobs-report-will-be-delayed-because-of-the-partial-government-shutdown.html"&gt;partial government shutdown&lt;/a&gt;, &lt;a href="https://www.salesforceben.com/what-do-trumps-tariffs-mean-for-the-tech-sector/"&gt;elevated tariffs&lt;/a&gt;, and a structural pricing transition are being sold as a single story. They aren&amp;rsquo;t. Separating the macro from the structural requires asking which software categories are genuinely at risk and which are being sold by association.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.janushenderson.com/en-us/investor/article/how-ai-disruption-is-reshaping-the-software-sector-landscape/"&gt;Janus Henderson makes a useful distinction&lt;/a&gt; between &amp;ldquo;systems of record&amp;rdquo; and &amp;ldquo;systems of engagement.&amp;rdquo; Systems of record are deeply embedded in business processes, require regulatory compliance, and carry enormous switching costs: ERP, core finance, cybersecurity, observability. &lt;a href="https://pitchbook.com/news/articles/is-ais-threat-to-software-overblown-pitchbook-analysis"&gt;PitchBook described&lt;/a&gt; replacing one as &amp;ldquo;effectively open-heart surgery for an enterprise.&amp;rdquo; Systems of engagement are user-facing workflow tools where the interface is the product: content creation, tier-1 support, basic analytics. When the interface becomes natural language, that moat collapses. &lt;figure class="post-figure" style="width: 90%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-software-bifurcation-map-png-9" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/software-bifurcation-map.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/software-bifurcation-map.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/software-bifurcation-map.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/software-bifurcation-map.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/software-bifurcation-map.png 1200w"
sizes="90vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/software-bifurcation-map.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/software-bifurcation-map.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/software-bifurcation-map.png 1440w"
sizes="90vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/software-bifurcation-map.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/software-bifurcation-map.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/software-bifurcation-map.png 2000w"
sizes="90vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/software-bifurcation-map.png"
alt="Software bifurcation map by AI disruption risk: ERP cybersecurity and observability at low risk, core CRM and dev tools at medium risk, content creation tier-1 support and basic analytics at high risk, showing the market is pricing every category as if it faces equal threat"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-software-bifurcation-map-png-9" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/software-bifurcation-map.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Software bifurcation map by AI disruption risk: ERP cybersecurity and observability at low risk, core CRM and dev tools at medium risk, content creation tier-1 support and basic analytics at high risk, showing the market is pricing every category as if it faces equal threat" decoding="async"&gt;
&lt;/dialog&gt;
&lt;/p&gt;
&lt;p&gt;The bear case is correct about the second category. The bull case is correct about the first. The market is wrong to price them identically. Selling both at the same multiple compression implies that switching costs, regulatory requirements, data gravity, and enterprise procurement cycles have all vanished simultaneously. &lt;a href="https://www.gartner.com/en/newsroom/press-releases/2025-06-25-gartner-predicts-over-40-percent-of-agentic-ai-projects-will-be-canceled-by-end-of-2027"&gt;Gartner predicts&lt;/a&gt; over 40% of agentic AI projects will be cancelled by 2027. Salesforce&amp;rsquo;s Agentforce reached &lt;a href="https://www.salesforceben.com/salesforce-avoids-q3-danger-zone-with-explosive-agentforce-momentum/"&gt;18,500 customers&lt;/a&gt; in its first year, the fastest-adopted organic product in company history. These are not the behaviors of a category that has been disrupted. They are the behaviors of incumbents absorbing a new paradigm.&lt;/p&gt;
&lt;p&gt;Stated precisely: the bear case is a zero-sum repricing where AI agents compress existing software revenue by eliminating seats and commoditizing interfaces. The bull case is a positive-sum expansion where the surviving software companies capture the $6 trillion in white-collar services that was never software-addressable before. The cost of intelligence has fallen &lt;a href="https://a16z.com/ai-will-supercharge-modelbusters/"&gt;99.7% in two years&lt;/a&gt; (Stanford AI Index). Cumulative AI infrastructure investment is expected to exceed $3 trillion by 2030. That kind of capital deployment doesn&amp;rsquo;t produce a world where software shrinks. It produces a world where the definition of &amp;ldquo;software&amp;rdquo; expands to include most of the services economy.&lt;/p&gt;
&lt;p&gt;I wrote &lt;a href="https://philippdubach.com/posts/the-market-can-stay-irrational-longer-than-you-can-stay-solvent/"&gt;recently&lt;/a&gt; about how passive flows create mechanical, price-insensitive selling that overwhelms fundamental buyers. This software sell-off is a textbook case. JP Morgan&amp;rsquo;s Murphy &lt;a href="https://privatebank.jpmorgan.com/nam/en/insights/markets-and-investing/tmt/software-shock-ais-broken-logic"&gt;described&lt;/a&gt; index arbitrage basket selling, programmatic de-grossing, and passive flow liquidity vacuums. The IGV recorded its &lt;a href="https://articles.stockcharts.com/article/the-claude-crash-how-ai-triggered-a-historic-selloff-in-software-stocks/"&gt;highest single-day trading volume&lt;/a&gt; in 25 years. &lt;a href="https://www.cnbc.com/2026/02/10/jpmorgan-says-the-historic-software-selloff-has-gone-far-enough-10-stocks-to-buy-on-sale.html"&gt;JP Morgan&amp;rsquo;s follow-up&lt;/a&gt; argued the sell-off has gone far enough. &lt;a href="https://fortune.com/2026/02/04/why-saas-stocks-tech-selloff-freefall-like-deepseek-2025-overblown-paradox-irrational/"&gt;BofA called it&lt;/a&gt; a paradox that &amp;ldquo;doesn&amp;rsquo;t make any sense.&amp;rdquo; History suggests these kinds of extremes, the 2016 LinkedIn panic, the 2022 rate-shock drawdown, the January 2025 DeepSeek crash, tend to mark inflection points rather than starting points for further decline.&lt;/p&gt;
&lt;p&gt;The hardest trade right now is the one that requires distinguishing between stocks that are cheap because they&amp;rsquo;re broken and stocks that are cheap because the market is broken. The SaaSpocalypse priced into the IGV at $80, with a 30-year-extreme RSI, pricing in an extinction event that operating results don&amp;rsquo;t remotely support, looks a lot more like the latter.&lt;/p&gt;
&lt;aside class="disclaimer" role="note" aria-label="Disclaimer"&gt;
&lt;div class="disclaimer-content"&gt;&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; All opinions expressed are my own. This is not investment, financial, tax, or legal advice. Past performance does not indicate future results. Do your own research and consult qualified professionals before making financial decisions. No liability accepted for any losses.&lt;/p&gt;&lt;/div&gt;
&lt;/aside&gt;</description></item><item><title>Don't Go Monolithic; The Agent Stack Is Stratifying</title><link>https://philippdubach.com/posts/dont-go-monolithic-the-agent-stack-is-stratifying/</link><pubDate>Tue, 10 Feb 2026 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/dont-go-monolithic-the-agent-stack-is-stratifying/</guid><description>&lt;blockquote&gt;
&lt;p&gt;The defensible asset in enterprise AI is not the model. It&amp;rsquo;s the organizational world model.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Every major compute era decomposes into specialized layers with different winners at each level. Cloud split into IaaS, PaaS, and SaaS. The modern data stack split into ingestion, warehousing, transformation, and BI. Each time, specialists beat the generalists because the layers have fundamentally different economics: different rates of change, different capital requirements, different sources of lock-in.&lt;/p&gt;
&lt;p&gt;The enterprise AI agent stack is doing the same thing right now. Arvind Jain, the CEO of Glean, recently published a &lt;a href="https://x.com/arvind2/status/2020920652950339694"&gt;structural analysis&lt;/a&gt; of the emerging enterprise agent architecture that crystallized something I&amp;rsquo;d been thinking about. His framing describes a stack decomposing into six layers (security, context, models, orchestration, agents, and interfaces) with different defensibility profiles at each level. Glean sits in the context layer so the usual positioning caveats apply, but the structural argument is sound regardless of who makes it.&lt;/p&gt;
&lt;p&gt;I want to take it further. There are three claims embedded in this agentic AI architecture that I think are underappreciated, and together they form a thesis about where durable advantage actually accrues in enterprise AI. &lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-emerging-agent-stack-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/emerging-agent-stack.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/emerging-agent-stack.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/emerging-agent-stack.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/emerging-agent-stack.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/emerging-agent-stack.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/emerging-agent-stack.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/emerging-agent-stack.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/emerging-agent-stack.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/emerging-agent-stack.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/emerging-agent-stack.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/emerging-agent-stack.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/emerging-agent-stack.png"
alt="Enterprise AI agent stack diagram showing six layers ranked by defensibility: Context scores highest (hardest to rebuild), followed by Orchestration and Security, while Models and Interfaces have the lowest switching costs"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-emerging-agent-stack-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/emerging-agent-stack.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Enterprise AI agent stack diagram showing six layers ranked by defensibility: Context scores highest (hardest to rebuild), followed by Orchestration and Security, while Models and Interfaces have the lowest switching costs" decoding="async"&gt;
&lt;/dialog&gt;
&lt;/p&gt;
&lt;h2 id="i-models-are-converging-toward-shared-infrastructure"&gt;I. Models are converging toward shared infrastructure&lt;/h2&gt;
&lt;p&gt;The model layer is the one most people obsess over, and it&amp;rsquo;s also the one converging fastest toward commodity economics. Training costs &lt;a href="https://epoch.ai/blog/how-much-does-it-cost-to-train-frontier-ai-models"&gt;scale roughly 2.4x per year&lt;/a&gt;, with current frontier runs costing hundreds of millions and &lt;a href="https://www.tomshardware.com/tech-industry/artificial-intelligence/ai-models-that-cost-dollar1-billion-to-train-are-in-development-dollar100-billion-models-coming-soon-largest-current-models-take-only-dollar100-million-to-train-anthropic-ceo"&gt;billion-dollar training runs already underway&lt;/a&gt;, according to Anthropic&amp;rsquo;s Dario Amodei. Only a handful of organizations on Earth can operate at this scale: OpenAI, Google DeepMind, Anthropic, Meta, and a few others including xAI and Mistral. This is textbook capital-intensive infrastructure, structurally identical to semiconductor fabs or cloud hyperscalers. The logical conclusion: foundation models become shared utilities, not enterprise moats.&lt;/p&gt;
&lt;p&gt;The industry has already internalized this. &lt;a href="https://a16z.com/ai-enterprise-2025/"&gt;37% of enterprises now use five or more models in production&lt;/a&gt;, up from 29% the prior year. Different tasks demand different models: Claude for code and tool use, GPT for extended reasoning, Gemini Flash for low-latency routing, specialized models for image generation and embeddings. Betting your enterprise stack on a single model provider is the new version of single-cloud risk. Open standards like Anthropic&amp;rsquo;s &lt;a href="https://www.anthropic.com/news/model-context-protocol"&gt;Model Context Protocol&lt;/a&gt;, now &lt;a href="https://www.anthropic.com/news/donating-the-model-context-protocol-and-establishing-of-the-agentic-ai-foundation"&gt;hosted by the Linux Foundation&lt;/a&gt; with 97 million monthly SDK downloads, and Google&amp;rsquo;s &lt;a href="https://developers.googleblog.com/en/a2a-a-new-era-of-agent-interoperability/"&gt;Agent-to-Agent protocol&lt;/a&gt; are making this multi-model enterprise AI architecture practical.&lt;/p&gt;
&lt;p&gt;If models are infrastructure, the differentiation question moves up the stack. And that&amp;rsquo;s where it gets interesting.&lt;/p&gt;
&lt;h2 id="ii-the-enterprise-ai-context-layer-has-two-depths-and-most-people-only-see-the-first"&gt;II. The enterprise AI context layer has two depths, and most people only see the first&lt;/h2&gt;
&lt;p&gt;This is the part of the thesis I find most intellectually compelling, and where I think the conventional understanding falls short.&lt;/p&gt;
&lt;p&gt;Most enterprise AI efforts operate at what I&amp;rsquo;d call Layer 1 context: connecting data sources, indexing content, enforcing permissions, retrieving relevant documents. This is the RAG-era problem set: familiar, well-understood, and increasingly commoditized. Virtually every enterprise AI platform offers connectors, vector stores, and retrieval pipelines. It matters, but it&amp;rsquo;s not where defensibility lives.&lt;/p&gt;
&lt;p&gt;Layer 2 is where the thesis gets genuinely novel: process-level understanding. Most enterprise knowledge systems capture decisions. What ends up in the CRM, the ticketing system, the ERP. But they don&amp;rsquo;t capture &lt;em&gt;how&lt;/em&gt; those decisions were made: the meetings, Slack threads, document iterations, handoffs, and informal coordination that produced the recorded outcome. &lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-context-depth-comparison-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/context-depth-comparison.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/context-depth-comparison.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/context-depth-comparison.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/context-depth-comparison.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/context-depth-comparison.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/context-depth-comparison.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/context-depth-comparison.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/context-depth-comparison.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/context-depth-comparison.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/context-depth-comparison.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/context-depth-comparison.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/context-depth-comparison.png"
alt="Enterprise AI context layer depth comparison showing what Systems of Record capture (decisions, states, entities, relationships) versus what Context Graphs capture (processes, temporal traces, causal structure, variability), with ML lens annotations mapping to labels versus feature space and trajectory data"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-context-depth-comparison-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/context-depth-comparison.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Enterprise AI context layer depth comparison showing what Systems of Record capture (decisions, states, entities, relationships) versus what Context Graphs capture (processes, temporal traces, causal structure, variability), with ML lens annotations mapping to labels versus feature space and trajectory data" decoding="async"&gt;
&lt;/dialog&gt;
Through a machine learning lens, the distinction is sharp: systems of record give you labels. Context graphs give you the feature space and trajectory data you&amp;rsquo;d actually need to learn the decision boundary. Consider a concrete example. Your CRM records that Deal X closed at $500K. That&amp;rsquo;s a label. The context graph captures the 14 meetings, 3 stakeholder handoffs, the pricing negotiation pattern, and the competitive displacement sequence that produced that outcome. Those are the features and the trajectory. An agent trained on labels alone can&amp;rsquo;t replicate the process that generated them.&lt;/p&gt;
&lt;p&gt;This is why so many early enterprise AI deployments produce outputs that are technically plausible but operationally useless. The agent has access to the what but not the how. It can retrieve the right documents but can&amp;rsquo;t reconstruct the reasoning process that a human would follow. Closing that gap, building systems that capture and encode process knowledge rather than just decision records, is the highest-value problem in enterprise AI right now.&lt;/p&gt;
&lt;h2 id="iii-context-and-orchestration-form-a-compounding-flywheel"&gt;III. Context and orchestration form a compounding flywheel&lt;/h2&gt;
&lt;p&gt;There&amp;rsquo;s a reinforcement learning analogy here that I think is underappreciated. The orchestrator is the policy. The context graph is the learned world model. Agent traces are the trajectories. Every successful execution reinforces good patterns. Every failure surfaces where context is missing or stale. Over time, the system builds an increasingly accurate representation of how the organization actually operates.&lt;/p&gt;
&lt;p&gt;And this loops back: more deployment produces richer traces, which improve the context graph, which improves agent decisions, which builds trust, which drives more deployment. &lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-compounding-flywheel-png-3" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/compounding-flywheel.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/compounding-flywheel.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/compounding-flywheel.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/compounding-flywheel.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/compounding-flywheel.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/compounding-flywheel.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/compounding-flywheel.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/compounding-flywheel.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/compounding-flywheel.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/compounding-flywheel.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/compounding-flywheel.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/compounding-flywheel.png"
alt="Organizational world model compounding flywheel showing the five-step loop: Agent Executes → Traces Captured → Context Improves → Better Decisions → More Deployment, with ML analogy mapping table showing enterprise concepts mapped to RL primitives (policy rollout, trajectories, world model update, policy improvement, online learning loop)"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-compounding-flywheel-png-3" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/compounding-flywheel.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Organizational world model compounding flywheel showing the five-step loop: Agent Executes → Traces Captured → Context Improves → Better Decisions → More Deployment, with ML analogy mapping table showing enterprise concepts mapped to RL primitives (policy rollout, trajectories, world model update, policy improvement, online learning loop)" decoding="async"&gt;
&lt;/dialog&gt;
This is the same compounding mechanism that makes recommendation engines and autonomous driving systems improve with scale. Netflix gets better at recommendations because every viewing session generates training signal. Waymo gets better at driving because every mile generates edge cases. The difference here is that the asset being built isn&amp;rsquo;t a product feature. It&amp;rsquo;s an organizational world model, a learned representation of how your specific company works.&lt;/p&gt;
&lt;p&gt;And unlike model weights, which any well-funded lab can approximate, your organization&amp;rsquo;s accumulated process knowledge is genuinely unique. No one else has your meeting patterns, your escalation sequences, your informal decision-making topology. That&amp;rsquo;s a moat.&lt;/p&gt;
&lt;h2 id="where-this-breaks-and-why-the-agentic-ai-failure-rate-will-be-high"&gt;Where this breaks, and why the agentic AI failure rate will be high&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.uctoday.com/unified-communications/gartner-predicts-40-of-enterprise-apps-will-feature-ai-agents-by-2026/"&gt;Gartner predicts 40% of enterprise applications will feature task-specific AI agents by 2026&lt;/a&gt;, up from less than 5% in 2025. &lt;a href="https://www.mckinsey.com/capabilities/quantumblack/our-insights/the-state-of-ai"&gt;McKinsey&amp;rsquo;s latest survey shows 23% of organizations are already scaling agentic AI&lt;/a&gt;, with another 39% experimenting. But Gartner also warns that over 40% of agentic AI projects will be canceled by end of 2027 due to escalating costs and unclear business value.&lt;/p&gt;
&lt;p&gt;The gap between ambition and execution is the context problem in disguise. Without process knowledge, agents produce plausible outputs that don&amp;rsquo;t match how the organization actually works. They retrieve the right policy document but apply it without understanding the exceptions your team has developed over years. They draft the right kind of email but miss the relationship dynamics that would change the tone. The failure mode isn&amp;rsquo;t that the model is bad. It&amp;rsquo;s that the context is shallow. &lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-lockin-vs-rebuild-scatter-png-5" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/lockin-vs-rebuild-scatter.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/lockin-vs-rebuild-scatter.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/lockin-vs-rebuild-scatter.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/lockin-vs-rebuild-scatter.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/lockin-vs-rebuild-scatter.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/lockin-vs-rebuild-scatter.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/lockin-vs-rebuild-scatter.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/lockin-vs-rebuild-scatter.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/lockin-vs-rebuild-scatter.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/lockin-vs-rebuild-scatter.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/lockin-vs-rebuild-scatter.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/lockin-vs-rebuild-scatter.png"
alt="Enterprise AI agent stack scatter plot showing six layers plotted by lock-in risk versus rebuild difficulty. Context sits alone in the top-right danger zone with highest lock-in and hardest rebuild. Models, Interfaces, and Agents cluster in the commodity zone at bottom-left. Orchestration and Security occupy the middle."
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-lockin-vs-rebuild-scatter-png-5" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/lockin-vs-rebuild-scatter.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Enterprise AI agent stack scatter plot showing six layers plotted by lock-in risk versus rebuild difficulty. Context sits alone in the top-right danger zone with highest lock-in and hardest rebuild. Models, Interfaces, and Agents cluster in the commodity zone at bottom-left. Orchestration and Security occupy the middle." decoding="async"&gt;
&lt;/dialog&gt;
This chart tells the strategic story in one image. Models, interfaces, and agents cluster in the commodity zone: low lock-in, easy to replace. Context sits alone in the danger zone: highest lock-in risk and hardest to rebuild. That&amp;rsquo;s exactly where your due diligence should concentrate.&lt;/p&gt;
&lt;h2 id="what-to-actually-do-about-your-agentic-ai-architecture"&gt;What to actually do about your agentic AI architecture&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Don&amp;rsquo;t go monolithic.&lt;/strong&gt; Each layer evolves at a different rate. Models improve quarterly, context infrastructure evolves over months, security requirements shift with regulation. Coupling them into one vendor&amp;rsquo;s all-in-one platform forces you to upgrade at the speed of the slowest-moving layer. You inherit their architectural bets, their integration timeline, their roadmap priorities. The history of enterprise software is littered with platforms that tried to own every layer and ended up mediocre at all of them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Insist on interoperability.&lt;/strong&gt; MCP, A2A, open connectors. If your vendor doesn&amp;rsquo;t support open standards, you&amp;rsquo;re absorbing limitations you can&amp;rsquo;t see yet. The pace of AI innovation is faster than any prior technology cycle, and you need the ability to swap in new capabilities the moment they appear without rebuilding your stack. The organizations that locked into single-vendor cloud stacks in 2015 spent years migrating out. Don&amp;rsquo;t repeat that mistake at the agent layer.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Treat context as portable IP.&lt;/strong&gt; Your organizational world model (process knowledge, interaction history, learned workflow patterns) is the hardest-to-rebuild and most valuable asset in the stack. Ensure it is not locked to any single vendor or model provider. The right architecture separates accumulated context from the model layer so you retain your organizational IP regardless of which models or platforms you use tomorrow.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Start the flywheel early.&lt;/strong&gt; The compounding advantage in context accrues with deployment, not with time spent evaluating. Every agent execution generates organizational learning. Companies that wait to &amp;ldquo;see how it plays out&amp;rdquo; forfeit years of compounding to first movers. This isn&amp;rsquo;t speculative. It&amp;rsquo;s the same math that governs every data flywheel business. The question isn&amp;rsquo;t whether to start. It&amp;rsquo;s whether you can afford the cost of starting late.&lt;/p&gt;
&lt;p&gt;The stack will stratify. Specialists will outperform monoliths. Models will converge toward shared infrastructure. The defensible asset in enterprise AI is not the model. It&amp;rsquo;s the organizational world model. The organizations that start building it now, maintaining it carefully, and keeping it portable will compound their lead in the agent era. Everyone else will be buying commodity inference and wondering why their agents don&amp;rsquo;t work.&lt;/p&gt;
&lt;aside class="disclaimer" role="note" aria-label="Disclaimer"&gt;
&lt;div class="disclaimer-content"&gt;&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; AI capabilities evolve rapidly; information may become outdated. Code and implementations provided as-is without warranty.&lt;/p&gt;&lt;/div&gt;
&lt;/aside&gt;</description></item><item><title>Where Mobile Money Goes Now</title><link>https://philippdubach.com/posts/where-mobile-money-goes-now/</link><pubDate>Sat, 07 Feb 2026 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/where-mobile-money-goes-now/</guid><description>&lt;p&gt;Sensor Tower&amp;rsquo;s &lt;a href="https://sensortower.com/state-of-mobile-2026"&gt;State of Mobile 2026&lt;/a&gt; report confirms what had been building for years: the mobile app economy has permanently shifted. For the first decade of mobile, games made more money than everything else combined. Clash of Clans and Candy Crush built empires on freemium. King went public. Supercell sold for $10 billion. That changed in 2025.&lt;/p&gt;
&lt;h2 id="apps-overtake-games-in-mobile-revenue"&gt;Apps Overtake Games in Mobile Revenue&lt;/h2&gt;
&lt;p&gt;&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-apps_vs_games_revenue-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/apps_vs_games_revenue.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/apps_vs_games_revenue.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/apps_vs_games_revenue.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/apps_vs_games_revenue.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/apps_vs_games_revenue.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/apps_vs_games_revenue.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/apps_vs_games_revenue.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/apps_vs_games_revenue.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/apps_vs_games_revenue.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/apps_vs_games_revenue.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/apps_vs_games_revenue.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/apps_vs_games_revenue.png"
alt="Line chart showing apps overtaking games in mobile IAP revenue in 2025, with apps at $85.6B and games at $81.8B, per Sensor Tower&amp;#39;s State of Mobile 2026"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-apps_vs_games_revenue-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/apps_vs_games_revenue.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Line chart showing apps overtaking games in mobile IAP revenue in 2025, with apps at $85.6B and games at $81.8B, per Sensor Tower&amp;#39;s State of Mobile 2026" decoding="async"&gt;
&lt;/dialog&gt;
Non-game applications now generate more in-app purchase revenue than games. Apps crossed $85.6 billion in 2025, up 21% year-over-year. Games managed $81.8 billion, barely moving from the year before.&lt;/p&gt;
&lt;p&gt;Games peaked in 2021 and flatlined. Apps kept compounding. Subscriptions, which seemed like a novelty in 2018, became the dominant mobile monetization model for cloud storage, language learning, and now AI.&lt;/p&gt;
&lt;h2 id="genai-the-35-billion-growth-engine"&gt;GenAI: The $3.5 Billion Growth Engine&lt;/h2&gt;
&lt;p&gt;&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-genai_revenue_growth-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/genai_revenue_growth.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/genai_revenue_growth.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/genai_revenue_growth.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/genai_revenue_growth.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/genai_revenue_growth.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/genai_revenue_growth.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/genai_revenue_growth.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/genai_revenue_growth.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/genai_revenue_growth.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/genai_revenue_growth.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/genai_revenue_growth.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/genai_revenue_growth.png"
alt="Horizontal bar chart showing GenAI led mobile app revenue growth in 2025 with $3.5B added, more than any other category"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-genai_revenue_growth-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/genai_revenue_growth.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Horizontal bar chart showing GenAI led mobile app revenue growth in 2025 with $3.5B added, more than any other category" decoding="async"&gt;
&lt;/dialog&gt;
Generative AI was the biggest contributor to consumer spending on mobile apps. The category added $3.5 billion in IAP revenue in 2025, more than Movies &amp;amp; TV ($2.2B) or Social Media ($2.1B). It went from near-zero in 2022 to the top growth category in three years. &lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-genai_rise-png-2" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/genai_rise.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/genai_rise.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/genai_rise.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/genai_rise.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/genai_rise.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/genai_rise.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/genai_rise.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/genai_rise.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/genai_rise.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/genai_rise.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/genai_rise.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/genai_rise.png"
alt="Combined bar and line chart showing GenAI app downloads rising from 0.05B in 2021 to 1.45B in 2024, with revenue hitting $1.25B"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-genai_rise-png-2" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/genai_rise.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Combined bar and line chart showing GenAI app downloads rising from 0.05B in 2021 to 1.45B in 2024, with revenue hitting $1.25B" decoding="async"&gt;
&lt;/dialog&gt;
GenAI apps went from 50 million downloads in 2021 to 1.45 billion in 2024. Revenue jumped from essentially nothing to $1.25 billion. ChatGPT alone accounts for 40% of the category&amp;rsquo;s consumer spend. This is just in-app purchases and does not count subscriptions billed outside the app store or enterprise contracts.&lt;/p&gt;
&lt;h2 id="who-actually-uses-ai-apps"&gt;Who Actually Uses AI Apps&lt;/h2&gt;
&lt;p&gt;The demographics are interesting: AI app users look nothing like the broader internet population. &lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-genai_demographics-png-3" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/genai_demographics.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/genai_demographics.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/genai_demographics.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/genai_demographics.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/genai_demographics.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/genai_demographics.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/genai_demographics.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/genai_demographics.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/genai_demographics.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/genai_demographics.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/genai_demographics.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/genai_demographics.png"
alt="Scatter plot showing GenAI user demographics cluster with Reddit and X (young, male-skewing), not Instagram or Pinterest"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-genai_demographics-png-3" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/genai_demographics.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Scatter plot showing GenAI user demographics cluster with Reddit and X (young, male-skewing), not Instagram or Pinterest" decoding="async"&gt;
&lt;/dialog&gt;
GenAI users cluster with Reddit and X. Young, male, tech-adjacent. They look nothing like Instagram (young women) or Pinterest (older women) or even Facebook (everyone&amp;rsquo;s parents). The AI audience is still a niche, even as GenAI app revenue scales.&lt;/p&gt;
&lt;h2 id="the-ai-advertising-playbook"&gt;The AI Advertising Playbook&lt;/h2&gt;
&lt;p&gt;This explains where AI companies advertise: &lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-ai_advertising_skew-png-4" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/ai_advertising_skew.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/ai_advertising_skew.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/ai_advertising_skew.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/ai_advertising_skew.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai_advertising_skew.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/ai_advertising_skew.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/ai_advertising_skew.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/ai_advertising_skew.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai_advertising_skew.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/ai_advertising_skew.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/ai_advertising_skew.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai_advertising_skew.png"
alt="Horizontal bar chart showing AI companies over-index on LinkedIn (&amp;#43;45%) and under-index on Pinterest (-13%) and YouTube (-9%) for ad demographics"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-ai_advertising_skew-png-4" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/ai_advertising_skew.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Horizontal bar chart showing AI companies over-index on LinkedIn (&amp;#43;45%) and under-index on Pinterest (-13%) and YouTube (-9%) for ad demographics" decoding="async"&gt;
&lt;/dialog&gt;
LinkedIn gets 45% more GenAI ad impressions than its share of the general population would suggest. Pinterest and YouTube get less. The AI advertising playbook is simple: find professionals, not consumers.&lt;/p&gt;
&lt;h2 id="ai-driven-retail-referral-traffic"&gt;AI-Driven Retail Referral Traffic&lt;/h2&gt;
&lt;p&gt;One place where AI has found consumers: shopping. &lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-ai_retail_referrals-png-6" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/ai_retail_referrals.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/ai_retail_referrals.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/ai_retail_referrals.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/ai_retail_referrals.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai_retail_referrals.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/ai_retail_referrals.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/ai_retail_referrals.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/ai_retail_referrals.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai_retail_referrals.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/ai_retail_referrals.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/ai_retail_referrals.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai_retail_referrals.png"
alt="Stacked area chart showing GenAI referral traffic to major retailers growing from ~$5M to ~$51M between Oct 2024 and Dec 2025"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-ai_retail_referrals-png-6" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/ai_retail_referrals.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Stacked area chart showing GenAI referral traffic to major retailers growing from ~$5M to ~$51M between Oct 2024 and Dec 2025" decoding="async"&gt;
&lt;/dialog&gt;
Referral traffic from AI tools to major retailers grew roughly 7x between October 2024 and December 2025. People are asking ChatGPT what to buy, and then buying it. Amazon captures the largest share, but Walmart, Target, and Home Depot have all seen triple-digit percentage growth in AI-driven traffic. Still less than 1% of total retail traffic. But growing fast.&lt;/p&gt;
&lt;h2 id="youtubes-cross-generational-dominance"&gt;YouTube&amp;rsquo;s Cross-Generational Dominance&lt;/h2&gt;
&lt;p&gt;One pattern stands out: &lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-youtube_dominance-png-7" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/youtube_dominance.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/youtube_dominance.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/youtube_dominance.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/youtube_dominance.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/youtube_dominance.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/youtube_dominance.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/youtube_dominance.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/youtube_dominance.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/youtube_dominance.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/youtube_dominance.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/youtube_dominance.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/youtube_dominance.png"
alt="Table showing YouTube is the #1 app across every age group in the US (18-24, 25-34, 35-44, 45&amp;#43;) per Sensor Tower"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-youtube_dominance-png-7" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/youtube_dominance.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Table showing YouTube is the #1 app across every age group in the US (18-24, 25-34, 35-44, 45&amp;#43;) per Sensor Tower" decoding="async"&gt;
&lt;/dialog&gt;
YouTube is the top app across every age demographic. Every single one. 18-24, 25-34, 35-44, 45+. No other app has achieved this. Not TikTok (appears for youngest and oldest, vanishes in the middle). Not Instagram (fades with age). Not Facebook (rises with age). YouTube alone spans generations.&lt;/p&gt;
&lt;h2 id="waymos-quiet-expansion"&gt;Waymo&amp;rsquo;s Quiet Expansion&lt;/h2&gt;
&lt;p&gt;Finally, Waymo: &lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-waymo_penetration-png-9" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/waymo_penetration.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/waymo_penetration.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/waymo_penetration.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/waymo_penetration.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/waymo_penetration.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/waymo_penetration.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/waymo_penetration.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/waymo_penetration.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/waymo_penetration.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/waymo_penetration.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/waymo_penetration.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/waymo_penetration.png"
alt="Line chart showing Waymo&amp;#39;s autonomous ride-hailing penetration of Lyft and Uber users rising to ~4% and ~3% respectively by Q4 2025"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-waymo_penetration-png-9" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/waymo_penetration.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Line chart showing Waymo&amp;#39;s autonomous ride-hailing penetration of Lyft and Uber users rising to ~4% and ~3% respectively by Q4 2025" decoding="async"&gt;
&lt;/dialog&gt;
Waymo accounts for about 4% of Lyft users and 3% of Uber users nationally, despite operating in only a handful of cities. In its active markets (San Francisco, Phoenix), market share is closer to 15%. The company has driven 127 million autonomous miles and tripled its ride volume to 15 million trips in 2025.&lt;/p&gt;
&lt;p&gt;Mobile is no longer a platform question. It is a distribution question. The app economy winners so far: AI companies targeting professionals, YouTube serving everyone, and autonomous vehicles growing quietly in the background.&lt;/p&gt;</description></item><item><title>Claude Opus 4.6: Anthropic's New Flagship AI Model for Agentic Coding</title><link>https://philippdubach.com/posts/claude-opus-4.6-anthropics-new-flagship-ai-model-for-agentic-coding/</link><pubDate>Thu, 05 Feb 2026 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/claude-opus-4.6-anthropics-new-flagship-ai-model-for-agentic-coding/</guid><description>&lt;p&gt;Anthropic just released Claude Opus 4.6, the latest frontier AI model in the Claude family. It&amp;rsquo;s a big upgrade over Opus 4.5 and probably the most agentic-focused LLM release from any lab this year.&lt;/p&gt;
&lt;p&gt;Key upgrades: better agentic AI coding capabilities (plans more carefully, sustains longer tasks, catches its own mistakes), a 1M token context window (a first for Opus-class models), and 128K output tokens. Pricing holds at $5/$25 per million tokens.&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-claude46-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/claude46.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/claude46.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/claude46.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/claude46.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude46.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/claude46.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/claude46.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/claude46.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude46.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/claude46.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/claude46.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/claude46.png"
alt="Claude Opus 4.6 release announcement on claude.ai showing the new flagship model from Anthropic"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-claude46-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/claude46.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Claude Opus 4.6 release announcement on claude.ai showing the new flagship model from Anthropic" decoding="async"&gt;
&lt;/dialog&gt;
&lt;/p&gt;
&lt;h3 id="llm-benchmark-results-how-claude-opus-46-compares"&gt;LLM Benchmark Results: How Claude Opus 4.6 Compares&lt;/h3&gt;
&lt;p&gt;The benchmark numbers are strong across the board. Opus 4.6 hits state-of-the-art on Terminal-Bench 2.0 (65.4% for agentic coding in the terminal), Humanity&amp;rsquo;s Last Exam (complex multidisciplinary reasoning), and BrowseComp (agentic web search). It beats GPT-5.2 by roughly 144 Elo points on GDPval-AA, the benchmark that measures real-world knowledge work across 44 professional occupations.&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-opus46-elo-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/opus46-elo.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/opus46-elo.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/opus46-elo.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/opus46-elo.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/opus46-elo.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/opus46-elo.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/opus46-elo.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/opus46-elo.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/opus46-elo.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/opus46-elo.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/opus46-elo.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/opus46-elo.png"
alt="GDPval-AA Elo benchmark comparison chart: Claude Opus 4.6 at 1,606 Elo vs GPT-5.2 at 1,462 Elo vs Claude Opus 4.5 at 1,416 Elo for real-world knowledge work"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-opus46-elo-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/opus46-elo.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="GDPval-AA Elo benchmark comparison chart: Claude Opus 4.6 at 1,606 Elo vs GPT-5.2 at 1,462 Elo vs Claude Opus 4.5 at 1,416 Elo for real-world knowledge work" decoding="async"&gt;
&lt;/dialog&gt;
The standout is ARC-AGI-2, which tests abstract reasoning on problems easy for humans but hard for AI. Opus 4.6 scores 68.8%, a dramatic leap from Opus 4.5&amp;rsquo;s 37.6%. For comparison, GPT-5.2 scores 54.2% and Gemini 3 Pro hits 45.1%. That gap matters because ARC-AGI-2 resists memorization — it measures whether models can actually generalize.&lt;/p&gt;
&lt;p&gt;On coding-specific evaluations, Terminal Bench 2.0 rises to 65.4% (from 59.8% for Opus 4.5), and OSWorld for agentic computer use jumps from 66.3% to 72.7%, putting Opus ahead of both GPT-5.2 and Gemini 3 Pro on those particular tests. SWE-bench Verified shows a small regression — worth watching, though the model excels on the benchmarks that better reflect real production work.&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-opus46-benchmarks-png-2" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/opus46-benchmarks.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/opus46-benchmarks.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/opus46-benchmarks.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/opus46-benchmarks.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/opus46-benchmarks.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/opus46-benchmarks.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/opus46-benchmarks.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/opus46-benchmarks.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/opus46-benchmarks.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/opus46-benchmarks.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/opus46-benchmarks.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/opus46-benchmarks.png"
alt="Claude Opus 4.6 LLM benchmark comparison: SOTA on Terminal-Bench 2.0, Humanity&amp;#39;s Last Exam, BrowseComp, and GDPval-AA with 90.2% on BigLaw Bench"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-opus46-benchmarks-png-2" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/opus46-benchmarks.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Claude Opus 4.6 LLM benchmark comparison: SOTA on Terminal-Bench 2.0, Humanity&amp;#39;s Last Exam, BrowseComp, and GDPval-AA with 90.2% on BigLaw Bench" decoding="async"&gt;
&lt;/dialog&gt;
&lt;/p&gt;
&lt;h3 id="what-can-you-do-with-a-1-million-token-context-window"&gt;What Can You Do With a 1 Million Token Context Window?&lt;/h3&gt;
&lt;p&gt;The 1M context window paired with the new context compaction feature is the upgrade that matters most in practice. To put it in perspective: 1M tokens covers roughly 750 novels, an entire enterprise codebase of several thousand files, or a full legal discovery set — processed in a single prompt.&lt;/p&gt;
&lt;p&gt;Compaction automatically summarizes older context when approaching limits, which means agents can theoretically run indefinitely without hitting the wall that&amp;rsquo;s plagued long-running AI tasks. Combined with the model&amp;rsquo;s improved ability to catch its own mistakes through better code review and debugging, you&amp;rsquo;re looking at agents that can actually finish what they start.&lt;/p&gt;
&lt;p&gt;The long-context retrieval jump tells the story. On MRCR v2, which tests whether a model can find and reason over specific facts buried in massive prompts, Opus 4.6 scores 76% compared to Sonnet 4.5&amp;rsquo;s 18.5%. That&amp;rsquo;s not an incremental improvement — it&amp;rsquo;s a different capability class.&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-opus46-context-png-3" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/opus46-context.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/opus46-context.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/opus46-context.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/opus46-context.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/opus46-context.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/opus46-context.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/opus46-context.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/opus46-context.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/opus46-context.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/opus46-context.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/opus46-context.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/opus46-context.png"
alt="Long-context retrieval benchmark: Claude Opus 4.6 scores 76% vs Claude Sonnet 4.5 at 18.5% on MRCR v2 needle-in-a-haystack reasoning test"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-opus46-context-png-3" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/opus46-context.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Long-context retrieval benchmark: Claude Opus 4.6 scores 76% vs Claude Sonnet 4.5 at 18.5% on MRCR v2 needle-in-a-haystack reasoning test" decoding="async"&gt;
&lt;/dialog&gt;
That said, bigger context doesn&amp;rsquo;t automatically mean better. Research from Factory.ai and others shows attention degrades across very long sequences, and prefill latency at 1M tokens can exceed two minutes before you get your first output token. The premium pricing tier for prompts exceeding 200K tokens ($10/$37.50) reflects this cost — Anthropic isn&amp;rsquo;t subsidizing power users anymore. The real question for enterprise deployments is whether stuffing your entire codebase into context beats a well-designed RAG pipeline. The answer, as usual, depends on the use case.&lt;/p&gt;
&lt;h3 id="agentic-ai-coding-agent-teams-and-claude-code-updates"&gt;Agentic AI Coding: Agent Teams and Claude Code Updates&lt;/h3&gt;
&lt;p&gt;The headline numbers impress, but the real story is the agentic focus. Anthropic isn&amp;rsquo;t just making Claude smarter. They&amp;rsquo;re making it more useful for the actual work people want AI to do: sustained, multi-step tasks in large codebases.&lt;/p&gt;
&lt;p&gt;New API features reinforce this direction: adaptive thinking lets the model decide when to reason deeper based on contextual cues, effort controls give developers fine-grained tradeoffs between intelligence, speed, and cost (low/medium/high/max), and context compaction keeps long-running agents within limits without manual intervention.&lt;/p&gt;
&lt;p&gt;Claude Code gets the headline feature: &lt;strong&gt;Agent Teams&lt;/strong&gt; that work in parallel. Multiple subagents can coordinate autonomously on read-heavy work like codebase reviews, with each agent handling a different branch via git worktrees before merging back. This ships as a research preview, but it&amp;rsquo;s clearly aimed at the production workflows where agentic coding tools like Cursor, GitHub Copilot, and OpenAI&amp;rsquo;s Codex are competing hard. The timing isn&amp;rsquo;t accidental — Apple just announced Xcode 26.3 with native support for Claude Agent and OpenAI&amp;rsquo;s Codex via MCP (Model Context Protocol), making agentic coding a standard part of the developer toolchain rather than an experiment.&lt;/p&gt;
&lt;h3 id="enterprise-deployment-why-gdpval-aa-matters"&gt;Enterprise Deployment: Why GDPval-AA Matters&lt;/h3&gt;
&lt;p&gt;The GDPval-AA benchmark matters because it measures performance on real-world knowledge work — not toy problems or academic puzzles. Beating GPT-5.2 by 144 Elo points (and Opus 4.5 by 190) suggests meaningful improvements in the tasks that matter for enterprise AI adoption: financial analysis, legal reasoning, and multi-step professional workflows.&lt;/p&gt;
&lt;p&gt;The product expansions signal where Anthropic sees the market going. Claude in Excel now handles long-running tasks and unstructured data. Claude in PowerPoint reads layouts and slide masters for brand consistency. These aren&amp;rsquo;t research demos — they&amp;rsquo;re enterprise-ready integrations designed for knowledge workers who need AI that fits into existing toolchains.&lt;/p&gt;
&lt;p&gt;For teams evaluating which frontier model to standardize on, the picture is nuanced. Claude Opus 4.6 leads on agentic coding and enterprise knowledge work. GPT-5.2 still holds advantages in abstract reasoning (ARC-AGI-2, though the gap narrowed significantly) and math. Gemini 3 Pro offers the best cost efficiency and multimodal processing with its own 1M context window. The multi-model workflow trend is real — the smartest enterprise teams aren&amp;rsquo;t picking one model; they&amp;rsquo;re routing tasks to whichever model handles them best.&lt;/p&gt;
&lt;h3 id="safety-profile-and-the-zero-day-question"&gt;Safety Profile and the Zero-Day Question&lt;/h3&gt;
&lt;p&gt;One detail worth noting: the safety profile. Anthropic claims Opus 4.6 is &amp;ldquo;just as well-aligned as Opus 4.5, which was the most-aligned frontier model to date.&amp;rdquo; Given the enhanced cybersecurity capabilities — Opus 4.6 independently discovered over 500 previously unknown zero-day vulnerabilities in open-source code during Anthropic&amp;rsquo;s pre-release testing — they developed six new detection probes specifically for this release.&lt;/p&gt;
&lt;p&gt;Whether that&amp;rsquo;s reassuring or concerning depends on your priors about AI capabilities research. The vulnerabilities ranged from system-crashing bugs to memory corruption flaws in widely-used tools like GhostScript and OpenSC. As Logan Graham, head of Anthropic&amp;rsquo;s frontier red team, put it: it&amp;rsquo;s a race between defenders and attackers, and Anthropic wants defenders to have the tools first.&lt;/p&gt;
&lt;h3 id="what-this-means-for-the-competitive-landscape"&gt;What This Means for the Competitive Landscape&lt;/h3&gt;
&lt;p&gt;The competitive picture just got more interesting. GPT-5.2 and Gemini 3 Pro now have a new benchmark to chase, and Anthropic has clearly staked its claim on agentic coding as the primary battleground. With pricing unchanged at $5/$25 per million tokens — significantly more expensive than GPT-5.2 at $2/$10 but competitive for the performance tier — the value proposition comes down to whether the agentic improvements translate to fewer retries, less hand-holding, and faster task completion in your specific workflow.&lt;/p&gt;
&lt;p&gt;For developers, the move is straightforward: swap in &lt;code&gt;claude-opus-4-6&lt;/code&gt; via the API and test it on your hardest tasks. For enterprise decision makers, the GDPval-AA results and Agent Teams feature are worth a serious evaluation cycle. The model is available now on claude.ai, the API, and all major cloud platforms (AWS Bedrock, Azure Foundry, GCP Vertex AI).&lt;/p&gt;</description></item><item><title>Buying the Haystack Might Not Work This Year</title><link>https://philippdubach.com/posts/buying-the-haystack-might-not-work-this-year/</link><pubDate>Sat, 31 Jan 2026 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/buying-the-haystack-might-not-work-this-year/</guid><description>&lt;p&gt;I&amp;rsquo;ve been reading the January 2026 state of markets reports from &lt;a href="https://docs.google.com/presentation/d/e/2PACX-1vQXsMMv5ZCWm77za7oXJcz1X-Th5Mz15g5nYBxbUjnomStVcjn8lXPjE5LzAlvc_hg4yHKgwASWLo5a/pub?start=false&amp;amp;loop=false&amp;amp;delayms=3000&amp;amp;slide=id.g3b6e2578ab2_8_4858"&gt;Andreessen Horowitz&lt;/a&gt; and &lt;a href="https://www.aqr.com/Insights/Research/Alternative-Thinking/2026-Capital-Market-Assumptions-for-Major-Asset-Classes"&gt;AQR&lt;/a&gt;, and their conclusions on the AI bubble question in 2026 are almost impossible to reconcile.&lt;/p&gt;
&lt;p&gt;The a16z view is straightforward: AI fundamentals are real, and current prices reflect that reality. Their evidence is compelling. The top 50 private AI companies now generate &lt;strong&gt;$40.6 billion in annual revenue&lt;/strong&gt;. Companies like ElevenLabs and Cursor are hitting $100 million ARR faster than Slack or Twilio ever did. GPUs are running at &lt;strong&gt;80% utilization&lt;/strong&gt;, compared to the 7% utilization rate for fiber optic cables during the dotcom bubble. This isn&amp;rsquo;t speculation, they argue. It&amp;rsquo;s demand exceeding supply.&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-a16z-gpu-utilization-vs-fiber-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/a16z-gpu-utilization-vs-fiber.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/a16z-gpu-utilization-vs-fiber.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/a16z-gpu-utilization-vs-fiber.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/a16z-gpu-utilization-vs-fiber.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/a16z-gpu-utilization-vs-fiber.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/a16z-gpu-utilization-vs-fiber.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/a16z-gpu-utilization-vs-fiber.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/a16z-gpu-utilization-vs-fiber.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/a16z-gpu-utilization-vs-fiber.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/a16z-gpu-utilization-vs-fiber.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/a16z-gpu-utilization-vs-fiber.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/a16z-gpu-utilization-vs-fiber.png"
alt="GPU utilization at 80% in AI datacenters compared to just 7% fiber optic cable utilization during the early 2000s dotcom bubble"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-a16z-gpu-utilization-vs-fiber-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/a16z-gpu-utilization-vs-fiber.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="GPU utilization at 80% in AI datacenters compared to just 7% fiber optic cable utilization during the early 2000s dotcom bubble" decoding="async"&gt;
&lt;/dialog&gt;
AQR looks at the same market and sees something else entirely. Their capital market assumptions put the U.S. CAPE ratio at the &lt;strong&gt;96th percentile since 1980&lt;/strong&gt;. Expected real returns for U.S. large cap equities over the next 5-10 years? &lt;strong&gt;3.9%&lt;/strong&gt;. For a global 60/40 portfolio, just &lt;strong&gt;3.4%&lt;/strong&gt;, well below the long-term average of roughly 5% since 1900. Risk premia, in their framework, are compressed across nearly every asset class. The narrative doesn&amp;rsquo;t enter their models.&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-aqr-expected-returns-summary-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/aqr-expected-returns-summary.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/aqr-expected-returns-summary.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/aqr-expected-returns-summary.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/aqr-expected-returns-summary.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/aqr-expected-returns-summary.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/aqr-expected-returns-summary.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/aqr-expected-returns-summary.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/aqr-expected-returns-summary.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/aqr-expected-returns-summary.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/aqr-expected-returns-summary.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/aqr-expected-returns-summary.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/aqr-expected-returns-summary.png"
alt="AQR medium-term expected real returns summary showing U.S. equities at 3.9%, non-U.S. developed at 5.3%, and global 60/40 at 3.4%"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-aqr-expected-returns-summary-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/aqr-expected-returns-summary.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="AQR medium-term expected real returns summary showing U.S. equities at 3.9%, non-U.S. developed at 5.3%, and global 60/40 at 3.4%" decoding="async"&gt;
&lt;/dialog&gt;
a16z points to earnings growth. The market rally hasn&amp;rsquo;t been driven by multiple expansion, they note, but by actual EPS growth. Tech P/E multiples sit around 30-35x, elevated but nowhere near the 70-80x of 2000. Tech margins have &amp;ldquo;lapped the field&amp;rdquo; at 25%+ compared to 5-8% for the rest of the S&amp;amp;P 500. The fundamentals, they insist, are doing the work.&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-a16z-pe-multiples-vs-dotcom-png-2" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/a16z-pe-multiples-vs-dotcom.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/a16z-pe-multiples-vs-dotcom.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/a16z-pe-multiples-vs-dotcom.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/a16z-pe-multiples-vs-dotcom.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/a16z-pe-multiples-vs-dotcom.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/a16z-pe-multiples-vs-dotcom.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/a16z-pe-multiples-vs-dotcom.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/a16z-pe-multiples-vs-dotcom.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/a16z-pe-multiples-vs-dotcom.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/a16z-pe-multiples-vs-dotcom.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/a16z-pe-multiples-vs-dotcom.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/a16z-pe-multiples-vs-dotcom.png"
alt="Earnings multiples are high but nowhere near dotcom levels: large cap tech trailing P/E around 30-35x today versus 70-80x in 2000"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-a16z-pe-multiples-vs-dotcom-png-2" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/a16z-pe-multiples-vs-dotcom.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Earnings multiples are high but nowhere near dotcom levels: large cap tech trailing P/E around 30-35x today versus 70-80x in 2000" decoding="async"&gt;
&lt;/dialog&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-a16z-tech-margins-png-3" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/a16z-tech-margins.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/a16z-tech-margins.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/a16z-tech-margins.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/a16z-tech-margins.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/a16z-tech-margins.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/a16z-tech-margins.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/a16z-tech-margins.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/a16z-tech-margins.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/a16z-tech-margins.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/a16z-tech-margins.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/a16z-tech-margins.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/a16z-tech-margins.png"
alt="Tech margins have lapped the field: Tech and Interactive Media at 25%&amp;#43; compared to 5-8% for the rest of the S&amp;amp;P 500"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-a16z-tech-margins-png-3" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/a16z-tech-margins.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Tech margins have lapped the field: Tech and Interactive Media at 25%&amp;#43; compared to 5-8% for the rest of the S&amp;amp;P 500" decoding="async"&gt;
&lt;/dialog&gt;
AQR&amp;rsquo;s response would be that fundamentals always look good near peaks. Their research shows a &lt;strong&gt;50% probability&lt;/strong&gt; that realized equity returns will miss estimates by more than 3 percentage points annually over the next decade. Compressed premia don&amp;rsquo;t announce themselves with blaring headlines. They just quietly erode returns until investors notice they&amp;rsquo;ve been running in place.&lt;/p&gt;
&lt;p&gt;Cumulative hyperscaler capex is projected to reach &lt;strong&gt;$4.8 trillion by 2030&lt;/strong&gt;. To achieve a 10% hurdle rate on that investment, AI revenue needs to hit roughly &lt;strong&gt;$1 trillion annually by 2030&lt;/strong&gt;, about 1% of global GDP excluding China. &lt;a href="https://fortune.com/2025/11/17/is-ai-a-bubble-goldman-sachs-market-already-priced-in-19-trillion/"&gt;Goldman Sachs estimates&lt;/a&gt; that $9 trillion in revenue could flow from the AI buildout, which at 20% margins and a 22x P/E multiple would create $35 trillion in new market cap. Only about $24 trillion has been pulled forward so far, leaving $11 trillion &amp;ldquo;on the table.&amp;ldquo;&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-a16z-ai-revenue-capex-targets-png-4" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/a16z-ai-revenue-capex-targets.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/a16z-ai-revenue-capex-targets.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/a16z-ai-revenue-capex-targets.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/a16z-ai-revenue-capex-targets.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/a16z-ai-revenue-capex-targets.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/a16z-ai-revenue-capex-targets.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/a16z-ai-revenue-capex-targets.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/a16z-ai-revenue-capex-targets.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/a16z-ai-revenue-capex-targets.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/a16z-ai-revenue-capex-targets.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/a16z-ai-revenue-capex-targets.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/a16z-ai-revenue-capex-targets.png"
alt="Required AI-enabled revenue to meet return on capital targets: cumulative AI investment reaching $4.8 trillion by 2030 requires roughly $1 trillion in annual AI revenue"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-a16z-ai-revenue-capex-targets-png-4" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/a16z-ai-revenue-capex-targets.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Required AI-enabled revenue to meet return on capital targets: cumulative AI investment reaching $4.8 trillion by 2030 requires roughly $1 trillion in annual AI revenue" decoding="async"&gt;
&lt;/dialog&gt;
Or not. AQR would point out that the expected return for U.S. buyouts, private equity&amp;rsquo;s bread and butter, is now &lt;strong&gt;4.2%&lt;/strong&gt;. That&amp;rsquo;s barely above the 3.9% for public large caps. The illiquidity premium has essentially vanished. If sophisticated PE firms can&amp;rsquo;t find excess returns, why should AI capex be different?&lt;/p&gt;
&lt;p&gt;I find myself uncertain, which feels like the more honest position. Neither source is disinterested. a16z manages billions in venture capital and growth equity; bullish AI narratives support their portfolio valuations and fundraising. AQR runs systematic strategies that benefit when investors diversify away from concentrated U.S. tech exposure toward international equities and alternatives. Both are talking their book, which doesn&amp;rsquo;t make either wrong, but it&amp;rsquo;s worth noting.&lt;/p&gt;
&lt;p&gt;The a16z data on utilization and revenue growth is hard to dismiss. 80% GPU utilization isn&amp;rsquo;t vaporware. Harvey users nearly tripled their time on the platform in nine months. Navan&amp;rsquo;s AI handles half of all customer interactions at satisfaction levels matching human agents. These are real products generating real engagement. But AQR&amp;rsquo;s valuation work has a longer track record. Their models don&amp;rsquo;t care about narratives, and historically that discipline has been valuable. When they say U.S. equities offer the lowest expected returns among major markets, that&amp;rsquo;s not pessimism. It&amp;rsquo;s arithmetic.&lt;/p&gt;
&lt;p&gt;The reconciliation might be this: AI winners could thrive spectacularly while broad market indices disappoint. a16z&amp;rsquo;s portfolio companies operate in a different universe than the average S&amp;amp;P 500 constituent. Compressed risk premia can coexist with individual companies generating enormous returns. The question is whether you&amp;rsquo;re buying the index or picking the winners.&lt;/p&gt;
&lt;p&gt;Non-U.S. developed markets, by the way, offer expected returns of around 5%, versus 3.9% for U.S. large caps. The valuation gap is real even if the AI story is true. &lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-aqr-expected-returns-equities-png-6" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/aqr-expected-returns-equities.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/aqr-expected-returns-equities.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/aqr-expected-returns-equities.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/aqr-expected-returns-equities.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/aqr-expected-returns-equities.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/aqr-expected-returns-equities.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/aqr-expected-returns-equities.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/aqr-expected-returns-equities.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/aqr-expected-returns-equities.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/aqr-expected-returns-equities.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/aqr-expected-returns-equities.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/aqr-expected-returns-equities.png"
alt="AQR expected local real returns for equities: U.S. Large at 3.9%, Eurozone at 5.0%, UK at 4.9%, Japan at 4.9%"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-aqr-expected-returns-equities-png-6" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/aqr-expected-returns-equities.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="AQR expected local real returns for equities: U.S. Large at 3.9%, Eurozone at 5.0%, UK at 4.9%, Japan at 4.9%" decoding="async"&gt;
&lt;/dialog&gt;
&lt;/p&gt;
&lt;aside class="disclaimer" role="note" aria-label="Disclaimer"&gt;
&lt;div class="disclaimer-content"&gt;&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; All opinions expressed are my own. This is not investment, financial, tax, or legal advice. Past performance does not indicate future results. Do your own research and consult qualified professionals before making financial decisions. No liability accepted for any losses.&lt;/p&gt;&lt;/div&gt;
&lt;/aside&gt;</description></item><item><title>Bandits and Agents: Netflix and Spotify Recommender Stacks in 2026</title><link>https://philippdubach.com/posts/bandits-and-agents-netflix-and-spotify-recommender-stacks-in-2026/</link><pubDate>Fri, 30 Jan 2026 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/bandits-and-agents-netflix-and-spotify-recommender-stacks-in-2026/</guid><description>&lt;p&gt;Hyperscalers spent over &lt;a href="https://www.goldmansachs.com/insights/articles/why-ai-companies-may-invest-more-than-500-billion-in-2026"&gt;$350 billion on AI infrastructure&lt;/a&gt; in 2025 alone, with projections exceeding $500 billion in 2026. The trillion-dollar question is not whether machines can reason, but whether anyone can afford to let them. Hybrid recommender systems sit at the center of this tension. Large Language Models promised to transform how Netflix suggests your next show or how Spotify curates your morning playlist. Instead, the industry has split into two parallel universes, divided not by capability but by cost.&lt;/p&gt;
&lt;p&gt;On one side sits what engineers call the &amp;ldquo;classical stack&amp;rdquo;: matrix factorization, two-tower embedding models, and contextual bandits. These methods respond in microseconds, scale linearly with users, and run on nothing more complicated than dot products. A query costs a fraction of a cent. On the other side is the &amp;ldquo;agentic stack&amp;rdquo;: LLM-based reasoning engines that can handle requests like &amp;ldquo;find me a sci-fi movie that feels like Blade Runner but was made in the 90s.&amp;rdquo; This second approach consumes thousands of tokens per recommendation. The cost difference is not incremental; it is &lt;a href="https://www.softwareseni.com/understanding-inference-economics-and-why-ai-costs-spiral-beyond-proof-of-concept/"&gt;orders of magnitude&lt;/a&gt;. LLM inference cost economics, more than any algorithmic breakthrough, is now the dominant force shaping recommender architecture.&lt;/p&gt;
&lt;p&gt;The 2026 consensus is a hybrid architecture: use the cheap, fast models for candidate generation from millions of items, then invoke the expensive reasoning layer only for the final dozen items a user actually sees. This &amp;ldquo;funnel&amp;rdquo; pattern — retrieval, then ranking, then re-ranking — is the only way to make the economics work. The smartest model is reserved for the fewest items.&lt;/p&gt;
&lt;p&gt;What makes this work in practice goes back to a formalism from &lt;a href="https://www.jstor.org/stable/2332286"&gt;1933&lt;/a&gt;: the multi-armed bandit. Imagine a gambler facing a row of slot machines, each with an unknown payout rate. She wants to maximize her winnings over a night of play. If she always pulls the arm with the highest observed payout, she might miss a better machine she never tried. If she explores too much, she wastes money on losers. The mathematics of this exploration–exploitation tradeoff define &lt;em&gt;regret&lt;/em&gt;:&lt;/p&gt;
$$
R(T) = \mu^* \cdot T - \sum_{t=1}^{T} \mu(a_t)
$$&lt;p&gt;Here μ* is the best possible average reward, and μ(aₜ) is the reward from whatever arm she actually pulled at time t. Total regret is how much she left on the table by not knowing the optimal choice in advance. The goal of every multi-armed bandit algorithm in recommender systems is to drive this quantity sublinear in T — to learn fast enough that the cost of exploration vanishes relative to the horizon. &lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-slide10-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/slide10.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/slide10.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/slide10.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/slide10.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/slide10.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/slide10.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/slide10.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/slide10.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/slide10.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/slide10.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/slide10.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/slide10.png"
alt="Multi-armed bandit recommender system diagram: a Learner taking Actions and receiving Rewards from an Environment, with the goal to maximize cumulative reward or minimize cumulative regret"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-slide10-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/slide10.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Multi-armed bandit recommender system diagram: a Learner taking Actions and receiving Rewards from an Environment, with the goal to maximize cumulative reward or minimize cumulative regret" decoding="async"&gt;
&lt;/dialog&gt;
The three main exploration strategies each take a different approach: epsilon-greedy adds random noise to avoid getting stuck; Upper Confidence Bound (UCB) prefers actions with uncertain values; Thompson Sampling selects actions according to the probability they are optimal. In practice, Thompson Sampling tends to outperform the others because its exploration is guided by posterior uncertainty rather than arbitrary randomness — it explores where it matters most. &lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-slide12-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/slide12.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/slide12.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/slide12.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/slide12.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/slide12.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/slide12.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/slide12.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/slide12.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/slide12.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/slide12.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/slide12.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/slide12.png"
alt="Principles of Exploration in recommender systems: Naive Exploration (ε-greedy), Optimism in the Face of Uncertainty (UCB), and Probability Matching (Thompson Sampling)"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-slide12-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/slide12.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Principles of Exploration in recommender systems: Naive Exploration (ε-greedy), Optimism in the Face of Uncertainty (UCB), and Probability Matching (Thompson Sampling)" decoding="async"&gt;
&lt;/dialog&gt;
Every recommendation you see on &lt;a href="https://research.netflix.com/publication/lessons-learnt-from-consolidating-ml-models-in-a-large-scale-recommendation"&gt;Netflix&amp;rsquo;s homepage&lt;/a&gt; is the output of an algorithm trying to minimize exactly this quantity, whether it realizes it or not.&lt;/p&gt;
&lt;p&gt;Netflix&amp;rsquo;s recommendation algorithm architecture runs this optimization across &lt;a href="https://www.slideshare.net/slideshow/a-multiarmed-bandit-framework-for-recommendations-at-netflix/102629078"&gt;three computation layers&lt;/a&gt;. Offline systems crunch terabytes of viewing history to train deep collaborative filtering models, a process that takes hours and happens on a schedule. Nearline systems update user embeddings seconds after a click, keeping the recommendations fresh without the cost of full retraining. Online systems respond to each page load in milliseconds, combining the precomputed signals with real-time context like time of day and device type. The architecture is a &lt;a href="https://netflixtechblog.com/post-training-generative-recommenders-with-advantage-weighted-supervised-finetuning-61a538d717a9"&gt;latency-cost tradeoff&lt;/a&gt;: deep analysis happens in batch, while the user-facing layer stays fast. &lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-slide28-png-3" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/slide28.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/slide28.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/slide28.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/slide28.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/slide28.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/slide28.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/slide28.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/slide28.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/slide28.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/slide28.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/slide28.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/slide28.png"
alt="Netflix recommendation algorithm architecture: Member Activity and Contextual Information flow through an Offline System for model training, then to an Online System where the Multi-Armed Bandit produces recommendations"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-slide28-png-3" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/slide28.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Netflix recommendation algorithm architecture: Member Activity and Contextual Information flow through an Offline System for model training, then to an Online System where the Multi-Armed Bandit produces recommendations" decoding="async"&gt;
&lt;/dialog&gt;
What Netflix learned from a decade of experimentation is counterintuitive. The goal is not to recommend what users will definitely watch, but what they would not have found on their own. They call this &amp;ldquo;incrementality.&amp;rdquo; A greedy algorithm that always surfaces the highest-probability titles just confirms what users already knew — it exploits without exploring, and in doing so collapses the discovery space. A better approach is to measure the &lt;em&gt;causal effect&lt;/em&gt; of the recommendation: how much does showing this thumbnail increase the probability of a play compared to not showing it? Some titles have low baseline interest but high incrementality. Those are the ones worth featuring. This is the exploration–exploitation tradeoff made concrete: the value of a recommendation is not its predicted rating, but its marginal contribution to discovery. &lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-slide41-png-4" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/slide41.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/slide41.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/slide41.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/slide41.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/slide41.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/slide41.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/slide41.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/slide41.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/slide41.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/slide41.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/slide41.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/slide41.png"
alt="Netflix incrementality analysis: scatter plot showing incremental probability vs baseline probability, where Title A has low baseline but high incremental lift, while Title C has high baseline but less benefit from featuring"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-slide41-png-4" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/slide41.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Netflix incrementality analysis: scatter plot showing incremental probability vs baseline probability, where Title A has low baseline but high incremental lift, while Title C has high baseline but less benefit from featuring" decoding="async"&gt;
&lt;/dialog&gt;
Spotify&amp;rsquo;s AI DJ recommender system takes a different approach to the same problem. Their &amp;ldquo;&lt;a href="https://research.atspotify.com/2025/9/you-say-search-i-say-recs-a-scalable-agentic-approach-to-query-understanding"&gt;AI DJ&lt;/a&gt;&amp;rdquo; feature uses what engineers internally call the &amp;ldquo;agentic router.&amp;rdquo; When you ask for &amp;ldquo;music for a rainy reading session in 1990s Seattle,&amp;rdquo; the router decides whether to invoke the expensive LLM reasoning layer or just fall back to keyword matching against collaborative filtering embeddings. Complex queries get the big model; simple ones get the fast path. This router is the economic governor of the entire system — an inference cost optimizer disguised as a product feature. Underneath the DJ&amp;rsquo;s personality, built on Spotify&amp;rsquo;s Sonantic voice synthesis and LLM-generated contextual narratives, sits a bandit framework called BaRT (Bandits for Recommendations as Treatments) that quietly balances what you know you like against what you might not yet know you need.&lt;/p&gt;
&lt;p&gt;Not everyone is convinced the algorithms are making us better off. My own &lt;a href="https://philippdubach.com/posts/social-media-success-prediction-bert-models-for-post-titles/"&gt;analysis of social media success prediction&lt;/a&gt; found that sophisticated language models often just memorize temporal patterns rather than learning what actually makes content good. They learn the news cycle, not the news.&lt;/p&gt;
&lt;p&gt;The risk is that we build hybrid recommender systems that are technically brilliant but experientially hollow, engineering away the serendipity that made discovery meaningful in the first place. The recommender is becoming a curator, and the curator is becoming an agent. The architecture will keep evolving — foundation models for recommendations, reinforcement learning from human feedback applied to discovery, inference costs that continue their &lt;a href="https://a16z.com/llmflation-llm-inference-cost/"&gt;10× annual decline&lt;/a&gt; — but the open question for 2026 is whether we want to be the curators of our own lives, or merely consumers of an optimized feed.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Slides courtesy of &amp;ldquo;&lt;a href="https://www.slideshare.net/slideshow/a-multiarmed-bandit-framework-for-recommendations-at-netflix/102629078"&gt;A Multi-Armed Bandit Framework for Recommendations at Netflix&lt;/a&gt;&amp;rdquo; by Jaya Kawale, Netflix.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>The Most Expensive Assumption in AI</title><link>https://philippdubach.com/posts/the-most-expensive-assumption-in-ai/</link><pubDate>Mon, 26 Jan 2026 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/the-most-expensive-assumption-in-ai/</guid><description>&lt;p&gt;Sara Hooker&amp;rsquo;s paper arrived with impeccable timing. &lt;em&gt;&lt;a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=5877662"&gt;On the slow death of scaling&lt;/a&gt;&lt;/em&gt; dropped just as hyperscalers are committing another $500 billion to GPU infrastructure, bringing total industry deployment into the scaling thesis somewhere north of a trillion dollars. I&amp;rsquo;ve been &lt;a href="https://philippdubach.com/posts/how-ai-is-shaping-my-investment-portfolio-for-2026/"&gt;tracking these capital flows&lt;/a&gt; for my own portfolio. Either Hooker is early to a generational insight or she&amp;rsquo;s about to be very publicly wrong.&lt;figure class="post-figure" style="width: 100%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-hyperscaler_capex2-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/hyperscaler_capex2.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/hyperscaler_capex2.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/hyperscaler_capex2.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/hyperscaler_capex2.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/hyperscaler_capex2.png 1200w"
sizes="100vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/hyperscaler_capex2.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/hyperscaler_capex2.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/hyperscaler_capex2.png 1440w"
sizes="100vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/hyperscaler_capex2.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/hyperscaler_capex2.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/hyperscaler_capex2.png 2000w"
sizes="100vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/hyperscaler_capex2.png"
alt="Hyperscaler AI capital expenditure 2019-2025"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-hyperscaler_capex2-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/hyperscaler_capex2.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Hyperscaler AI capital expenditure 2019-2025" decoding="async"&gt;
&lt;/dialog&gt;
The core argument is very simple: bigger is not always better. &lt;a href="https://www.tii.ae/news/falcon-2-uaes-technology-innovation-institute-releases-new-ai-model-series-outperforming-metas"&gt;Llama-3 8B outperforms Falcon 180B&lt;/a&gt;. &lt;a href="https://arxiv.org/abs/2211.05100"&gt;Aya 23 8B beats BLOOM 176B&lt;/a&gt; despite having only 4.5% of the parameters. These are not isolated flukes. Hooker plots submissions to the Open LLM Leaderboard over two years and finds a systematic trend where compact models consistently outperform their bloated predecessors. The bitter lesson, as Rich Sutton framed it, was that brute force compute always wins. Hooker&amp;rsquo;s counter is that maybe we&amp;rsquo;ve been held hostage to &amp;ldquo;a painfully simple formula&amp;rdquo; that&amp;rsquo;s now breaking down.&lt;figure class="post-figure" style="width: 100%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-model_size_vs_performance2-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/model_size_vs_performance2.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/model_size_vs_performance2.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/model_size_vs_performance2.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/model_size_vs_performance2.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/model_size_vs_performance2.png 1200w"
sizes="100vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/model_size_vs_performance2.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/model_size_vs_performance2.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/model_size_vs_performance2.png 1440w"
sizes="100vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/model_size_vs_performance2.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/model_size_vs_performance2.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/model_size_vs_performance2.png 2000w"
sizes="100vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/model_size_vs_performance2.png"
alt="Model size vs benchmark performance showing smaller models outperforming larger ones"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-model_size_vs_performance2-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/model_size_vs_performance2.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Model size vs benchmark performance showing smaller models outperforming larger ones" decoding="async"&gt;
&lt;/dialog&gt;
Scaling laws, she notes, only reliably predict pre-training test loss. When you look at actual downstream performance, the results are &amp;ldquo;murky or inconsistent.&amp;rdquo; The term &amp;ldquo;emergent properties&amp;rdquo; gets thrown around to describe capabilities that appear suddenly at scale, but Hooker points out this is really just a fancy way of admitting we have no idea what&amp;rsquo;s coming. If your scaling law can&amp;rsquo;t predict emergence, it&amp;rsquo;s not much of a law.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Gary_Marcus"&gt;Gary Marcus&lt;/a&gt; has been making a related argument from a different angle. The cognitive scientist, whose 2001 book predicted hallucination problems, calls LLMs &amp;ldquo;glorified memorization machines&amp;rdquo; that work because the internet contains answers to most common queries. His framing is less academic and more market-oriented: the jump from GPT-1 to GPT-4 showed obvious qualitative leaps requiring no benchmarks. The jump from GPT-4 to GPT-5? Marginal improvements requiring careful measurement. The textbook definition of diminishing returns.&lt;/p&gt;
&lt;p&gt;The market signals are worth watching. According to &lt;a href="https://www.ft.com/content/a081aa60-eaca-4413-ba15-489762154c57"&gt;Goldman Sachs data&lt;/a&gt;, hedge fund short interest in utilities now sits at the 99th percentile relative to the past five years. Utilities. The bet appears to be that AI data center demand, the premise on which &lt;a href="https://www.reuters.com/business/energy/american-electric-power-signs-265-billion-deal-fuel-cells-2026-01-08/"&gt;American Electric Power trades at $65 billion&lt;/a&gt;, may not materialize as expected. Meanwhile, names like Bloom Energy, Oracle, and various AI-adjacent plays are showing up on heavily-shorted lists. Hedge funds aren&amp;rsquo;t yet betting against Nvidia directly, but they&amp;rsquo;re circling the weaker members of the herd.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s a certain irony here that Hooker captures well. Academia was effectively priced out of meaningful AI research by the compute arms race. The explosion in necessary compute &amp;ldquo;marginalized academia from meaningfully participating in AI progress.&amp;rdquo; Industry labs stopped publishing to preserve commercial advantage. Now, as scaling hits diminishing returns, the skills that matter shift back toward algorithmic cleverness, data quality, and architectural innovation. Things that don&amp;rsquo;t require a billion-dollar data center. If you got priced out of the game, the game may be coming back to you. Hooker writes,&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The less reliable gains from compute makes our purview as computer scientists interesting again&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The quiet tell is how frontier labs are actually behaving. Major players are now incorporating classical symbolic tools, things like Python interpreters and code execution, into LLM pipelines. These symbolic components run on CPUs, not GPUs. &lt;a href="https://en.wikipedia.org/wiki/Ilya_Sutskever"&gt;Ilya Sutskever&lt;/a&gt;, coauthor of the 2012 ImageNet paper and OpenAI cofounder, publicly stated that&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We need to go back to the age of research&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Shorting the scaling thesis has been a widow-maker trade for the better part of three years. Nvidia is up roughly 800% since 2022. As I&amp;rsquo;ve &lt;a href="https://philippdubach.com/posts/the-market-can-stay-irrational-longer-than-you-can-stay-solvent/"&gt;written before&lt;/a&gt;, the market can remain irrational longer than you can remain solvent, and that applies to both directions. OpenAI reportedly burns around $3 billion monthly with a $40 billion funding round implying perhaps 13 months of runway. If the next mega-round prices down or requires distressed terms, that&amp;rsquo;s your signal. Until then, the thesis may be directionally correct on the technical limitations while the timing remains treacherous.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We can only see a short distance ahead, but we can see plenty there that needs to be done.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As Alan Turing put it, and Hooker quotes approvingly. The scaling era produced real capabilities alongside real capital misallocation. What comes next is genuinely uncertain. That uncertainty cuts both ways.&lt;/p&gt;</description></item><item><title>Enterprise AI Strategy is Backwards</title><link>https://philippdubach.com/posts/enterprise-ai-strategy-is-backwards/</link><pubDate>Thu, 22 Jan 2026 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/enterprise-ai-strategy-is-backwards/</guid><description>&lt;p&gt;That’s the claim made by LinkedIn co-founder &lt;a href="https://en.wikipedia.org/wiki/Reid_Hoffman"&gt;Reid Hoffman&lt;/a&gt;. It’s a bold assertion, so I set out to investigate whether the data supports it.&lt;figure class="post-figure" style="width: 100%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-download_overview-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/download_overview.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/download_overview.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/download_overview.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/download_overview.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/download_overview.png 1200w"
sizes="100vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/download_overview.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/download_overview.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/download_overview.png 1440w"
sizes="100vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/download_overview.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/download_overview.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/download_overview.png 2000w"
sizes="100vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/download_overview.png"
alt="Report Header Overview"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-download_overview-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/download_overview.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Report Header Overview" decoding="async"&gt;
&lt;/dialog&gt;
The result is a comprehensive report, backed by more than 30 sources. You can download &lt;a href="https://static.philippdubach.com/pdf/Enterprise_AI_Strategy2026_philippdubach.pdf"&gt;the full report&lt;/a&gt;
and the &lt;a href="https://static.philippdubach.com/pdf/Enterprise_AI_Strategy2026_Deck_philippdubach.pdf"&gt;accompanying presentation&lt;/a&gt; for free.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Global AI spending hit $13.8 billion; a six-fold increase since late 2023. Yet 85% of AI projects never reach production. Only 26% of companies can translate pilots into outcomes. The gap between ambition and execution has become so predictable that Gartner now officially places generative AI in the &amp;ldquo;&lt;a href="https://www.snaplogic.com/lp/gartner-magic-quadrant-ipaas-2025?utm_source=GOOG&amp;amp;utm_medium=PS&amp;amp;utm_campaign=Content_AR_Gartner-iPaas-MQ-2025&amp;amp;_bt=778769312143&amp;amp;_bk=gartner%20ipaas%20magic%20quadrant&amp;amp;_utm_term=gartner%20ipaas%20magic%20quadrant&amp;amp;_bm=b&amp;amp;_bn=g&amp;amp;saf_src=google_g&amp;amp;saf_pt=&amp;amp;saf_kw=gartner%20ipaas%20magic%20quadrant&amp;amp;saf_dv=&amp;amp;saf_cam=23125873381&amp;amp;saf_grp=186359808906&amp;amp;saf_ad=778769312143&amp;amp;saf_acc=4847116121&amp;amp;saf_cam_tp=search&amp;amp;gad_source=1&amp;amp;gad_campaignid=23125873381&amp;amp;gbraid=0AAAAAD3MpSl-QdXUDpLVTClnJRS_g2cQ-&amp;amp;gclid=Cj0KCQiA1czLBhDhARIsAIEc7ugOJcXK_OoRuxk2au4MhOAaluMKdTwxFcl3uPdWSMcYdLd0JAogI7QaAvbeEALw_wcB"&gt;trough of disillusionment&lt;/a&gt;.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s an economic concept called &lt;a href="https://en.wikipedia.org/wiki/Jevons_paradox"&gt;Jevons paradox&lt;/a&gt; &lt;em&gt;(yes, I &lt;a href="https://notes.philippdubach.com/0005"&gt;referenced this before&lt;/a&gt;)&lt;/em&gt;. When efficiency improves for a resource, consumption increases, not decreases. Coal-efficient steam engines didn&amp;rsquo;t reduce coal usage, they made coal so useful that demand exploded. The same logic applies to organizational communication. Email was supposed to reduce meetings. Slack was supposed to reduce email. AI was supposed to reduce everything.&lt;/p&gt;
&lt;p&gt;Instead, the average employee now spends 57% of their workday on coordination: communicating, updating, aligning. Meetings alone cost the US economy $532 billion per year. This is the coordination layer, where organizations actually run, and where organizations quietly bleed.&lt;/p&gt;
&lt;p&gt;Three observations:&lt;/p&gt;
&lt;p&gt;(1) Only 26% of companies have the maturity to translate AI pilots into outcomes. The rest are layering AI on legacy workflows instead of redesigning them.&lt;br&gt;
(2) Language models bridge the gap between messy human communication and structured data. Transcripts to CRM fields. Teams using these tools report 30% higher win rates and 80% less manual work.&lt;br&gt;
(3) AI gains compound when shareable. A summary helps one person. A system that captures and distributes knowledge helps everyone downstream.&lt;/p&gt;
&lt;p&gt;The coordination layer isn&amp;rsquo;t glamorous. It&amp;rsquo;s transcripts, status updates, action items, CRM entries. It&amp;rsquo;s the administrative exhaust of getting anything done with other people. And it&amp;rsquo;s almost entirely composed of language. We have language models now. Models that extract structured data from messy transcripts, convert meeting notes into CRM fields with 99% accuracy. Sales teams using these tools report 30% higher win rates and 80% less manual work.&lt;/p&gt;
&lt;p&gt;Yet most enterprise AI strategies ignore this entirely. They&amp;rsquo;re focused on chatbots and demos for board presentations. Meanwhile, the language processing that constitutes the primary workload of any modern business remains stuck in the same recursive loops. The winners won&amp;rsquo;t be companies with great AI announcements. They&amp;rsquo;ll be the ones building daily habits early enough for the gains to stack.&lt;/p&gt;</description></item><item><title>Does AI mean the demand on labor goes up?</title><link>https://philippdubach.com/posts/does-ai-mean-the-demand-on-labor-goes-up/</link><pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/does-ai-mean-the-demand-on-labor-goes-up/</guid><description>&lt;p&gt;&lt;a href="https://x.com/TheStalwart/status/2011418760813629738"&gt;Joe Weisenthal&lt;/a&gt; from Bloomberg, this week:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;All my shower thoughts now are about designing efficient workflows for synthesizing, collecting, labeling and annotating data.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Same. Since I started building every app and tool I thought would make my life easier, my workflow more efficient, I haven&amp;rsquo;t stopped. Apparently &lt;a href="https://techcrunch.com/2026/01/16/the-rise-of-micro-apps-non-developers-are-writing-apps-instead-of-buying-them/"&gt;non-developers are now writing apps&lt;/a&gt; instead of buying them. This is the AI productivity paradox in miniature: the tools get better and we do more, not less.&lt;/p&gt;
&lt;p&gt;The assumed narrative is still AI displaces jobs, humans collect UBI, society figures out leisure. But the trajectory might be more work, not less. A &lt;a href="https://cepr.org/voxeu/columns/ais-power-grows-so-does-our-workday"&gt;recent NBER study&lt;/a&gt; found that workers in AI-exposed occupations now work roughly 3 extra hours per week—and leisure time has dropped by the same amount. &lt;a href="https://investors.upwork.com/news-releases/news-release-details/upwork-study-finds-employee-workloads-rising-despite-increased-c"&gt;Upwork&amp;rsquo;s research&lt;/a&gt; puts it bluntly: 77% of employees say AI tools have &lt;em&gt;added&lt;/em&gt; to their workload.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://en.wikipedia.org/wiki/Jevons_paradox"&gt;Jevons paradox&lt;/a&gt; is 160 years old: when James Watt made steam engines more efficient, coal consumption didn&amp;rsquo;t fall. It exploded. Efficiency made coal useful in new ways. Satya Nadella &lt;a href="https://www.npr.org/sections/planet-money/2025/02/04/g-s1-46018/ai-deepseek-economics-jevons-paradox"&gt;referenced this for AI&lt;/a&gt; after DeepSeek rattled the markets. Erik Brynjolfsson argues it applies to AI-augmented occupations—coders, radiologists, translators. Make something more efficient and you find more things to do with it.&lt;/p&gt;
&lt;p&gt;When I can build an app in a weekend that used to take months, I don&amp;rsquo;t build one. I build six. When I can write a report in an hour, I write five. The friction that once protected us from infinite expectations evaporates. This is the Jevons paradox applied not just to markets or coal, but to our own time and cognitive capacity—a kind of psychological rebound effect where internal expectations outrun what&amp;rsquo;s actually sustainable.&lt;/p&gt;
&lt;p&gt;Keynes predicted a &lt;a href="http://www.econ.yale.edu/smith/econ116a/keynes1.pdf"&gt;15-hour work week&lt;/a&gt; by now. We got the productivity gains. We work longer hours than ever. Only &lt;a href="https://hellofuture.orange.com/en/the-ai-productivity-paradox-the-new-tech-may-be-eating-into-your-leisure-time/"&gt;21% of employees&lt;/a&gt; actually use the time AI saves them for personal life. The rest reinvest it right back into work. When capability expands, so does the definition of &amp;ldquo;enough.&amp;rdquo; The bar rises.&lt;/p&gt;
&lt;p&gt;If AI makes me 10x more productive, that&amp;rsquo;s not 10x more free time. That&amp;rsquo;s 10x more I &lt;em&gt;could&lt;/em&gt; be doing. In a competitive environment—founding, climbing, anything with stakes—someone who uses that 10x while I rest will outrun me. The fear was displacement. The reality might be inescapability.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Parkinson%27s_law#First_meaning"&gt;Parkinson&amp;rsquo;s Law&lt;/a&gt;: work expands to fill time available. The AI corollary: work expands to fill capabilities available. More capability means more possibility—and more obligation. We should know where this points.&lt;/p&gt;</description></item><item><title>Social Media Success Prediction: BERT Models for Post Titles</title><link>https://philippdubach.com/posts/social-media-success-prediction-bert-models-for-post-titles/</link><pubDate>Sat, 10 Jan 2026 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/social-media-success-prediction-bert-models-for-post-titles/</guid><description>&lt;p&gt;Last week I published a &lt;a href="https://philippdubach.com/standalone/hn-sentiment/"&gt;Hacker News title sentiment analysis&lt;/a&gt; based on the &lt;a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=5910263"&gt;Attention Dynamics in Online Communities&lt;/a&gt; paper I have been working on. The &lt;a href="https://news.ycombinator.com/item?id=46512881"&gt;discussion on Hacker News&lt;/a&gt; raised the obvious question: can you actually predict what will do well here?&lt;figure class="post-figure" style="width: 70%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-https:--static-philippdubach-com-hn_post_frontpage2-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/https://static.philippdubach.com/hn_post_frontpage2.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/https://static.philippdubach.com/hn_post_frontpage2.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/https://static.philippdubach.com/hn_post_frontpage2.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/https://static.philippdubach.com/hn_post_frontpage2.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/https://static.philippdubach.com/hn_post_frontpage2.png 1200w"
sizes="70vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/https://static.philippdubach.com/hn_post_frontpage2.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/https://static.philippdubach.com/hn_post_frontpage2.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/https://static.philippdubach.com/hn_post_frontpage2.png 1440w"
sizes="70vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/https://static.philippdubach.com/hn_post_frontpage2.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/https://static.philippdubach.com/hn_post_frontpage2.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/https://static.philippdubach.com/hn_post_frontpage2.png 2000w"
sizes="70vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/https://static.philippdubach.com/hn_post_frontpage2.png"
alt="Hacker News Frontpage"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-https:--static-philippdubach-com-hn_post_frontpage2-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/https://static.philippdubach.com/hn_post_frontpage2.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Hacker News Frontpage" decoding="async"&gt;
&lt;/dialog&gt;
The honest answer is: partially. Timing matters. News cycles matter. Who submits matters. Weekend versus Monday morning matters. Most of these factors aren&amp;rsquo;t in the title. But titles aren&amp;rsquo;t nothing either. &amp;ldquo;Show HN&amp;rdquo; signals something. So does phrasing, length, and topic selection. The question becomes: how much signal can you extract from 80 characters?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://news.ycombinator.com/news"&gt;Hacker News&lt;/a&gt; (HN) is a social news website focusing on computer science and entrepreneurship. It is run by the investment fund and startup incubator &lt;a href="https://www.ycombinator.com"&gt;Y Combinator&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This isn&amp;rsquo;t new territory. &lt;a href="https://minimaxir.com/2017/06/reddit-deep-learning/"&gt;Max Woolf built a Reddit submission predictor&lt;/a&gt; back in 2017, and &lt;a href="https://ontology2.com/essays/ClassifyingHackerNewsArticles/"&gt;ontology2 trained an HN classifier&lt;/a&gt; using logistic regression on title words. Both found similar ceilings; around 0.76 AUC with classical approaches. I wanted to see what modern transformers could add.&lt;/p&gt;
&lt;p&gt;The baseline was DistilBERT, fine-tuned on 90,000 HN posts. ROC AUC of 0.654, trained in about 20 minutes on a T4 GPU. Not bad for something that only sees titles. Then RoBERTa with label smoothing pushed it to 0.692. Progress felt easy.&lt;figure class="post-figure" style="width: 70%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-03_roc_curve-png-2" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/03_roc_curve.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/03_roc_curve.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/03_roc_curve.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/03_roc_curve.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/03_roc_curve.png 1200w"
sizes="70vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/03_roc_curve.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/03_roc_curve.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/03_roc_curve.png 1440w"
sizes="70vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/03_roc_curve.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/03_roc_curve.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/03_roc_curve.png 2000w"
sizes="70vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/03_roc_curve.png"
alt="ROC curve comparing model versions"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-03_roc_curve-png-2" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/03_roc_curve.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="ROC curve comparing model versions" decoding="async"&gt;
&lt;/dialog&gt;
What if sentence embeddings captured something classification heads missed? I built an ensemble: &lt;a href="https://www.sbert.net/"&gt;SBERT&lt;/a&gt; for semantic features, RoBERTa for discrimination, weighted average at the end. The validation AUC jumped to 0.714.&lt;/p&gt;
&lt;p&gt;The problem was hiding in the train/test split. I&amp;rsquo;d used random sampling. HN has strong temporal correlations: topics cluster, writing styles evolve, news cycles create duplicates. A random split let the model see the future. SBERT&amp;rsquo;s semantic embeddings matched near-duplicate posts across the split perfectly.&lt;/p&gt;
&lt;p&gt;When I switched to a strict temporal split, training on 2022-early 2024 and testing on late 2024 onward, the ensemble dropped to 0.693. More revealing: the optimal SBERT weight went from 0.35 to 0.10. SBERT was contributing almost nothing. The model had memorized temporal patterns, not learned to predict.&lt;figure class="post-figure" style="width: 70%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-02_calibration-png-3" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/02_calibration.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/02_calibration.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/02_calibration.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/02_calibration.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/02_calibration.png 1200w"
sizes="70vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/02_calibration.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/02_calibration.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/02_calibration.png 1440w"
sizes="70vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/02_calibration.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/02_calibration.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/02_calibration.png 2000w"
sizes="70vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/02_calibration.png"
alt="Calibration plot showing predicted vs actual probabilities"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-02_calibration-png-3" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/02_calibration.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Calibration plot showing predicted vs actual probabilities" decoding="async"&gt;
&lt;/dialog&gt;
I kept RoBERTa, added more regularization, dropped from 0.1 to 0.2 dropout, weight decay from 0.01 to 0.05, froze the lower six transformer layers. The model got worse at fitting training data. Train AUC dropped from 0.803 to 0.727.&lt;/p&gt;
&lt;p&gt;But the train-test gap collapsed from 0.109 to 0.042. That&amp;rsquo;s a 61% reduction in overfitting. Test AUC of 0.685 versus the ensemble&amp;rsquo;s 0.693, a difference that vanishes once you account for confidence intervals. And now inference runs on a single model, half the latency, no SBERT dependency, 500MB instead of 900MB.&lt;figure class="post-figure" style="width: 70%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-table_version_comparison-png-4" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/table_version_comparison.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/table_version_comparison.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/table_version_comparison.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/table_version_comparison.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table_version_comparison.png 1200w"
sizes="70vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/table_version_comparison.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/table_version_comparison.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/table_version_comparison.png 1440w"
sizes="70vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table_version_comparison.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/table_version_comparison.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/table_version_comparison.png 2000w"
sizes="70vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table_version_comparison.png"
alt="Model version comparison showing evolution from V1 to V7"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-table_version_comparison-png-4" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/table_version_comparison.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Model version comparison showing evolution from V1 to V7" decoding="async"&gt;
&lt;/dialog&gt;
&lt;figure class="post-figure" style="width: 70%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-06_score_by_category-png-5" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/06_score_by_category.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/06_score_by_category.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/06_score_by_category.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/06_score_by_category.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/06_score_by_category.png 1200w"
sizes="70vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/06_score_by_category.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/06_score_by_category.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/06_score_by_category.png 1440w"
sizes="70vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/06_score_by_category.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/06_score_by_category.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/06_score_by_category.png 2000w"
sizes="70vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/06_score_by_category.png"
alt="Prediction scores by content category"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-06_score_by_category-png-5" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/06_score_by_category.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Prediction scores by content category" decoding="async"&gt;
&lt;/dialog&gt;
The other lesson was calibration. A model that says 0.8 probability should mean &amp;ldquo;70% of posts I give this score actually hit 100 points.&amp;rdquo; Neural networks trained on cross-entropy don&amp;rsquo;t do this naturally. They&amp;rsquo;re overconfident. I used &lt;a href="https://scikit-learn.org/stable/modules/isotonic.html"&gt;isotonic regression&lt;/a&gt; on the validation set to fix the mapping. Expected calibration error (ECE) measures this gap:&lt;/p&gt;
$$ECE = \sum_{b=1}^{B} \frac{n_b}{N} \left| \text{acc}(b) - \text{conf}(b) \right|$$&lt;p&gt;where you bin predictions by confidence, then measure how far off the actual accuracy is from the predicted confidence in each bin. ECE went from 0.089 to 0.043. Now when the model says 0.4, it&amp;rsquo;s telling the truth.&lt;/p&gt;
&lt;p&gt;In practice, the model provides meaningful lift. If you only look at the top 10% of predictions by score, 62% of them are actual hits, roughly 1.9x better than random selection:&lt;figure class="post-figure" style="width: 50%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-table_lift_analysis-png-6" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/table_lift_analysis.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/table_lift_analysis.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/table_lift_analysis.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/table_lift_analysis.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table_lift_analysis.png 1200w"
sizes="50vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/table_lift_analysis.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/table_lift_analysis.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/table_lift_analysis.png 1440w"
sizes="50vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table_lift_analysis.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/table_lift_analysis.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/table_lift_analysis.png 2000w"
sizes="50vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table_lift_analysis.png"
alt="Lift analysis showing precision at different thresholds"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-table_lift_analysis-png-6" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/table_lift_analysis.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Lift analysis showing precision at different thresholds" decoding="async"&gt;
&lt;/dialog&gt;
&lt;figure class="post-figure" style="width: 70%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-08_calibration_error-png-7" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/08_calibration_error.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/08_calibration_error.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/08_calibration_error.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/08_calibration_error.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/08_calibration_error.png 1200w"
sizes="70vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/08_calibration_error.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/08_calibration_error.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/08_calibration_error.png 1440w"
sizes="70vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/08_calibration_error.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/08_calibration_error.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/08_calibration_error.png 2000w"
sizes="70vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/08_calibration_error.png"
alt="Calibration error distribution"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-08_calibration_error-png-7" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/08_calibration_error.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Calibration error distribution" decoding="async"&gt;
&lt;/dialog&gt;
About training speed: I used the &lt;a href="https://www.nvidia.com/en-us/data-center/h100/"&gt;NVIDIA H100 GPU&lt;/a&gt;, which runs around 18x more expensive than the T4 per hour on hosted (Google Colab) runtimes. A sensible middle ground would be an A100 (40 or 80GB VRAM) or L4, training 3-5x faster than T4, maybe 5-7 minutes instead of 20-30. But watching epochs fly by at ~130 iterations per second after coming from T4&amp;rsquo;s ~3 iterations per second was a different experience. &lt;figure class="post-figure" style="width: 70%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-colab-training-hn-png-8" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/colab-training-hn.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/colab-training-hn.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/colab-training-hn.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/colab-training-hn.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/colab-training-hn.png 1200w"
sizes="70vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/colab-training-hn.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/colab-training-hn.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/colab-training-hn.png 1440w"
sizes="70vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/colab-training-hn.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/colab-training-hn.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/colab-training-hn.png 2000w"
sizes="70vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/colab-training-hn.png"
alt="Colab notebook showing H100 training at 130 it/s"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-colab-training-hn-png-8" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/colab-training-hn.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Colab notebook showing H100 training at 130 it/s" decoding="async"&gt;
&lt;/dialog&gt;
The model learned some intuitive patterns. &amp;ldquo;Show HN&amp;rdquo; titles score higher. Deep technical dives do well. Generic news aggregation doesn&amp;rsquo;t. Titles between 40-80 characters perform better than very short or very long ones. Some of this probably reflects real engagement patterns. Some of it is noise the model hasn&amp;rsquo;t been sufficiently regularized to ignore.&lt;figure class="post-figure" style="width: 70%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-10_title_length_performance-png-9" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/10_title_length_performance.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/10_title_length_performance.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/10_title_length_performance.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/10_title_length_performance.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/10_title_length_performance.png 1200w"
sizes="70vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/10_title_length_performance.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/10_title_length_performance.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/10_title_length_performance.png 1440w"
sizes="70vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/10_title_length_performance.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/10_title_length_performance.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/10_title_length_performance.png 2000w"
sizes="70vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/10_title_length_performance.png"
alt="Model performance by title length"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-10_title_length_performance-png-9" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/10_title_length_performance.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Model performance by title length" decoding="async"&gt;
&lt;/dialog&gt;
&lt;/p&gt;
&lt;p&gt;Running a few titles through the model shows what it picks up on:&lt;figure class="post-figure" style="width: 70%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-table_title_workshop-png-10" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/table_title_workshop.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/table_title_workshop.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/table_title_workshop.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/table_title_workshop.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table_title_workshop.png 1200w"
sizes="70vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/table_title_workshop.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/table_title_workshop.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/table_title_workshop.png 1440w"
sizes="70vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table_title_workshop.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/table_title_workshop.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/table_title_workshop.png 2000w"
sizes="70vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/table_title_workshop.png"
alt="Title workshop showing model predictions for different phrasings"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-table_title_workshop-png-10" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/table_title_workshop.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Title workshop showing model predictions for different phrasings" decoding="async"&gt;
&lt;/dialog&gt;
Vague claims score low. Specificity helps. First-person &amp;ldquo;I built&amp;rdquo; framing does well, which matches what actually gets upvoted. The model isn&amp;rsquo;t learning to game HN; it&amp;rsquo;s learning what HN already rewards.&lt;/p&gt;
&lt;p&gt;The model now runs, scoring articles in an &lt;a href="https://github.com/philippdubach/rss-reader"&gt;RSS reader pipeline&lt;/a&gt; I built. Does it help? Mostly. I still click on things marked low probability. But the high-confidence predictions are usually right. It&amp;rsquo;s a filter, not an oracle.&lt;figure class="post-figure" style="width: 70%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-dashboard-hn-scoring-png-11" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/dashboard-hn-scoring.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/dashboard-hn-scoring.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/dashboard-hn-scoring.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/dashboard-hn-scoring.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/dashboard-hn-scoring.png 1200w"
sizes="70vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/dashboard-hn-scoring.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/dashboard-hn-scoring.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/dashboard-hn-scoring.png 1440w"
sizes="70vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/dashboard-hn-scoring.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/dashboard-hn-scoring.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/dashboard-hn-scoring.png 2000w"
sizes="70vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/dashboard-hn-scoring.png"
alt="RSS reader dashboard showing HN prediction scores"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-dashboard-hn-scoring-png-11" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/dashboard-hn-scoring.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="RSS reader dashboard showing HN prediction scores" decoding="async"&gt;
&lt;/dialog&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a href="https://huggingface.co/philippdubach/hn-success-predictor"&gt;Model on HuggingFace&lt;/a&gt; — Download the weights and run inference locally
&lt;br&gt;
&lt;a href="https://github.com/philippdubach/rss-reader"&gt;RSS Reader Pipeline&lt;/a&gt; — Full scoring pipeline with feed aggregation
&lt;br&gt;
&lt;a href="https://huggingface.co/philippdubach/hn-success-predictor/blob/main/training.ipynb"&gt;Training Notebook&lt;/a&gt; — Colab-ready notebook with the complete training code&lt;/p&gt;
&lt;p&gt;On a side note: The patterns here aren&amp;rsquo;t specific to Hacker News or online communities. Temporal leakage shows up whenever you&amp;rsquo;re predicting something that evolves over time: credit defaults, client churn, market regimes. The fix is the same: validate on future data, not random holdouts. Calibration matters anywhere probabilities drive decisions. A loan approval model that says &amp;ldquo;70% chance of repayment&amp;rdquo; needs that number to mean something. Overfitting to training data is how banks end up with models that look great in backtests and fail in production.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve built &lt;a href="https://philippdubach.com/projects/"&gt;similar systems for other domains&lt;/a&gt;: sentiment-based trading signals, glycemic response prediction, portfolio optimization. The ML fundamentals transfer. What changes is the domain knowledge needed to avoid the obvious mistakes, like training on data that wouldn&amp;rsquo;t have been available at prediction time, or trusting metrics that don&amp;rsquo;t reflect real-world performance.&lt;/p&gt;</description></item><item><title>Beyond Vector Search: Why LLMs Need Episodic Memory</title><link>https://philippdubach.com/posts/beyond-vector-search-why-llms-need-episodic-memory/</link><pubDate>Fri, 09 Jan 2026 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/beyond-vector-search-why-llms-need-episodic-memory/</guid><description>&lt;p&gt;You&amp;rsquo;ve seen this message before. Copilot pausing; In long sessions, it happens often enough that I started wondering what&amp;rsquo;s actually going on in there. Hence this post.&lt;figure class="post-figure" style="width: 40%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-Summarizing_conversation_history-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/Summarizing_conversation_history.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/Summarizing_conversation_history.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/Summarizing_conversation_history.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/Summarizing_conversation_history.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/Summarizing_conversation_history.png 1200w"
sizes="40vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/Summarizing_conversation_history.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/Summarizing_conversation_history.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/Summarizing_conversation_history.png 1440w"
sizes="40vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/Summarizing_conversation_history.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/Summarizing_conversation_history.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/Summarizing_conversation_history.png 2000w"
sizes="40vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/Summarizing_conversation_history.png"
alt="Hierarchical memory architecture for LLM applications"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-Summarizing_conversation_history-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/Summarizing_conversation_history.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Hierarchical memory architecture for LLM applications" decoding="async"&gt;
&lt;/dialog&gt;
The short answer: context windows grew larger. &lt;a href="https://platform.claude.com/docs/en/build-with-claude/context-windows"&gt;Claude handles 200K tokens&lt;/a&gt;, &lt;a href="https://gemini.google/overview/long-context/"&gt;Gemini claims a million&lt;/a&gt;. But bigger windows aren&amp;rsquo;t memory. They&amp;rsquo;re a larger napkin you throw away when dinner&amp;rsquo;s over.&lt;/p&gt;
&lt;p&gt;For som time I was convinced that vector databases would solve this. Embed everything, store it geometrically, retrieve by similarity. Elegant in theory. Try encoding &amp;ldquo;first we did X, then Y happened, which caused Z.&amp;rdquo; Sequences don&amp;rsquo;t live naturally in vector space. Neither do facts that change over time. Your database might confidently tell you Bonn is Germany&amp;rsquo;s capital if you fed it the wrong decade of documents.&lt;/p&gt;
&lt;p&gt;What caught my attention is &lt;a href="https://openreview.net/forum?id=BI2int5SAC"&gt;EM-LLM&lt;/a&gt;. The approach is basically &amp;ldquo;what if we just copied how brains do it?&amp;rdquo; They segment conversation into episodes using surprise detection; when something unexpected happens, that&amp;rsquo;s a boundary. Retrieval pulls not just similar content but temporally adjacent content too. You don&amp;rsquo;t just remember what you&amp;rsquo;re looking for. You remember what happened next. Their event boundaries actually correlate with where humans perceive breaks in experience. Either a coincidence or we&amp;rsquo;re onto something.&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-llm-memory-architecture2-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/llm-memory-architecture2.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/llm-memory-architecture2.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/llm-memory-architecture2.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/llm-memory-architecture2.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/llm-memory-architecture2.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/llm-memory-architecture2.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/llm-memory-architecture2.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/llm-memory-architecture2.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/llm-memory-architecture2.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/llm-memory-architecture2.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/llm-memory-architecture2.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/llm-memory-architecture2.png"
alt="Hierarchical memory architecture for LLM applications"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-llm-memory-architecture2-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/llm-memory-architecture2.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Hierarchical memory architecture for LLM applications" decoding="async"&gt;
&lt;/dialog&gt;
Knowledge graphs are the other path. &lt;a href="https://github.com/saxenauts/persona"&gt;Persona Graph&lt;/a&gt; treats memory as user-owned, with concepts as nodes. The connection between &amp;ldquo;volatility surface&amp;rdquo; and &amp;ldquo;Lightning McQueen&amp;rdquo; exists in my head (for some reason) but probably not yours. A flat embedding can&amp;rsquo;t capture that your graph is different from mine. &lt;a href="https://github.com/HawkinsRAG/HawkinsDB"&gt;HawkinsDB&lt;/a&gt; pulls from Thousand Brains theory. &lt;a href="https://docs.letta.com/"&gt;Letta&lt;/a&gt; just ships, production-ready blocks you can use today. &lt;a href="https://github.com/CaviraOSS/OpenMemory"&gt;OpenMemory&lt;/a&gt; goes further, separating emotional memory from procedural from episodic, with actual decay curves instead of hard timeouts. &lt;a href="https://mem0.ai/blog/llm-chat-history-summarization"&gt;Mem0&lt;/a&gt; reports 80-90% token cost reduction while quality goes up 26%. I can&amp;rsquo;t validate the claim, but if it holds, that&amp;rsquo;s more than optimization.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/FYYFU/HeadKV/"&gt;HeadKV&lt;/a&gt; figured out that attention heads aren&amp;rsquo;t created equal: some matter for memory, most don&amp;rsquo;t. Throw away 98.5% of your key-value cache, keep the important heads, lose almost nothing. &lt;a href="https://arxiv.org/abs/2410.13346"&gt;Sakana AI&lt;/a&gt; went weirder: tiny neural networks that decide per-token whether to remember or forget, evolved rather than trained. Sounds like it shouldn&amp;rsquo;t work. Apparently works great.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s what I keep coming back to: in any mature system, most of the graph will be memories of memories. You ask me my favorite restaurants, I think about it, answer, and now &amp;ldquo;that list I made&amp;rdquo; becomes its own retrievable thing. Next time someone asks about dinner plans, I don&amp;rsquo;t re-derive preferences from first principles. I remember what I concluded last time. Psychologists say &lt;a href="https://www.taylorfrancis.com/books/mono/10.4324/9781315755854/working-memory-pierre-barrouillet-val%C3%A9rie-camos"&gt;this is how human recall actually works&lt;/a&gt;; you&amp;rsquo;re not accessing the original, you&amp;rsquo;re accessing the last retrieval. Gets a little distorted each time.&lt;/p&gt;
&lt;p&gt;Should the model control its own memory? Give it a &amp;ldquo;remember this&amp;rdquo; tool? I don&amp;rsquo;t think so, not yet. &lt;a href="https://arxiv.org/abs/2505.02151"&gt;These things are overconfident&lt;/a&gt;. Maybe that changes. For now, memory probably needs to happen around the model, not through it. Eventually some learned architecture will make all this scaffolding obsolete. Train memory into the weights directly. I have no idea what that looks like. Sparse mixture of experts with overnight updates? Some forgotten recurrent trick? Right now it&amp;rsquo;s all duct tape and cognitive science papers.&lt;aside class="inline-newsletter" aria-label="Newsletter signup"&gt;
&lt;div class="inline-newsletter-content"&gt;
&lt;p class="inline-newsletter-headline"&gt;Enjoy this writing? Get new posts, projects, and articles delivered monthly.&lt;/p&gt;
&lt;form id="inline-newsletter-3-form" class="inline-newsletter-form"&gt;
&lt;label for="inline-newsletter-3-email" class="visually-hidden"&gt;Email address&lt;/label&gt;
&lt;input
type="email"
id="inline-newsletter-3-email"
name="email"
placeholder="your@email.com"
required
class="inline-newsletter-input"
aria-label="Email address"
/&gt;
&lt;button type="submit" class="inline-newsletter-button"&gt;Sign Up&lt;/button&gt;
&lt;/form&gt;
&lt;p id="inline-newsletter-3-privacy" class="inline-newsletter-privacy"&gt;&lt;a href="https://philippdubach.com/posts/building-a-no-tracking-newsletter-from-markdown-to-distribution/"&gt;No tracking&lt;/a&gt;. Unsubscribe anytime.&lt;/p&gt;
&lt;div id="inline-newsletter-3-message" class="inline-newsletter-message" style="display: none;"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/aside&gt;
&lt;script&gt;
(function() {
var formId = 'inline-newsletter-3-form';
var messageId = 'inline-newsletter-3-message';
var emailId = 'inline-newsletter-3-email';
var privacyId = 'inline-newsletter-3-privacy';
function init() {
var form = document.getElementById(formId);
var messageDiv = document.getElementById(messageId);
var emailInput = document.getElementById(emailId);
var privacyDiv = document.getElementById(privacyId);
if (privacyDiv &amp;&amp; !privacyDiv.dataset.countLoaded) {
privacyDiv.dataset.countLoaded = 'true';
fetch('https://newsletter-api.philippd.workers.dev/api/subscriber-count')
.then(function(r) { return r.json(); })
.then(function(data) {
if (data.display) {
var countText = document.createTextNode('Join ' + data.display + ' readers. ');
privacyDiv.insertBefore(countText, privacyDiv.firstChild);
}
})
.catch(function() { });
}
if (!form) return;
form.addEventListener('submit', function(e) {
e.preventDefault();
var email = emailInput.value.trim();
if (!email) return;
var emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!emailRegex.test(email)) {
showMessage('Please enter a valid email address.', 'error');
return;
}
var submitButton = form.querySelector('button[type="submit"]');
submitButton.disabled = true;
submitButton.textContent = 'Subscribing...';
fetch('https://newsletter-api.philippd.workers.dev/api/subscribe', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email: email })
})
.then(function(response) { return response.json(); })
.then(function(data) {
if (data.success) {
form.style.display = 'none';
document.querySelector('#' + formId).closest('.inline-newsletter').querySelector('.inline-newsletter-privacy').style.display = 'none';
showMessage('Thanks for subscribing! You\'ll receive the next newsletter in your inbox.', 'success');
} else {
showMessage(data.error || 'Something went wrong. Please try again.', 'error');
submitButton.disabled = false;
submitButton.textContent = 'Sign Up';
}
})
.catch(function() {
showMessage('Something went wrong. Please try again later.', 'error');
submitButton.disabled = false;
submitButton.textContent = 'Sign Up';
});
});
function showMessage(text, type) {
messageDiv.textContent = text;
messageDiv.className = 'inline-newsletter-message inline-newsletter-message-' + type;
messageDiv.style.display = 'block';
}
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}
})();
&lt;/script&gt;
&lt;/p&gt;</description></item><item><title>65% of Hacker News Posts Have Negative Sentiment, and They Outperform</title><link>https://philippdubach.com/posts/65-of-hacker-news-posts-have-negative-sentiment-and-they-outperform/</link><pubDate>Wed, 07 Jan 2026 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/65-of-hacker-news-posts-have-negative-sentiment-and-they-outperform/</guid><description>&lt;h2 id="negativity-bias-and-engagement-on-hacker-news"&gt;Negativity Bias and Engagement on Hacker News&lt;/h2&gt;
&lt;p&gt;This Hacker News sentiment analysis began with a simple observation: posts with negative sentiment average 35.6 points on &lt;a href="https://news.ycombinator.com"&gt;Hacker News&lt;/a&gt;. The overall average is 28 points. That&amp;rsquo;s a 27% performance premium for negativity.&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-hn-sentiment-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/hn-sentiment.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/hn-sentiment.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/hn-sentiment.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/hn-sentiment.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/hn-sentiment.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/hn-sentiment.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/hn-sentiment.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/hn-sentiment.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/hn-sentiment.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/hn-sentiment.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/hn-sentiment.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/hn-sentiment.png"
alt="Hacker News sentiment analysis distribution across 32,000 posts showing negative skew"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-hn-sentiment-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/hn-sentiment.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Hacker News sentiment analysis distribution across 32,000 posts showing negative skew" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;This finding comes from an empirical study I&amp;rsquo;ve been running on HN attention dynamics, covering decay curves, preferential attachment, survival probability, and early-engagement prediction. The preprint is &lt;a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=5910263"&gt;available on SSRN&lt;/a&gt;. I already had a gut feeling. Across 32,000 posts and 340,000 comments, nearly 65% register as negative. This might be a feature of my classifier being miscalibrated toward negativity; yet the pattern holds across six different models.&lt;/p&gt;
&lt;h2 id="six-model-sentiment-comparison-transformers-vs-llms"&gt;Six-Model Sentiment Comparison: Transformers vs LLMs&lt;/h2&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-sentiment_models_comparison_6models-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/sentiment_models_comparison_6models.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/sentiment_models_comparison_6models.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/sentiment_models_comparison_6models.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/sentiment_models_comparison_6models.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/sentiment_models_comparison_6models.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/sentiment_models_comparison_6models.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/sentiment_models_comparison_6models.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/sentiment_models_comparison_6models.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/sentiment_models_comparison_6models.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/sentiment_models_comparison_6models.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/sentiment_models_comparison_6models.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/sentiment_models_comparison_6models.png"
alt="Sentiment classification comparison across six NLP models: DistilBERT, BERT Multi, RoBERTa, Llama 3.1 8B, Mistral 3.1 24B, and Gemma 3 12B"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-sentiment_models_comparison_6models-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/sentiment_models_comparison_6models.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Sentiment classification comparison across six NLP models: DistilBERT, BERT Multi, RoBERTa, Llama 3.1 8B, Mistral 3.1 24B, and Gemma 3 12B" decoding="async"&gt;
&lt;/dialog&gt;
&lt;p&gt;I tested three transformer-based classifiers (DistilBERT, BERT Multi, RoBERTa) and three LLMs (Llama 3.1 8B, Mistral 3.1 24B, Gemma 3 12B). The distributions vary, but the negative skew persists across all of them (inverted scale for 2-6). The results I use in my dashboard are from DistilBERT because it runs efficiently in my Cloudflare-based pipeline.&lt;/p&gt;
&lt;p&gt;What counts as &amp;ldquo;negative&amp;rdquo; here? Criticism of technology, skepticism toward announcements, complaints about industry practices, frustration with APIs. The usual. It&amp;rsquo;s worth noting that technical critique reads differently than personal attacks; most HN negativity is substantive rather than toxic. But, does negativity cause engagement, or does controversial content attract both negative framing and attention? Probably some of both.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="hackerbook-dataset-cross-validation-with-22gb-of-hacker-news-data"&gt;HackerBook Dataset: Cross-Validation With 22GB of Hacker News Data&lt;/h2&gt;
&lt;p&gt;Related to this, I also saw &lt;a href="https://news.ycombinator.com/item?id=46435308"&gt;this Show HN&lt;/a&gt;: 22GB of Hacker News in SQLite, served via WASM shards. Downloaded the &lt;a href="https://github.com/DOSAYGO-STUDIO/HackerBook"&gt;HackerBook&lt;/a&gt; export and ran a subset of my paper&amp;rsquo;s analytics on it.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Caveat: HackerBook is a single static snapshot (no time-series data). Therefore I could not analyze lifecycle analysis, early-velocity prediction, or decay fitting. What can be computed: distributional statistics, inequality metrics, circadian patterns.&lt;/em&gt;&lt;/p&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-hackerbook_stats_table2-png-2" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/hackerbook_stats_table2.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/hackerbook_stats_table2.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/hackerbook_stats_table2.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/hackerbook_stats_table2.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/hackerbook_stats_table2.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/hackerbook_stats_table2.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/hackerbook_stats_table2.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/hackerbook_stats_table2.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/hackerbook_stats_table2.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/hackerbook_stats_table2.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/hackerbook_stats_table2.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/hackerbook_stats_table2.png"
alt="Summary statistics table for HackerBook Hacker News data sample"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-hackerbook_stats_table2-png-2" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/hackerbook_stats_table2.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Summary statistics table for HackerBook Hacker News data sample" decoding="async"&gt;
&lt;/dialog&gt;
&lt;h3 id="score-distribution-and-power-law-fit"&gt;Score Distribution and Power-Law Fit&lt;/h3&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-score_power_law_hackerbook2-png-3" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/score_power_law_hackerbook2.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/score_power_law_hackerbook2.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/score_power_law_hackerbook2.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/score_power_law_hackerbook2.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/score_power_law_hackerbook2.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/score_power_law_hackerbook2.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/score_power_law_hackerbook2.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/score_power_law_hackerbook2.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/score_power_law_hackerbook2.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/score_power_law_hackerbook2.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/score_power_law_hackerbook2.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/score_power_law_hackerbook2.png"
alt="Hacker News score distribution CCDF with power-law fit showing heavy-tailed engagement"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-score_power_law_hackerbook2-png-3" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/score_power_law_hackerbook2.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Hacker News score distribution CCDF with power-law fit showing heavy-tailed engagement" decoding="async"&gt;
&lt;/dialog&gt;
&lt;h3 id="attention-inequality-lorenz-curve-and-gini-coefficient"&gt;Attention Inequality: Lorenz Curve and Gini Coefficient&lt;/h3&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-attention_inequality_hackerbook2-png-4" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/attention_inequality_hackerbook2.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/attention_inequality_hackerbook2.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/attention_inequality_hackerbook2.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/attention_inequality_hackerbook2.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/attention_inequality_hackerbook2.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/attention_inequality_hackerbook2.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/attention_inequality_hackerbook2.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/attention_inequality_hackerbook2.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/attention_inequality_hackerbook2.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/attention_inequality_hackerbook2.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/attention_inequality_hackerbook2.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/attention_inequality_hackerbook2.png"
alt="Lorenz curve of Hacker News story scores measuring attention inequality with Gini coefficient"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-attention_inequality_hackerbook2-png-4" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/attention_inequality_hackerbook2.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Lorenz curve of Hacker News story scores measuring attention inequality with Gini coefficient" decoding="async"&gt;
&lt;/dialog&gt;
&lt;h3 id="circadian-posting-patterns"&gt;Circadian Posting Patterns&lt;/h3&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-circadian_patterns_hackerbook2-png-6" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/circadian_patterns_hackerbook2.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/circadian_patterns_hackerbook2.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/circadian_patterns_hackerbook2.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/circadian_patterns_hackerbook2.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/circadian_patterns_hackerbook2.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/circadian_patterns_hackerbook2.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/circadian_patterns_hackerbook2.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/circadian_patterns_hackerbook2.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/circadian_patterns_hackerbook2.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/circadian_patterns_hackerbook2.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/circadian_patterns_hackerbook2.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/circadian_patterns_hackerbook2.png"
alt="Hacker News circadian posting patterns in UTC showing volume versus mean score by hour"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-circadian_patterns_hackerbook2-png-6" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/circadian_patterns_hackerbook2.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Hacker News circadian posting patterns in UTC showing volume versus mean score by hour" decoding="async"&gt;
&lt;/dialog&gt;
&lt;h3 id="score-vs-comment-engagement"&gt;Score vs Comment Engagement&lt;/h3&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-score_vs_direct_comments_hackerbook2-png-7" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/score_vs_direct_comments_hackerbook2.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/score_vs_direct_comments_hackerbook2.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/score_vs_direct_comments_hackerbook2.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/score_vs_direct_comments_hackerbook2.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/score_vs_direct_comments_hackerbook2.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/score_vs_direct_comments_hackerbook2.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/score_vs_direct_comments_hackerbook2.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/score_vs_direct_comments_hackerbook2.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/score_vs_direct_comments_hackerbook2.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/score_vs_direct_comments_hackerbook2.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/score_vs_direct_comments_hackerbook2.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/score_vs_direct_comments_hackerbook2.png"
alt="Hacker News score versus direct comments log-log scatter plot"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-score_vs_direct_comments_hackerbook2-png-7" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/score_vs_direct_comments_hackerbook2.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Hacker News score versus direct comments log-log scatter plot" decoding="async"&gt;
&lt;/dialog&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-direct_comments_ccdf_hackerbook2-png-8" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/direct_comments_ccdf_hackerbook2.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/direct_comments_ccdf_hackerbook2.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/direct_comments_ccdf_hackerbook2.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/direct_comments_ccdf_hackerbook2.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/direct_comments_ccdf_hackerbook2.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/direct_comments_ccdf_hackerbook2.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/direct_comments_ccdf_hackerbook2.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/direct_comments_ccdf_hackerbook2.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/direct_comments_ccdf_hackerbook2.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/direct_comments_ccdf_hackerbook2.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/direct_comments_ccdf_hackerbook2.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/direct_comments_ccdf_hackerbook2.png"
alt="Direct comments distribution CCDF on Hacker News showing power-law tail"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-direct_comments_ccdf_hackerbook2-png-8" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/direct_comments_ccdf_hackerbook2.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Direct comments distribution CCDF on Hacker News showing power-law tail" decoding="async"&gt;
&lt;/dialog&gt;
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-mean_score_vs_direct_comments_binned_hackerbook2-png-9" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/mean_score_vs_direct_comments_binned_hackerbook2.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/mean_score_vs_direct_comments_binned_hackerbook2.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/mean_score_vs_direct_comments_binned_hackerbook2.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/mean_score_vs_direct_comments_binned_hackerbook2.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/mean_score_vs_direct_comments_binned_hackerbook2.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/mean_score_vs_direct_comments_binned_hackerbook2.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/mean_score_vs_direct_comments_binned_hackerbook2.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/mean_score_vs_direct_comments_binned_hackerbook2.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/mean_score_vs_direct_comments_binned_hackerbook2.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/mean_score_vs_direct_comments_binned_hackerbook2.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/mean_score_vs_direct_comments_binned_hackerbook2.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/mean_score_vs_direct_comments_binned_hackerbook2.png"
alt="Mean score versus direct comments on Hacker News binned in log-spaced buckets"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-mean_score_vs_direct_comments_binned_hackerbook2-png-9" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/mean_score_vs_direct_comments_binned_hackerbook2.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Mean score versus direct comments on Hacker News binned in log-spaced buckets" decoding="async"&gt;
&lt;/dialog&gt;</description></item><item><title>RSS Swipr: Find Blogs Like You Find Your Dates</title><link>https://philippdubach.com/posts/rss-swipr-find-blogs-like-you-find-your-dates/</link><pubDate>Mon, 05 Jan 2026 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/rss-swipr-find-blogs-like-you-find-your-dates/</guid><description>&lt;p&gt;&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-rss-tinder-demo2-gif-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/rss-tinder-demo2.gif 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/rss-tinder-demo2.gif 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/rss-tinder-demo2.gif 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/rss-tinder-demo2.gif 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/rss-tinder-demo2.gif 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/rss-tinder-demo2.gif 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/rss-tinder-demo2.gif 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/rss-tinder-demo2.gif 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/rss-tinder-demo2.gif 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/rss-tinder-demo2.gif 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/rss-tinder-demo2.gif 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/rss-tinder-demo2.gif"
alt="GIF with interactive demo of the RSS Tinder App"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-rss-tinder-demo2-gif-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/rss-tinder-demo2.gif"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="GIF with interactive demo of the RSS Tinder App" decoding="async"&gt;
&lt;/dialog&gt;
Algorithmic timelines are everywhere now. But I still prefer the control of RSS. Readers are good at aggregating content but bad at filtering it. What I wanted was something borrowed from dating apps: instead of an infinite list, give me cards. Swipe right to like, left to dislike. Then train a model to surface what I actually want to read. So I built &lt;em&gt;RSS Swipr&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The frontend is vanilla JavaScript—no React, no build steps, just DOM manipulation and CSS transitions. You drag a card, it follows your finger, and snaps away with a satisfying animation. Behind the scenes, the app tracks everything: votes (like/neutral/dislike), time spent viewing each card, and whether you actually opened the link. If I swipe right but don&amp;rsquo;t click through, that&amp;rsquo;s a signal. If I spend 0.3 seconds on a card before swiping left, that&amp;rsquo;s a signal too.&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-screenshot_feed_import1-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/screenshot_feed_import1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/screenshot_feed_import1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/screenshot_feed_import1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/screenshot_feed_import1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/screenshot_feed_import1.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/screenshot_feed_import1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/screenshot_feed_import1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/screenshot_feed_import1.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/screenshot_feed_import1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/screenshot_feed_import1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/screenshot_feed_import1.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/screenshot_feed_import1.png"
alt="Feed management interface showing 1084 imported RSS feeds with 9327 total entries"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-screenshot_feed_import1-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/screenshot_feed_import1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Feed management interface showing 1084 imported RSS feeds with 9327 total entries" decoding="async"&gt;
&lt;/dialog&gt;
Feed management happens through a simple CSV import. Paste a list of &lt;code&gt;name,url&lt;/code&gt; pairs, click refresh, and the fetcher pulls articles with proper HTTP caching (ETag/Last-Modified) to avoid hammering servers. You can use your own feed list or load a predefined list. Thanks to Manuel Moreale who created &lt;a href="https://blogroll.org/"&gt;blogroll&lt;/a&gt; I was able to get an OPML export and load all curated RSS feeds directly. Something similar works with &lt;a href="https://minifeed.net/global"&gt;minifeed&lt;/a&gt; or &lt;a href="https://kagi.com/api/v1/smallweb/feed"&gt;Kagi&amp;rsquo;s smallweb&lt;/a&gt;. Or you use one of the &lt;a href="https://hnrss.github.io"&gt;Hacker News RSS&lt;/a&gt; feeds. If that feels too adventurous, I created &lt;a href="https://rss-aggregator.philippd.workers.dev"&gt;curated feeds&lt;/a&gt; for the most popular HN bloggers.&lt;/p&gt;
&lt;p&gt;Building the model, I started with XGBoost and some hand-engineered features (title length, word count, time of day, feed source). Decent—around 66% ROC-AUC. It learned that I dislike short, clickbaity titles. But it didn&amp;rsquo;t understand context.&lt;/p&gt;
&lt;p&gt;The upgrade was MPNet (&lt;code&gt;all-mpnet-base-v2&lt;/code&gt; from sentence-transformers) to generate 768-dimensional embeddings for every article&amp;rsquo;s title and description. Combined with engineered features—feed preferences, temporal patterns, text statistics—this gets fed into a Hybrid Random Forest.&lt;/p&gt;
&lt;div class="code-block" data-lang="python"&gt;&lt;span class="code-lang" aria-hidden="true"&gt;python&lt;/span&gt;&lt;button type="button" class="code-copy" aria-label="Copy code to clipboard"&gt;
&lt;span class="code-copy-text"&gt;Copy&lt;/span&gt;
&lt;/button&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;predict_preference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# Generate semantic embeddings (768 dims)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;embeddings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mpnet&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# Extract behavioral + text features&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;features&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;feature_pipeline&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;article&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# Predict with Hybrid RF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;X&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hstack&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;embeddings&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;features&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;predict_proba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;X&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Training happens on Google Colab (free T4 GPU or even faster with H100 or A100 on a subscription). Upload your training CSV, run the notebook, download a &lt;code&gt;.pkl&lt;/code&gt; file.&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-screenshot_colab_head1-png-3" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/screenshot_colab_head1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/screenshot_colab_head1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/screenshot_colab_head1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/screenshot_colab_head1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/screenshot_colab_head1.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/screenshot_colab_head1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/screenshot_colab_head1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/screenshot_colab_head1.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/screenshot_colab_head1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/screenshot_colab_head1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/screenshot_colab_head1.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/screenshot_colab_head1.png"
alt="Google Colab notebook showing model training setup with GPU configuration"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-screenshot_colab_head1-png-3" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/screenshot_colab_head1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Google Colab notebook showing model training setup with GPU configuration" decoding="async"&gt;
&lt;/dialog&gt;
The notebook handles everything: installing sentence-transformers, downloading the feature engineering pipeline, checking GPU availability, and running 5-fold cross-validation.&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-screenshot_colab_results1-png-4" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/screenshot_colab_results1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/screenshot_colab_results1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/screenshot_colab_results1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/screenshot_colab_results1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/screenshot_colab_results1.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/screenshot_colab_results1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/screenshot_colab_results1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/screenshot_colab_results1.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/screenshot_colab_results1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/screenshot_colab_results1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/screenshot_colab_results1.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/screenshot_colab_results1.png"
alt="Training results showing ROC-AUC of 0.7537 across 5-fold cross-validation"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-screenshot_colab_results1-png-4" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/screenshot_colab_results1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Training results showing ROC-AUC of 0.7537 across 5-fold cross-validation" decoding="async"&gt;
&lt;/dialog&gt;
With ~1400 training samples, the model achieves &lt;em&gt;75.4% ROC-AUC (± 0.019 std)&lt;/em&gt;. Not state-of-the-art, but enough to noticeably improve my reading experience. The model now understands that I like systems programming and ML papers, but skip most crypto and generic startup advice.&lt;/p&gt;
&lt;p&gt;The problem with transformer models is latency. Generating MPNet embeddings takes ~1 second per article. In a swipe interface, that lag is unbearable. The next best thing is a preload queue. While you&amp;rsquo;re reading the current card, the backend is scoring and fetching the next 3-5 articles in the background. By the time you swipe, the next card is already waiting.&lt;/p&gt;
&lt;div class="code-block" data-lang="javascript"&gt;&lt;span class="code-lang" aria-hidden="true"&gt;javascript&lt;/span&gt;&lt;button type="button" class="code-copy" aria-label="Copy code to clipboard"&gt;
&lt;span class="code-copy-text"&gt;Copy&lt;/span&gt;
&lt;/button&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;async&lt;/span&gt; &lt;span class="nx"&gt;loadNextBatch&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;excludeIds&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cardQueue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sb"&gt;`/api/posts/batch?count=3&amp;amp;exclude=&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;excludeIds&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cardQueue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(...&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Article selection uses Thompson Sampling: 80% of the time it shows what the model thinks you&amp;rsquo;ll like (exploit), 20% it throws in something unexpected (explore). This prevents the filter bubble problem and lets the model discover if your tastes have changed.&lt;/p&gt;
&lt;p&gt;The whole system is designed as a closed loop:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Swipe&lt;/strong&gt; → votes get stored in SQLite&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Export&lt;/strong&gt; → download training CSV with votes + engagement data&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Train&lt;/strong&gt; → run Colab notebook, get new model&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Upload&lt;/strong&gt; → drag-drop the &lt;code&gt;.pkl&lt;/code&gt; file back into the app&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-screenshot_export1-png-6" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/screenshot_export1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/screenshot_export1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/screenshot_export1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/screenshot_export1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/screenshot_export1.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/screenshot_export1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/screenshot_export1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/screenshot_export1.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/screenshot_export1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/screenshot_export1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/screenshot_export1.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/screenshot_export1.png"
alt="Export interface showing 1421 votes with breakdown: 583 likes, 193 neutral, 645 dislikes"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-screenshot_export1-png-6" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/screenshot_export1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Export interface showing 1421 votes with breakdown: 583 likes, 193 neutral, 645 dislikes" decoding="async"&gt;
&lt;/dialog&gt;
The export includes everything the model needs: article text, feed metadata, your votes, link opens, and time spent. You can also &lt;strong&gt;import&lt;/strong&gt; a previous training CSV to restore your voting history on a fresh install—useful if you want to clone the repo on a new machine without losing your data.&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-screenshot_model_selection1-png-7" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/screenshot_model_selection1.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/screenshot_model_selection1.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/screenshot_model_selection1.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/screenshot_model_selection1.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/screenshot_model_selection1.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/screenshot_model_selection1.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/screenshot_model_selection1.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/screenshot_model_selection1.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/screenshot_model_selection1.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/screenshot_model_selection1.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/screenshot_model_selection1.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/screenshot_model_selection1.png"
alt="Model management interface showing active hybrid_rf model with ROC-AUC 0.7537"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-screenshot_model_selection1-png-7" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/screenshot_model_selection1.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Model management interface showing active hybrid_rf model with ROC-AUC 0.7537" decoding="async"&gt;
&lt;/dialog&gt;
&lt;/p&gt;
&lt;p&gt;Uploaded models show their ROC-AUC score so you can compare performance across training runs. Activate whichever one works best.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Backend&lt;/strong&gt;: Python, Flask, SQLite
&lt;strong&gt;Frontend&lt;/strong&gt;: Vanilla JS, CSS variables
&lt;strong&gt;ML&lt;/strong&gt;: scikit-learn, XGBoost, sentence-transformers (MPNet)
&lt;strong&gt;Training&lt;/strong&gt;: Google Colab (free GPU tier)&lt;/p&gt;
&lt;p&gt;Total infrastructure cost: zero. Everything runs locally. No accounts, no cloud dependencies, no tracking.&lt;/p&gt;
&lt;div class="code-block" data-lang="bash"&gt;&lt;span class="code-lang" aria-hidden="true"&gt;bash&lt;/span&gt;&lt;button type="button" class="code-copy" aria-label="Copy code to clipboard"&gt;
&lt;span class="code-copy-text"&gt;Copy&lt;/span&gt;
&lt;/button&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/philippdubach/rss-swipr.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; rss-swipr
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python -m venv .venv &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;source&lt;/span&gt; .venv/bin/activate
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip install -r requirements.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python app.py&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The &lt;a href="https://github.com/philippdubach/rss-swipr"&gt;full source&lt;/a&gt; and &lt;a href="https://colab.research.google.com/drive/1XjnAuwF3naPElKH9yZ3UEdslzN7qAUrQ?usp=sharing"&gt;Colab notebook&lt;/a&gt; are available on GitHub.&lt;/p&gt;</description></item><item><title>Apple's AI Bet: Playing the Long Game or Missing the Moment?</title><link>https://philippdubach.com/posts/apples-ai-bet-playing-the-long-game-or-missing-the-moment/</link><pubDate>Tue, 30 Dec 2025 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/apples-ai-bet-playing-the-long-game-or-missing-the-moment/</guid><description>&lt;p&gt;&lt;a href="https://www.theinformation.com/articles/2026-predictions-apple-will-reverse-ai-slump"&gt;The Information&lt;/a&gt; published a piece today arguing that Apple&amp;rsquo;s restrained AI approach may finally pay off in 2026. The thesis: while OpenAI, Google, and Meta pour hundreds of billions into data centers and model training, Apple has kept its powder dry, sitting on &lt;a href="https://www.apple.com/newsroom/2025/10/apple-reports-fourth-quarter-results/"&gt;$157 billion in cash and marketable securities&lt;/a&gt; as of Q4 2025. If the AI spending bubble deflates, Apple&amp;rsquo;s position looks rather clever. This piqued my interest, from a strategy point of view: Apple hasn&amp;rsquo;t been absent from AI. They&amp;rsquo;ve been making a specific bet that large language models will commoditize, and that value will flow to distribution and customer relationships rather than to whoever has the best model. The revamped Siri expected in spring 2026 will reportedly be powered by &lt;a href="https://www.bloomberg.com/news/articles/2025-11-05/apple-plans-to-use-1-2-trillion-parameter-google-gemini-model-to-power-new-siri"&gt;Google&amp;rsquo;s Gemini through a deal worth $1 billion annually&lt;/a&gt;. The custom Gemini model will run on Apple&amp;rsquo;s Private Cloud Compute servers.
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-ai_capex_comparison-png-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/ai_capex_comparison.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/ai_capex_comparison.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/ai_capex_comparison.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/ai_capex_comparison.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai_capex_comparison.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/ai_capex_comparison.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/ai_capex_comparison.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/ai_capex_comparison.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai_capex_comparison.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/ai_capex_comparison.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/ai_capex_comparison.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai_capex_comparison.png"
alt="Big Tech AI Capital Expenditure 2023-2025"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-ai_capex_comparison-png-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/ai_capex_comparison.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Big Tech AI Capital Expenditure 2023-2025" decoding="async"&gt;
&lt;/dialog&gt;
This is consistent with Apple&amp;rsquo;s history. They didn&amp;rsquo;t build their own search engine. They took Google&amp;rsquo;s money to be the default on Safari. &lt;a href="https://www.apple.com/newsroom/2025/12/john-giannandrea-to-retire-from-apple/"&gt;John Giannandrea&amp;rsquo;s retirement&lt;/a&gt; earlier this month, with Siri now under Mike Rockwell, signals internal recognition that something had to change.&lt;/p&gt;
&lt;p&gt;The iPhone distribution advantage is underappreciated. Apple can push AI features through software updates to &lt;a href="https://www.macrumors.com/2025/01/30/apple-1q-2025-earnings/"&gt;over 2.3 billion active devices&lt;/a&gt;. When Apple Intelligence features ship, they just appear. This is the same advantage that made Apple Music competitive against Spotify, or keeps Safari relevant despite Chrome&amp;rsquo;s benchmarks.&lt;/p&gt;
&lt;p&gt;The commoditization evidence is suggestive. I&amp;rsquo;ve &lt;a href="https://philippdubach.com/posts/is-ai-really-eating-the-world-1/2/"&gt;written before&lt;/a&gt; about these dynamics. GPT-4 launched with a substantial lead; within months, &lt;a href="https://www.anthropic.com/news/claude-3-family"&gt;Claude and Gemini were comparable&lt;/a&gt;. &lt;a href="https://newsletter.semianalysis.com/p/deepseek-debates"&gt;DeepSeek proved frontier models can be built for a fraction of OpenAI&amp;rsquo;s cost&lt;/a&gt;. API pricing has &lt;a href="https://openai.com/api/pricing/"&gt;dropped 97% since GPT-3&amp;rsquo;s launch&lt;/a&gt;. The hyperscalers are spending &lt;a href="https://www.wsj.com/tech/ai/big-tech-ai-spending-7b6c8d8a"&gt;$400 billion collectively on AI infrastructure in 2025&lt;/a&gt;, more than global telecom capex. The question isn&amp;rsquo;t whether this produces capable models. It&amp;rsquo;s whether it produces defensible advantages.
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-ai_api_pricing-png-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/ai_api_pricing.png 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/ai_api_pricing.png 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/ai_api_pricing.png 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/ai_api_pricing.png 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai_api_pricing.png 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/ai_api_pricing.png 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/ai_api_pricing.png 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/ai_api_pricing.png 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai_api_pricing.png 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/ai_api_pricing.png 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/ai_api_pricing.png 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/ai_api_pricing.png"
alt="AI API Pricing Collapse 2020-2025"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-ai_api_pricing-png-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/ai_api_pricing.png"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="AI API Pricing Collapse 2020-2025" decoding="async"&gt;
&lt;/dialog&gt;
&lt;a href="https://www.bloomberg.com/news/newsletters/2025-11-02/apple-s-nearly-140-billion-quarter-when-ios-26-1-will-be-out-ipad-mini-revamp-mhhpy1ax"&gt;Mark Gurman&amp;rsquo;s Bloomberg reporting&lt;/a&gt; suggests Apple views LLMs as commodities not worth proprietary development costs. The counterargument is obvious: what if the next capability jump makes current models look like toys?&lt;/p&gt;
&lt;p&gt;But the AI investment boom resembles previous cycles. Enormous capital flowing into a sector where barriers keep falling. That pattern often ends with winners who have distribution and customer relationships, not winners who spent the most on R&amp;amp;D. Apple&amp;rsquo;s bet isn&amp;rsquo;t guaranteed to be correct, but it&amp;rsquo;s defensible.&lt;/p&gt;
&lt;p&gt;The spring Siri update will matter. Reports that &lt;a href="https://9to5mac.com/2025/10/19/apple-employees-concerned-by-early-ios-26-4-apple-intelligence-sir-version/"&gt;Apple employees have concerns about performance in early iOS 26.4 builds&lt;/a&gt; aren&amp;rsquo;t encouraging. But Apple delayed the launch multiple times, suggesting they&amp;rsquo;re trying to get it right rather than shipping half-baked.&lt;/p&gt;
&lt;p&gt;Apple&amp;rsquo;s $157 billion cash pile provides optionality. If AI startups face a funding crunch, Apple can acquire capability. If someone achieves a breakthrough, Apple has resources to respond. Apple has preserved its options.&lt;/p&gt;</description></item><item><title>Is AI Really Eating the World? AGI, Networks, Value [2/2]</title><link>https://philippdubach.com/posts/is-ai-really-eating-the-world-agi-networks-value-2/2/</link><pubDate>Mon, 24 Nov 2025 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/is-ai-really-eating-the-world-agi-networks-value-2/2/</guid><description>&lt;p&gt;&lt;em&gt;Start by reading &lt;a href="https://philippdubach.com/posts/is-ai-really-eating-the-world-1/2/"&gt;Is AI Really Eating the World? What we&amp;rsquo;ve Learned [1/2]&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;All current &lt;a href="https://en.wikipedia.org/wiki/Recommender_system"&gt;recommendation systems&lt;/a&gt; work by capturing and analyzing user behavior at scale. Netflix needs millions of users watching millions of hours to train its recommendation algorithm. Amazon needs billions of purchases. The &lt;a href="https://en.wikipedia.org/wiki/Network_effect"&gt;network effect&lt;/a&gt; comes from data scale. What if LLMs can bypass this? What if an LLM can provide useful recommendations by reasoning about conceptual relationships rather than requiring massive behavioral datasets? If I ask for &amp;ldquo;books like Pirsig&amp;rsquo;s Zen and the Art of Motorcycle Maintenance but more focused on Eastern philosophy,&amp;rdquo; a sufficiently capable LLM might answer well without needing to observe 100 million readers. It understands (or appears to understand) the conceptual space. I&amp;rsquo;m uncertain whether LLMs can do this reliably by the end of 2025. The fundamental question is whether they reason or pattern-match at a very sophisticated level. &lt;a href="https://arxiv.org/abs/2308.03762"&gt;Recent research suggests LLMs may rely more on statistical correlations than true reasoning&lt;/a&gt;. If it&amp;rsquo;s mostly pattern-matching, they still need the massive datasets and we&amp;rsquo;re back to conventional network effects. If they can actually reason over conceptual spaces, that&amp;rsquo;s different. That would unbundle data network effects from recommendation quality. Recommendation quality would depend on model capability, not data scale. And if model capability is commoditizing, then the value in recommendations flows to whoever owns customer relationships and distribution, not to whoever has the most data or the best model. I lean toward thinking LLMs are sophisticated pattern-matchers rather than reasoners, which means traditional network effects still apply. But this is one area where I&amp;rsquo;m genuinely waiting to see more evidence.&lt;/p&gt;
&lt;p&gt;Now, on AGI. The Silicon Valley consensus, articulated by &lt;a href="https://sherwood.news/tech/gi-artificial-general-intelligence-when-predictions/"&gt;Sutskever, Altman, Musk, and others&lt;/a&gt;, is that we&amp;rsquo;re on a clear path to artificial general intelligence in the next few years, possibly by 2027 or 2028. The argument goes: &lt;a href="https://arxiv.org/abs/2001.08361"&gt;scaling laws&lt;/a&gt; continue to hold, we&amp;rsquo;re seeing emergent capabilities at each scale jump, and there&amp;rsquo;s no obvious wall before we reach human-level performance across all cognitive domains. I remain unconvinced. Not because I think AGI is impossible, but because the path from &amp;ldquo;really good at pattern completion and probabilistic next-token prediction&amp;rdquo; to &amp;ldquo;general reasoning and planning capabilities&amp;rdquo; seems less straightforward than the AI CEOs suggest. &lt;a href="https://arxiv.org/abs/2305.00050"&gt;Current LLMs still fail in characteristic ways on tasks requiring actual causal reasoning&lt;/a&gt;, spatial reasoning, or planning over extended horizons. They&amp;rsquo;re getting better, but the improvement curve on these specific capabilities looks different from the improvement curve on language modeling perplexity. That suggests to me that we might need architectural innovations beyond just scaling, and those are harder to predict.&lt;/p&gt;
&lt;p&gt;But let&amp;rsquo;s say I&amp;rsquo;m wrong. Let&amp;rsquo;s say AGI arrives by 2028. Even then, I find it hard to model why this would be tremendously economically beneficial specifically to the companies that control the models. Here&amp;rsquo;s why: we already have multiple competing frontier models (ChatGPT, Claude, Gemini, Microsoft&amp;rsquo;s offerings, and now DeepSeek). If AGI arrives, it likely arrives for multiple players at roughly the same time, given how quickly capabilities diffuse in this space. Multiple competing AGIs means price competition. Price competition in a product with near-zero marginal cost means prices collapse toward marginal cost. Where does economic value flow in that scenario? It flows to the users of AI, not the providers. Engineering firms using AGI for materials development capture value through better materials. Pharmaceutical companies using AGI for drug discovery capture value through better drugs. Retailers using AGI for inventory management capture value through better margins. The AGI providers compete with each other to offer the capability at the lowest price. This is basic microeconomics. You capture value when you have market power, either through monopoly, through differentiation, or through control of a scarce input. If models are commodities or near-commodities, model providers have none of these.&lt;/p&gt;
&lt;p&gt;The counterargument is that one provider achieves escape velocity and reaches AGI first with enough of a lead that they establish dominance before others catch up. This is the OpenAI/Microsoft theory of the case. Maybe. But the evidence so far suggests capability leads are measured in months, not years. &lt;a href="https://openai.com/index/gpt-4-research/"&gt;GPT-4 launched in March 2023&lt;/a&gt; with a substantial lead. Within six months, &lt;a href="https://www.anthropic.com/news/claude-2"&gt;Claude 2 was comparable&lt;/a&gt;. Within a year, multiple models clustered around similar capability. The diffusion is fast. Another counterargument is vertical integration. Maybe the hyperscalers that control cloud infrastructure plus model development plus customer relationships plus application distribution can capture value even if models themselves commoditize. This is more plausible, essentially the AWS playbook. Amazon didn&amp;rsquo;t make money by having the best database. They made money by owning the infrastructure, the customer relationships, and the entire stack from hardware to application platform. Microsoft is clearly pursuing this strategy with &lt;a href="https://www.microsoft.com/en-us/microsoft-365/blog/2023/03/16/introducing-microsoft-365-copilot-a-whole-new-way-to-work/"&gt;Azure plus OpenAI plus Copilot plus Office integration&lt;/a&gt;. Google has Search plus Cloud plus Gemini plus Workspace. This could work, but it&amp;rsquo;s a different thesis than &amp;ldquo;we have the best model.&amp;rdquo; It&amp;rsquo;s &amp;ldquo;we control the distribution and can bundle.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Evans shows a scatter plot (Slide 34) of model benchmark scores from &lt;a href="https://arxiv.org/abs/2009.03300"&gt;standard evaluations like MMLU and HumanEval&lt;/a&gt;. Leaders change weekly. The gaps are small. Meanwhile, consumer awareness doesn&amp;rsquo;t track model quality. ChatGPT dominates with over &lt;a href="https://openai.com/index/how-people-are-using-chatgpt/"&gt;700 million weekly active users&lt;/a&gt; not because it has the best model anymore, but because it got there first and built brand. If models are commodities, value moves up the stack to product design, distribution, vertical integration, and customer relationships. This is exactly what happened with databases. Oracle didn&amp;rsquo;t win because they had the best database engine. They won through enterprise sales, support contracts, and ecosystem lock-in. Microsoft didn&amp;rsquo;t beat them with a better database. They won by bundling SQL Server with Windows Server and offering acceptable performance at a lower price. The SaaS pattern suggests something similar happens here. The model becomes an input. The applications built on top, the customer relationships, the distribution, those become the valuable assets. Why do I think this pattern applies rather than, say, the search pattern where Google maintained dominance despite no fundamental technical moat? Two reasons: (1) Search had massive data network effects. Every search improved the algorithm, and Google&amp;rsquo;s scale meant they improved faster. LLMs have weaker data network effects because the pretraining data is largely static and publicly available, and fine-tuning data requirements are smaller. (2) Search had winner-take-all dynamics through defaults and single-answer demand. You pick one search engine and use it for everything. AI applications look more diverse. You might use different models for different tasks, or your applications might switch between models transparently based on price and performance. The switching costs are lower.&lt;/p&gt;
&lt;p&gt;So where does this leave us? The technology exists and the underlying capabilities are real. But I think the current evidence points toward a world where value flows to applications and customer relationships, and where the $400 billion the hyperscalers are spending buys them competitive positioning rather than monopoly. The integrators are making money now by helping enterprises navigate uncertainty. Some of that will produce real productivity gains. Much of it is expensive signaling and competitive positioning. The startups unbundling existing software will see mixed results, the ones that succeed will do so by owning distribution or solving really specific problems where switching costs are high, not by having better access to AI. The biggest uncertainty is whether the hyperscalers can use vertical integration to capture value anyway, or whether the applications layer fragments and value flows to thousands of specialized companies. That depends less on AI capabilities and more on competitive dynamics, regulation, and whether enterprises prefer integrated platforms or best-of-breed solutions. My guess is we end up somewhere in between. The hyperscalers maintain strong positions through bundling and infrastructure control. A long tail of specialized applications captures value in specific verticals. The model providers themselves, unless they&amp;rsquo;re also infrastructure providers, struggle to capture value proportional to the capability they&amp;rsquo;re creating. But I&amp;rsquo;m genuinely uncertain, and that uncertainty is where the interesting bets are.&lt;/p&gt;
&lt;p&gt;What makes Evans&amp;rsquo; presentation valuable is precisely what frustrated me about it initially: his refusal to collapse uncertainty prematurely. I&amp;rsquo;ve spent this entire post arguing for a specific view of how value will flow in AI markets, but Evans is right that we&amp;rsquo;re pattern-matching from incomplete data. Every previous platform shift looked obvious in retrospect and uncertain in real time. The PC revolution, the internet boom, mobile, they all had credible skeptics who turned out wrong and credible bulls who were right for the wrong reasons. Evans&amp;rsquo; discipline in laying out the full range of possibilities, from commodity to monopoly to something entirely new, is the intellectually honest position. I&amp;rsquo;ve made specific bets here because that&amp;rsquo;s useful for readers trying to navigate the space, but I&amp;rsquo;m more confident in my framework than in my conclusions.&lt;/p&gt;</description></item><item><title>Is AI Really Eating the World? [1/2]</title><link>https://philippdubach.com/posts/is-ai-really-eating-the-world-1/2/</link><pubDate>Sun, 23 Nov 2025 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/is-ai-really-eating-the-world-1/2/</guid><description>&lt;p&gt;In August 2011, Marc Andreessen wrote &lt;a href="https://a16z.com/why-software-is-eating-the-world/"&gt;&amp;ldquo;Why Software Is Eating the World&amp;rdquo;&lt;/a&gt;, an essay about how software was transforming industries, disrupting traditional businesses, and revolutionizing the global economy. Recently, &lt;a href="https://www.ben-evans.com/benedictevans/2014/1/18/a16z"&gt;Benedict Evans&lt;/a&gt;, a former a16z partner, gave a presentation on the generative AI platform shift three years after ChatGPT&amp;rsquo;s launch. His argument in short:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;we know this matters, but we don&amp;rsquo;t know how.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In this article I will try to explain why I find his framing fascinating but incomplete, and why the evidence points toward AI model commoditization rather than durable competitive advantages at the model layer. Evans structures technology history in cycles. Every 10-15 years, the industry reorganizes around a new platform: &lt;a href="https://en.wikipedia.org/wiki/Mainframe_computer"&gt;mainframes&lt;/a&gt; (1960s-70s), PCs (1980s), web (1990s), smartphones (2000s-2010s). Each shift pulls all innovation, investment, and company creation into its orbit. Generative AI appears to be the next platform shift, or it could break the cycle entirely. The range of outcomes spans from &amp;ldquo;just more software&amp;rdquo; to a single unified intelligence that handles everything. The pattern recognition is smart, but I think the current evidence points more clearly toward commoditization than Evans suggests, with value flowing up the AI value chain to applications rather than to model providers.&lt;/p&gt;
&lt;p&gt;The hyperscalers are spending historic amounts on AI infrastructure. In 2025, &lt;a href="https://techblog.comsoc.org/2025/11/01/ai-spending-boom-accelerates-big-tech-to-invest-invest-an-aggregate-of-400-billion-in-2025-more-in-2026/"&gt;Microsoft, Google, Amazon, and Meta will invest roughly $400 billion&lt;/a&gt; in AI capex, more than global telecommunications capex. Microsoft now spends over 30% of revenue on capex, double what Verizon spends. What has this produced? Models that are simultaneously more capable and less defensible. When ChatGPT launched in November 2022, OpenAI had a massive quality advantage. Today, dozens of models cluster around similar performance. &lt;a href="https://newsletter.semianalysis.com/p/deepseek-debates"&gt;DeepSeek proved that anyone with $500 million can build a frontier AI model&lt;/a&gt;. LLM pricing has collapsed. &lt;a href="https://techcrunch.com/2025/08/08/openai-priced-gpt-5-so-low-it-may-spark-a-price-war/"&gt;OpenAI&amp;rsquo;s API pricing has dropped by 97% since GPT-3&amp;rsquo;s launch&lt;/a&gt;, and every year brings an order of magnitude decline in inference cost.&lt;/p&gt;
&lt;p&gt;Now, $500 million is still an enormous barrier. Only a few dozen entities globally can deploy that capital with acceptable risk. &lt;a href="https://arxiv.org/abs/2303.08774"&gt;GPT-4&amp;rsquo;s performance on complex reasoning tasks&lt;/a&gt;, &lt;a href="https://www.anthropic.com/news/claude-2-1"&gt;Claude&amp;rsquo;s extended context windows of up to 200,000 tokens&lt;/a&gt;, &lt;a href="https://blog.google/technology/ai/google-gemini-ai/"&gt;Gemini&amp;rsquo;s multimodal capabilities&lt;/a&gt;, these represent genuine breakthroughs. But the economic moat isn&amp;rsquo;t obvious to me (yet). Open-source AI models from Meta and Mistral keep narrowing the gap, and if the model layer commoditizes fully, the competitive advantage shifts to data, distribution, and integration.&lt;/p&gt;
&lt;p&gt;Evans uses an extended metaphor: automation that works disappears. In the 1950s, automatic elevators were AI. Today they&amp;rsquo;re just elevators. As &lt;a href="https://en.wikipedia.org/wiki/Larry_Tesler"&gt;Larry Tesler&lt;/a&gt; noted in 1970,&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;AI is whatever machines can&amp;rsquo;t do yet. Once it works, it&amp;rsquo;s just software.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The question: will LLMs follow this pattern, or is this different?&lt;/p&gt;
&lt;p&gt;Current enterprise AI deployment shows clear winners but also real constraints. Software development has seen massive adoption, with &lt;a href="https://github.blog/news-insights/research/survey-ai-wave-grows/"&gt;GitHub reporting that 92% of developers now use AI coding tools&lt;/a&gt;. Marketing has found immediate uses generating ad assets at scale. Customer support has attracted investment, though with the caveat that LLMs produce plausible answers, not necessarily correct ones. Beyond these areas, the enterprise AI adoption rate looks scattered. &lt;a href="https://www.deloitte.com/us/en/insights/industry/telecommunications/connectivity-mobile-trends-survey.html"&gt;Deloitte surveys from June 2025 show that roughly 20% of U.S. consumers use generative AI chatbots daily&lt;/a&gt;, with another 34% using them weekly or monthly. Enterprise deployment is further behind. &lt;a href="https://www.mckinsey.com/capabilities/quantumblack/our-insights/the-state-of-ai"&gt;McKinsey data shows most AI &amp;ldquo;agents&amp;rdquo; remain in pilot or experimental stages&lt;/a&gt;. A quarter of CIOs have launched something. Forty percent don&amp;rsquo;t expect production deployment until 2026 or later.&lt;/p&gt;
&lt;p&gt;But I think here&amp;rsquo;s where Evans&amp;rsquo; &amp;ldquo;we don&amp;rsquo;t know&amp;rdquo; approach misses something important. Consulting firms are booking billions in AI integration contracts right now. &lt;a href="https://www.crn.com/news/ai/2025/accenture-s-3b-ai-bet-is-paying-off-inside-a-massive-transformation-fueled-by-advanced-ai"&gt;Accenture alone expects $3 billion in GenAI bookings for fiscal 2025&lt;/a&gt;. The revenue isn&amp;rsquo;t coming from the models. It&amp;rsquo;s coming from integration projects, change management, and process redesign. The pitch is simple: your competitors are moving on this, you can&amp;rsquo;t afford to wait. If your competitors are investing and you&amp;rsquo;re not, you risk being left behind. If everyone invests and AI delivers modest gains, you&amp;rsquo;ve maintained relative position. If everyone invests and AI delivers nothing, you&amp;rsquo;ve wasted money but haven&amp;rsquo;t lost competitive ground. Evans notes that cloud adoption took 20 years to reach 30% of enterprise workloads and is still growing. New technology platform cycles always take longer than advocates expect. His most useful analogy is spreadsheets. &lt;a href="https://en.wikipedia.org/wiki/VisiCalc"&gt;VisiCalc&lt;/a&gt; in the late 1970s transformed accounting. If you were an accountant, you had to have it. If you were a lawyer, you thought &amp;ldquo;that&amp;rsquo;s nice for my accountant.&amp;rdquo; ChatGPT today has the same dynamic. Certain people with certain jobs find it immediately essential. Everyone else sees a demo and doesn&amp;rsquo;t know what to do with the blank prompt. This is right, and it suggests we&amp;rsquo;re early. But it doesn&amp;rsquo;t tell us where value will accumulate in the AI value chain.&lt;/p&gt;
&lt;p&gt;The standard pattern for deploying technology goes in stages: (1) Absorb it (make it a feature, automate obvious tasks). (2) Innovate (create new products, unbundle incumbents). (3) Disrupt (redefine what the market is). We&amp;rsquo;re mostly in stage one. Stage two is happening in pockets. &lt;a href="https://www.ycombinator.com/companies"&gt;Y Combinator&amp;rsquo;s recent batches are overwhelmingly AI-focused&lt;/a&gt;, betting on thousands of new companies unbundling existing software (startups are attacking specific enterprise problems like converting COBOL to Java or reconfiguring telco billing systems). Stage three remains speculative. From an economic perspective, there&amp;rsquo;s the automation question: do you do the same work with fewer people, or more work with the same people? This echoes debates about &lt;a href="https://en.wikipedia.org/wiki/Technological_change#Labor-augmenting_technological_change"&gt;labor-augmenting technical change&lt;/a&gt; in economics. Companies whose competitive advantage was &amp;ldquo;we can afford to hire enough people to do this&amp;rdquo; face real pressure. Companies whose advantage was unique data, customer relationships, or distribution may get stronger. This is standard economic analysis of labor-augmenting technical change, and it probably holds here too.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Continue reading &lt;a href="https://philippdubach.com/posts/is-ai-really-eating-the-world-agi-networks-value-2/2/"&gt;Is AI Really Eating the World? AGI, Networks, and Value [2/2]&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Weather Forecasts Have Improved a Lot</title><link>https://philippdubach.com/posts/weather-forecasts-have-improved-a-lot/</link><pubDate>Sat, 22 Nov 2025 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/weather-forecasts-have-improved-a-lot/</guid><description>&lt;p&gt;Reading the press release for Google DeepMind&amp;rsquo;s &lt;a href="https://deepmind.google/discover/blog/weathernext-2-our-most-advanced-weather-forecasting-model/"&gt;WeatherNext 2&lt;/a&gt;, I wondered: have weather forecasts actually improved over the past years?&lt;/p&gt;
&lt;p&gt;Turns out they have, dramatically. &lt;a href="https://ourworldindata.org/weather-forecasts"&gt;A four-day forecast today matches the accuracy of a one-day forecast from 30 years ago&lt;/a&gt;. Hurricane track errors that once exceeded 400 nautical miles for 72-hour forecasts now sit below 80 miles. The &lt;a href="https://charts.ecmwf.int"&gt;European Centre for Medium-Range Weather Forecasts reports three-day forecasts now reach 97% accuracy&lt;/a&gt;, with seven-day forecasts approaching that threshold.&lt;/p&gt;
&lt;p&gt;Google&amp;rsquo;s new model accelerates this trend. &lt;a href="https://arstechnica.com/science/2025/11/googles-new-weather-model-impressed-during-its-first-hurricane-season/"&gt;The hurricane model performed remarkably well this season when tested against actual paths&lt;/a&gt;. WeatherNext 2 generates forecasts 8 times faster than its predecessor with resolution down to one hour. Each prediction takes under a minute on a single TPU compared to hours on a supercomputer using physics-based models. The speed comes from a smarter training approach. WeatherNext 2 (along with &lt;a href="https://www.nature.com/articles/s41586-024-07744-y"&gt;neuralgcm&lt;/a&gt;) uses a continuous ranked probability score (CRPS) objective rather than the L2 losses common in earlier neural weather models. The method adds random noise to parameters and trains the model to minimize L1 loss while maximizing differences between ensemble members with different noise initializations.&lt;/p&gt;
&lt;p&gt;This matters because L2 losses blur predictions when models roll out autoregressively over multiple time steps. Spatial features degrade and the model truncates extremes. &lt;a href="https://news.ycombinator.com/item?id=45957193"&gt;Models trained with L2 losses struggle to forecast high-impact extreme weather at moderate lead times&lt;/a&gt;. The CRPS objective preserves the sharp spatial features and extreme values needed for cyclone tracking and heat wave prediction. These improvements stem from better satellite and ground station data, faster computers running higher-resolution models, and improved communication through apps and online services. AI systems like WeatherNext 2 and Pangu-Weather (which performs forecasts up to 10,000 times faster than traditional methods) are accelerating progress that has been building for decades.&lt;/p&gt;</description></item><item><title>The Bicycle Needs Riding to be Understood</title><link>https://philippdubach.com/posts/the-bicycle-needs-riding-to-be-understood/</link><pubDate>Fri, 14 Nov 2025 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/the-bicycle-needs-riding-to-be-understood/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Some concepts are easy to grasp in the abstract. Boiling water: apply heat and wait. Others you really need to try. You only think you understand how a bicycle works, until you learn to ride one.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You should write an LLM agent—not because they&amp;rsquo;re revolutionary, but because the bicycle needs riding to be understood. Having built agents myself, Ptacek&amp;rsquo;s central insight resonates: the behavior surprises in specific ways, particularly around how models scale effort with complexity before inexplicably retreating.&lt;/p&gt;
&lt;p&gt;Ptacek walks through building a functioning agent in roughly 50 lines of Python, demonstrating how an LLM with ping access autonomously chose multiple Google endpoints without explicit instruction, a moment that crystallizes both promise and unpredictability. His broader point matches my experience: context engineering isn&amp;rsquo;t mystical but straightforward programming—managing token budgets, orchestrating sub-agents, balancing explicit loops against emergent behavior. The open problems in agent design—titrating nondeterminism, connecting to ground truth, allocating tokens—remain remarkably accessible to individual experimentation, each iteration taking minutes rather than requiring institutional resources.&lt;/p&gt;</description></item><item><title>AI Models as Standalone P&amp;Ls</title><link>https://philippdubach.com/posts/ai-models-as-standalone-pls/</link><pubDate>Sun, 09 Nov 2025 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/ai-models-as-standalone-pls/</guid><description>&lt;blockquote&gt;
&lt;p&gt;Microsoft reported earnings for the quarter ended Sept. [&amp;hellip;] buried in its financial filings were a couple of passages suggesting that OpenAI suffered a net loss of $11.5 billion or more during the quarter.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;For every dollar of revenue, they&amp;rsquo;re allegedly spending roughly $5 to deliver the product. These OpenAI losses initially sound like a joke about &amp;ldquo;making it up on volume,&amp;rdquo; but they point to a more fundamental problem facing OpenAI and its competitors. AI companies are locked into continuously releasing more powerful (and expensive) models. If they stop, &lt;a href="https://arxiv.org/abs/2311.16989"&gt;open-source alternatives will catch up&lt;/a&gt; and offer equivalent capabilities at substantially lower costs. This creates an uncomfortable dynamic. If your current model requires spending more than you earn just to fund the next generation, the path to profitability becomes unclear—perhaps impossible.&lt;/p&gt;
&lt;p&gt;Anthropic CEO Dario Amodei (everybody&amp;rsquo;s favorite AI CEO) recently offered a different perspective in a &lt;a href="https://youtu.be/GcqQ1ebBqkc?si=sEDGAVBuZsjtLpZS&amp;amp;t=1016"&gt;conversation with Stripe co-founder John Collison&lt;/a&gt;. He argues that treating each model as an independent business unit reveals a different picture than conventional accounting suggests.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Let&amp;rsquo;s say in 2023, you train a model that costs $100 million, and then you deploy it in 2024 and it makes $200 million of revenue.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So far, this looks profitable, a solid 2x return on the training investment. But here&amp;rsquo;s where it gets complicated.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Meanwhile, because of the scaling laws, in 2024, you also train a model that costs $1 billion. If you look in a conventional way at the profit and loss of the company you&amp;rsquo;ve lost $100 million the first year, you&amp;rsquo;ve lost $800 million the second year, and you&amp;rsquo;ve lost $8 billion in the third year, so it looks like it&amp;rsquo;s getting worse and worse.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The pattern continues:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In 2025, you get $2 billion of revenue from that $1 billion model trained the previous year.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Again, viewed in isolation, this model returned 2x its training cost.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;And you spend $10 billion to train the model for the following year.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The losses appear to accelerate dramatically, from $100 million to $800 million to $8 billion.&lt;/p&gt;
&lt;p&gt;This is where Amodei&amp;rsquo;s reframing becomes interesting.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you consider each model to be a company, the model that was trained in 2023 was profitable. You paid $100 million and then it made $200 million of revenue.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;He also acknowledges there are inference costs (the actual computing expenses of running the model for users) but suggests these don&amp;rsquo;t fundamentally change the picture in his simplified example. His core argument:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If every model was a company, the model in this example is actually profitable. What&amp;rsquo;s going on is that at the same time as you&amp;rsquo;re reaping the benefits from one company, you&amp;rsquo;re founding another company that&amp;rsquo;s much more expensive and requires much more upfront R&amp;amp;D investment.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is essentially an argument that AI companies are building a portfolio of profitable products, but the accounting makes it look terrible because each successive &amp;ldquo;product&amp;rdquo; costs 10x more than the last to develop. The losses stem from overlapping these profitable cycles while exponentially increasing investment scale. But this framework only works if two critical assumptions hold: (1) Each model consistently returns roughly 2x its training cost in revenue, and (2) The improvements from spending 10x more justify that investment—meaning customers will pay enough more for the better model to maintain that 2x return.&lt;/p&gt;
&lt;p&gt;Amodei outlines two ways this resolves:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;So the way that it&amp;rsquo;s going to shake out is this will keep going up until the numbers go very large and the models can&amp;rsquo;t get larger, and, you know, then it&amp;rsquo;ll be a large, very profitable business.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In this first scenario, scaling hits physical or practical limits. You&amp;rsquo;ve maxed out available compute, data, or capability improvements. Training costs plateau because you literally can&amp;rsquo;t build a meaningfully larger model. At that point, companies stop needing exponentially larger investments and begin harvesting profits from their final-generation models. The second scenario is less optimistic:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Or at some point the models will stop getting better, right? The march to AGI will be halted for some reason.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If the improvements stop delivering proportional returns before reaching natural limits, companies face what Amodei calls overhang.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;And then perhaps there&amp;rsquo;ll be some overhang, so there&amp;rsquo;ll be a one-time, &amp;lsquo;Oh man, we spent a lot of money and we didn&amp;rsquo;t get anything for it,&amp;rsquo; and then the business returns to whatever scale it was at.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;What Amodei&amp;rsquo;s framework doesn&amp;rsquo;t directly address is the open-source problem. If training Model C costs $10 billion but open-source alternatives &lt;a href="https://synaptic.com/resources/open-source-ai-2024"&gt;reach comparable performance six months later&lt;/a&gt;, that 2x return window might not materialize. The entire argument depends on maintaining a significant capability lead that customers will pay premium prices for. There&amp;rsquo;s also the question of whether the 2x return assumption holds as models become more expensive. The jump from $100 million to $1 billion to $10 billion in training costs assumes that customers will consistently value the improvements enough to double revenue.&lt;/p&gt;</description></item><item><title>Working with Models</title><link>https://philippdubach.com/posts/working-with-models/</link><pubDate>Sat, 08 Nov 2025 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/working-with-models/</guid><description>&lt;p&gt;There was this &amp;ldquo;&lt;a href="https://us1.discourse-cdn.com/flex001/uploads/ultralytics1/original/1X/45c604467b6f4212858281cf28f71a77083fb45e.jpeg"&gt;I work with Models&lt;/a&gt;&amp;rdquo; joke which I first heard years ago from an analyst working on a valuation model (&lt;a href="https://philippdubach.com/posts/everything-is-a-dcf-model/"&gt;see my previous post&lt;/a&gt;). I guess it has become more relevant than ever:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This monograph presents the core principles that have guided the development of diffusion models, tracing their origins and showing how diverse formulations arise from shared mathematical ideas. Diffusion modeling starts by defining a forward process that gradually corrupts data into noise, linking the data distribution to a simple prior through a continuum of intermediate distributions.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you want to get into this topic in the first place, be sure to check out &lt;a href="https://deepgenerativemodels.github.io"&gt;Stefano Ermon&amp;rsquo;s CS236 Deep Generative Models Course&lt;/a&gt;. Lecture recordings of the full course can also be found on &lt;a href="https://www.youtube.com/playlist?list=PLoROMvodv4rPOWA-omMM6STXaWW4FvJT8"&gt;YouTube&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Sentiment Trading Revisited</title><link>https://philippdubach.com/posts/sentiment-trading-revisited/</link><pubDate>Mon, 07 Jul 2025 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/sentiment-trading-revisited/</guid><description>&lt;p&gt;Interesting new paper on news sentiment embeddings for stock price forecasting that builds on many of the ideas &lt;a href="https://philippdubach.com/posts/trading-on-market-sentiment/"&gt;I explored in this project&lt;/a&gt;. The research, by Ayaan Qayyum, an &lt;a href="https://soe.rutgers.edu/news/ayaan-qayyum-electrical-and-computer-engineering"&gt;Undergraduate Research Scholar at Rutgers&lt;/a&gt;, shows that the core concept of using advanced language models for sentiment trading is not only viable but highly effective. The study takes a similar but more advanced approach. Instead of using a model like GPT-3.5 to generate a simple sentiment score, it uses &lt;a href="https://platform.openai.com/docs/guides/embeddings/embedding-models"&gt;OpenAI&amp;rsquo;s embedding models&lt;/a&gt; to convert news headlines into rich, high-dimensional vectors. By training a &lt;a href="https://arxiv.org/html/2507.01970v1/extracted/6556003/diagrams/model_comb_diagram.png"&gt;battery of neural networks&lt;/a&gt; including&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Gated Recurrent Units (GRU), Hidden Markov Model (HMM), Long Short-Term Memory (LSTM), Temporal Convolutional Networks (TCN), and a Feed-Forward Neural Network (FFNN). All were implemented using PyTorch.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;on these embeddings alongside economic data, the study found it could &lt;a href="https://arxiv.org/html/2507.01970v1/extracted/6556003/diagrams/models_ranked_smape.png"&gt;reduce prediction errors by up to 40%&lt;/a&gt; compared to models without the news data.&lt;/p&gt;
&lt;p&gt;The most surprising insight to me, and one that directly addresses the challenge of temporal drift I discussed, was that Qayyum&amp;rsquo;s time-independent models performed just as well, if not better, than the time-dependent ones. By shuffling the data, the models were forced to learn the pure semantic impact of a headline, independent of its specific place in time. This suggests that the market reacts to the substance of news in consistent ways, even if the narratives themselves change.&lt;/p&gt;</description></item><item><title>Not All AI Skeptics Think Alike</title><link>https://philippdubach.com/posts/not-all-ai-skeptics-think-alike/</link><pubDate>Thu, 12 Jun 2025 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/not-all-ai-skeptics-think-alike/</guid><description>&lt;p&gt;Apple&amp;rsquo;s recent paper &amp;ldquo;The Illusion of Thinking&amp;rdquo; has been widely understood to demonstrate that reasoning models don&amp;rsquo;t &amp;lsquo;actually&amp;rsquo; reason. Using controllable puzzle environments instead of contaminated math benchmarks, they discovered something fascinating: there are three distinct performance regimes when it comes to AI reasoning complexity. For simple problems, standard models actually outperform reasoning models while being more token-efficient. At medium complexity, reasoning models show their advantage. But at high complexity? Both collapse completely.
Here&amp;rsquo;s the kicker: reasoning models exhibit counterintuitive scaling behavior—their thinking effort increases with problem complexity up to a point, then declines despite having adequate token budget. It&amp;rsquo;s like watching a student give up mid-exam when the questions get too hard, even though they have plenty of time left.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We observe that reasoning models initially increase their thinking tokens proportionally with problem complexity. However, upon approaching a critical threshold—which closely corresponds to their accuracy collapse point—models counterintuitively begin to reduce their reasoning effort despite increasing problem difficulty.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The researchers found something even more surprising: even when they provided explicit algorithms—essentially giving the models the answers—performance didn&amp;rsquo;t improve. The collapse happened at roughly the same complexity threshold.&lt;/p&gt;
&lt;p&gt;On the other hand, &lt;a href="https://www.seangoedecke.com/illusion-of-thinking/"&gt;Sean Goedecke&lt;/a&gt; is not buying Apple&amp;rsquo;s methodology: His core objection? Puzzles &amp;ldquo;require computer-like algorithm-following more than they require the kind of reasoning you need to solve math problems.&amp;rdquo;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You can&amp;rsquo;t compare eight-disk to ten-disk Tower of Hanoi, because you&amp;rsquo;re comparing &amp;ldquo;can the model work through the algorithm&amp;rdquo; to &amp;ldquo;can the model invent a solution that avoids having to work through the algorithm&amp;rdquo;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;From his own testing, models &amp;ldquo;decide early on that hundreds of algorithmic steps are too many to even attempt, so they refuse to even start.&amp;rdquo; That&amp;rsquo;s strategic behavior, not reasoning failure. This matters because it shows how evaluation methodology shapes our understanding of AI capabilities. Goedecke argues Tower of Hanoi puzzles aren&amp;rsquo;t useful for determining reasoning ability, and that the complexity threshold of reasoning models may not be fixed.&lt;/p&gt;</description></item><item><title>The Model Said So</title><link>https://philippdubach.com/posts/the-model-said-so/</link><pubDate>Wed, 28 May 2025 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/the-model-said-so/</guid><description>&lt;p&gt;LLMs make your life easier until they don&amp;rsquo;t.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Their intrinsic complexity and lack of transparency pose significant challenges, especially in the highly regulated financial sector&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Unlike other industries where &amp;ldquo;the model said so&amp;rdquo; might suffice, finance demands audit trails, bias detection,
and explainable decision-making—requirements that sit uncomfortably with neural networks containing billions of parameters.
The research highlights a fundamental tension that&amp;rsquo;s about to reshape fintech:
the same complexity that makes LLMs powerful at parsing market sentiment or generating investment reports also makes them regulatory nightmares
in a sector where you need to explain every decision to examiners.&lt;/p&gt;</description></item><item><title>Trading on Market Sentiment</title><link>https://philippdubach.com/posts/trading-on-market-sentiment/</link><pubDate>Thu, 20 Feb 2025 00:00:00 +0000</pubDate><author>me@philippdubach.com (Philipp D. Dubach)</author><guid>https://philippdubach.com/posts/trading-on-market-sentiment/</guid><description>&lt;p&gt;&lt;em&gt;This post is based in part on a 2022 presentation I gave for the &lt;a href="https://www.ft.com/content/3bd45acd-b323-3c6b-ba98-ac78b456f308"&gt;ICBS Student Investment Fund&lt;/a&gt; and my seminar work at Imperial College London.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;As we were looking for new investment strategies for our Macro Sentiment Trading team, OpenAI had just published their &lt;a href="https://platform.openai.com/docs/models/gpt-3-5-turbo"&gt;GPT-3.5 Model&lt;/a&gt;. After first experiments with the model, we asked ourselves: How would large language models like GPT-3.5 perform in predicting sentiment in financial markets, where the signal-to-noise ratio is notoriously low? And could they potentially even outperform industry benchmarks at interpreting market sentiment from news headlines? The idea wasn&amp;rsquo;t entirely new. &lt;a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3389884"&gt;Studies&lt;/a&gt; &lt;a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=1702854"&gt;[2]&lt;/a&gt; &lt;a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=685145"&gt;[3]&lt;/a&gt; have shown that investor sentiment, extracted from news and social media, can forecast market movements. But most approaches rely on traditional NLP models or proprietary systems like &lt;a href="https://www.ravenpack.com"&gt;RavenPack&lt;/a&gt;. With the recent advances in large language models, I wanted to test whether these more sophisticated models could provide a competitive edge in sentiment-based trading. Before looking at model selection, it&amp;rsquo;s worth understanding what makes trading on sentiment so challenging. News headlines present two fundamental problems that any robust system must address.
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-news-relevance-timeline-jpg-0" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/news-relevance-timeline.jpg 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/news-relevance-timeline.jpg 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/news-relevance-timeline.jpg 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/news-relevance-timeline.jpg 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/news-relevance-timeline.jpg 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/news-relevance-timeline.jpg 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/news-relevance-timeline.jpg 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/news-relevance-timeline.jpg 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/news-relevance-timeline.jpg 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/news-relevance-timeline.jpg 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/news-relevance-timeline.jpg 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/news-relevance-timeline.jpg"
alt="Relative frequency of monthly Google News Search terms over 5 years. Numbers represent search interest relative to highest point. A value of 100 is the peak popularity for the term."
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-news-relevance-timeline-jpg-0" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/news-relevance-timeline.jpg"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Relative frequency of monthly Google News Search terms over 5 years. Numbers represent search interest relative to highest point. A value of 100 is the peak popularity for the term." decoding="async"&gt;
&lt;/dialog&gt;
First, headlines are inherently non-stationary. Unlike other data sources, news reflects the constantly shifting landscape of global events, political climates, economic trends, etc. A model trained on COVID-19 vaccine headlines from 2020 might struggle with geopolitical tensions in 2023. This temporal drift means algorithms must be adaptive to maintain relevance.
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-headline-market-impact-jpg-1" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/headline-market-impact.jpg 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/headline-market-impact.jpg 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/headline-market-impact.jpg 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/headline-market-impact.jpg 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/headline-market-impact.jpg 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/headline-market-impact.jpg 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/headline-market-impact.jpg 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/headline-market-impact.jpg 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/headline-market-impact.jpg 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/headline-market-impact.jpg 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/headline-market-impact.jpg 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/headline-market-impact.jpg"
alt="Impact of headlines measured by subsequent index move (Data Source: Bloomberg)"
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-headline-market-impact-jpg-1" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/headline-market-impact.jpg"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Impact of headlines measured by subsequent index move (Data Source: Bloomberg)" decoding="async"&gt;
&lt;/dialog&gt;
Second, the relationship between headlines and market impact is far from obvious. Consider these actual headlines from November 2020: &amp;ldquo;Pfizer Vaccine Prevents 90% of COVID Infections&amp;rdquo; drove the S&amp;amp;P 500 up 1.85%, while &amp;ldquo;Pfizer Says Safety Milestone Achieved&amp;rdquo; barely moved the market at -0.05%. The same company, similar positive news, dramatically different market reactions.&lt;/p&gt;
&lt;p&gt;When developing a sentiment-based trading system, you essentially have two conceptual approaches: forward-looking and backward-looking.
Forward-looking models try to predict which news themes will drive markets, often working qualitatively by creating logical frameworks that capture market expectations. This approach is highly adaptable but requires deep domain knowledge and is time-consuming to maintain.
Backward-looking models analyze historical data to understand which headlines have moved markets in the past, then look for similarities in current news. This approach can leverage large datasets and scale efficiently, but suffers from low signal-to-noise ratios and the challenge that past relationships may not hold in the future.
For this project, I chose the backward-looking approach, primarily for its scalability and ability to work with existing datasets.&lt;/p&gt;
&lt;p&gt;Rather than rely on traditional approaches like &lt;a href="https://github.com/ProsusAI/finBERT"&gt;FinBERT&lt;/a&gt; (which only provides discrete positive/neutral/negative classifications), I decided to test OpenAI&amp;rsquo;s GPT-3.5 Turbo model. The key advantage was its ability to provide continuous sentiment scores from -1 to 1, giving much more nuanced signals for trading decisions. I used news headlines from the Dow Jones Newswire covering the 30 DJI companies from 2018-2022, filtering for quality sources like the Wall Street Journal and Bloomberg. After removing duplicates, this yielded 2,072 headlines. I then prompted GPT-3.5 to score sentiment with the instruction: &lt;code&gt;Rate the sentiment of the following news headlines from -1 (very bad) to 1 (very good), with two decimal precision&lt;/code&gt;. To validate the approach, I compared GPT-3.5 scores against RavenPack—the industry&amp;rsquo;s leading commercial sentiment provider.
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-score-comparison-openai-rpa-jpg-3" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/score-comparison-openai-rpa.jpg 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/score-comparison-openai-rpa.jpg 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/score-comparison-openai-rpa.jpg 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/score-comparison-openai-rpa.jpg 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/score-comparison-openai-rpa.jpg 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/score-comparison-openai-rpa.jpg 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/score-comparison-openai-rpa.jpg 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/score-comparison-openai-rpa.jpg 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/score-comparison-openai-rpa.jpg 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/score-comparison-openai-rpa.jpg 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/score-comparison-openai-rpa.jpg 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/score-comparison-openai-rpa.jpg"
alt="Sample entries of the combined data set."
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-score-comparison-openai-rpa-jpg-3" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/score-comparison-openai-rpa.jpg"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Sample entries of the combined data set." decoding="async"&gt;
&lt;/dialog&gt;
The correlation was 0.59, indicating the models generally agreed on sentiment direction while providing different granularities of scoring. More interesting was comparing the distribution of the sentiment ratings between the two models. This could have been approximated closer through some fine tuning of the (minimal) prompt used earlier.
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-distribution-of-sentiment-openai-rpa-jpg-4" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/distribution-of-sentiment-openai-rpa.jpg 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/distribution-of-sentiment-openai-rpa.jpg 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/distribution-of-sentiment-openai-rpa.jpg 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/distribution-of-sentiment-openai-rpa.jpg 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/distribution-of-sentiment-openai-rpa.jpg 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/distribution-of-sentiment-openai-rpa.jpg 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/distribution-of-sentiment-openai-rpa.jpg 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/distribution-of-sentiment-openai-rpa.jpg 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/distribution-of-sentiment-openai-rpa.jpg 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/distribution-of-sentiment-openai-rpa.jpg 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/distribution-of-sentiment-openai-rpa.jpg 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/distribution-of-sentiment-openai-rpa.jpg"
alt="Comparing the distribution of the sentiment scores generated using the GPT-3.5 model with the benchmark scores from RavenPack."
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-distribution-of-sentiment-openai-rpa-jpg-4" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/distribution-of-sentiment-openai-rpa.jpg"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Comparing the distribution of the sentiment scores generated using the GPT-3.5 model with the benchmark scores from RavenPack." decoding="async"&gt;
&lt;/dialog&gt;
I implemented a simple strategy: go long when sentiment hits the top 5% of scores, close positions at 25% profit (to reduce transaction costs), and maintain a fully invested portfolio with 1% commission per trade.
The results were mixed but promising. Over the full 2018-2022 period, the GPT-3.5 strategy generated 41.02% returns compared to RavenPack&amp;rsquo;s 40.99%—essentially matching the industry benchmark. However, both underperformed a simple buy-and-hold approach (58.13%) during this generally bullish period. Relying on market sentiment when news flow is low can be a tricky strategy. As can be seen from the example of the Salesforce stock performance**,** the strategy remained uninvested over a large period of time due to a (sometimes long-lasting) negative sentiment signal.
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-crm-stock-sentiment-jpg-5" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/crm-stock-sentiment.jpg 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/crm-stock-sentiment.jpg 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/crm-stock-sentiment.jpg 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/crm-stock-sentiment.jpg 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/crm-stock-sentiment.jpg 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/crm-stock-sentiment.jpg 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/crm-stock-sentiment.jpg 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/crm-stock-sentiment.jpg 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/crm-stock-sentiment.jpg 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/crm-stock-sentiment.jpg 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/crm-stock-sentiment.jpg 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/crm-stock-sentiment.jpg"
alt="Stock performance of Salesforce (CRM) for 5 years from 2018 with sentiment indicators overlayed."
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-crm-stock-sentiment-jpg-5" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/crm-stock-sentiment.jpg"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Stock performance of Salesforce (CRM) for 5 years from 2018 with sentiment indicators overlayed." decoding="async"&gt;
&lt;/dialog&gt;
When I tested different timeframes, the sentiment strategy showed its strength during volatile periods. From 2020-2022, it outperformed buy-and-hold (22.83% vs 21.00%). As expected, sentiment-based approaches work better when markets are less directional and more driven by news flow. To evaluate whether the scores generated by our GPT prompt were more accurate than those from the RavenPack benchmark, I calculated returns for different holding windows. The scores generated by our GPT prompt perform significantly better in the short term (1 and 10 days) for positive sentiment and in the long term (90 days) for negative sentiment.
&lt;figure class="post-figure" style="width: 80%; margin: 1.5rem auto;"&gt;
&lt;button type="button" class="img-trigger" data-lightbox-target="lightbox-sentiment-trading-results-jpg-6" aria-label="View full-size image"&gt;
&lt;picture class="img-lightbox"&gt;
&lt;source media="(max-width: 768px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=320,quality=80,format=auto/sentiment-trading-results.jpg 320w,
https://static.philippdubach.com/cdn-cgi/image/width=480,quality=80,format=auto/sentiment-trading-results.jpg 480w,
https://static.philippdubach.com/cdn-cgi/image/width=640,quality=80,format=auto/sentiment-trading-results.jpg 640w,
https://static.philippdubach.com/cdn-cgi/image/width=960,quality=80,format=auto/sentiment-trading-results.jpg 960w,
https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/sentiment-trading-results.jpg 1200w"
sizes="80vw"&gt;
&lt;source media="(max-width: 1024px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=768,quality=80,format=auto/sentiment-trading-results.jpg 768w,
https://static.philippdubach.com/cdn-cgi/image/width=1024,quality=80,format=auto/sentiment-trading-results.jpg 1024w,
https://static.philippdubach.com/cdn-cgi/image/width=1440,quality=80,format=auto/sentiment-trading-results.jpg 1440w"
sizes="80vw"&gt;
&lt;source media="(min-width: 1025px)"
srcset="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/sentiment-trading-results.jpg 1200w,
https://static.philippdubach.com/cdn-cgi/image/width=1600,quality=80,format=auto/sentiment-trading-results.jpg 1600w,
https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=80,format=auto/sentiment-trading-results.jpg 2000w"
sizes="80vw"&gt;
&lt;img src="https://static.philippdubach.com/cdn-cgi/image/width=1200,quality=80,format=auto/sentiment-trading-results.jpg"
alt="Average 1, 10, 30, and 90-day holding period return for both models."
class=""
width="1200"
loading="lazy"
decoding="async"&gt;
&lt;/picture&gt;
&lt;/button&gt;
&lt;/figure&gt;
&lt;dialog id="lightbox-sentiment-trading-results-jpg-6" class="lightbox-dialog" aria-label="Full-size image" data-hires="https://static.philippdubach.com/cdn-cgi/image/width=2000,quality=85,format=auto/sentiment-trading-results.jpg"&gt;
&lt;form method="dialog" class="lightbox-close-form"&gt;
&lt;button type="submit" class="lightbox-close" aria-label="Close"&gt;×&lt;/button&gt;
&lt;/form&gt;
&lt;img alt="Average 1, 10, 30, and 90-day holding period return for both models." decoding="async"&gt;
&lt;/dialog&gt;
&lt;em&gt;(Note: For lower sentiment, negative returns are desirable since the stock would be shorted)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;While the model performed well technically, this project highlighted several practical challenges. First, data accessibility remains a major hurdle—getting real-time, high-quality news feeds is expensive and often restricted. Second, the strategy worked better in a more volatile environment, which prompted many individual trades, creating substantial transaction costs that significantly impact returns. Perhaps most importantly, any real-world implementation would need to compete with high-frequency traders who can act on news within milliseconds. The few seconds required for GPT-3.5 to process headlines and generate sentiment scores are far from being competitive. Despite these challenges, the project demonstrated that LLMs can match industry benchmarks for sentiment analysis—and this was using a general-purpose model, not one specifically fine-tuned for financial applications. OpenAI (and others) today offer more powerful models at very low cost as well as fine-tuning capabilities that could further improve performance. The bigger opportunity might be in combining sentiment signals with other factors, using sentiment as one input in a more sophisticated trading system rather than the sole decision criterion. There&amp;rsquo;s also potential in expanding beyond simple long-only strategies to include short positions on negative sentiment, or developing &amp;ldquo;sentiment indices&amp;rdquo; that smooth out individual headline noise.
Market sentiment strategies may not be optimal for long-term investing, but they show clear promise for shorter-term trading in volatile environments. As LLMs continue to improve and become more accessible, this might offer an opportunity to revisit this project.&lt;/p&gt;
&lt;aside class="disclaimer" role="note" aria-label="Disclaimer"&gt;
&lt;div class="disclaimer-content"&gt;&lt;p&gt;&lt;strong&gt;Disclaimer:&lt;/strong&gt; All opinions expressed are my own. This is not investment, financial, tax, or legal advice. Past performance does not indicate future results. Do your own research and consult qualified professionals before making financial decisions. No liability accepted for any losses.&lt;/p&gt;&lt;/div&gt;
&lt;/aside&gt;</description></item></channel></rss>