<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[davidj.substack]]></title><description><![CDATA[A substack about my journey in data: building data teams/stacks for org impact]]></description><link>https://davidsj.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!bG38!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fea52a4-dc41-4f4d-93f4-bcfdd60e4ea1_666x666.png</url><title>davidj.substack</title><link>https://davidsj.substack.com</link></image><generator>Substack</generator><lastBuildDate>Tue, 17 Mar 2026 03:38:23 GMT</lastBuildDate><atom:link href="https://davidsj.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[David Jayatillake]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[davidsj@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[davidsj@substack.com]]></itunes:email><itunes:name><![CDATA[David Jayatillake]]></itunes:name></itunes:owner><itunes:author><![CDATA[David Jayatillake]]></itunes:author><googleplay:owner><![CDATA[davidsj@substack.com]]></googleplay:owner><googleplay:email><![CDATA[davidsj@substack.com]]></googleplay:email><googleplay:author><![CDATA[David Jayatillake]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Agent Analytics Engineer]]></title><description><![CDATA[Build tools not agents]]></description><link>https://davidsj.substack.com/p/agent-analytics-engineer</link><guid isPermaLink="false">https://davidsj.substack.com/p/agent-analytics-engineer</guid><dc:creator><![CDATA[David Jayatillake]]></dc:creator><pubDate>Fri, 06 Feb 2026 18:13:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!m34Q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F908b6148-ec45-4a9a-8f86-31c0aa52ad14_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!m34Q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F908b6148-ec45-4a9a-8f86-31c0aa52ad14_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!m34Q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F908b6148-ec45-4a9a-8f86-31c0aa52ad14_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!m34Q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F908b6148-ec45-4a9a-8f86-31c0aa52ad14_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!m34Q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F908b6148-ec45-4a9a-8f86-31c0aa52ad14_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!m34Q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F908b6148-ec45-4a9a-8f86-31c0aa52ad14_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!m34Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F908b6148-ec45-4a9a-8f86-31c0aa52ad14_1024x1024.png" width="573" height="573" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/908b6148-ec45-4a9a-8f86-31c0aa52ad14_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:573,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Generated Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Generated Image" title="Generated Image" srcset="https://substackcdn.com/image/fetch/$s_!m34Q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F908b6148-ec45-4a9a-8f86-31c0aa52ad14_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!m34Q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F908b6148-ec45-4a9a-8f86-31c0aa52ad14_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!m34Q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F908b6148-ec45-4a9a-8f86-31c0aa52ad14_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!m34Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F908b6148-ec45-4a9a-8f86-31c0aa52ad14_1024x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A data team I work with has the typical issue with their backlog of having many small to medium complexity tickets; not all the interesting kind like data modelling etc, but many requests from stakeholders for new fields etc that enhance their data exploration. The backlog is full of tickets like <em>add region column to the accounts mart</em>, <em>expose this staging model to the reporting layer</em>, <em>update the description on that dimension</em>. Bread-and-butter analytics engineering. The kind of work that&#8217;s genuinely valuable, unambiguously well-defined, and also somewhat tedious. The kind of work that would be better done by a machine if possible.</p><p>The team lead asked me: &#8220;Could AI do this?&#8221;</p><p>&#8220;Sure,&#8221; I said. &#8220;Maybe we could build an agent.&#8221;</p><div><hr></div><h2><strong>Phase 1: The CLI Agent</strong></h2><p>In mid-December I sat down and built a CLI agent in Python. Tools included: Jira API, GitHub API, git operations, file reads and writes - all wrapped around Claude as the reasoning engine using the Claude SDK. The architecture was simple: deterministic scaffolding around an LLM. My code handled authentication, API calls, repository setup. Claude did the thinking.</p><p>It worked. The agent would read a Jira ticket, create a branch, explore the dbt project, write the SQL and YAML changes, open a pull request, and transition the Jira status. I named the project JiraDE<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>.</p><p>I was writing the agentic loop myself&#8230; deciding tool order, handling errors, managing retries. Every edge case was my problem. The agent was capable but rigid, and I was spending more time on the scaffolding than on the domain logic that actually mattered.</p><h2><strong>Phase 2: The REPL</strong></h2><p>In January I added an interactive mode <code>jirade chat</code>, a conversational REPL with twenty-two tools. For the tickets where full autonomy was overkill, I could guide the agent through the work, nudging it past gotchas the fully autonomous mode would get stuck on. I integrated dbt Cloud CI so the agent could validate its own pull requests before human review.</p><p>The REPL was genuinely useful. However, I was still maintaining a bespoke agent runtime. Every new failure: rate limits, context window management, tool call validation&#8230; was mine to handle. I was building an agent from scratch when Claude Code, the tool I was using every day, already <em>was</em> one. The best one out there, too.</p><h2><strong>Phase 3: The MCP Server</strong></h2><p>Then it dawned on me.</p><p>In early February I stripped out the agent loop entirely and exposed Jirade&#8217;s tools via MCP directly to Claude Code. I replaced the dbt Cloud CI integration with something far more controllable: running a custom-built dbt CI locally against Databricks, with isolated schemas and metadata-only comparisons<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a>. It also produces a helpful diff report comparing the models built in CI with prod equivalents, explaining row count, nullness and schema changes.</p><p>Claude Code became the agent. It already had the reasoning, the error recovery, the context management, the ability to recover from mistakes and try alternative approaches. I just needed to give it the right tools: Jira search and transitions, GitHub PR management, dbt local CI on Databricks, deprecation impact analysis. The tool schemas are defined, Claude Code discovers them via MCP, and the rest is its problem rather than mine.</p><p>The message crystallised across the weeks working on this project: <strong>yes, you can build agents easily now&#8230; but you shouldn&#8217;t. Give agents better tools instead. </strong>It&#8217;s a powerful development loop; the agent uses and improves the tools it has as it experiences difficulty.</p><div><hr></div><h2><strong>The Closed Loop</strong></h2><p>Here&#8217;s what Claude Code now does with Jirade&#8217;s tools, end to end, without intervention:</p><p>It reads the Jira ticket. It explores the dbt project to understand the codebase. It writes the SQL and YAML changes: new models, updated schemas, altered configurations. It creates a pull request. It triggers CI against Databricks, building the changed models in isolated schemas and comparing the results against production using only aggregated metadata: row counts, column types, null rates, value distributions.  </p><p>It publishes the comparison with a structured diff report in the PR, so that human approvers can approve at a glance without having to run models themselves. </p><p>If CI fails or a reviewer leaves comments, it reads the feedback, fixes the code, and pushes again. When all checks pass and the PR is merged, it cleans up the CI schemas and closes the Jira ticket.</p><p>Simple to medium complexity tickets&#8230; the add-a-column, expose-this-table, fix-this-description variety, it handles with aplomb. Even when the Jira tickets are vague or poorly specified, it infers intent from the codebase context. The constraint that matters most isn&#8217;t the model&#8217;s reasoning ability; it&#8217;s the quality of the tools you give it.</p><p>Its only limitation I&#8217;ve seen so far, is that when data has to be parsed out of semi-structured data, it can need a few iterations of trying to get it right. One Jira ticket mentioned the names to parse out but stated them in snake_case rather than camelCase, and because the agent isn&#8217;t allowed to read raw data in Databricks, it tried them verbatim. Even in this case, it just iterated off the error messages until the local dbt CI run succeeded. So while it doesn&#8217;t one-shot these, it does succeed through iteration. The issue with semi-structured data is that it doesn&#8217;t have a directly available schema from the data warehouse. I&#8217;m sticking to the idea that it shouldn&#8217;t read the data to derive it for now, especially as it does eventually succeed here.</p><h2><strong>The Implications</strong></h2><p>I wrote previously about <a href="https://davidsj.substack.com/p/jevons-inversion">Jevons Inversion</a>, the idea that when AI makes a category of work dramatically cheaper, demand for that <em>work</em> explodes while demand for the <em>specialists</em> who used to do it may not. I argued this would happen to software engineers. I didn&#8217;t expect to prove the thesis quite this quickly.</p><p>Analytics engineering routine work, the tasks that fill backlogs and consume sprints, is exactly what tool-equipped agents handle well. Well-defined inputs, structured outputs, deterministic validation. The work won&#8217;t disappear. If anything, organisations will do vastly more of it, because the marginal cost drops toward zero<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a>. </p><p>The analytics engineers doing this work will increasingly be agents with good tools, supervised by a smaller number of humans who understand the domain deeply enough to build those tools and handle the genuinely hard problems. Even the hard problems will be gradually chipped away with every new model release, every improvement to the harness and every improvement to the tools given to or built by the agent.</p><p>It may no longer be a great time to become an analytics engineer for the first time<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a>. For those already in the role, the ones who understand the stack deeply enough to build the tools that agents need&#8230; it&#8217;s never been better. The work will multiply. The workers may not.</p><p>We&#8217;ll have more analytics engineering than ever. We&#8217;ll have more analytics engineers than ever. They just won&#8217;t be the same engineers, and most of them will live in a terminal window. They won&#8217;t eat, they won&#8217;t sleep, they won&#8217;t dream, they won&#8217;t go to lunch, they won&#8217;t get coffee, they won&#8217;t want a promotion, they don&#8217;t need mid-year reviews&#8230; they will just crunch through ticket after ticket after ticket.</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p><em>JiraDE</em> = Jira + Data Engineer. Although people seem to call it Jirade like a soft drink.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>Jirade&#8217;s Databricks CI doesn&#8217;t expose raw data to the LLM. All comparisons use aggregated metadata like row counts, column-level statistics, schema diffs... plus a query whitelist to prevent leakage. Raw data isn&#8217;t particularly useful to LLMs anyhow. The idea is to give it eyes to see the data in its context.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>The Jevons bit, applied literally: coal consumption rose when steam engines got more efficient. Analytics engineering output will rise when agents make it cheaper. But James Watt didn&#8217;t hire more coal miners &#8212; he built better engines.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>Unless, of course, you&#8217;re the kind of person who would build the tools. In which case, carry on.</p></div></div>]]></content:encoded></item><item><title><![CDATA[AGI is probably here]]></title><description><![CDATA[My lightning talk at AI Skills 2026]]></description><link>https://davidsj.substack.com/p/agi-is-probably-here</link><guid isPermaLink="false">https://davidsj.substack.com/p/agi-is-probably-here</guid><dc:creator><![CDATA[David Jayatillake]]></dc:creator><pubDate>Wed, 21 Jan 2026 19:01:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ODzl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a0fa271-b3da-40c3-84ff-e11eddf2634c_2100x2100.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ODzl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a0fa271-b3da-40c3-84ff-e11eddf2634c_2100x2100.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ODzl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a0fa271-b3da-40c3-84ff-e11eddf2634c_2100x2100.png 424w, https://substackcdn.com/image/fetch/$s_!ODzl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a0fa271-b3da-40c3-84ff-e11eddf2634c_2100x2100.png 848w, https://substackcdn.com/image/fetch/$s_!ODzl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a0fa271-b3da-40c3-84ff-e11eddf2634c_2100x2100.png 1272w, https://substackcdn.com/image/fetch/$s_!ODzl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a0fa271-b3da-40c3-84ff-e11eddf2634c_2100x2100.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ODzl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a0fa271-b3da-40c3-84ff-e11eddf2634c_2100x2100.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7a0fa271-b3da-40c3-84ff-e11eddf2634c_2100x2100.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4737144,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://davidsj.substack.com/i/185331574?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a0fa271-b3da-40c3-84ff-e11eddf2634c_2100x2100.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ODzl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a0fa271-b3da-40c3-84ff-e11eddf2634c_2100x2100.png 424w, https://substackcdn.com/image/fetch/$s_!ODzl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a0fa271-b3da-40c3-84ff-e11eddf2634c_2100x2100.png 848w, https://substackcdn.com/image/fetch/$s_!ODzl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a0fa271-b3da-40c3-84ff-e11eddf2634c_2100x2100.png 1272w, https://substackcdn.com/image/fetch/$s_!ODzl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a0fa271-b3da-40c3-84ff-e11eddf2634c_2100x2100.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I&#8217;m speaking at AI Skills 2026 tomorrow at 8:50pm GMT / 12:50pm PT tomorrow.</p><p>Sign up <a href="https://conf.cosprints.ai/?57">here</a> for free to catch my talk:</p><p>Topics include:<br>&#8211; What are the must-have AI Tools &amp; Skills for Career and Business Growth in 2026?<br>&#8211; What VCs think: Is AI a Bubble? And Which AI Startups They'll Actually Fund in 2026<br>&#8211; How to make 16M views on LinkedIn in 3 months with AI<br>&#8211; MCP, AI Agents, AI Skills, Automations &amp; Prompting: What's Dead and What's Next in 2026</p><p>Looks like a good line up of speakers spread across VCs, founders and people deploying AI in industry.</p><p>You might say, it&#8217;s not been two weeks since I said that AGI would come this year (and not already). I&#8217;ll explain why my position has shifted tomorrow. Things are accelerating every day!</p>]]></content:encoded></item><item><title><![CDATA[2026 - the year of AGI]]></title><description><![CDATA[Specific Generality]]></description><link>https://davidsj.substack.com/p/2026-the-year-of-agi</link><guid isPermaLink="false">https://davidsj.substack.com/p/2026-the-year-of-agi</guid><dc:creator><![CDATA[David Jayatillake]]></dc:creator><pubDate>Tue, 13 Jan 2026 15:45:39 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9c_R!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38fd50e5-765f-4f68-821f-bfbb6cf94026_1024x1024.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9c_R!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38fd50e5-765f-4f68-821f-bfbb6cf94026_1024x1024.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9c_R!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38fd50e5-765f-4f68-821f-bfbb6cf94026_1024x1024.heic 424w, https://substackcdn.com/image/fetch/$s_!9c_R!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38fd50e5-765f-4f68-821f-bfbb6cf94026_1024x1024.heic 848w, https://substackcdn.com/image/fetch/$s_!9c_R!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38fd50e5-765f-4f68-821f-bfbb6cf94026_1024x1024.heic 1272w, https://substackcdn.com/image/fetch/$s_!9c_R!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38fd50e5-765f-4f68-821f-bfbb6cf94026_1024x1024.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9c_R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38fd50e5-765f-4f68-821f-bfbb6cf94026_1024x1024.heic" width="472" height="472" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/38fd50e5-765f-4f68-821f-bfbb6cf94026_1024x1024.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:472,&quot;bytes&quot;:44722,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://davidsj.substack.com/i/183259389?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38fd50e5-765f-4f68-821f-bfbb6cf94026_1024x1024.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9c_R!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38fd50e5-765f-4f68-821f-bfbb6cf94026_1024x1024.heic 424w, https://substackcdn.com/image/fetch/$s_!9c_R!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38fd50e5-765f-4f68-821f-bfbb6cf94026_1024x1024.heic 848w, https://substackcdn.com/image/fetch/$s_!9c_R!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38fd50e5-765f-4f68-821f-bfbb6cf94026_1024x1024.heic 1272w, https://substackcdn.com/image/fetch/$s_!9c_R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38fd50e5-765f-4f68-821f-bfbb6cf94026_1024x1024.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>The year of narrow AGI</h3><p>My prediction for this year is that we will see AGI within specific settings.</p><p>I think many people get the term AGI confused with ASI. Artificial General Intelligence is not Artificial Super Intelligence. ASI conjures images of an all-powerful, perhaps sentient AI. In my mind, AGI is something quite different. It is a system that can do many different things at least as well as a human. There is no requirement for sentience. It needs to be able to do some things it is asked to do or has a predefined directive for.</p><p>What does &#8220;at least as well as a human&#8221; mean? It does not mean perfectly. I am, by definition, generally intelligent, but there is almost nothing I do perfectly. There is no value in an AGI that can do many things worse than the average human, but there is tremendous value in one that can do many things as well as or better than average. If you have worked in typical workplaces, not elite tech companies, you will know this is a pretty low bar.</p><p>I have worked at companies where people do not come back from the pub at lunch. Or worse, they do and work whilst being many times over the limit to drive a car. I have worked at companies where I had to do someone else&#8217;s job as well as my own whilst they were on vacation, and I did not even feel the extra load because they did that little, or I was able to automate their work with a VBA macro. I think people doing jobs like these, rather badly, make up a huge percentage of our workforce. Well over 10%.</p><h3>The ability to learn</h3><p>What do I mean by &#8220;many things&#8221;? It is clearly not all things. I am generally intelligent and have limited specific capabilities. What makes me generally intelligent is my ability to learn to do many different things that I cannot do right now, and could not do when I was born. So an AGI system, more than anything, will have to be able to learn to do new things, and retain and maintain the knowledge of how to do those things so it can execute actions later.</p><p>With regard to LLMs, some capability comes from pre-training, but I think we are hitting a ceiling with regard to how much ability we can gain from enhancing pre-training alone. Post-training learning is how we will get to AGI.</p><p>There has been disagreement on this terminology by some of the biggest names in AI. Whilst I agree with Yann LeCun that ASI will not come from LLMs, I also agree with Demis Hassabis that AGI can come from LLMs. The term &#8220;general&#8221; is confusing here. We say general and it is easy to think that means anything and everything.</p><p>With a human being, general intelligence is a collection of many specific capabilities and the ability to learn more. It is also our ability to make tools to expand our capabilities further than learning alone could take us. <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Simon Baron-Cohen&quot;,&quot;id&quot;:208674497,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:null,&quot;uuid&quot;:&quot;09a88551-7bfc-486f-924a-954e604ee97f&quot;}" data-component-name="MentionToDOM"></span><a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> describes this ability to make new skills and tools as the &#8220;if-and-then&#8221; logic of systematising that used to be unique to humans, and is unique to us as an animal species. Most of what we think of as intelligence stems from this systematising ability. Animals do not have it. They cannot experiment or invent like we can.</p><p>I can drive a vehicle that is less than 3500kg. I can cook less than 20 dishes without additional guidance, but many more with written recipes, and even more with YouTube videos. I can use a stove, an oven, a knife, a grater, chopsticks, tongs, a steamer, a microwave. I can write in English using a pen, touch-type on a keyboard, or dictate through speech-to-text. I can trim my own beard.</p><p>I cannot cut my own hair, but I could learn. I cannot fly a plane, but I could learn. I cannot write music, but I could learn. I cannot play Go, but I could learn. I cannot retain hundreds of objects in short-term memory, and I never will be able to.</p><p>Generality and specificity seem at odds with each other as concepts, but generality of intelligence is just multiple specific capabilities plus the flexibility to maintain and create more.</p><p>It is not my sentience, nor my initiative, nor my soul, nor my personality that makes me generally intelligent. It is my ability to learn how to solve new problems through experimentation, learning skills, and making tools.</p><h3>LLM-based AGI and its limits</h3><p>AGI built on LLMs will not be able to do many things. I believe LLM-based AGI will not be able to drive a car. Does that mean it is not AGI? No. Many humans cannot drive a car. Are we saying they are not generally intelligent? We celebrate the things we each can do. It is not fair to compare AGI to the entire set of capabilities of all humans. It is also not useful. For any given application, there are a limited number of capabilities required. Some are explicit but some are implicit to humans.</p><p>There are things humans can do today that an LLM-based AGI will never be able to do, and humans can continue to do these things until we have some other AGI, perhaps based on world models, that can fill those gaps.</p><h3>Promethian</h3><p>This is why I have made <a href="https://pypi.org/project/promethian/">Promethian</a>, an AI agent that can learn new skills and build new tools for itself, as well as maintain them. It has the potential to become AGI for certain applications. However, I believe that if some of the skill and tool learning/building features I have made were built into Claude Code, then Claude Code would very quickly become AGI.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a></p><p>Promethian is very much inspired by and built with Claude Code, using the Claude SDK. In all honesty, the confidence I have in its ability to create and maintain useful new tools stems from the release of Claude Opus 4.5. I would not have thought this was possible before November 30th 2025.</p><p>Installation is straightforward:</p><p>  pipx install promethian</p><p>  run promethian in your terminal to open the REPL</p><p>  then use it like you would ChatGPT or Claude</p><p>The architecture is designed around a simple principle: your data and your API keys stay local, whilst learned knowledge is shared.</p><p>What stays on your machine:</p><p>  - Your Anthropic API key. Every Claude call uses your own key, running on your own machine.</p><p>  - Tool execution. When Promethian builds or runs a tool, it executes in a subprocess on your computer.</p><p>  - A local cache for session data.</p><p>  - Your credentials, stored in ~/.promethian/credentials.json with restrictive file permissions.</p><p>What gets shared centrally:</p><p>  - Skills and tools that work. When Promethian successfully completes a task and learns something generalisable, it contributes that knowledge back to a central database.</p><p>  - Logs of your session default to being sent to the API server when there is failure in the session, but this can be turned off in settings.</p><p>The security model is intentional. Your API keys never leave your machine. The central API uses JWT authentication, rate limiting, query-gated access (you can only retrieve items that appeared in your own searches), and server-side embeddings. You send text queries, not raw vectors, so there is no way to enumerate the database by crafting embedding space queries.</p><p>This architecture mirrors how human knowledge works. I learn something, I share it with others who might benefit, but my private notes and personal context stay with me. The knowledge base compounds. Each user&#8217;s successful executions make the system slightly better for everyone else.</p><h3>The path to AGI</h3><p>If you accept my definition of AGI, the path forward becomes clearer. We do not need a single breakthrough that suddenly makes AI capable of everything. We need systems that can learn, retain what they learn, and build tools to extend their own capabilities. We need the if-and-then logic applied to the agent system itself.</p><p>This is not ASI. This is not sentience. This is an AI that gets meaningfully better at specific tasks over time, accumulates those capabilities, and eventually crosses the threshold where it can do &#8220;many things at least as well as a human.&#8221;</p><p>I think this happens within certain settings this year. Not everywhere. Not for everything. But for enough tasks, in enough domains, that the term AGI will start to feel appropriate rather than aspirational.</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>I recommend reading his book <a href="https://www.penguin.co.uk/books/289738/the-pattern-seekers-by-baron-cohen-simon/9780141982397">"The Pattern Seekers"</a> if you're interested in intelligence concepts.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>Indeed, since I wrote this post, Anthropic have released Claude Cowork which has the capacity to become AGI if the learning capabilities I have built in Promethian are incorporated. They may well already be and it is learning and building new skills and tools from usage, that will be later made available and perhaps retrieval and use will be invisible to the user beyond increased performance.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Jevons Inversion]]></title><description><![CDATA[The paradox eats itself]]></description><link>https://davidsj.substack.com/p/jevons-inversion</link><guid isPermaLink="false">https://davidsj.substack.com/p/jevons-inversion</guid><dc:creator><![CDATA[David Jayatillake]]></dc:creator><pubDate>Fri, 09 Jan 2026 17:56:18 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jEj5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe755d000-fce9-48c4-92c4-4e645d0de2b8_1408x768.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jEj5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe755d000-fce9-48c4-92c4-4e645d0de2b8_1408x768.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jEj5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe755d000-fce9-48c4-92c4-4e645d0de2b8_1408x768.heic 424w, https://substackcdn.com/image/fetch/$s_!jEj5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe755d000-fce9-48c4-92c4-4e645d0de2b8_1408x768.heic 848w, https://substackcdn.com/image/fetch/$s_!jEj5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe755d000-fce9-48c4-92c4-4e645d0de2b8_1408x768.heic 1272w, https://substackcdn.com/image/fetch/$s_!jEj5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe755d000-fce9-48c4-92c4-4e645d0de2b8_1408x768.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jEj5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe755d000-fce9-48c4-92c4-4e645d0de2b8_1408x768.heic" width="1408" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e755d000-fce9-48c4-92c4-4e645d0de2b8_1408x768.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1408,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:271386,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://davidsj.substack.com/i/184041607?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe755d000-fce9-48c4-92c4-4e645d0de2b8_1408x768.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jEj5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe755d000-fce9-48c4-92c4-4e645d0de2b8_1408x768.heic 424w, https://substackcdn.com/image/fetch/$s_!jEj5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe755d000-fce9-48c4-92c4-4e645d0de2b8_1408x768.heic 848w, https://substackcdn.com/image/fetch/$s_!jEj5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe755d000-fce9-48c4-92c4-4e645d0de2b8_1408x768.heic 1272w, https://substackcdn.com/image/fetch/$s_!jEj5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe755d000-fce9-48c4-92c4-4e645d0de2b8_1408x768.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><br><span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Simon Willison&quot;,&quot;id&quot;:5753967,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/5a30d45c-fcba-407a-bebf-96f51a8944a4_48x48.jpeg&quot;,&quot;uuid&quot;:&quot;e41949a3-129b-4fc1-9851-95aaa45e2659&quot;}" data-component-name="MentionToDOM"></span>&#8217;s 2026 prediction for LLMs raised something that&#8217;s been rattling around my head. He invokes Jevons Paradox&#8212;the observation that as something becomes more efficient to produce, we don&#8217;t use less of it, we use vastly more. Coal. Compute. Now software.</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:183996156,&quot;url&quot;:&quot;https://simonw.substack.com/p/llm-predictions-for-2026-shared-with&quot;,&quot;publication_id&quot;:1173386,&quot;publication_name&quot;:&quot;Simon Willison&#8217;s Newsletter&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!ghJ7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe68a4ed9-6701-4ace-b17d-00a1fddab42f_450x450.png&quot;,&quot;title&quot;:&quot;LLM predictions for 2026, shared with Oxide and Friends&quot;,&quot;truncated_body_text&quot;:&quot;In this newsletter:&quot;,&quot;date&quot;:&quot;2026-01-09T07:34:09.283Z&quot;,&quot;like_count&quot;:21,&quot;comment_count&quot;:2,&quot;bylines&quot;:[{&quot;id&quot;:5753967,&quot;name&quot;:&quot;Simon Willison&quot;,&quot;handle&quot;:&quot;simonw&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/5a30d45c-fcba-407a-bebf-96f51a8944a4_48x48.jpeg&quot;,&quot;bio&quot;:&quot;Creator of @datasetteproj, co-creator Django. Fellow at @JSKstanford. Collector of @nichemuseums. Usually hanging out with @natbat and @cleopaws. He/Him&quot;,&quot;profile_set_up_at&quot;:&quot;2023-03-28T15:40:45.903Z&quot;,&quot;reader_installed_at&quot;:&quot;2023-11-05T05:56:54.738Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:1126522,&quot;user_id&quot;:5753967,&quot;publication_id&quot;:1173386,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:1173386,&quot;name&quot;:&quot;Simon Willison&#8217;s Newsletter&quot;,&quot;subdomain&quot;:&quot;simonw&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;AI, LLMs, web engineering, open source, data science, Datasette, SQLite, Python and more&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e68a4ed9-6701-4ace-b17d-00a1fddab42f_450x450.png&quot;,&quot;author_id&quot;:5753967,&quot;primary_user_id&quot;:5753967,&quot;theme_var_background_pop&quot;:&quot;#45D800&quot;,&quot;created_at&quot;:&quot;2022-11-04T01:49:24.793Z&quot;,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Simon Willison&quot;,&quot;founding_plan_name&quot;:&quot;Founding Member&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false}},{&quot;id&quot;:173560,&quot;user_id&quot;:5753967,&quot;publication_id&quot;:88424,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:88424,&quot;name&quot;:&quot;Datasette Newsletter&quot;,&quot;subdomain&quot;:&quot;datasette&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;News about Datasette and the Datasette ecosystem&quot;,&quot;logo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/c79ad646-e7b3-42e9-9ac2-adf1c346be80_208x208.png&quot;,&quot;author_id&quot;:5753967,&quot;primary_user_id&quot;:null,&quot;theme_var_background_pop&quot;:&quot;#786cff&quot;,&quot;created_at&quot;:&quot;2020-08-28T06:40:38.693Z&quot;,&quot;email_from_name&quot;:&quot;Simon Willison (Datasette Newsletter)&quot;,&quot;copyright&quot;:&quot;Simon Willison&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;classic_post_list&quot;,&quot;is_personal_mode&quot;:false}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:1,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:{&quot;type&quot;:&quot;subscriber&quot;,&quot;tier&quot;:1,&quot;accent_colors&quot;:null},&quot;paidPublicationIds&quot;:[458709],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:false,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://simonw.substack.com/p/llm-predictions-for-2026-shared-with?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!ghJ7!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe68a4ed9-6701-4ace-b17d-00a1fddab42f_450x450.png"><span class="embedded-post-publication-name">Simon Willison&#8217;s Newsletter</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">LLM predictions for 2026, shared with Oxide and Friends</div></div><div class="embedded-post-body">In this newsletter&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">2 months ago &#183; 21 likes &#183; 2 comments &#183; Simon Willison</div></a></div><p>The optimistic case for software engineers is roughly this: coding agents make software cheaper to produce, therefore we&#8217;ll want more software, therefore we&#8217;ll need more engineers. Jevons saves the profession. I&#8217;m not sure that it plays out this cleanly. <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Marc Andreessen&quot;,&quot;id&quot;:22353,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a8ef02fe-d089-466f-9b4a-ea19df828473_400x400.jpeg&quot;,&quot;uuid&quot;:&quot;43c23225-8ff3-48f9-94ec-e5a96a75e4e5&quot;}" data-component-name="MentionToDOM"></span> published a post a couple of years ago suggesting this is how things would work more broadly, and I don&#8217;t think this is what we&#8217;ve seen.</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:106479048,&quot;url&quot;:&quot;https://pmarca.substack.com/p/why-ai-wont-cause-unemployment&quot;,&quot;publication_id&quot;:1434963,&quot;publication_name&quot;:&quot;Marc Andreessen Substack&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!zpuu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8ef02fe-d089-466f-9b4a-ea19df828473_400x400.jpeg&quot;,&quot;title&quot;:&quot;Why AI Won't Cause Unemployment&quot;,&quot;truncated_body_text&quot;:&quot;Fears about new technology replacing human labor and causing overall unemployment have raged across industrialized societies for hundreds of years, despite a nearly continual rise in both jobs and wages in capitalist economies. The jobs apocalypse is always right around the corner; just ask&quot;,&quot;date&quot;:&quot;2023-03-04T21:48:35.326Z&quot;,&quot;like_count&quot;:0,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:22353,&quot;name&quot;:&quot;Marc Andreessen&quot;,&quot;handle&quot;:&quot;pmarca&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a8ef02fe-d089-466f-9b4a-ea19df828473_400x400.jpeg&quot;,&quot;bio&quot;:&quot;Powerful person; can&#8217;t handle being questioned.&quot;,&quot;profile_set_up_at&quot;:&quot;2021-05-19T00:15:36.212Z&quot;,&quot;reader_installed_at&quot;:&quot;2023-01-16T12:03:26.247Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:1398366,&quot;user_id&quot;:22353,&quot;publication_id&quot;:1434963,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:1434963,&quot;name&quot;:&quot;Marc Andreessen Substack&quot;,&quot;subdomain&quot;:&quot;pmarca&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;My personal Substack.\nPersonal views only.\nActually, not even personal views.\nI don't even know what my personal views are anymore.\nIt doesn't matter.\nRead anyway!&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a8ef02fe-d089-466f-9b4a-ea19df828473_400x400.jpeg&quot;,&quot;author_id&quot;:22353,&quot;primary_user_id&quot;:22353,&quot;theme_var_background_pop&quot;:&quot;#EA410B&quot;,&quot;created_at&quot;:&quot;2023-02-20T19:36:55.606Z&quot;,&quot;email_from_name&quot;:&quot;Marc Andreessen Substack&quot;,&quot;copyright&quot;:&quot;Marc Andreessen&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:false,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false}}],&quot;twitter_screen_name&quot;:&quot;pmarca&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:10,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:{&quot;type&quot;:&quot;subscriber&quot;,&quot;tier&quot;:10,&quot;accent_colors&quot;:null},&quot;paidPublicationIds&quot;:[152667,258817,109008,78415,89120,1266270,406482,272234,1635679,76168,1673613,447447,16023,10343,49766,50700,59265,855099,491610,185021,92018,557283,225655,436322,517571,354320,997278,934601,762897,573691,411546,800237,392253,296132,1753532,500492,1245641,820634,86578,579643,231792,353630,677645,725746,998962,858965,1271258,437528,828904,5890771,1294914,863919,3030828,521681,1069501,883883,1306283,1095106,1256656,343139,617396,582122,1475570,926274,1152790,865489,1084089,1461038,504545,1412291,1351274,682601,48206,828838,1225250,1118860,408190,493675,313411,1753552,811589,300322,1553777,701286,1021314,169149,3243459,385619,93625,248236,2321293,2178914,856102,226889,1163860,768507,2321304,824253,746128,384640,3190157,229933,618970,780107,2039604,539702,1876291,1428667,2205219,27459,218154,2355025,3996179,15764,1174659,614957,46510,1745072,586718,239653,494643,3072903,1801228,403712,1668111,220463,1388992,3415032,4220,589242,3391848,3442587,1937052,258587,1644430,1953998,427455,4230478,114152,1377040,1248321,1781989,25364,103238,1092659,3005827,374879,2698128,1741130,2020198,5931581,273958,45800,485296,6349492,1191729,1991565,15273,18480,182839,254167,334433,69009,573100,3229,353444,896733,192845,2454085,631422,356913,306523,71425,656797,2252,368422,803392,1151932,1111925,446127,278369,790004,332996,1093941,289345,257285,228290,566416,1317673,338673,1044000,250599,44153,1423504,438862,998306,317719,19378,82416,279400,4718,138623,248926,1180644,1218152,823801,2775959,484195,94899,3554431,50989,225618,250400,274771,1606756,93839,304292,615465,61371,250836,295937,3166787,2468596,697115,841240,46963,1922269,35345,268621,283068,228030,606411,330796,705247,1202,17202,1042,86329,232077,6980,259044,106714,766459,1580665,314535,470155,57020,341848,1990457,3048000,39821,52255,9973,1553477,15657,32451,25142,1022425,565381,329433,30594,2845834,569034,97071,382420,356445,549912,174242,260347,245110],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:false,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://pmarca.substack.com/p/why-ai-wont-cause-unemployment?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!zpuu!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8ef02fe-d089-466f-9b4a-ea19df828473_400x400.jpeg"><span class="embedded-post-publication-name">Marc Andreessen Substack</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Why AI Won't Cause Unemployment</div></div><div class="embedded-post-body">Fears about new technology replacing human labor and causing overall unemployment have raged across industrialized societies for hundreds of years, despite a nearly continual rise in both jobs and wages in capitalist economies. The jobs apocalypse is always right around the corner; just ask&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">3 years ago &#183; Marc Andreessen</div></a></div><p>The paradox, as typically applied, assumes the same people do the work. When coal extraction became efficient, you still needed miners. When compute became cheap, you still needed programmers. But what happens when the efficiency gain comes from mostly removing the need for the specialist? I think we may be about to find out.</p><p>There are many software engineers out there who aren&#8217;t working on particularly deep technical projects. They aren&#8217;t building compilers or high-performance computing systems or databases. They&#8217;re application developers, doing fairly similar things at company after company&#8212;<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>the somethingify pattern, the somethingly pattern. The advent of coding agents, from Lovable through to Claude Code, creates a spectrum of tools that turns anyone slightly technically able into something like a software engineer. Anyone who can use Excel competently understands data, logic, conditionals. They can&#8217;t write Python, but they can describe what they want, test whether it works, and iterate until it does.</p><p>Not good software engineers by 2022 standards, but good enough for what they need. People already used to operate like this&#8230; everyone had their trick spreadsheet that had a macro to automate something annoying for them. In a way we&#8217;re just expanding this concept.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!W16Y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9a07bbc-4bbd-4b42-813e-5ffaf1be9d7b_627x659.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!W16Y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9a07bbc-4bbd-4b42-813e-5ffaf1be9d7b_627x659.png 424w, https://substackcdn.com/image/fetch/$s_!W16Y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9a07bbc-4bbd-4b42-813e-5ffaf1be9d7b_627x659.png 848w, https://substackcdn.com/image/fetch/$s_!W16Y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9a07bbc-4bbd-4b42-813e-5ffaf1be9d7b_627x659.png 1272w, https://substackcdn.com/image/fetch/$s_!W16Y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9a07bbc-4bbd-4b42-813e-5ffaf1be9d7b_627x659.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!W16Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9a07bbc-4bbd-4b42-813e-5ffaf1be9d7b_627x659.png" width="627" height="659" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e9a07bbc-4bbd-4b42-813e-5ffaf1be9d7b_627x659.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:659,&quot;width&quot;:627,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:155189,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://davidsj.substack.com/i/184041607?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9a07bbc-4bbd-4b42-813e-5ffaf1be9d7b_627x659.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!W16Y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9a07bbc-4bbd-4b42-813e-5ffaf1be9d7b_627x659.png 424w, https://substackcdn.com/image/fetch/$s_!W16Y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9a07bbc-4bbd-4b42-813e-5ffaf1be9d7b_627x659.png 848w, https://substackcdn.com/image/fetch/$s_!W16Y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9a07bbc-4bbd-4b42-813e-5ffaf1be9d7b_627x659.png 1272w, https://substackcdn.com/image/fetch/$s_!W16Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9a07bbc-4bbd-4b42-813e-5ffaf1be9d7b_627x659.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Maybe this will become a flex instead of a joke. It runs locally here so good luck stealing my data! When sandboxing is resolved for coding agents I can see it working like how we used to share Looker dashboard URLs with each other, where the other users are at the very least in our org.</figcaption></figure></div><p>The most interesting shift to me isn&#8217;t what we build, it&#8217;s what we throw away. Consider software that runs once. You need to transform some data, validate something against a ruleset, generate a report in a specific format. Previously, you&#8217;d either do it manually which is tedious and error-prone or ask engineering, which means backlog prioritisation and weeks of delay. Now you describe it to an agent, it generates the code, you run it, you let it decay in the background of your desktop. This took seven minutes and would have taken two hours manually. Nobody calls this software development, but that&#8217;s exactly what it is.</p><p>And here&#8217;s where it gets interesting: agentic systems have memory. That single-use script you made last Tuesday? The next time you need something similar, the agent knows. Faster, more reliable, each iteration costing less until each use is a low effort one shot. Eventually, generating the code approaches the cost of running something deterministic. At that point, the distinction between &#8220;writing software&#8221; and &#8220;using software&#8221; starts to blur in ways I don&#8217;t think we&#8217;ve fully appreciated.</p><p>There&#8217;s also something worth considering about the overhead that disappears when users build their own software. Enterprise SaaS carries enormous costs because it has to. It serves thousands of users, so it must scale. It handles sensitive data across organisational boundaries, so security is key. It runs on someone else&#8217;s infrastructure, so efficiency matters. It must be sold, which means documentation, support, maintenance, and all the apparatus of a product company.</p><p>User-built software has none of this. It runs on your machine, so scalability is irrelevant&#8230; there&#8217;s one user. You already have access to the data, so security is just your existing boundary. Your laptop sits idle most of the day anyway, so efficiency barely matters. Documentation? You prompted it, so you understand it. All the boilerplate essentials that make SaaS saleable are unnecessary. The software doesn&#8217;t need to be good by any conventional standard. It just needs to work for you.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a></p><p>So what does this mean for demand? I think Jevons Paradox will apply in aggregate. We will have far more software engineering done than ever before. But the composition of who does it may invert in ways that aren&#8217;t great for traditional engineers.</p><p>The world gains millions of what we might call vibe engineers; people who couldn&#8217;t write a function by hand but can orchestrate agents effectively. They&#8217;ll handle the long tail of software that was never worth building before: internal tools, one-off automations, personal utilities, departmental solutions that would never have made it through a prioritisation meeting.</p><p>The world may lose demand for a specific kind of engineer: the application developer doing similar work at company after company. Those roles existed because building software required the skill. When the skill is substantially automated, the role follows. What remains is complex systems where correctness matters: compilers, databases, security-critical infrastructure, frameworks that the agents themselves rely on. High-performance computing where efficiency isn&#8217;t optional. These need engineers who understand what they&#8217;re building, not just how to describe it.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a></p><p>But that&#8217;s a smaller number of people than work as software engineers today. We&#8217;ll have more software engineering than ever. We&#8217;ll have more software engineers than ever. They just won&#8217;t be the same engineers, and most of them won&#8217;t think of themselves as engineers at all.</p><p><em>Jevons Paradox applies. The demand for software engineering explodes. The demand for software engineers, as we&#8217;ve known them, may not.</em></p><p>Happy New Year! &#127881;</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>I endorse the use of em dashes, they are efficient! Which is probably why LLMs use them so much.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>There are caveats around inadvertent security breaches from LLMs writing unsafe code and having access to sensitive data or systems, but coding agents continually improve in this regard and as Simon also predicted: we will solve sandboxing soon to prevent this being such an issue. I think it could be as is simple as a company like Anthropic buying a Fly.io or equivalent. <br><br>Most of the time a user does not want to send data externally, most of the time they want to consume data and manipulate it locally. Sandboxes can be configured to block directions of network traffic that are unneeded and unwanted. Users who do want to send files or data onwards as part of a workflow they are building or automating, often want these to flow to an internal recipient or approved system. There is much less risk from sending some unexpected data to your company Salesforce, than a random external server.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>I <a href="https://github.com/djayatillake/ironduck">experimented</a> with converting DuckDB to Rust over Christmas, just to see how capable best in class coding agents like Claude Code with Opus 4.5 are, it managed to do the conversion but most of the tests are still failing. This is even just a translation of a complex codebase from one language to another. I think we are some way from a coding agent being able to build something as complicated as a database without highly skilled specialist software engineers.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Legally Toast]]></title><description><![CDATA[Knowledge Revolution]]></description><link>https://davidsj.substack.com/p/legally-toast</link><guid isPermaLink="false">https://davidsj.substack.com/p/legally-toast</guid><dc:creator><![CDATA[David Jayatillake]]></dc:creator><pubDate>Sat, 13 Dec 2025 11:38:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Xzjm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e1a583-143a-4ab5-abff-f3800949bc1d_1024x1024.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Xzjm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e1a583-143a-4ab5-abff-f3800949bc1d_1024x1024.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Xzjm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e1a583-143a-4ab5-abff-f3800949bc1d_1024x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Xzjm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e1a583-143a-4ab5-abff-f3800949bc1d_1024x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Xzjm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e1a583-143a-4ab5-abff-f3800949bc1d_1024x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Xzjm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e1a583-143a-4ab5-abff-f3800949bc1d_1024x1024.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Xzjm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e1a583-143a-4ab5-abff-f3800949bc1d_1024x1024.jpeg" width="553" height="553" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b3e1a583-143a-4ab5-abff-f3800949bc1d_1024x1024.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:553,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Generated Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Generated Image" title="Generated Image" srcset="https://substackcdn.com/image/fetch/$s_!Xzjm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e1a583-143a-4ab5-abff-f3800949bc1d_1024x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Xzjm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e1a583-143a-4ab5-abff-f3800949bc1d_1024x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Xzjm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e1a583-143a-4ab5-abff-f3800949bc1d_1024x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Xzjm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e1a583-143a-4ab5-abff-f3800949bc1d_1024x1024.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I&#8217;ve been thinking about which jobs are effectively finished because of advances in AI. In short, any work that is repetitive, has abundant public training data, and mostly maps language input to language output is at serious risk.</p><p>Law is the clearest example. That does not mean all lawyers are finished, but the impact is already visible: hiring of law graduates into junior roles has dropped sharply. The picture, however, is more nuanced.</p><p>Partner-level roles (including public-sector equivalents) will remain essential for as long as legal services are delivered to humans. These roles are fundamentally about sales, judgement, accountability and human interaction&#8212;none of which it is reasonable to delegate fully to AI without some implausible humanoid interface.</p><p>Even so, partners alone are not enough. Senior lawyers just below partner level do the real orchestration: validating work, making decisions, and ensuring quality. That layer is also essential.</p><p>The layers below that&#8212;junior and mid-level roles where people are not yet trusted to work independently and whose output requires senior review&#8212;are the most exposed. There is little doubt that AI will handle this work in the near future, faster and better than humans. The main reasons it has not yet happened are institutional caution and slow adoption of agent-based systems, both understandable in law. Once secure systems can guarantee confidentiality and a baseline level of quality, this work will move to AI.</p><p>It is an ideal use case for agents: contextualising a matter, retrieving minimal relevant statutes and case law, and coordinating specialised sub-agents under human supervision.</p><p>So what happens to junior and mid-level lawyers? They do not disappear entirely. Partners and seniors are human: they retire, move on, and occasionally die in post. Organisations therefore need a pipeline to replace them.</p><p>Assume a legal organisation loses around 10% of its partners and seniors each year. To replenish that talent, juniors must still be hired and developed, with attrition along the way. If roughly 10% drop out in each of the first three years, and 5% per year over the following seven years to reach senior level, then an organisation needs roughly double its annual senior attrition entering as juniors a decade earlier.</p><p>For example, an organisation with 100 senior lawyers might lose or promote 20 each year. To replace them, it would need around 40 juniors entering ten years prior. That implies roughly 300 junior and mid-level lawyers at any given time - this is a 500-person firm with 100 partners and 100 seniors included<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>.</p><p>This structure is far more top-heavy than in the past. Historically, firms needed at least three times as many junior and mid-level staff to grind through work before it was ready for approval. AI removes much of that need.</p><p>The implication is clear: we do not need to produce as many law graduates as we once did. Top law schools can continue at current levels, but many second- and third-tier providers are training graduates for roles that will no longer exist, forcing them to compete for a shrinking pool of positions against graduates from more prestigious organisations, yet incurring similar student debt and opportunity cost.</p><p>Is this really a disaster? Over a million law graduates are produced annually across the Western world. This was arguably a by-product of an increasingly complex legal system that required ever more human labour - until now.</p><p>This pattern will repeat across many industries. Organisations will still need to hire juniors, but primarily to develop future leaders rather than to supply large amounts of labour. Scale will adjust accordingly. The parallel with the industrial revolution is obvious: machines replaced most manual labour, not all of it. AI will do the same for knowledge work.</p><p>It&#8217;s a much bigger societal change than the move to computers from paper for knowledge work, much bigger than the effect of the internet on work. This is the reason why it may not be a bubble: some investors are counting brass tacks at specific companies&#8230; others are thinking bigger, towards the multiplier effect of a knowledge revolution on the economy as a whole and what that&#8217;s worth.</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>I am aware that there is probably real data about this out there, but I just wanted to make a reasonable model.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Bad Character]]></title><description><![CDATA[Guardrails]]></description><link>https://davidsj.substack.com/p/bad-character</link><guid isPermaLink="false">https://davidsj.substack.com/p/bad-character</guid><dc:creator><![CDATA[David Jayatillake]]></dc:creator><pubDate>Mon, 10 Nov 2025 13:36:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9etL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71db2f41-9e7a-4498-80c1-3dc9d611155a_1024x1024.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9etL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71db2f41-9e7a-4498-80c1-3dc9d611155a_1024x1024.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9etL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71db2f41-9e7a-4498-80c1-3dc9d611155a_1024x1024.heic 424w, https://substackcdn.com/image/fetch/$s_!9etL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71db2f41-9e7a-4498-80c1-3dc9d611155a_1024x1024.heic 848w, https://substackcdn.com/image/fetch/$s_!9etL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71db2f41-9e7a-4498-80c1-3dc9d611155a_1024x1024.heic 1272w, https://substackcdn.com/image/fetch/$s_!9etL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71db2f41-9e7a-4498-80c1-3dc9d611155a_1024x1024.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9etL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71db2f41-9e7a-4498-80c1-3dc9d611155a_1024x1024.heic" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/71db2f41-9e7a-4498-80c1-3dc9d611155a_1024x1024.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:180309,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://davidsj.substack.com/i/178413101?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71db2f41-9e7a-4498-80c1-3dc9d611155a_1024x1024.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9etL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71db2f41-9e7a-4498-80c1-3dc9d611155a_1024x1024.heic 424w, https://substackcdn.com/image/fetch/$s_!9etL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71db2f41-9e7a-4498-80c1-3dc9d611155a_1024x1024.heic 848w, https://substackcdn.com/image/fetch/$s_!9etL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71db2f41-9e7a-4498-80c1-3dc9d611155a_1024x1024.heic 1272w, https://substackcdn.com/image/fetch/$s_!9etL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F71db2f41-9e7a-4498-80c1-3dc9d611155a_1024x1024.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Recently, Character.ai faced a <a href="https://edition.cnn.com/2024/10/30/tech/teen-suicide-character-ai-lawsuit">lawsuit</a> for failing to provide adequate protections for users.</p><blockquote><p><em>&#8216;I want them to understand that this is a platform that the designers chose to put out without proper guardrails, safety measures or testing, and it is a product that is designed to keep our kids addicted and to manipulate them,&#8217; Garcia said in an interview with CNN.</em></p><p><em>Garcia alleges that Character.ai &#8211; which markets its technology as &#8216;AI that feels alive&#8217; &#8211; knowingly failed to implement proper safety measures to prevent her son from developing an inappropriate relationship with a chatbot that caused him to withdraw from his family. The lawsuit also claims that the platform did not adequately respond when Setzer began expressing thoughts of self-harm to the bot, according to the complaint filed in federal court in Florida.</em></p></blockquote><p>The frustrating thing about this is that we have been walking this path for a long time. I am part of the Smartphone Free Childhood movement in my local area, and the primary danger we have focused on is the harm caused by algorithmic feeds in social media that indirectly influence children down darker paths and can lead to humiliation when content about them is shared and spread. Character.ai seems to have taken a similar approach to user engagement using an AI agent &#8211; but the danger here is how direct it is. LLMs are trained to please, so if someone asks about suicide, expresses interest in it, and says they want help to do it, LLMs will output what is most likely and relevant to the user&#8217;s request &#8211; unless you build guardrails.</p><p>The flipside of being part of the Smartphone Free Childhood movement is that I am also active in building software with AI and developing agents to benefit professionals. What really frustrates me is that it is actually fairly straightforward to take measures to make products like Character.ai safer and to establish solid guardrails. Nothing involving AI will ever be 100% safe &#8211; but very little in life is. What people want is to know that companies offering AI agent products are developing them with genuine consideration for safety.</p><p>Character.ai has since said they will not allow under-18s on their platform, but I don&#8217;t see how they can enforce this. We&#8217;ve already seen, with the UK&#8217;s age verification laws coming into effect, that children will just find a way around them. Children have always been better than adults at adopting new technology and using it.</p><p>Let&#8217;s assume it isn&#8217;t possible to stop children accessing the platform and that it makes more sense to give them safe access with parental and platform oversight. What does this look like?</p><h4>Parental Oversight</h4><p>The concept of parental control over child accounts already exists in many areas. The Apple ecosystem is well known for offering this, and I use it for my family. My children need to use computers for schoolwork, and they have their own Apple accounts that are part of our family group, where I have oversight of what they see and control over which apps and websites they can access. For Character.ai, it could work much the same way.</p><p>The parent&#8217;s account could show different levels of detail about the child&#8217;s activity. This might be a full audit log of every chat thread, with all messages &#8211; but would that encourage the child to use the platform elsewhere, where they aren&#8217;t observed? Another option could be to classify common themes of conversation and notify parents about worrying or potentially harmful topics. This is not difficult to build. LLMs can easily perform the classification, as the work is linguistic. LLMs are well suited to this and require minimal prompt engineering or expensive models.</p><h4>Platform Oversight</h4><p>From the excerpts of the conversations with the child in the case above, there seems to have been insufficient guidance given to the LLM in its prompt. I have built systems that require guardrails to prevent unsafe responses from a professional accuracy point of view, and they work well. If the prompt is clear about where the LLM should not respond or should provide a warning, it generally works. This should have been the first step.</p><p>Secondly, a verification step could briefly use another fast LLM to classify a response from the platform as safe or unsafe in context. If unsafe, a safety message could be sent instead of a direct reply or affirmation. This would protect against jailbreaks in the first LLM and its prompt.</p><p>Thirdly, messages and conversation threads can be classified by theme. It&#8217;s easy to flag words that indicate high risk and to generate a risk score from these inputs to determine whether a conversation exceeds a tolerable risk threshold. Where it does, there should be a final line of defence: human operators who can review these conversations and intervene if necessary &#8211; for example, by alerting parents or prompting the AI agent to guide the user in a healthier direction.</p><h4>Conclusion</h4><p>If the guardrails I described above were in place<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>, I think many people would feel that adequate steps had been taken. The general approach I&#8217;ve outlined can be applied to all B2C agentic platforms. The platform oversight guardrails should also apply to adults. Many adults struggle with mental illness and use these platforms as a crutch, and others simply need this level of care. Inevitably, these systems will begin to act in a therapeutic way &#8211; and we already have strict rules for how therapists interact with patients. Similar principles could be incorporated into the prompts and platform oversight systems I described above.</p><p>Few people expect 100% safety from these platforms &#8211; they simply expect a reasonable level of care. This is also why I wouldn&#8217;t look to regulate them in a similar way to how actual human therapists are required to have certain qualifications to practice. It&#8217;s not reasonable to expect that level of compliance, and the companies haven&#8217;t set out to offer a replacement for therapists, but it is reasonable to have used good practices in applying guardrails.</p><p><strong>Companies aiming to offer AI Agent experiences for consumers need to decide to prioritise safety; otherwise, they risk becoming the next toxic platform. </strong>Social media platforms have always had the indirectness of their algorithmic feeds as cover for the harm they cause. AI agent platforms don&#8217;t have that cover, as their interaction with users is direct. Governments around the world will find it difficult to avoid banning platforms that actively guide users towards harm.</p><p>When the public becomes fearful of AI systems in general because of a few careless actors, it harms the entire industry.</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>Character.AI has since introduced new safety features &#8212; including <a href="https://policies.character.ai/safety/parental-insights">parental insights</a> and a ban on under-18s &#8212; but these came after the incidents described in the lawsuit. The parental insights feature requires the child to invite the parent, which is back to front in my opinion. My 8YO daughter laughed out loud at the idea that children would invite their parents to monitor them and said she would never do it!</p><p></p></div></div>]]></content:encoded></item><item><title><![CDATA[Atlas]]></title><description><![CDATA[The master key to the internet]]></description><link>https://davidsj.substack.com/p/atlas</link><guid isPermaLink="false">https://davidsj.substack.com/p/atlas</guid><dc:creator><![CDATA[David Jayatillake]]></dc:creator><pubDate>Sun, 26 Oct 2025 18:36:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Aoof!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bd5a967-a2c9-4aa4-afbd-b2ae2b93d99a_1024x1024.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Aoof!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bd5a967-a2c9-4aa4-afbd-b2ae2b93d99a_1024x1024.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Aoof!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bd5a967-a2c9-4aa4-afbd-b2ae2b93d99a_1024x1024.heic 424w, https://substackcdn.com/image/fetch/$s_!Aoof!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bd5a967-a2c9-4aa4-afbd-b2ae2b93d99a_1024x1024.heic 848w, https://substackcdn.com/image/fetch/$s_!Aoof!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bd5a967-a2c9-4aa4-afbd-b2ae2b93d99a_1024x1024.heic 1272w, https://substackcdn.com/image/fetch/$s_!Aoof!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bd5a967-a2c9-4aa4-afbd-b2ae2b93d99a_1024x1024.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Aoof!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bd5a967-a2c9-4aa4-afbd-b2ae2b93d99a_1024x1024.heic" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0bd5a967-a2c9-4aa4-afbd-b2ae2b93d99a_1024x1024.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:317845,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://davidsj.substack.com/i/177079838?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bd5a967-a2c9-4aa4-afbd-b2ae2b93d99a_1024x1024.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Aoof!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bd5a967-a2c9-4aa4-afbd-b2ae2b93d99a_1024x1024.heic 424w, https://substackcdn.com/image/fetch/$s_!Aoof!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bd5a967-a2c9-4aa4-afbd-b2ae2b93d99a_1024x1024.heic 848w, https://substackcdn.com/image/fetch/$s_!Aoof!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bd5a967-a2c9-4aa4-afbd-b2ae2b93d99a_1024x1024.heic 1272w, https://substackcdn.com/image/fetch/$s_!Aoof!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bd5a967-a2c9-4aa4-afbd-b2ae2b93d99a_1024x1024.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I was interested to try out ChatGPT Atlas, like many people. I genuinely wasn&#8217;t sure of the point of the product, which actually made it more interesting to me, as usually the point of a new product is quite clear.</p><p>Upon downloading, installing and opening the macOS app, I was underwhelmed. It&#8217;s just a fairly basic browser experience. I don&#8217;t see why it would have such a draw that people would switch over, learn new keyboard shortcuts, and move bookmarks and passwords<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>. Sure, it&#8217;s nice to be able to open the panel and use ChatGPT in context, but it&#8217;s not that much harder than copying and pasting text or links into the ChatGPT tab I always have open.</p><p>Of course, ChatGPT may become more helpful as it observes your browsing habits, but this also has security implications. Perhaps it could discover new and interesting content based on what you&#8217;ve been reading and asking it to summarise or interact with. Perhaps it could even identify more interesting material when it notices that you&#8217;ve read it yourself rather than asking for a summary. It might eventually offer entirely synthesised content that exists only for you&#8212;tailored to your interests but still anchored in the &#8216;truth&#8217; of existing content<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a>.</p><p>It&#8217;s like a series of conversion steps of interest: clicked the link, looked at the content, scrolled a bit, asked ChatGPT about it or to summarise it, read it yourself, shared it. The perfect dataset to build a recommender system. Still, I didn&#8217;t think it would be that impactful as a launch. I don&#8217;t believe the current benefits balance with the drawbacks enough to persuade people to move from their favourite browser. After all, your favourite browser is like your favourite brand of underwear&#8212;are you really going to switch if you&#8217;re comfy?</p><p>Then the other, and perhaps main, purpose of Atlas dawned on me. I wanted ChatGPT to summarise a blog post I couldn&#8217;t be bothered to read. When I pasted the link into ChatGPT, it couldn&#8217;t open it&#8212;probably because of a <code>robots.txt</code> restriction or something else preventing it from consuming the content.</p><p>When I pasted the same link into an Atlas tab, it opened immediately because Atlas is a browser. Then, when I used the right-hand panel to ask ChatGPT to summarise it, it was able to do so because it already had the rendered page to look at.</p><p>Atlas is a way for OpenAI to gain access to new training material currently unavailable to it&#8212;effectively crowdsourcing access to the parts of the internet it isn&#8217;t otherwise allowed to use, or which are paywalled. If even one percent of users switch to Atlas, OpenAI will have access to 99 percent of the content it doesn&#8217;t have today. From a legal point of view, this doesn&#8217;t appear as OpenAI accessing unauthorised content; instead, it&#8217;s users feeding content to it, without the system knowing whether it&#8217;s allowed to see it or not. It&#8217;s equivalent to us copying and pasting the text of an article&#8212;whose link ChatGPT wouldn&#8217;t be allowed to open&#8212;into the chat. OpenAI has simply made this an implicit step: asking the ChatGPT panel anything about an open page effectively copies the page into it. It now holds the URL and its content as a key&#8211;value pair, even where it wouldn&#8217;t normally be allowed to open the URL directly.</p><p>Many have said that OpenAI is running out of high-quality training content for new models. It looks as though they&#8217;ve found a solution to that problem. OpenAI gains access to all its users&#8217; paid content subscriptions and any link<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a> they view&#8212;<code>robots.txt</code> or not.</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>I don&#8217;t do this, but I know most people save their passwords in their browser!</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>It would need to be able to recognise its own content to avoid circular references.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>Company Sharepoint or Confluence included.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Legit Rumour]]></title><description><![CDATA[The final conclusion of the MDS era]]></description><link>https://davidsj.substack.com/p/legit-rumour</link><guid isPermaLink="false">https://davidsj.substack.com/p/legit-rumour</guid><dc:creator><![CDATA[David Jayatillake]]></dc:creator><pubDate>Mon, 13 Oct 2025 20:52:09 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1596761329468-88a3a586aeba?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyMXx8bW9ub2xpdGh8ZW58MHx8fHwxNzYwMzg3NzE0fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1596761329468-88a3a586aeba?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyMXx8bW9ub2xpdGh8ZW58MHx8fHwxNzYwMzg3NzE0fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://images.unsplash.com/photo-1596761329468-88a3a586aeba?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyMXx8bW9ub2xpdGh8ZW58MHx8fHwxNzYwMzg3NzE0fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1596761329468-88a3a586aeba?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyMXx8bW9ub2xpdGh8ZW58MHx8fHwxNzYwMzg3NzE0fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1596761329468-88a3a586aeba?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyMXx8bW9ub2xpdGh8ZW58MHx8fHwxNzYwMzg3NzE0fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1596761329468-88a3a586aeba?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyMXx8bW9ub2xpdGh8ZW58MHx8fHwxNzYwMzg3NzE0fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1596761329468-88a3a586aeba?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyMXx8bW9ub2xpdGh8ZW58MHx8fHwxNzYwMzg3NzE0fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" width="4480" height="2520" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1596761329468-88a3a586aeba?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyMXx8bW9ub2xpdGh8ZW58MHx8fHwxNzYwMzg3NzE0fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2520,&quot;width&quot;:4480,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;low angle photography of high rise building&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="low angle photography of high rise building" title="low angle photography of high rise building" srcset="https://images.unsplash.com/photo-1596761329468-88a3a586aeba?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyMXx8bW9ub2xpdGh8ZW58MHx8fHwxNzYwMzg3NzE0fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1596761329468-88a3a586aeba?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyMXx8bW9ub2xpdGh8ZW58MHx8fHwxNzYwMzg3NzE0fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1596761329468-88a3a586aeba?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyMXx8bW9ub2xpdGh8ZW58MHx8fHwxNzYwMzg3NzE0fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1596761329468-88a3a586aeba?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyMXx8bW9ub2xpdGh8ZW58MHx8fHwxNzYwMzg3NzE0fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@cazat69">Victor Lu</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p>A couple of weeks ago, we were all wondering if a certain insider <a href="https://www.theinformation.com/articles/data-startup-fivetran-talks-buy-dbt-labs-multibillion-dollar-deal">scoop</a> was for real&#8230;</p><p>Founders were saying it was, that the source was too well-connected. Others were saying it made sense, Tristan and George are friends, they&#8217;re stronger together, Fivetran would then own all the modern data stack transformation tech&#8230; and so on.</p><p>Well, Day 1 of dbt Coalesce confirmed the rumours - dbt Labs and Fivetran are indeed <a href="https://www.getdbt.com/blog/dbt-labs-and-fivetran-merge-announcement">merging</a>.</p><p>Before the Big Data era which preceded the Modern Data Stack era, we had four monolithic data stacks: Teradata, MS SQL Server, Oracle and IBM. They couldn&#8217;t handle the size of the post dot.com era clickstream datasets, but they did have the ability to do everything in one stack&#8230; even if badly. You could make reports with SSRS, and perhaps their style would now be called &#8216;retro&#8217;. You could run analytical queries with Oracle databases, the one I learned SQL on in 2010. You could ETL using Excel, VBA and SSIS&#8230; it was bad and took days to run, but you could do it.</p><p>Looking at the stack below, you see all the same pieces save a query engine. Now, with truly decoupled storage and compute with the widespread adoption of Iceberg, it need only be a query engine. It looks very similar to Databricks, but without query engines of course.</p><p>I feel like we&#8217;re entering a new era of cloud monolithic stacks. Fivetran-dbt, GCP, Microsoft Fabric, Databricks and Snowflake. After all, the only reason the original era of on-prem data platforms ended was because of their inability to handle large datasets and unwillingness to modernise and risk cannibalising their own business models. Those companies had the capital and talent to build cloud data warehouses and use columnar storage, but they didn&#8217;t want to upset their business models. Microsoft&#8217;s Fabric business line and Oracle&#8217;s analytics business line are still probably bigger than all but Databricks and Snowflake in the MDS and Big Data era companies.</p><p>Out of every boom and bust in tech, lasting winners emerge. Databricks from the Big Data era. Snowflake and perhaps Fivetran-dbt from the MDS era. The modern data stack really is dead now. I don&#8217;t think this large ecosystem with as many companies as pixels in Matt Turck&#8217;s face will last - it&#8217;s already collapsing towards the bigger gravity wells on the diagram. The time of data folks being able to happily choose from five different SaaS and open-source solutions to do the same thing won&#8217;t continue - we will be forced to choose from one of the monoliths and stay on the menu.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IEBx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe4ed97-1b20-4893-b578-3721810b79db_1974x1152.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IEBx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe4ed97-1b20-4893-b578-3721810b79db_1974x1152.png 424w, https://substackcdn.com/image/fetch/$s_!IEBx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe4ed97-1b20-4893-b578-3721810b79db_1974x1152.png 848w, https://substackcdn.com/image/fetch/$s_!IEBx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe4ed97-1b20-4893-b578-3721810b79db_1974x1152.png 1272w, https://substackcdn.com/image/fetch/$s_!IEBx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe4ed97-1b20-4893-b578-3721810b79db_1974x1152.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IEBx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe4ed97-1b20-4893-b578-3721810b79db_1974x1152.png" width="1456" height="850" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/afe4ed97-1b20-4893-b578-3721810b79db_1974x1152.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:850,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;dbt and Fivetran together for te future of data&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="dbt and Fivetran together for te future of data" title="dbt and Fivetran together for te future of data" srcset="https://substackcdn.com/image/fetch/$s_!IEBx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe4ed97-1b20-4893-b578-3721810b79db_1974x1152.png 424w, https://substackcdn.com/image/fetch/$s_!IEBx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe4ed97-1b20-4893-b578-3721810b79db_1974x1152.png 848w, https://substackcdn.com/image/fetch/$s_!IEBx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe4ed97-1b20-4893-b578-3721810b79db_1974x1152.png 1272w, https://substackcdn.com/image/fetch/$s_!IEBx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe4ed97-1b20-4893-b578-3721810b79db_1974x1152.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If you look at the diagram above, there is no mention of SQLMesh. It&#8217;s beginning to look like a plan - to make one single standard for transformation. SQLMesh looks like it&#8217;s going to fade away, like some kind of inconvenience<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> to this main story. Snowflake and Databricks will invest more in their own transformation offerings to avoid dependence on what is now a most likely a rival.</p><p>What is the next era? I genuinely think it could be the year of the duck. DuckDB<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a> is still going from strength to strength, from extension to extension. I expect that the next dbt-core will be a DuckDB extension, even if I have to build it myself<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a>. Tightly coupled is the new black.</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>I speculated before that the deal for SQLMesh would have needed to be close to or near their last valuation, but it turns out that the real amount would have been much lower. I don&#8217;t really believe Fivetran-dbt will maintain one open-source data transformation standard, let alone two.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>It also fills the hole in the Fivetran-dbt data platform, that would allow it to compete with the other four monolithic cloud data stacks.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>But I won&#8217;t have to. <br><br>I don&#8217;t think DuckDB extensions have a big enough surface area to become companies in their own right, however they can become great open source projects. So any extension to DuckDB that replaces dbt-core, can&#8217;t really be acquired into monoliths or obscurity.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Open Semantic Interchange]]></title><description><![CDATA[Not too little, not too late]]></description><link>https://davidsj.substack.com/p/open-semantic-interchange</link><guid isPermaLink="false">https://davidsj.substack.com/p/open-semantic-interchange</guid><dc:creator><![CDATA[David Jayatillake]]></dc:creator><pubDate>Sun, 28 Sep 2025 12:31:49 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1646106842483-150134ca66b4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxzaW1pbGFyfGVufDB8fHx8MTc1OTAwMDAxNHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1646106842483-150134ca66b4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxzaW1pbGFyfGVufDB8fHx8MTc1OTAwMDAxNHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://images.unsplash.com/photo-1646106842483-150134ca66b4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxzaW1pbGFyfGVufDB8fHx8MTc1OTAwMDAxNHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1646106842483-150134ca66b4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxzaW1pbGFyfGVufDB8fHx8MTc1OTAwMDAxNHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1646106842483-150134ca66b4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxzaW1pbGFyfGVufDB8fHx8MTc1OTAwMDAxNHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1646106842483-150134ca66b4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxzaW1pbGFyfGVufDB8fHx8MTc1OTAwMDAxNHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1646106842483-150134ca66b4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxzaW1pbGFyfGVufDB8fHx8MTc1OTAwMDAxNHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" width="3999" height="2666" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1646106842483-150134ca66b4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxzaW1pbGFyfGVufDB8fHx8MTc1OTAwMDAxNHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2666,&quot;width&quot;:3999,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;a row of zebra head sculptures in black and white&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="a row of zebra head sculptures in black and white" title="a row of zebra head sculptures in black and white" srcset="https://images.unsplash.com/photo-1646106842483-150134ca66b4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxzaW1pbGFyfGVufDB8fHx8MTc1OTAwMDAxNHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1646106842483-150134ca66b4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxzaW1pbGFyfGVufDB8fHx8MTc1OTAwMDAxNHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1646106842483-150134ca66b4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxzaW1pbGFyfGVufDB8fHx8MTc1OTAwMDAxNHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1646106842483-150134ca66b4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxzaW1pbGFyfGVufDB8fHx8MTc1OTAwMDAxNHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@markuswinkler">Markus Winkler</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p>Over the last few years, I have really wanted to have an open standard for semantic layers. Something that would make semantic layer definition code (probably YAML) portable, to be used between BI tools, standalone semantic layers and other data products. In a way, open-source Cube has been this in the past, it is a very well-used open-source project with known users in pretty much all big tech companies. However, it has never had enough support from other BI tools which, along with the drive towards AI, led to Cube pursuing their own agentic BI tool in Cube Cloud. </p><p></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;03188173-845a-42e4-b283-060823295876&quot;,&quot;caption&quot;:&quot;The semantic layer came of age over the course of two weeks at the Moscone Center. Both Snowflake, with semantic views, and Databricks, with metrics views, have essentially implemented a semantic layer with a compiler, which I predicted (around this time last year) that they would do before the end of 2025.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;md&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Nearly Headless BI&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64081583,&quot;name&quot;:&quot;David Jayatillake&quot;,&quot;bio&quot;:&quot;Data &amp; AI Engineering writer&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!fnkm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1597ff03-37e4-4b78-a9fb-065c868972a0_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-06-25T14:50:31.739Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Njto!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33e9cc56-ecdb-4ae9-8fd9-9991753a58ea_1024x1536.heic&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://davidsj.substack.com/p/nearly-headless-bi&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:165350777,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:7,&quot;comment_count&quot;:5,&quot;publication_id&quot;:658281,&quot;publication_name&quot;:&quot;davidj.substack&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!bG38!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fea52a4-dc41-4f4d-93f4-bcfdd60e4ea1_666x666.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p></p><p>I have also been critical of newer technologies like Malloy, which have similar aims to semantic layers but seemed less practical. My thinking was that getting users to learn a new DSL when we already have SQL, YAML, MDX, DAX&#8230; was a bad idea and doomed to fail. However, with AI, perhaps value can be had. If Malloy is like a tool to be used by AI and core definitions also maintained by AI, then no new DSL needs to be learned by any human.</p><p></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;81673169-6754-4901-be4e-12418644dec4&quot;,&quot;caption&quot;:&quot;Recently, the Malloy team moved to Meta, from Google. Malloy provides a language to express analytical and transformation queries that compiles to SQL:&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;md&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;SQL Forever&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64081583,&quot;name&quot;:&quot;David Jayatillake&quot;,&quot;bio&quot;:&quot;Data &amp; AI Engineering writer&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!fnkm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1597ff03-37e4-4b78-a9fb-065c868972a0_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-10-25T13:39:54.129Z&quot;,&quot;cover_image&quot;:&quot;https://images.unsplash.com/photo-1603671964570-84fbc717b4c1?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw5fHxpbmZpbml0eSUyMG1pcnJvcnxlbnwwfHx8fDE3Mjk4MDMwNDZ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://davidsj.substack.com/p/sql-forever&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:150634745,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:6,&quot;comment_count&quot;:1,&quot;publication_id&quot;:658281,&quot;publication_name&quot;:&quot;davidj.substack&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!bG38!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fea52a4-dc41-4f4d-93f4-bcfdd60e4ea1_666x666.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p></p><p>Out comes a new standard, spearheaded by Snowflake, Salesforce(Tableau) and others - the Open Semantic Interchange. Surely, this is great news. I should be really pleased, right? <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;michael rogers&quot;,&quot;id&quot;:56432892,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F7bb8b99e-39ba-4412-bcd9-703489776d4e_700x700.jpeg&quot;,&quot;uuid&quot;:&quot;95ac774d-bbe9-4cc2-a847-fcb76e2d0364&quot;}" data-component-name="MentionToDOM"></span> sent me the <a href="https://venturebeat.com/ai/the-usd1-trillion-ai-problem-why-snowflake-tableau-and-blackrock-are-giving">article</a> announcing it and asked me if I thought it was a big deal before I had seen it on LinkedIn<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> . The thing is, I&#8217;m not that bothered, and I had to think for a moment as to why. I&#8217;m sure it would have felt like bigger news had I still been at Cube, but even so&#8230; Then it dawned on me - this level of standardisation is much more valuable when human beings are having to learn the DSL. It makes them much less worried that they are learning or deploying something that ends up being niche or unadopted.</p><p>I don&#8217;t really believe that semantic layer code will be managed by humans in the near term. Now that I have great tools like Claude Code and Codex CLI, I don&#8217;t really find myself writing semantic layer YAML any more. Even when they make mistakes, I feed the semantic layer compiler errors back in and let them fix the problem. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mDw5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccad3e2-5963-4c05-886a-ed1d50f3714a_1222x512.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mDw5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccad3e2-5963-4c05-886a-ed1d50f3714a_1222x512.png 424w, https://substackcdn.com/image/fetch/$s_!mDw5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccad3e2-5963-4c05-886a-ed1d50f3714a_1222x512.png 848w, https://substackcdn.com/image/fetch/$s_!mDw5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccad3e2-5963-4c05-886a-ed1d50f3714a_1222x512.png 1272w, https://substackcdn.com/image/fetch/$s_!mDw5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccad3e2-5963-4c05-886a-ed1d50f3714a_1222x512.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mDw5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccad3e2-5963-4c05-886a-ed1d50f3714a_1222x512.png" width="1222" height="512" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1ccad3e2-5963-4c05-886a-ed1d50f3714a_1222x512.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:1222,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;partners&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="partners" title="partners" srcset="https://substackcdn.com/image/fetch/$s_!mDw5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccad3e2-5963-4c05-886a-ed1d50f3714a_1222x512.png 424w, https://substackcdn.com/image/fetch/$s_!mDw5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccad3e2-5963-4c05-886a-ed1d50f3714a_1222x512.png 848w, https://substackcdn.com/image/fetch/$s_!mDw5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccad3e2-5963-4c05-886a-ed1d50f3714a_1222x512.png 1272w, https://substackcdn.com/image/fetch/$s_!mDw5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ccad3e2-5963-4c05-886a-ed1d50f3714a_1222x512.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I recently had to convert some dbt Metricflow YAML to Hex&#8217;s new semantic layer YAML standard. Most semantic layer YAML has ended up very similar to LookML, including Cube, Hex, Count, Snowflake, Thoughtspot and Databricks. In fact, Metricflow is one of the more unusual syntaxes out there. So I typed Claude into Ghostty&#8230; I showed it the Hex and Metricflow specs, I told it where the files to convert were, and off it went. The first two times, upon compilation in Hex, there were errors but I fed these back into Claude Code and upon the third attempt, generated correct Hex semantic YAML. I then asked Claude Code to make an agent markdown file from what it had learned, so that I could make an agent to do this for me should I need to do it again.</p><p>My point is that the cost of translation between different standards, especially when they are so similar, is next to nil. That doesn&#8217;t mean there is no value in an open standard that is well-adopted. It&#8217;s just that the value is diminished. This is partly why I&#8217;m not that excited about it. The driving force behind this new open standard is a desire for increased adoption of semantic layers, driven by the clear demand for AI access to data. However, this very driving force is also why the open standard isn&#8217;t as valuable as it could have been in the past.</p><blockquote><p><em>Enterprise demand for AI capabilities drives the urgency behind OSI. Snowflake reported that nearly <a href="https://www.snowflake.com/en/news/press-releases/snowflake-reports-financial-results-for-the-second-quarter-of-fiscal-2026/">half of new customers in Q2 fiscal 2026</a> chose the platform for AI capabilities, with over 6,100 customers using its AI offerings weekly. - <a href="https://venturebeat.com/ai/the-usd1-trillion-ai-problem-why-snowflake-tableau-and-blackrock-are-giving">link</a></em></p></blockquote><p>For me, the peak moment when an open semantic standard could have been most valuable was soon after Looker got acquired by GCP. Looker was gaining market share fast before the acquisition, and afterwards users were concerned with lock-in. Companies like <a href="https://davidsj.substack.com/p/vote-for-lightdash">Lightdash</a> have succeeded, in part, by addressing these concerns. In hindsight, an open-source BI tool that took a LookML repo as-is and functioned fully with its definitions could have been a great idea.</p><p>There are also notable exceptions in the launch partners in <a href="https://www.linkedin.com/feed/update/urn:li:activity:7376702350079733761/">Databricks, AtScale</a> and Microsoft. Microsoft, through MDX and DAX, have over half of all semantic layer usage easily. They will never sign up to such a standard - it&#8217;s not in their interest. I think this is true of GCP too. That doesn&#8217;t mean an open standard won&#8217;t work without Microsoft, but I would expect that both Databricks and Snowflake would adopt it for it to be meaningful, as they are the two big independent forces in data away from GCP and Microsoft.</p><p>I also know that both Snowflake and Databricks expect semantic layer definitions to one day exist as extensions to their warehouse SQL. They may well support a YAML format too, but it shows they are hedging their bets and would rather lock in customers to something specific to their warehouse for retention and performance.</p><p>The standard could still be useful if it makes it easy to move definitions between commonly used tools like Hex and dbt, and, indeed, tools commonly used together.</p><p>I also doubt that the same YAML in the open standard will be compiled to exactly the same executable code between any given permutation of compiler<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a> and underlying warehouse. It will probably be the same most of the time and produce the same results most of the time, but not all of the time. I think this inconsistency will feel similar to how adoption of ANSI-SQL varies from database to database and how the same SQL on the same data on different platforms can output slightly different results.</p><blockquote><p><em><strong>Participant-specific model mapping and read/write code modules: </strong>These modules will convert OSI models to participant-specific models/languages and will be part of the Apache open-source project.</em><a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a><em> - <a href="https://www.snowflake.com/en/blog/open-semantic-interchange-ai-standard/">link</a></em></p></blockquote><p>I am hopeful the creation of the standard and adoption of it by vendors will improve things, but to me there is a clear <a href="https://xkcd.com/927/">XKCD 927</a> risk.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3y0c!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fa675b6-aec3-4d64-bb83-9e37416d68f7_500x283.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3y0c!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fa675b6-aec3-4d64-bb83-9e37416d68f7_500x283.png 424w, https://substackcdn.com/image/fetch/$s_!3y0c!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fa675b6-aec3-4d64-bb83-9e37416d68f7_500x283.png 848w, https://substackcdn.com/image/fetch/$s_!3y0c!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fa675b6-aec3-4d64-bb83-9e37416d68f7_500x283.png 1272w, https://substackcdn.com/image/fetch/$s_!3y0c!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fa675b6-aec3-4d64-bb83-9e37416d68f7_500x283.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3y0c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fa675b6-aec3-4d64-bb83-9e37416d68f7_500x283.png" width="500" height="283" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6fa675b6-aec3-4d64-bb83-9e37416d68f7_500x283.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:283,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Standards&quot;,&quot;title&quot;:&quot;Fortunately, the charging one has been solved now that we've all standardized on mini-USB. Or is it micro-USB? Shit.&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Standards" title="Fortunately, the charging one has been solved now that we've all standardized on mini-USB. Or is it micro-USB? Shit." srcset="https://substackcdn.com/image/fetch/$s_!3y0c!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fa675b6-aec3-4d64-bb83-9e37416d68f7_500x283.png 424w, https://substackcdn.com/image/fetch/$s_!3y0c!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fa675b6-aec3-4d64-bb83-9e37416d68f7_500x283.png 848w, https://substackcdn.com/image/fetch/$s_!3y0c!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fa675b6-aec3-4d64-bb83-9e37416d68f7_500x283.png 1272w, https://substackcdn.com/image/fetch/$s_!3y0c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fa675b6-aec3-4d64-bb83-9e37416d68f7_500x283.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>Oh well, I&#8217;ll see it in a couple of weeks.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>After all, an open semantic interchange standard doesn&#8217;t necessarily mean there will be a shared compiler.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>There will inevitably be different levels of support from different vendors. Some of this will be because of genuine compatibility reasons, some will be lack of commitment and some will be because others are not participating in good faith and just see this as a rubber stamp or lead source.</p></div></div>]]></content:encoded></item><item><title><![CDATA[SQLMashed]]></title><description><![CDATA[What does this mean for data folks]]></description><link>https://davidsj.substack.com/p/sqlmashed</link><guid isPermaLink="false">https://davidsj.substack.com/p/sqlmashed</guid><dc:creator><![CDATA[David Jayatillake]]></dc:creator><pubDate>Fri, 19 Sep 2025 16:30:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!y_ln!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20dc767d-a4cb-41b6-9c91-722000cb514f_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!y_ln!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20dc767d-a4cb-41b6-9c91-722000cb514f_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!y_ln!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20dc767d-a4cb-41b6-9c91-722000cb514f_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!y_ln!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20dc767d-a4cb-41b6-9c91-722000cb514f_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!y_ln!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20dc767d-a4cb-41b6-9c91-722000cb514f_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!y_ln!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20dc767d-a4cb-41b6-9c91-722000cb514f_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!y_ln!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20dc767d-a4cb-41b6-9c91-722000cb514f_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/20dc767d-a4cb-41b6-9c91-722000cb514f_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Generated image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Generated image" title="Generated image" srcset="https://substackcdn.com/image/fetch/$s_!y_ln!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20dc767d-a4cb-41b6-9c91-722000cb514f_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!y_ln!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20dc767d-a4cb-41b6-9c91-722000cb514f_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!y_ln!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20dc767d-a4cb-41b6-9c91-722000cb514f_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!y_ln!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20dc767d-a4cb-41b6-9c91-722000cb514f_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>As many of you will have heard, the company that looked after SQLGlot and SQLMesh, Tobiko Data, was recently acquired by Fivetran - one of the biggest companies to have come out of the modern data stack era.</p><p>Now that the dust has settled - it&#8217;s been a couple of weeks since the announcement - I thought it would be good to evaluate what it means for data folks and how I feel about it in general.</p><p>There is one sense in which I have no conflict in my thinking. I have got to know the Tobiko team since starting my series on SQLMesh, having since overseen real deployments. I&#8217;m very happy for them in the sense that they built something great, and that they have had what I assume is a successful<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> exit&#129761;.</p><p>After all, the reality of founding companies, especially in VC, is that the company will one day be sold and investors and founders make money. I know people don&#8217;t like to be so explicit about this: they like to talk about the mission and that they&#8217;re building a company not to be acquired, but to become a public company&#8230; one with its own tower in San Francisco, with its logo lit up for the whole city to see. There are very few such companies&#8230; you probably know most of their names. Most VC-backed companies that have a successful exit are acquired. These exits aren&#8217;t so glamorous, they don&#8217;t get to ring the bell at the stock exchange, the founders end up taking middle-management roles at the acquirer with a length of lock-in&#8230; they might get a cool LinkedIn announcement and article in TechCrunch.</p><p>So that&#8217;s fine, from an economic point of view everything makes sense for Tobiko as a company and that&#8217;s why it happened.<br><br>What about for us data folks?</p><p>So this is where, even with a bit of time passed, I still don&#8217;t think it&#8217;s good for us. As much as Fivetran are currently saying that the open source SQLMesh and SQLGlot projects will remain and be maintained&#8230; I don&#8217;t expect this to be the case for that long - all it takes is one difficult quarter and anything unnecessary gets axed. Fundamentally, it is difficult to justify spending expensive engineering time and resource on a free product that could cannibalise the paid one. This is the friction we&#8217;ve seen between dbt core and Cloud and we know where that has ended up: a solid enterprise offering with good feature release cadence but with support for open source neglected and now diverged since the dbt Fusion engine.</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:165562625,&quot;url&quot;:&quot;https://learnanalyticsengineering.substack.com/p/dbt-fusion-has-people-divided-heres&quot;,&quot;publication_id&quot;:629885,&quot;publication_name&quot;:&quot;Learn Analytics Engineering &quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CuB0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5496ce49-b278-41aa-b24e-e678e134b07a_500x500.png&quot;,&quot;title&quot;:&quot;dbt Fusion Has People Divided- Here's Why&quot;,&quot;truncated_body_text&quot;:&quot;Anything that elicits such strong responses (in both directions) from a community deserves to be talked about further. Based on the title, you probably already know I&#8217;m talking about dbt Labs&#8217; new engine called dbt Fusion.&quot;,&quot;date&quot;:&quot;2025-06-12T16:21:02.169Z&quot;,&quot;like_count&quot;:5,&quot;comment_count&quot;:1,&quot;bylines&quot;:[{&quot;id&quot;:66148605,&quot;name&quot;:&quot;Madison Mae&quot;,&quot;handle&quot;:&quot;learnanalyticsengineering&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F85ad6273-a9b9-4151-b1ee-17bcf78e036b_48x48.png&quot;,&quot;bio&quot;:&quot;analytics engineer and technical writer; making data easy to understand and accessible to anyone! passions include nutrition, fitness, reading, &amp; sewing&quot;,&quot;profile_set_up_at&quot;:&quot;2022-04-07T19:41:36.836Z&quot;,&quot;reader_installed_at&quot;:&quot;2025-07-20T16:42:49.303Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:562691,&quot;user_id&quot;:66148605,&quot;publication_id&quot;:629885,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:629885,&quot;name&quot;:&quot;Learn Analytics Engineering &quot;,&quot;subdomain&quot;:&quot;learnanalyticsengineering&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;for the novice or veteran data enthusiast who wants to learn practical analytics engineering skills to apply to their every day work&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5496ce49-b278-41aa-b24e-e678e134b07a_500x500.png&quot;,&quot;author_id&quot;:66148605,&quot;primary_user_id&quot;:66148605,&quot;theme_var_background_pop&quot;:&quot;#00C2FF&quot;,&quot;created_at&quot;:&quot;2021-12-23T11:40:49.079Z&quot;,&quot;email_from_name&quot;:&quot;Learn Analytics Engineering &quot;,&quot;copyright&quot;:&quot;Madison Mae&quot;,&quot;founding_plan_name&quot;:&quot;Founding Member&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;enabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;magaziney&quot;,&quot;is_personal_mode&quot;:false}}],&quot;twitter_screen_name&quot;:&quot;madisonmaeorg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:null,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:false,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://learnanalyticsengineering.substack.com/p/dbt-fusion-has-people-divided-heres?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!CuB0!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5496ce49-b278-41aa-b24e-e678e134b07a_500x500.png"><span class="embedded-post-publication-name">Learn Analytics Engineering </span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">dbt Fusion Has People Divided- Here's Why</div></div><div class="embedded-post-body">Anything that elicits such strong responses (in both directions) from a community deserves to be talked about further. Based on the title, you probably already know I&#8217;m talking about dbt Labs&#8217; new engine called dbt Fusion&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">9 months ago &#183; 5 likes &#183; 1 comment &#183; Madison Mae</div></a></div><p>This negates the idea that the goodwill from community is valuable enough to support the open source project, because if anyone could have done this, dbt could have. Fivetran started as a profit-making company with a proprietary product, and haven&#8217;t been afraid to change prices (to their customer&#8217;s annoyance)&#8230; there is not much in the way of community love or trust. It&#8217;s just an easy to use product that is the right choice in many circumstances.</p><p>Let&#8217;s assume then that SQLMesh is long-term available inside Fivetran only. A lot of us buy Fivetran<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a> as part of our data stack, so in that sense it&#8217;s great because we get something from a vendor we already work with and don&#8217;t have to pass another infosec review etc. Fivetran have also recently bought Census, so they can extract and load data. They were previously using dbt transforms, allowing them to also send transformed data to target systems. They were previously also relying on dbt open source for their transforms, but as I mentioned above, this is now a neglected project. It would be much better for Fivetran to own their own transformation technology, and now they do. As far as I&#8217;m concerned, it is a market leading technology, too. So now Fivetran really is the Informatica of this generation. I also think that this makes Fivetran one of dbt Labs&#8217; biggest rivals now.</p><p>However, even for those of us who do buy Fivetran, this is not all good news. Fivetran will eventually charge for SQLMesh transformation&#8230; otherwise there was no point in buying it. Fivetran need to grow their revenue through cross-selling a new product to the customers they already sell connector services to. So, if you were previously using Fivetran for connectors, and using your orchestrator to run SQLMesh jobs afterwards, you will eventually need to pay Fivetran to run these SQLMesh jobs for you. Now there will certainly be savings to be had through reduced infrastructure work for data and analytics engineers, but it will also be constrained to work inside Fivetran, however this ends up looking&#8230; at best it will be like using a CLI (much like the dbt Cloud CLI) and VSCode extension that will run tasks on Fivetran remotely.</p><p>For those of us who don&#8217;t buy Fivetran, or want to come off it, or wanted to use SQLMesh independently&#8230; things become difficult. At the start of last year, we had the choice of SDF, dbt, SQLMesh and new upstarts including <a href="https://www.tobikodata.com/blog/tobiko-acquires-quary">Quary</a>. Long-term, we really just have dbt Cloud and Fivetran(SQLMesh)&#8230; you could hand-roll your own SQL in your orchestrator or you can pay up or you can fork one of dbt core and SQLMesh and maintain it yourself. </p><p>There are also data warehouse/lakehouse transformation methods offered by Databricks, Snowflake and some newer entrants like <a href="https://docs.bauplanlabs.com/concepts/models">Bauplan</a>, which we never used to consider because of lock-in. However, now that lock-in of some kind is inevitable, we might as well consider them, too. It feels like there is room for a new challenger, but at the same time I&#8217;m getting tired of having to learn new frameworks to achieve the same thing.<br><br>Perhaps it&#8217;s actually reasonable enough to vibe code your own transformation framework that works for your specific project, and suits your style of writing transformation code. It&#8217;s free like a puppy, but at least it&#8217;s your dog.</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>I don&#8217;t know specific numbers, but I don&#8217;t think Tobiko were running out of money, so they didn&#8217;t need to sell. Therefore, they were made an offer that wouldn&#8217;t make sense to refuse. In my mind, this must be at least their last valuation or near to avoid pref stack collapse on equity for the team&#8230; if you aren&#8217;t running out of money you probably wouldn&#8217;t choose that.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>The last four data stacks I have worked on used Fivetran for all or part of batch extraction.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Calling Berlin]]></title><description><![CDATA[The Invisible Semantic Layer]]></description><link>https://davidsj.substack.com/p/calling-berlin</link><guid isPermaLink="false">https://davidsj.substack.com/p/calling-berlin</guid><dc:creator><![CDATA[David Jayatillake]]></dc:creator><pubDate>Sat, 06 Sep 2025 10:10:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!QCwS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e0e0b14-9eed-4979-a73e-4aa94b7fc075_4032x3024.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QCwS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e0e0b14-9eed-4979-a73e-4aa94b7fc075_4032x3024.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QCwS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e0e0b14-9eed-4979-a73e-4aa94b7fc075_4032x3024.heic 424w, https://substackcdn.com/image/fetch/$s_!QCwS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e0e0b14-9eed-4979-a73e-4aa94b7fc075_4032x3024.heic 848w, https://substackcdn.com/image/fetch/$s_!QCwS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e0e0b14-9eed-4979-a73e-4aa94b7fc075_4032x3024.heic 1272w, https://substackcdn.com/image/fetch/$s_!QCwS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e0e0b14-9eed-4979-a73e-4aa94b7fc075_4032x3024.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QCwS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e0e0b14-9eed-4979-a73e-4aa94b7fc075_4032x3024.heic" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8e0e0b14-9eed-4979-a73e-4aa94b7fc075_4032x3024.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3671286,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://davidsj.substack.com/i/172939147?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e0e0b14-9eed-4979-a73e-4aa94b7fc075_4032x3024.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!QCwS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e0e0b14-9eed-4979-a73e-4aa94b7fc075_4032x3024.heic 424w, https://substackcdn.com/image/fetch/$s_!QCwS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e0e0b14-9eed-4979-a73e-4aa94b7fc075_4032x3024.heic 848w, https://substackcdn.com/image/fetch/$s_!QCwS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e0e0b14-9eed-4979-a73e-4aa94b7fc075_4032x3024.heic 1272w, https://substackcdn.com/image/fetch/$s_!QCwS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e0e0b14-9eed-4979-a73e-4aa94b7fc075_4032x3024.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This week, I travelled to Berlin to speak at Data Days Berlin. It was organised by a data consultancy called A11, which has recently spun out of a VC fund called Project A, who had originally built this consultancy for portfolio companies. This is the first year that the conference has been open to people outside of Project A portcos, and it was really great to attend and speak. Everything from the venue to the social events was really enjoyable, too!</p><p>The conference audience was curated by the organising team to filter to people accomplished in the data industry, which made it a really great bunch of people to meet and to present to. When I asked: &#8220;Who knows what a semantic layer in data is?&#8221;, more than half the audience put their hands up, which is unusual. I have spoken to audiences at data events where less than half know what SQL is.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Yi09!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff97e2493-774a-45ca-8ddb-17e4f5b37392_600x338.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Yi09!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff97e2493-774a-45ca-8ddb-17e4f5b37392_600x338.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Yi09!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff97e2493-774a-45ca-8ddb-17e4f5b37392_600x338.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Yi09!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff97e2493-774a-45ca-8ddb-17e4f5b37392_600x338.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Yi09!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff97e2493-774a-45ca-8ddb-17e4f5b37392_600x338.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Yi09!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff97e2493-774a-45ca-8ddb-17e4f5b37392_600x338.jpeg" width="600" height="338" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f97e2493-774a-45ca-8ddb-17e4f5b37392_600x338.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:338,&quot;width&quot;:600,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Veronika x Fotografiska Museum Berlin | Signature Places&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Veronika x Fotografiska Museum Berlin | Signature Places" title="Veronika x Fotografiska Museum Berlin | Signature Places" srcset="https://substackcdn.com/image/fetch/$s_!Yi09!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff97e2493-774a-45ca-8ddb-17e4f5b37392_600x338.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Yi09!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff97e2493-774a-45ca-8ddb-17e4f5b37392_600x338.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Yi09!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff97e2493-774a-45ca-8ddb-17e4f5b37392_600x338.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Yi09!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff97e2493-774a-45ca-8ddb-17e4f5b37392_600x338.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The speaker&#8217;s dinner was at a restaurant based in a building which was where the anti-capitalist movement in Berlin gathered. The dining room we were in had lots of the graffiti and messaging preserved from this era!</figcaption></figure></div><p>The talks I managed to catch were high quality. They seemed to be split between impact focus and how to operate data in organisations to drive value, alongside technical excellence and innovation. This is logical, because data leaders need to be able to excel both as technologists and business people. Strangely, I feel this AI era means we actually need to be better at both at the same time. </p><p>Tools like Claude Code, Cursor etc make us more capable of doing our technical work and allow us to be more ambitious. Vendors we use are rapidly releasing new features for us to, in turn, share with our stakeholders.</p><p>Our stakeholders are clear about what they want. They want AI access to accurate, consistent data. They think this will be by MCP in ChatGPT Enterprise/MS Copilot/Claude Desktop. They still want us to be responsible and accountable for the provision of this access and the quality of the outputs. Maybe this means dashboards are dead, but BI just entered beast mode.</p><p>There are more semantic layers being heavily invested in by huge tech companies, being built by startups or simply being deployed by startups into other AI applications than ever before. I think even by a factor of 10x than at any time in the past.</p><p>Why is this? For the reasons above&#8230; Stakeholders want AI access to data, they have made this our top priority and told us to get it done<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>. I&#8217;m working with an organisation that, through their existing vendor relationships, have access to four<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a> semantic layers and are in the process of trying out three of them, with the aim of making a champion available via MCP in ChatGPT Enterprise as soon as possible. The stakeholders want AI access, the vendors and data teams now both know<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a> they need a semantic layer to make this work - money, attention, product-focus directs to semantic layers.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nbBh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc81d5ad4-105e-4a82-93da-d0a064aa41b7_2048x1536.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nbBh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc81d5ad4-105e-4a82-93da-d0a064aa41b7_2048x1536.heic 424w, https://substackcdn.com/image/fetch/$s_!nbBh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc81d5ad4-105e-4a82-93da-d0a064aa41b7_2048x1536.heic 848w, https://substackcdn.com/image/fetch/$s_!nbBh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc81d5ad4-105e-4a82-93da-d0a064aa41b7_2048x1536.heic 1272w, https://substackcdn.com/image/fetch/$s_!nbBh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc81d5ad4-105e-4a82-93da-d0a064aa41b7_2048x1536.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nbBh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc81d5ad4-105e-4a82-93da-d0a064aa41b7_2048x1536.heic" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c81d5ad4-105e-4a82-93da-d0a064aa41b7_2048x1536.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:433960,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://davidsj.substack.com/i/172939147?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc81d5ad4-105e-4a82-93da-d0a064aa41b7_2048x1536.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nbBh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc81d5ad4-105e-4a82-93da-d0a064aa41b7_2048x1536.heic 424w, https://substackcdn.com/image/fetch/$s_!nbBh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc81d5ad4-105e-4a82-93da-d0a064aa41b7_2048x1536.heic 848w, https://substackcdn.com/image/fetch/$s_!nbBh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc81d5ad4-105e-4a82-93da-d0a064aa41b7_2048x1536.heic 1272w, https://substackcdn.com/image/fetch/$s_!nbBh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc81d5ad4-105e-4a82-93da-d0a064aa41b7_2048x1536.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>With this increased attention on semantic layers and the focus on AI, I feel the era of humans having to create and maintain semantic layers is coming to an end. This was always one of the challenges for semantic layer proliferation. Why do I have to learn another tool? Why do I have to complicate my stack? I don&#8217;t have time right now to invest in building the semantic layer. Why can&#8217;t we just have a good data model?</p><p>If AI looks after the semantic layer, then all of these questions and concerns disappear. The semantic layer is something that AI can create from scratch, from existing metadata or with some limited input from a human in natural language. It can then be maintained through human use and human requests for extension with human approval of changes. All without humans looking after more software, or learning another domain specific language. This isn&#8217;t science-fiction - I have already <a href="https://goiris.ai">seen</a> tools doing this today, and I predict most vendors who provide a semantic layer will offer this by the end of next year.</p><p>Well, I hope to be back in Berlin soon to stay in touch with the friends I made at Data Days and to spend time with even more people from the data community here!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lxrc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feba7121c-bad6-4b56-8db9-3df60724e504_4284x5712.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lxrc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feba7121c-bad6-4b56-8db9-3df60724e504_4284x5712.heic 424w, https://substackcdn.com/image/fetch/$s_!lxrc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feba7121c-bad6-4b56-8db9-3df60724e504_4284x5712.heic 848w, https://substackcdn.com/image/fetch/$s_!lxrc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feba7121c-bad6-4b56-8db9-3df60724e504_4284x5712.heic 1272w, https://substackcdn.com/image/fetch/$s_!lxrc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feba7121c-bad6-4b56-8db9-3df60724e504_4284x5712.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lxrc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feba7121c-bad6-4b56-8db9-3df60724e504_4284x5712.heic" width="1456" height="1941" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eba7121c-bad6-4b56-8db9-3df60724e504_4284x5712.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1941,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2509763,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://davidsj.substack.com/i/172939147?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feba7121c-bad6-4b56-8db9-3df60724e504_4284x5712.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!lxrc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feba7121c-bad6-4b56-8db9-3df60724e504_4284x5712.heic 424w, https://substackcdn.com/image/fetch/$s_!lxrc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feba7121c-bad6-4b56-8db9-3df60724e504_4284x5712.heic 848w, https://substackcdn.com/image/fetch/$s_!lxrc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feba7121c-bad6-4b56-8db9-3df60724e504_4284x5712.heic 1272w, https://substackcdn.com/image/fetch/$s_!lxrc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feba7121c-bad6-4b56-8db9-3df60724e504_4284x5712.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>I am co-hosting London Analytics Meetup X with DeepMind on 24th September - if you&#8217;re in town for Big Data London, it would be great to see you! Check out the details <a href="https://www.meetup.com/london-analytics-group/events/310611440/?slug=london-analytics-group&amp;eventId=310611440">here</a>.</em></p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>I also asked this question at the conference and it was a similar number of people who put up their hands compared to who knew about a semantic layer&#8230; is it correlation or causation? We can&#8217;t tell without a better experiment, but I know that the drivers for it to be causation exist.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>Only one of the four vendors had a semantic layer at the point the organisation engaged with them to begin with. Yes, you would be right in that it was the BI tool. However, with the addition of a semantic layer and AI querying to the other three tools, aren&#8217;t they all BI tools? <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Benn Stancil&quot;,&quot;id&quot;:5667744,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/a317e60a-9bd1-4c75-bb54-66d517f735dc_1100x1100.jpeg&quot;,&quot;uuid&quot;:&quot;17e36c71-e83a-4c0a-a070-b2440b0db34c&quot;}" data-component-name="MentionToDOM"></span> was right&#8230; everything in the data stack becomes a BI tool, even my counterargument to him about <a href="https://www.linkedin.com/posts/schrockn_even-in-the-age-of-ai-self-serve-analytics-activity-7369826785183682560-6Sni?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAABLnj4IBN1VtSmF17FMmUE7BZoO1K8k1D9Q">orchestrators</a>.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>All my preaching has paid off! I am a prophet brought in from the wilderness. Now I can have a Patagonia gilet instead of a burlap sack.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Get on your soapbox ]]></title><description><![CDATA[What is public now?]]></description><link>https://davidsj.substack.com/p/get-on-your-soapbox</link><guid isPermaLink="false">https://davidsj.substack.com/p/get-on-your-soapbox</guid><dc:creator><![CDATA[David Jayatillake]]></dc:creator><pubDate>Tue, 12 Aug 2025 15:16:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!tfMO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05a7534-b193-4c8a-b097-8285ce472272_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tfMO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05a7534-b193-4c8a-b097-8285ce472272_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tfMO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05a7534-b193-4c8a-b097-8285ce472272_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!tfMO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05a7534-b193-4c8a-b097-8285ce472272_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!tfMO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05a7534-b193-4c8a-b097-8285ce472272_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!tfMO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05a7534-b193-4c8a-b097-8285ce472272_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tfMO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05a7534-b193-4c8a-b097-8285ce472272_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b05a7534-b193-4c8a-b097-8285ce472272_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!tfMO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05a7534-b193-4c8a-b097-8285ce472272_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!tfMO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05a7534-b193-4c8a-b097-8285ce472272_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!tfMO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05a7534-b193-4c8a-b097-8285ce472272_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!tfMO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb05a7534-b193-4c8a-b097-8285ce472272_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>For the vast majority of human history, the main way to address many people in order to share public information was to stand on a hill or a platform, in a space where as many people as possible could hear you and you could speak to them. There is obvious evidence of this scattered around the world: Red Square, Tiananmen Square, St Peter&#8217;s Square, Roman amphitheatres... Part of why this is the case is that for most of human history, whilst we&#8217;ve always had language, most humans haven&#8217;t been literate. So you had to be heard directly by them if you wanted to share a message, and didn&#8217;t want to rely on second hand relaying.</p><p>The maximum number of people you can address directly is in the <a href="https://www.researchgate.net/publication/258248986_The_maximum_intelligible_range_of_the_unamplified_human_voice">tens of thousands</a> unamplified, which, before the 20th century, was how all addresses happened. In theory, it&#8217;s since become possible to fill a giant plain or field with tens of millions of people and, with amplification, address them, but there is a limit to what you could really call &#8216;direct&#8217;. At some number, most people will be seeing the speaker on a screen and hearing through speakers and then it&#8217;s functionally the same as watching an address live at the cinema with others.</p><p>Television addresses then extended this to be able to address pretty much anyone who is awake to watch, which is dependent on timezone and people having televisions and electricity. The internet then extended this further, to anyone who has an internet connection and can find the address: think YouTube live streams where hundreds of millions can watch big events. Finally, if you think about asynchronous content like blog posts, viral social posts etc, then the whole connected world could see these, and it then comes down to whether they&#8217;re interested or not.</p><p>The problem with addressing more and more people with the same content is relevance. The more people you address, the less relevant it is to the average person addressed. There are exceptions to this, like for example a presidential address could be considered relevant to the whole country, but vast swathes of the population would still have no interest in hearing from their President.</p><p>Marketing has tried to address this problem of relevancy through segmentation. If you have a large potential audience like the internet, who have a near infinite amount of content and streams to ignore, then you have to be as relevant as possible and in the right place at the right time to cut through the noise. This activity, and the mastery of it, is what has made Google so valuable, having been the most valuable company in the world on multiple occasions.</p><p>However, even fine segmentation ends up crude. Broad segmentation gives significant sample size, as well as clarity of preference between one segment and another, but with lower average relevance. Fine segmentation can give higher relevance, but less clarity and certainty about preferences and relevance due to disparate segment sizes, with some very small segments. Marketers have had to balance this for a long time and optimise marketing spend in this way. Finding the right segment, channel, time, message, call to action&#8230; It&#8217;s even been called personalisation, but it&#8217;s never been personal. It&#8217;s always been about pigeon-holing you in as appropriate a hole as possible.</p><p>Now, if you think about why we&#8217;ve gone from sharing the same message to as many people as possible to segmentation in the connected world, the reason is that the idea of addressing every single person specifically and individually hasn&#8217;t been possible. Until now.</p><p>It&#8217;s possible that 1 billion people will use something like ChatGPT every day within a few years, and, if you include Google&#8217;s new AI search functionality, that may even be next year. With chat-based AI systems like this, you <strong>can </strong>address everyone personally. People are now regularly asking them questions, correcting them, continuing conversations. You don&#8217;t need to segment them to an approximate preference group. You can just know what they are directly. You could even just ask them. You can tailor every address to every single person according to their styles, likes, interests. Every product, service or content can be assessed and addressed personally for relevance and preference to that person. </p><p>Leaders, governments, companies, organisations&#8230; around the world could become more accessible to the public. Gov.chat. You could canvass voters at a never-before-seen level. Worried that a policy isn&#8217;t popular? Ask the public, the <strong>whole</strong> public, not some biased focus group, about their preference. It&#8217;s a two-way conversation too - every member of the public who wants to ask something or say something can do so, and it can be aggregated by similarity or matched against law, policy, content to be answered. The few truly novel questions then become answerable by humans.</p><p>Or, would these leaders, governments, companies and organisations learn about your fears, worries, insecurities and weaknesses, and tailor their interactions with you to manipulate you to do what they want? Buy this, vote for this, believe this, hate those people&#8230; </p><p>As usual, the truth will be in the middle.</p><p>Every influencer, thought-leader or blogger could have their own agent: Benn.agent for post-modern data realism, Joe.agent for platform-agnostic data engineering principles, Madison.agent for analytics engineering help, Zach.agent and Ben.agent for data engineering guidance, Jess.agent for SQL and remote work envy, Randy.agent for product analytics, Ananth.agent for data engineering news&#8230; David.agent for an esoteric combination of all of these, with sprinklings of AI and semantic layers, and whatever else is distracting me right now. It&#8217;s like simulating what they would say to any question or topic in your head<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>, except with higher RAG-driven accuracy.</p><p>An agent can sound like me and say the same things as me, because I have already said a lot of things. I have produced a lot of text. Hundreds of thousands of tokens. Hundreds of vectors to search for relevant topics. An imprint of me, an essence of my thoughts.</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>Everyone does this, right? I can even hear the people say the things if it&#8217;s close enough to their style.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Thank You, Goodbye and Good Luck!]]></title><description><![CDATA[So long, and thanks for all the fish - a personal update]]></description><link>https://davidsj.substack.com/p/thank-you-goodbye-and-good-luck</link><guid isPermaLink="false">https://davidsj.substack.com/p/thank-you-goodbye-and-good-luck</guid><dc:creator><![CDATA[David Jayatillake]]></dc:creator><pubDate>Thu, 31 Jul 2025 21:10:22 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1522426266214-ec2d2abb9ce0?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxqb3VybmV5fGVufDB8fHx8MTc1Mzk5NTEzMHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1522426266214-ec2d2abb9ce0?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxqb3VybmV5fGVufDB8fHx8MTc1Mzk5NTEzMHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://images.unsplash.com/photo-1522426266214-ec2d2abb9ce0?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxqb3VybmV5fGVufDB8fHx8MTc1Mzk5NTEzMHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1522426266214-ec2d2abb9ce0?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxqb3VybmV5fGVufDB8fHx8MTc1Mzk5NTEzMHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1522426266214-ec2d2abb9ce0?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxqb3VybmV5fGVufDB8fHx8MTc1Mzk5NTEzMHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1522426266214-ec2d2abb9ce0?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxqb3VybmV5fGVufDB8fHx8MTc1Mzk5NTEzMHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1522426266214-ec2d2abb9ce0?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxqb3VybmV5fGVufDB8fHx8MTc1Mzk5NTEzMHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" width="4288" height="2848" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1522426266214-ec2d2abb9ce0?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxqb3VybmV5fGVufDB8fHx8MTc1Mzk5NTEzMHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2848,&quot;width&quot;:4288,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;timelapse photo of road during nighttime&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="timelapse photo of road during nighttime" title="timelapse photo of road during nighttime" srcset="https://images.unsplash.com/photo-1522426266214-ec2d2abb9ce0?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxqb3VybmV5fGVufDB8fHx8MTc1Mzk5NTEzMHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1522426266214-ec2d2abb9ce0?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxqb3VybmV5fGVufDB8fHx8MTc1Mzk5NTEzMHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1522426266214-ec2d2abb9ce0?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxqb3VybmV5fGVufDB8fHx8MTc1Mzk5NTEzMHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1522426266214-ec2d2abb9ce0?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxqb3VybmV5fGVufDB8fHx8MTc1Mzk5NTEzMHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="true">Ricardo Rocha</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p>Today marks my last day at Cube.</p><p>Firstly, I&#8217;d like to say thank you to everyone I&#8217;ve worked with there and who ultimately provided Michael and I with an exit where we were able to make all our investors whole and to continue to work on applying AI to semantic layers.</p><p>I&#8217;m lucky enough to be in a position that I am able to make ends meet from my other income. So please don&#8217;t take this as one of those posts eliciting sympathy for a difficult situation post-job, this is not the case - I&#8217;m just reflecting.</p><p>I still believe that Cube has the best universal semantic layer out there, and it is the only fully functional open source one of enough significance to be considered an open standard. Godspeed to the Cube team as they continue on their agentic analytics journey. I truly wish them the best and every success on this journey.</p><p>I still believe that semantic layers are important and even more so than when I first started writing about them a few years ago. I still remember the magic of using LookML for the first time in 2019. It&#8217;s been a bumpy road for semantic layers in that time, but now that the impetus from agentic analytics is driving our industry forward, this time by stakeholders dragging us forward instead of technologists, I think we&#8217;re nearly there. Every cloud data platform provider now except AWS&#8230; Databricks, Snowflake, GCP, MSFabric, now have a semantic layer of some form that isn&#8217;t just a knowledge graph but also has a compiler.</p><p>The question I have for the future is whether the semantic layer needs to be seen or can fade into the background. Semantic layers need to exist and need to be codified and compiled, but does that mean humans need to see it or touch it directly? Can AI maintain semantic layers in an invisible way for normal operation? Sure, if you ask the definition of a metric or how the data model fits together, it can answer you. This doesn&#8217;t have to mean that human engineers maintain it as code. This is the way that many BI tools that have semantic layers are going. To start with, they are offering extension and maintenance using AI, then they will offer initial creation, then agents will simply show you the code and explain changes they will make&#8230; will they always have to show you the code?</p><p>It will feel like the formation of collective neural pathways to use data. The pathways are reused, the pathways provide fast and consistent operation, the pathways slowly evolve as definitions and models change over time. An automatically managed codification of collective truth with data. I&#8217;m excited to see who succeeds here first!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://davidsj.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading davidj.substack! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="directMessage button" data-attrs="{&quot;userId&quot;:64081583,&quot;userName&quot;:&quot;David Jayatillake&quot;,&quot;canDm&quot;:null,&quot;dmUpgradeOptions&quot;:null,&quot;isEditorNode&quot;:true}" data-component-name="DirectMessageToDOM"></div><p></p>]]></content:encoded></item><item><title><![CDATA[Junior Extinction]]></title><description><![CDATA[At the speed of iteration]]></description><link>https://davidsj.substack.com/p/junior-extinction</link><guid isPermaLink="false">https://davidsj.substack.com/p/junior-extinction</guid><dc:creator><![CDATA[David Jayatillake]]></dc:creator><pubDate>Tue, 29 Jul 2025 16:46:05 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!DDTK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ae08f25-01cd-4be2-8f1e-5ff2a80f0e1f_1024x1024.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DDTK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ae08f25-01cd-4be2-8f1e-5ff2a80f0e1f_1024x1024.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DDTK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ae08f25-01cd-4be2-8f1e-5ff2a80f0e1f_1024x1024.heic 424w, https://substackcdn.com/image/fetch/$s_!DDTK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ae08f25-01cd-4be2-8f1e-5ff2a80f0e1f_1024x1024.heic 848w, https://substackcdn.com/image/fetch/$s_!DDTK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ae08f25-01cd-4be2-8f1e-5ff2a80f0e1f_1024x1024.heic 1272w, https://substackcdn.com/image/fetch/$s_!DDTK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ae08f25-01cd-4be2-8f1e-5ff2a80f0e1f_1024x1024.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DDTK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ae08f25-01cd-4be2-8f1e-5ff2a80f0e1f_1024x1024.heic" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7ae08f25-01cd-4be2-8f1e-5ff2a80f0e1f_1024x1024.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:253940,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://davidsj.substack.com/i/137663088?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ae08f25-01cd-4be2-8f1e-5ff2a80f0e1f_1024x1024.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DDTK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ae08f25-01cd-4be2-8f1e-5ff2a80f0e1f_1024x1024.heic 424w, https://substackcdn.com/image/fetch/$s_!DDTK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ae08f25-01cd-4be2-8f1e-5ff2a80f0e1f_1024x1024.heic 848w, https://substackcdn.com/image/fetch/$s_!DDTK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ae08f25-01cd-4be2-8f1e-5ff2a80f0e1f_1024x1024.heic 1272w, https://substackcdn.com/image/fetch/$s_!DDTK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ae08f25-01cd-4be2-8f1e-5ff2a80f0e1f_1024x1024.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>There has been a lot of <a href="https://iamcharliegraham.substack.com/p/junior-roles-arent-going-away">discussion</a> about whether junior engineering roles of all kinds will disappear completely.</p><p>You may have read some of my recent posts and thought that my point of view was that they would disappear, but it&#8217;s not quite so binary as that. I can see that high-growth early-stage companies may never hire junior engineers again, but they are quite small companies and didn&#8217;t really hire juniors much anyway, because they didn&#8217;t have the bandwidth to train them.</p><p>The other driving force is that large tech companies are laying off and not hiring as many engineers, and they are definitely not hiring juniors in the same way anymore. Previously, graduates from Stanford, Berkeley, MIT, Oxford, Cambridge, Imperial, etc in CompSci didn&#8217;t have to look hard for work after graduating, if they had to look at all. The big tech companies would look to hire as many of these graduates as possible to enter their graduate schemes and fill the pipeline of future labour they would need. This is clearly no longer happening, mostly because tech companies don&#8217;t believe they will need as many humans in the future.</p><p>However, I doubt they aren&#8217;t hiring any junior engineers at all... They&#8217;re probably still hiring at least 10% of the graduates they used to, and perhaps these are the very best who, during their time in education, had already built a lot of things and contributed meaningfully to open source software, etc. In traditional industries, this reduction in hiring is probably not nearly as severe. I doubt large banks have significantly changed their hiring practices in the past year. In traditional industries, I think at least 50% of junior engineering positions in a given year would still exist.</p><p>So, clearly, this is not an extinction. It&#8217;s a reduction. One thing that I think we are very close to achieving is having AI-augmented engineers capable of handling a significantly larger volume of work than engineers of 4 years ago.</p><p>Others have argued that we&#8217;re creating a significant problem for ourselves by not hiring junior engineers. Now, we&#8217;re not talking about none at all - let&#8217;s say 50% of what we used to across all industries at worst case, which is still a lot, given how many we used to hire across the world. Junior engineers typically spend about 5 years advancing to mid- to senior-level engineers. Five years from now, the level of AI-augmentation in engineering will be inconceivable compared to what we see today with market-leading tools like Claude Code. I think if we even have half the pipeline of engineering talent come through at that time, we will have more than enough human labour to do all the engineering work we need to with AI Assistance.</p><p>This also doesn&#8217;t mean there is no work at all for graduates who no longer have traditional engineering jobs to pursue. <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Charlie Graham&quot;,&quot;id&quot;:11087309,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/65728800-54e4-4300-8a0f-8b97dad6654b_500x500.jpeg&quot;,&quot;uuid&quot;:&quot;798aeb30-3928-467b-9344-1808c7ece289&quot;}" data-component-name="MentionToDOM"></span>&#8217;s post, which I linked above, shared some ideas about what the new important skills would be, and I agree with them:</p><p><em>Today, companies hire for coding chops, writing skills, or analysis ability. Those roles will shrink and be replaced by people who can become experts at:</em></p><ul><li><p><em>Prompting and directing AI agents precisely</em></p></li><li><p><em>Clear communication, turning complex ideas into effective prompts</em></p></li><li><p><em>Multi-tasking expertise, quickly and constantly context-switching and responding to different AIs at their stopping points</em></p></li><li><p><em>AI orchestration, using different AI agents and having them check each other</em></p></li><li><p><em>Managing AI workflows and knowing when to intervene</em></p></li><li><p><em>Native AI intuition, an intuitive understanding of how AI works, where it is likely to go wrong, and how to keep it on track</em></p></li></ul><p>The skillset that Charlie describes is a mixture of Product Manager, Architect and Engineering Manager in today&#8217;s roles, in addition to AI specialism, which will diminish over time as we need to compensate less for AI's rough edges. I also think architecture skills are incredibly useful in this new world, too.</p><div class="pullquote"><p>While not nearly as good as the top talent I have worked with, these agents have the advantage of being &lt;10% the cost, available 24/7, and responding with results in a few minutes instead of hours or days.</p></div><p>This speed of iteration is something I&#8217;ve been thinking about a lot. Right now, if you want a human engineer to make a change, regardless of size, you have to follow a process:</p><ol><li><p>Get that engineer&#8217;s attention. You might be able to ping them on Slack and get them to drop what they&#8217;re doing immediately, but often you need to have what you want prioritised through backlog grooming and scheduled into a sprint sometime this quarter.</p></li><li><p>Then, once you have the engineer&#8217;s attention for the task at hand, you would typically discuss it with them on a call or face-to-face to ensure maximum context sharing, and perhaps send at least a few messages over Slack or on your Jira ticket if there is already a lot of shared context.</p></li><li><p>Then the engineer might go home and then to sleep because it&#8217;s the end of the working day, and they had meetings and other tasks to attend to before working on what you wanted.</p></li><li><p>Then they&#8217;ll spend something like half a day getting their head into the context, asking clarifying questions once they fully understand the situation and any unseen tradeoffs.</p></li><li><p>Then they might spend another half a day making the change, writing tests, etc.</p></li><li><p>Finally, you have something to see in a demo environment.</p></li></ol><p>The day I suggested the engineer would spend on the small change includes all the human-related activities like getting coffee, going to the bathroom, having lunch, chatting with Mike about the upcoming Neuromancer TV adaptation, responding to significant other&#8217;s Whatsapp messages, catching up with Substack and HackerNews... It could be a bit shorter or much longer.</p><p>If you had asked Claude Code to make the change, it would have made an attempt, and if it was allowed to keep iterating without intervention, would make a &#8220;boop&#8221; sound from your terminal a few minutes later, in less than the time it took you to read this far in this post.</p><p>It may then need you to unblock it by providing an API key or some kind of direction, or allow it to run main.py on your machine. You may need to go through a handful more iterations than this, but within some time that is probably less than half an hour, you will have something that does what you want unless you have been far too ambitious or unclear.</p><p>Then you can taste test and iterate. Within a day, you can have what would have taken weeks with other humans. Yes, there still needs to be oversight and strong review processes for merging anything, and maybe a level of rewrite required to meet specific company code standards. This is where you have true production with paying customers - where you don&#8217;t yet, you can YOLO and merge. The speed at which new products can be created and released has increased by 10 to 100 times in just three years.</p><p>Startups that aim to fail fast can build in a week, attempt to sell the following week, and choose to pivot within a month of product idea inception.</p><p>We&#8217;re also seeing that the successful products of this generation are not expensive SaaS tools with enterprise sales cycles. They are cheap subscription-based products which cost $10 to $20<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> per user per month. These products ship updates daily; they aren&#8217;t overly concerned with shipping a few bugs because their customers don&#8217;t pay enough to complain very loudly. The key is taste - does the product work well enough to please their customer, does the velocity in releases keep the product ahead of the competition sufficiently that customers don&#8217;t jump ship<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a>.</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>Although I have been tempted to upgrade to Claude Code Max&#8230; what do I do with the part of my day when I&#8217;m over my usage limits? I was weighing up whether I would use it enough to warrant going for the $200 tier, just based on need&#8230; there was no question of value.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>Look at what happened with me and Cursor: it didn&#8217;t do something I needed and I switched to Windsurf. I still pay for Windsurf, but there will come a time soon, now that I&#8217;ve been using Claude Code in a terminal in Windsurf, that I may realise that I haven&#8217;t used Cascade in Windsurf for a while and therefore stop paying for Windsurf and switch to using Claude Code in VS Code. Maybe I should even learn Vim? If I only use Claude Code, terminal and Vim on a machine&#8230; do I need a Mac? Could I just have a very basic Linux Distro with no GUI at all?</p></div></div>]]></content:encoded></item><item><title><![CDATA[Gloves off, knives out]]></title><description><![CDATA[Anthropic cuts Windsurf off... and then lets them back in?]]></description><link>https://davidsj.substack.com/p/gloves-off-knives-out</link><guid isPermaLink="false">https://davidsj.substack.com/p/gloves-off-knives-out</guid><dc:creator><![CDATA[David Jayatillake]]></dc:creator><pubDate>Wed, 23 Jul 2025 16:33:31 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1702328100932-10478688e012?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw5fHxzd29yZCUyMGZpZ2h0fGVufDB8fHx8MTc1MzE3Mzc3N3ww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1702328100932-10478688e012?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw5fHxzd29yZCUyMGZpZ2h0fGVufDB8fHx8MTc1MzE3Mzc3N3ww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://images.unsplash.com/photo-1702328100932-10478688e012?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw5fHxzd29yZCUyMGZpZ2h0fGVufDB8fHx8MTc1MzE3Mzc3N3ww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1702328100932-10478688e012?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw5fHxzd29yZCUyMGZpZ2h0fGVufDB8fHx8MTc1MzE3Mzc3N3ww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1702328100932-10478688e012?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw5fHxzd29yZCUyMGZpZ2h0fGVufDB8fHx8MTc1MzE3Mzc3N3ww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1702328100932-10478688e012?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw5fHxzd29yZCUyMGZpZ2h0fGVufDB8fHx8MTc1MzE3Mzc3N3ww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1702328100932-10478688e012?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw5fHxzd29yZCUyMGZpZ2h0fGVufDB8fHx8MTc1MzE3Mzc3N3ww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" width="4572" height="3048" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1702328100932-10478688e012?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw5fHxzd29yZCUyMGZpZ2h0fGVufDB8fHx8MTc1MzE3Mzc3N3ww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:3048,&quot;width&quot;:4572,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;a couple of people that are in a gym&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="a couple of people that are in a gym" title="a couple of people that are in a gym" srcset="https://images.unsplash.com/photo-1702328100932-10478688e012?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw5fHxzd29yZCUyMGZpZ2h0fGVufDB8fHx8MTc1MzE3Mzc3N3ww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1702328100932-10478688e012?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw5fHxzd29yZCUyMGZpZ2h0fGVufDB8fHx8MTc1MzE3Mzc3N3ww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1702328100932-10478688e012?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw5fHxzd29yZCUyMGZpZ2h0fGVufDB8fHx8MTc1MzE3Mzc3N3ww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1702328100932-10478688e012?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw5fHxzd29yZCUyMGZpZ2h0fGVufDB8fHx8MTc1MzE3Mzc3N3ww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="true">Anna Saveleva</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p><em>I wrote the initial part of this article in June&#8230; things move fast in the AI world!</em></p><p>Recently, I heard the news that Anthropic had removed first-party access to Windsurf. Anthropic&#8217;s Claude 3.5+ models have been the ones that I have mostly used in Windsurf and Cursor, so this news is somewhat disconcerting. If I wanted to use Claude in proactive AI coding<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> workflows, I&#8217;ll have to use another tool like Cursor, Void or nao.</p><p>I&#8217;ve had such good results using these Claude models for this workflow that I haven&#8217;t felt the need to try Gemini 2.5 Pro yet, but it looks like I will end up doing that sooner rather than later.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LnFt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F348e687a-3f91-490f-9696-3315d6a5b064_747x492.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LnFt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F348e687a-3f91-490f-9696-3315d6a5b064_747x492.png 424w, https://substackcdn.com/image/fetch/$s_!LnFt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F348e687a-3f91-490f-9696-3315d6a5b064_747x492.png 848w, https://substackcdn.com/image/fetch/$s_!LnFt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F348e687a-3f91-490f-9696-3315d6a5b064_747x492.png 1272w, https://substackcdn.com/image/fetch/$s_!LnFt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F348e687a-3f91-490f-9696-3315d6a5b064_747x492.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LnFt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F348e687a-3f91-490f-9696-3315d6a5b064_747x492.png" width="747" height="492" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/348e687a-3f91-490f-9696-3315d6a5b064_747x492.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:492,&quot;width&quot;:747,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:98804,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://davidsj.substack.com/i/165287837?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F348e687a-3f91-490f-9696-3315d6a5b064_747x492.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LnFt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F348e687a-3f91-490f-9696-3315d6a5b064_747x492.png 424w, https://substackcdn.com/image/fetch/$s_!LnFt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F348e687a-3f91-490f-9696-3315d6a5b064_747x492.png 848w, https://substackcdn.com/image/fetch/$s_!LnFt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F348e687a-3f91-490f-9696-3315d6a5b064_747x492.png 1272w, https://substackcdn.com/image/fetch/$s_!LnFt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F348e687a-3f91-490f-9696-3315d6a5b064_747x492.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A few weeks ago, I wrote about how I thought that Windsurf joining OpenAI could open a whole raft of possible advantages in terms of better model access, specialised model creation for different Windsurf flow states, and just raw GPU muscle for the Windsurf team to use to build new models of their own - which it turns out they were doing long before the acquisition.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;d8c7eb3e-48ef-4c72-85e4-65b11f43ba1d&quot;,&quot;caption&quot;:&quot;A couple of weeks ago, I wrote about the acquisition of Windsurf by OpenAI and how it could be really significant for the speed of automation in coding.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Tailor Made&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64081583,&quot;name&quot;:&quot;David Jayatillake&quot;,&quot;bio&quot;:&quot;VP of AI at Cube.dev&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1597ff03-37e4-4b78-a9fb-065c868972a0_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-05-21T18:17:06.830Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7e03bb54-bb96-47b3-9eaf-f07cc86fb4fe_1200x675.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://davidsj.substack.com/p/tailor-made&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:163949254,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:3,&quot;comment_count&quot;:4,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;davidj.substack&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!bG38!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fea52a4-dc41-4f4d-93f4-bcfdd60e4ea1_666x666.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>This development reveals the darker and more troubling side of the situation. Despite many thousands or even hundreds of thousands of Windsurf users enjoying Anthropic models in Windsurf, who have no additional affiliation with OpenAI prior to the acquisition, Anthropic (clearly for competitive reasons) has decided to revoke access.</p><p>This isn&#8217;t unexpected; Windsurf essentially serves as both a training data generator and a tool for coding. It continuously generates context for AI-generated code, including the code that was actually generated, as well as various approximate and direct confirmations of quality. It&#8217;s very easy to generate a huge training set where Anthropic&#8217;s models have generated the code, and it has been confirmed to be good. This training set is then used to build Windsurf&#8217;s own models. Clearly, this was tolerable to Anthropic while Windsurf was independent, but now, faced with the possibility of enhancing their largest competitor&#8217;s models, too&#8230; a bridge too far.</p><p>While the advantages I discussed above and in my previous post are clear for Windsurf within OpenAI, there are also clear disadvantages. If Cursor remains independent, it is possible that they will continue to enjoy being able to use any model they like, whereas Windsurf is being restricted to fewer. If GCP decide also to remove access to Gemini models, then Windsurf becomes very restricted indeed.</p><p>It would seem very unlikely that OpenAI would go tit for tat and restrict use of its models in Cursor in order to counter the disadvantage now felt by Windsurf, as Cursor&#8217;s use of OpenAI models generates a very valuable training dataset for OpenAI.</p><p><em>As I said above, I wrote the first part of this post in June and then published some posts related to other ideas instead. Some unexpected events occurred after this!</em></p><p>The OpenAI deal suddenly falls apart, and the first we hear about it is that the founders and core AI engineers at Windsurf are moving to GCP, seemingly leaving the rest of the company behind. The GCP deal is a <a href="https://kwokchain.com/2025/07/15/the-halo-effect/">HALO</a> agreement, where they have a non-exclusive license for Windsurf&#8217;s IP, for which they paid $ 2.4 B. </p><p>You&#8217;d imagine that with this much money going round, the investors in Windsurf and the remaining staff are made whole. After all, many members of the Windsurf team would have incurred significant opportunity costs to join a high-growth organisation with no reason to believe it would soon cease to be an independent company. However, we don&#8217;t know the <a href="https://threadreaderapp.com/thread/1944406541064433848.html?utm_source=tldrnewsletter">details</a>, and we probably never will. By the time we might have the information, our attention will have moved on, and we won&#8217;t take the time to find it.</p><p>The reason the OpenAI deal fell apart seems to be that OpenAI didn&#8217;t want the intellectual property acquired with Windsurf to be <a href="https://techcrunch.com/2025/07/11/windsurfs-ceo-goes-to-google-openais-acquisition-falls-apart/">accessible</a> to Microsoft, but they couldn&#8217;t get this to work legally so they pulled out of the deal. This is a worrying sign for OpenAI; clearly, they felt it was worth a lot of value to acquire Windsurf, and they had looked at Cursor before, but the price was too steep. </p><p>AI-powered IDEs are one of the clearest winning use cases for LLMs, which also have a flywheel effect in generating high-quality training data to then improve LLMs&#8217; ability to serve the use case. OpenAI took the time to announce the deal to great fanfare and then had to pull out, which is frankly pretty embarrassing. I&#8217;m sure there will be other tales about what happened in order to soften the impact, but fundamentally, if you&#8217;re going to announce something like an acquisition, it doesn&#8217;t look good if you&#8217;re forced to back out.</p><p>I think this effect of the investment from Microsoft and OpenAI&#8217;s legal structure could make OpenAI less able to compete against its rivals who don&#8217;t have the same encumbrance. If Microsoft had access to the IP, then OpenAI would strengthen Microsoft through their acquisition and wouldn&#8217;t gain any IP that was uniquely theirs, eliminating the point of acquiring it in the first place. The more I think about it, the more this feels like a noose.</p><p>Then as a final twist, the remainder of Windsurf gets <a href="https://cognition.ai/blog/windsurf">acquired by Cognition</a>, who are the makers of Devin. I really think this is a great fit<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a>. There is a continuum of how AI can be involved with software engineering, with Windsurf on the left (pretty close to how SWE is done now, but with copilot and IDE agent) and Devin on the right (about as far away from how SWE is done now as is possible<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a>). The activity on Windsurf produces the perfect training data and subagents to then improve Devin. </p><p>You can envisage land and expand happening, initially with engineers at a company having access to Windsurf as the first product offering in a deal with Cognition, and then gradually transferring more and more of the process until they are using Devin, with the engineers supervising and designing instead of actually building.</p><p>The first steps would be using Devin in CI to perform linting, document changes, adding test coverage, and implementing telemetry coverage. This would also involve enforcing code standards, adhering to package update policies, and handling DevOps tasks, including penetration tests, minor bug fixes, and investigating and resolving medium to major bugs. Then, once Devin was trusted to do these things, you&#8217;d start to use it with Jira to complete tasks of a small t-shirt size, which are well-documented and described by a product manager. The product managers begin to see the point in finally writing good PRDs with clear requirements, and writing bigger epochs, with the assistance of AI, that get split into many smaller tasks that can be worked on in parallel by many agents. I think where you go beyond this point, you&#8217;re in Loveable and Bolt territory.</p><p>Working with Claude Code in recent days has made me feel like the progression I described above is possible and even probable, when I didn&#8217;t feel like that before. It&#8217;s made me that much more capable than I was with Windsurf (in fact, I&#8217;ve begun to use Claude Code in Windsurf, and it&#8217;s a pretty great experience, especially where you know the space very well).</p><p>Now that Windsurf are part of Cognition, they have been allowed to offer all Anthropic models again, so we&#8217;re back to where we started at the beginning of this post&#8230; but a lot has changed, too.</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>As opposed to a copilot in the text editor of the IDE, which I consider reactive. I haven&#8217;t used copilots very much recently and have mostly talked to Cascade and watched what it has done in the text editor, and then fed back changes I wanted here, too.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>Beyond my thoughts on why it&#8217;s a good fit, the now lack of core engineering at Windsurf, with very strong GTM remaining, and the opposite being true at Cognition, also means the acquisition makes <a href="https://techcrunch.com/2025/07/19/windsurf-ceo-opens-up-about-very-bleak-mood-before-cognition-deal/#:~:text=The%20deal%20fell%20through%20due,according%20to%20local%20media%20outlets.">great sense</a> from a talent perspective.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>Except if you consider tools like Loveable and Bolt, where SWE is abstracted away from product development entirely.</p><p></p></div></div>]]></content:encoded></item><item><title><![CDATA[AI-Shoring]]></title><description><![CDATA[The end of off-shoring]]></description><link>https://davidsj.substack.com/p/ai-shoring</link><guid isPermaLink="false">https://davidsj.substack.com/p/ai-shoring</guid><dc:creator><![CDATA[David Jayatillake]]></dc:creator><pubDate>Thu, 10 Jul 2025 17:39:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7ddb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5bb59f2-93ad-40a7-a566-bc2096bbdc5a_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7ddb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5bb59f2-93ad-40a7-a566-bc2096bbdc5a_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7ddb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5bb59f2-93ad-40a7-a566-bc2096bbdc5a_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!7ddb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5bb59f2-93ad-40a7-a566-bc2096bbdc5a_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!7ddb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5bb59f2-93ad-40a7-a566-bc2096bbdc5a_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!7ddb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5bb59f2-93ad-40a7-a566-bc2096bbdc5a_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7ddb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5bb59f2-93ad-40a7-a566-bc2096bbdc5a_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e5bb59f2-93ad-40a7-a566-bc2096bbdc5a_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!7ddb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5bb59f2-93ad-40a7-a566-bc2096bbdc5a_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!7ddb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5bb59f2-93ad-40a7-a566-bc2096bbdc5a_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!7ddb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5bb59f2-93ad-40a7-a566-bc2096bbdc5a_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!7ddb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5bb59f2-93ad-40a7-a566-bc2096bbdc5a_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">They&#8217;re over there somewhere</figcaption></figure></div><p>There are lot of people out there saying that this is the end of software and data engineering, and that these jobs will not exist in the near future. I&#8217;m not sure that this will be the case. I think what is more likely is that we will use fewer humans to do more work and after this progresses to a certain point, the cost savings from having fewer humans diminishes. Imagine having one staff/principal engineer working with AI/agents or whatever the next thing will be, doing the work of 10 or more engineers in the pre-AI era.</p><p>This kind of force multiplier is almost certainly possible. There are huge benefits in only having one engineer in an engineering team. One engineer can essentially move at whatever speed they like, they don&#8217;t have to bring everyone else with them. They don&#8217;t have to spend loads of time on documentation and meetings. They don&#8217;t have to share context. They don&#8217;t have to train up junior engineers<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>. </p><p>Having this one staff/principal engineer will not cost anything like having the 10 engineer team with management costs. It will most likely cost less than 10% of the old-style team. Largely, this could translate to it costing less than one tenth of what it used to, to build the product. Making this kind of saving in operating cost is too attractive for any company to miss and we are seeing companies around the world already start to move this way. However, trying to have another order of magnitude of savings is much less appealing. You then only save 90% of the cost of one engineer or maybe a bit less, as the engineer doing the equivalent of a 100 person pre-AI engineering team can ask for a fortune in package that the engineer doing the equivalent of 10 can&#8217;t.</p><p>It starts to get perilous, too. Many companies don&#8217;t have 100 engineers. If you only have one engineer, what happens when they leave? AI is not in a place to be entirely  responsible for engineering at companies yet, nor will it be for some time. However, having 10 engineers instead of 100 seems much less problematic to me.</p><p>One thing that I do believe will disappear entirely is off-shoring. At many of the companies I have worked at or worked with, it was common to have a huge number of engineers in Asia or Eastern Europe. It had become difficult and expensive to get the right talent in the West, and large companies especially relied on huge engineering workforces in these regions. You would typically have some level of engineering resource remain at head office to oversee the off-shore work being done. Sometimes this might only have been a technical product manager or an architect.</p><p>If you look back to my assertion above that we&#8217;ll commonly have 10x engineers, empowered with AI tooling then both of the reasons for off-shoring disappear. You don&#8217;t have a talent shortage, as the engineers we already have in the West can now do much more work than before. The cost-savings also greatly diminish due to a much lower headcount. Off-shoring always has a level of overhead due to context and language barriers, plus HR and legal work to maintain a presence overseas. You wouldn&#8217;t do it for just a handful of staff - it has to be a really big number to make sense.</p><p>There are also questions around the efficacy of off-shoring. I have worked with successful off-shore teams who were well thought of by head office, but, to be honest, this was often where head office weren&#8217;t overly high-performing. In the tech industry, it is very rare for off-shoring to happen at all outside of listed companies. It goes against the Silicon Valley mantra to off-shore. With good reason, too - the language, timezone, culture and context barriers to having effective off-shore teams makes it hard for them to be as successful and rapid as on-shore teams who have shared culture, context, timezone and language. I don&#8217;t think the tradeoff is worthwhile any more<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a>.</p><p>There are even multi-nationals who hire in countries with excessively<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a> strong labour protections. In the past, they have accepted this as a trade-off because the labour is cheaper than in the US or UK. In the context of engineers who will be able to do the work of a whole team on their own, the difference between paying a European engineer 100k vs a US one 200k isn&#8217;t that important, because you employ so many fewer of them. It therefore makes sense from a business perspective to hire locally for more pay and be able to change things up quickly if they&#8217;re going wrong. The impact of poor performance is amplified, as the individual now has much higher responsibility and expectations.</p><p>In the past, local engineers and product managers would write complex requirements and project plans for off-shore engineering teams to then go and execute. There would be a constant back and forth to clarify context and details. I would expect this to now happen in Jira/Linear and GitHub. The local product manager or engineer will write a ticket, probably a pretty short and terse one. An AI application may change what they&#8217;ve written into a more optimal set of instructions to then pass on to an AI engineer agent, which will then attempt to execute. The feedback cycle will occur within minutes, allowing the product manager to taste-test the output and the engineer to quickly review and suggest changes or approve the code the AI engineer has produced.</p><p>The future of off-shoring isn&#8217;t off-shoring at all; it&#8217;s agents operating between Jira and CI.</p><p>What about where the company doesn&#8217;t have the experience or know-how to lead AI-assisted development internally? I think if they are at this scale and maturity, then tools like Replit and Loveable can probably build to the level required by these companies.</p><p>By no means am I saying that there is no value to the talent in places where engineering is typically off-shored today. This talent probably needs to come a bit closer to the consumer and build the things that the companies they used to work for would offer to these same consumers. They effectively need to compete with the companies they used to provide services for&#8230;</p><div class="directMessage button" data-attrs="{&quot;userId&quot;:64081583,&quot;userName&quot;:&quot;David Jayatillake&quot;,&quot;canDm&quot;:null,&quot;dmUpgradeOptions&quot;:null,&quot;isEditorNode&quot;:true}" data-component-name="DirectMessageToDOM"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://davidsj.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading davidj.substack! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>I know that many people would react to this with dismay, as it sounds like a lot of grads who want to enter the industry won&#8217;t get a chance to etc. This is one of the negative effects that I&#8217;m sure will happen and we&#8217;re already seeing. It&#8217;s never been worse to be a computer science graduate with no experience looking to be a junior engineer somewhere. I do think this will get worse if they follow the same path&#8230; 40 years ago, very few graduates were looking to become junior software engineers. Most graduates were looking to do other things. As a result of the macro changes we&#8217;re seeing, there will be other things that graduates who would have gone into software engineering will do instead. New industries, new jobs that we can&#8217;t even conceive of yet - and these people will forge them. It just takes a few trailblazers to find something of value.</p><p>Maybe I&#8217;m too old to participate in this, but maybe it&#8217;s my last dance&#8230; We&#8217;ll see!</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>Not to mention that it doesn&#8217;t play well from a PR and labour relations point of view. I&#8217;ve heard of many companies upsetting their home staff who feel threatened by off-shoring, having seen and heard of many other companies laying off their home staff in favour of off-shoring. From a bad globalisation point of view, off-shoring can easily be thought of negatively. Skilled, well-paid work being taken away from Western workers, so that their employers can penny-pinch&#8230; many feel this is unfair and shouldn&#8217;t be allowed. The flipside to this argument, though, is that during the tech booms, employers have always struggled to find enough engineers and therefore used off-shore as a way to fill the gaps where hiring locally or even offering work visas wasn&#8217;t possible.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>I believe you shouldn&#8217;t hire someone unless you can also fire them for misconduct or poor performance. In some countries in Western Europe, it&#8217;s not really possible to fire a poorly performing employee any more. I&#8217;ve witnessed managers just accept that they will have people in these teams until they choose to move on.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Agents]]></title><description><![CDATA[Software will eat the world, but agents will eat software]]></description><link>https://davidsj.substack.com/p/agents</link><guid isPermaLink="false">https://davidsj.substack.com/p/agents</guid><dc:creator><![CDATA[David Jayatillake]]></dc:creator><pubDate>Tue, 01 Jul 2025 15:52:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!5Rq0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e8e7a36-e832-4ded-9de6-d504cc1ad91f_1400x700.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5Rq0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e8e7a36-e832-4ded-9de6-d504cc1ad91f_1400x700.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5Rq0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e8e7a36-e832-4ded-9de6-d504cc1ad91f_1400x700.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5Rq0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e8e7a36-e832-4ded-9de6-d504cc1ad91f_1400x700.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5Rq0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e8e7a36-e832-4ded-9de6-d504cc1ad91f_1400x700.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5Rq0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e8e7a36-e832-4ded-9de6-d504cc1ad91f_1400x700.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5Rq0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e8e7a36-e832-4ded-9de6-d504cc1ad91f_1400x700.jpeg" width="558" height="279" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5e8e7a36-e832-4ded-9de6-d504cc1ad91f_1400x700.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:700,&quot;width&quot;:1400,&quot;resizeWidth&quot;:558,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;The Matrix: Agent Smith's Replicating Powers and Other ...&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Matrix: Agent Smith's Replicating Powers and Other ..." title="The Matrix: Agent Smith's Replicating Powers and Other ..." srcset="https://substackcdn.com/image/fetch/$s_!5Rq0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e8e7a36-e832-4ded-9de6-d504cc1ad91f_1400x700.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5Rq0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e8e7a36-e832-4ded-9de6-d504cc1ad91f_1400x700.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5Rq0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e8e7a36-e832-4ded-9de6-d504cc1ad91f_1400x700.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5Rq0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e8e7a36-e832-4ded-9de6-d504cc1ad91f_1400x700.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">credit: The Matrix Reloaded - Warner Bros</figcaption></figure></div><p>In December, when I worked on my SQLMesh advent series, I used Windsurf as an IDE, but within Windsurf was Cascade. I didn&#8217;t think about Cascade as an agent too much but it clearly is! You proactively ask it to achieve something and then it goes and does it, and it might require multiple steps, multiple files to be made, multiple dependencies to be handled and multiple errors to be overcome&#8230; but it tries to build something that works.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;203cba13-63f0-4b4b-bff4-036e5a0fee81&quot;,&quot;caption&quot;:&quot;Yesterday, I mentioned that I wanted to focus on getting some data from the Bluesky API endpoints using dlt - which involves learning how dlt works. You can follow along with my public repo here.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;md&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;dlt windsurfing&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64081583,&quot;name&quot;:&quot;David Jayatillake&quot;,&quot;bio&quot;:&quot;VP of AI at Cube.dev&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1597ff03-37e4-4b78-a9fb-065c868972a0_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-12-04T19:31:31.144Z&quot;,&quot;cover_image&quot;:&quot;https://images.unsplash.com/photo-1667478828666-0ab66f6e16d6?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw0fHx3aW5kc3VyZmluZ3xlbnwwfHx8fDE3MzMzMzU3Mzl8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://davidsj.substack.com/p/dlt-windsurfing&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:152576111,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:6,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;davidj.substack&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!bG38!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fea52a4-dc41-4f4d-93f4-bcfdd60e4ea1_666x666.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>It was able to build a fairly complicated data pipeline, a transformation project in SQLMesh<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>, and then assist me in developing software to generate a semantic layer using AI from the gold layer tables within the transformation project. My inclination was to build software to do this at the time and use AI to help me build software that was able to repeatedly perform the same task.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;251b9551-0757-4bb9-ac3c-5b57a7cc0f52&quot;,&quot;caption&quot;:&quot;Yesterday, I got to a point where I got a CLI command to output JSON, which described the relationships between sqlmesh models and how fields were aggregated. This is the fundamental metadata required to build a semantic layer. When I set out to build this integration this week, I knew it was unlikely I would build something that deterministically gener&#8230;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;md&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;sqlmesh cube_generate build part 2&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64081583,&quot;name&quot;:&quot;David Jayatillake&quot;,&quot;bio&quot;:&quot;VP of AI at Cube.dev&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1597ff03-37e4-4b78-a9fb-065c868972a0_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-12-18T19:22:45.491Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!98g3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d6f2a9a-a62c-41d6-85df-f3b0ec57fc6f_1440x1228.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://davidsj.substack.com/p/sqlmesh-cube_generate-build-part-f1f&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:153306126,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:4,&quot;comment_count&quot;:1,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;davidj.substack&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!bG38!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fea52a4-dc41-4f4d-93f4-bcfdd60e4ea1_666x666.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>However, even this software wasn&#8217;t deterministic; it depended on LLM use. What if I didn&#8217;t try to generate code at all and just tried to get to the output? <em>Just ask the agent for what you want.</em></p><p>Recently, I had an experience of trying something like this that made me think this is now feasible. <a href="https://www.warp.dev/blog/reimagining-coding-agentic-development-environment">Warp</a> is an AI-first terminal that recently released V2 of their product to much fanfare, and the core of the new functionality is the ability to build agents. In this instance, I used Warp to build my agent.</p><p><span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Artyom Keydunov&quot;,&quot;id&quot;:34464042,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde4899b8-86d1-410a-bf76-9ba5e6eede26_144x144.png&quot;,&quot;uuid&quot;:&quot;e598b557-9a24-4f46-8a38-60f7b2dd16a4&quot;}" data-component-name="MentionToDOM"></span> asked me to produce some content about recent releases to Cube&#8217;s new agentic analytics product - D3. However, one problem with a product that is moving fast is a lack of documentation. We have the code in Github and merged commits that show what changes have made it into prod, we have tickets in Linear that are pretty sparse on detail&#8230; we have some element of high-level strategy but not much else. Initially, we thought it would be best if Artyom filled in a Notion document with new releases that have been merged on any given day, and perhaps create a rough Loom or have the engineer who built it do so for a specific feature. </p><p>My first thought when Artyom wanted this, and knowing the sources of information available, was to build something that harvested the information from Github and Linear. Initially, I was going to try using my trusty AI IDE of choice, Windsurf, to do this, just as I have done a few other times on this Substack. However, as someone who has been using Warp for a while to speed up using Shell and CLIs, I saw an opportunity to use their new agent features as a potential shortcut.</p><p>Reading just the merged commit names for the repo and the ticket contents wouldn&#8217;t have been enough to really know what changes have been made in any detail; you need to be able to read the code in the context of the overall repository and understand what functionality changes they make to do this. Until this AI era, trying to do this in an automated way wasn&#8217;t really feasible. But LLMs are great at reading code<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a>, and new systems like Warp and Cascade are pretty great at indexing a whole complex repository to understand the context of the code changes, too.</p><p>I made a new agent tab in Warp and checked out the repo. As it turns out, I didn&#8217;t need to do this with Warp like I do with Windsurf/Cascade - it only needs the URL of the repo. I then asked it to summarise recent changes - it did a decent job but had more than just the D3 changes. So I asked it to filter to just the D3 changes - and it was able to do that well. I only wanted the last week&#8217;s releases, so again I asked it to filter to just these and it did it. This is about 10 minutes in.</p><p>Given how easy everything was with Github, I thought I would try using the information in Linear too, but I thought I would hit a snag here with more complexity. I asked the agent also to take information from our Linear project to blend with the information from Github to create the summary. It did some research for a while and found a Linear API which wasn&#8217;t rich enough, leading it to find the Linear CLI which was able to pull the information from our tickets. All it needed was for me to generate an API key which I duly did and it gave me a Shell command to store the key as an appropriately named environment variable, that I assume the Linear CLI expects. Just like that, it had got the information, found the Linear tickets referenced in the Github commits and taken the information specifically for them. Then it blended the information from Github and Linear to produce something pretty rich.</p><p>All in all, I spent half an hour making this agent. It will now run every Friday to find the last week&#8217;s releases in the same way, or when I ask it to. The half an hour included me showing Artyom how good it was and then copy pasting the output to Slack etc. This is the kind of use case that could have been a startup in the pre-AI era<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a>. Now it&#8217;s just an agent someone made in half an hour.</p><p>I think there should be huge scrutiny of whether software needs to be built for a given use case or if an agent can be made in less than 1% of the time and cost. VCs should look at every pitch and ask themselves whether the idea needs to be software or could just be a cheap and cheerful agent. I don&#8217;t think it&#8217;s reasonable to invest in a business whose product is an agent that can be built very quickly<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a>. There is no moat. Every single customer or user is a potential competitor - who is better-placed than a customer to build their own agent tailored to their own minimal set of needs?</p><p>A lot of supposedly advanced features for agents, like tool use and memory etc, are just one advancement in LLM tech away from being baked into the LLM and becoming standard agent capabilities. You could see this with tool use in the example above, where the agent just picked up the Linear CLI and started using it. I didn&#8217;t even see the Linear CLI commands it ran - I probably could have if I wanted to, but I didn&#8217;t. The output tasted good. I showed it to Artyom, and he said it was right.</p><p>People used to make handy little Excel sheets that could do things for them, limited to what Excel could handle. Agents are going to work in the same way, just with a massively broader application surface area. I only see deeper tech - like databases, frameworks, compilers, etc, which aren&#8217;t feasible for an agent to build on the fly or simulate - being software we need to build.</p><p>I also think that rather than selling software, we will be selling services which may encompass software and agents together. Customers will expect things that are easy to use and highly effective. They will shirk products with long, complicated onboarding processes and which have complex dashboards and settings to navigate unaided.</p><div><hr></div><p>I thought I&#8217;d try very quickly to make an agent that built a semantic layer, after locating a gold layer style table from a transformation repo like the SQLMesh one I made in December.</p><p>Here is my instruction for the agent:</p><blockquote><p><em>SQLMesh is a data transformation framework used to transform data from raw to usable analytical datasets. It produces a directed acyclic graph of transformation models which are SQL queries. Some of these models are appropriate to be parsed and used to create a semantic layer. The models which are like this are often the right hand leaves of the DAG with no children and which join tables together and aggregate numeric columns to calculate metrics.</em></p><p><em>The user using this agent will provide a github repository which will contain a SQLMesh project with such models.</em></p><p><em>Automatically locate one or more appropriate models from the repository to convert into a semantic layer. Use Cube&#8217;s semantic layer YAML standard. Here are docs on SQLMesh and Cube:</em></p><p><em>https://sqlmesh.readthedocs.io/en/stable/concepts/models/sql_models/</em></p><p><em>https://sqlmesh.readthedocs.io/en/stable/</em></p><p><em>https://cube.dev/docs/product/introduction</em></p><p><em>https://cube.dev/docs/product/data-modeling/syntax</em></p><p><em>Then output the semantic layer using the joined tables from the models selected as Cubes. Create Cubes with measures, dimensions and joins. Generate descriptions and types as per the docs.</em></p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_pgy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7a3e77d-3cba-4fb4-813a-3e7aed672b3b_1040x1027.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_pgy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7a3e77d-3cba-4fb4-813a-3e7aed672b3b_1040x1027.png 424w, https://substackcdn.com/image/fetch/$s_!_pgy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7a3e77d-3cba-4fb4-813a-3e7aed672b3b_1040x1027.png 848w, https://substackcdn.com/image/fetch/$s_!_pgy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7a3e77d-3cba-4fb4-813a-3e7aed672b3b_1040x1027.png 1272w, https://substackcdn.com/image/fetch/$s_!_pgy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7a3e77d-3cba-4fb4-813a-3e7aed672b3b_1040x1027.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_pgy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7a3e77d-3cba-4fb4-813a-3e7aed672b3b_1040x1027.png" width="1040" height="1027" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e7a3e77d-3cba-4fb4-813a-3e7aed672b3b_1040x1027.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1027,&quot;width&quot;:1040,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:236654,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://davidsj.substack.com/i/167099570?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7a3e77d-3cba-4fb4-813a-3e7aed672b3b_1040x1027.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_pgy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7a3e77d-3cba-4fb4-813a-3e7aed672b3b_1040x1027.png 424w, https://substackcdn.com/image/fetch/$s_!_pgy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7a3e77d-3cba-4fb4-813a-3e7aed672b3b_1040x1027.png 848w, https://substackcdn.com/image/fetch/$s_!_pgy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7a3e77d-3cba-4fb4-813a-3e7aed672b3b_1040x1027.png 1272w, https://substackcdn.com/image/fetch/$s_!_pgy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7a3e77d-3cba-4fb4-813a-3e7aed672b3b_1040x1027.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4ete!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ed72f6c-5e9b-43b6-9819-3528595f8add_1031x677.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4ete!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ed72f6c-5e9b-43b6-9819-3528595f8add_1031x677.png 424w, https://substackcdn.com/image/fetch/$s_!4ete!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ed72f6c-5e9b-43b6-9819-3528595f8add_1031x677.png 848w, https://substackcdn.com/image/fetch/$s_!4ete!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ed72f6c-5e9b-43b6-9819-3528595f8add_1031x677.png 1272w, https://substackcdn.com/image/fetch/$s_!4ete!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ed72f6c-5e9b-43b6-9819-3528595f8add_1031x677.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4ete!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ed72f6c-5e9b-43b6-9819-3528595f8add_1031x677.png" width="1031" height="677" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6ed72f6c-5e9b-43b6-9819-3528595f8add_1031x677.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:677,&quot;width&quot;:1031,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:131090,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://davidsj.substack.com/i/167099570?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ed72f6c-5e9b-43b6-9819-3528595f8add_1031x677.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4ete!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ed72f6c-5e9b-43b6-9819-3528595f8add_1031x677.png 424w, https://substackcdn.com/image/fetch/$s_!4ete!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ed72f6c-5e9b-43b6-9819-3528595f8add_1031x677.png 848w, https://substackcdn.com/image/fetch/$s_!4ete!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ed72f6c-5e9b-43b6-9819-3528595f8add_1031x677.png 1272w, https://substackcdn.com/image/fetch/$s_!4ete!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ed72f6c-5e9b-43b6-9819-3528595f8add_1031x677.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Initially, it didn&#8217;t split these gold style queries into different Cubes which joined to each other, presented in a star schema. So I shared the docs on Cube Views with it and gave it a bit more guidance:</p><blockquote><p><em>use views as per https://cube.dev/docs/product/data-modeling/reference/view to make a view per query chosen, where the cubes are the tables joined in the query rather than just using the final tables. The idea is not to rely on the joins happening in the query but to express them in the Cube semantic layer and arrange them using views.</em></p></blockquote><p>It then did this well but seemed to have hallucinated a &#8220;where&#8221; property that Views do not have for filtering.</p><blockquote><p><em>are you sure views can have "where" parameters?</em></p></blockquote><p>Then it got some of the dot notation for expressing join paths in Cube Views wrong.</p><blockquote><p><em>some of the join paths are incorrect in the views as they should take the form of core_cube.other_cube apart from the core_cube which is alone</em></p></blockquote><p>Then it got the names of the possible joins in Cube wrong. If you remember in my original series building this, the same thing happened because of legacy Cube functionality and old docs that have clearly ended up in pre-training material. It may be the case that these names would work but anyhow:</p><blockquote><p><em>cubes have the following parameters for joins https://cube.dev/docs/product/data-modeling/reference/joins have you got this right in your output?</em></p></blockquote><p>At this point, I can&#8217;t really see anything particularly wrong with the complete semantic layer it generated. The Views, Cubes with their dimensions, measures and joins look good&#8230;. again, building this agent took about half an hour<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-5" href="#footnote-5" target="_self">5</a>. This time I had to correct it a bit, but this is a more complicated task that requires more precision in output. However, these instructions are now stored within the agent. It won&#8217;t have the same problems next time. Another thing to note is that this time, I got the agent to automatically pick the tables to convert from the project, which adds complexity<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-6" href="#footnote-6" target="_self">6</a>.</p><p>I can see the cost of migration between analytical tools that have proprietary semantic layer code go to zero. Every tool will offer agents that can translate the code from other formats to their own. Their ability to use tools means that users won&#8217;t even have to copy/paste anything - the agents will copy the code themselves, translate and then store using an API or CLI in the new tool.</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p><a href="https://roundup.getdbt.com/p/it-is-time-to-take-agentic-workflows">Clearly</a>, it could just as easily have built it in dbt too. <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Jason Ganz&quot;,&quot;id&quot;:73769889,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/ae9586fb-383d-48ac-b783-ed41a44986f8_200x236.jpeg&quot;,&quot;uuid&quot;:&quot;266053cc-ff65-4de2-a8ca-0291aa7e84af&quot;}" data-component-name="MentionToDOM"></span> also used Warp for part of his workflow.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>They are even better at reading code than writing code which is unsurprising. Existing code can have one meaning, whereas there are many ways to intepret a request and many ways to write code to solve it.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>Especially with the capital being thrown around in 2021 and earlier.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>Unless the moat is the data generated by the agent, which is then used to make the agent better or to train new LLMs that will power better/cheaper agents. This is Windsurf and Cursor&#8217;s moat.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-5" href="#footnote-anchor-5" class="footnote-number" contenteditable="false" target="_self">5</a><div class="footnote-content"><p>This includes me copy/pasting and summarising what happened here.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-6" href="#footnote-anchor-6" class="footnote-number" contenteditable="false" target="_self">6</a><div class="footnote-content"><p>Interestingly, it did this with ease and no need for correction. This is easy for a human experienced with SQL to do, but hard for software to do deterministically.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Nearly Headless BI]]></title><description><![CDATA[Let's join the agentic hunt!]]></description><link>https://davidsj.substack.com/p/nearly-headless-bi</link><guid isPermaLink="false">https://davidsj.substack.com/p/nearly-headless-bi</guid><dc:creator><![CDATA[David Jayatillake]]></dc:creator><pubDate>Wed, 25 Jun 2025 14:50:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Njto!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33e9cc56-ecdb-4ae9-8fd9-9991753a58ea_1024x1536.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Njto!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33e9cc56-ecdb-4ae9-8fd9-9991753a58ea_1024x1536.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Njto!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33e9cc56-ecdb-4ae9-8fd9-9991753a58ea_1024x1536.heic 424w, https://substackcdn.com/image/fetch/$s_!Njto!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33e9cc56-ecdb-4ae9-8fd9-9991753a58ea_1024x1536.heic 848w, https://substackcdn.com/image/fetch/$s_!Njto!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33e9cc56-ecdb-4ae9-8fd9-9991753a58ea_1024x1536.heic 1272w, https://substackcdn.com/image/fetch/$s_!Njto!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33e9cc56-ecdb-4ae9-8fd9-9991753a58ea_1024x1536.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Njto!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33e9cc56-ecdb-4ae9-8fd9-9991753a58ea_1024x1536.heic" width="538" height="807" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/33e9cc56-ecdb-4ae9-8fd9-9991753a58ea_1024x1536.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:1024,&quot;resizeWidth&quot;:538,&quot;bytes&quot;:254045,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://davidsj.substack.com/i/165350777?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33e9cc56-ecdb-4ae9-8fd9-9991753a58ea_1024x1536.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Njto!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33e9cc56-ecdb-4ae9-8fd9-9991753a58ea_1024x1536.heic 424w, https://substackcdn.com/image/fetch/$s_!Njto!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33e9cc56-ecdb-4ae9-8fd9-9991753a58ea_1024x1536.heic 848w, https://substackcdn.com/image/fetch/$s_!Njto!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33e9cc56-ecdb-4ae9-8fd9-9991753a58ea_1024x1536.heic 1272w, https://substackcdn.com/image/fetch/$s_!Njto!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33e9cc56-ecdb-4ae9-8fd9-9991753a58ea_1024x1536.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The semantic layer came of age over the course of two weeks at the Moscone Center. Both Snowflake, with semantic views, and Databricks, with metrics views, have essentially implemented a semantic layer with a compiler, which I predicted (around this time last year) that they would do before the end of 2025.</p><p>Back then, both Snowflake and Databricks had implemented ways of codifying a knowledge graph, which looked very much like semantic layer YAML, except that this YAML was not compiled in the same way as with a semantic layer<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>. It was provided as context in the prompt so that the text-to-SQL methods they were employing could perform better. They did indeed perform better, but as I wrote about before, they still didn&#8217;t come close to the text-to-semantic layer method I had proposed and that has been implemented at Delphi and Cube. They never will come close to the text-to-semantic layer method and, as a result, will never have high enough accuracy to succeed. This is why I predicted that Snowflake and Databricks would change tack in 2025, and indeed why they have done so.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;2c046eb1-f758-4a50-8a5c-b549332be9a3&quot;,&quot;caption&quot;:&quot;It was about a year ago that I started the pre-seed fundraising process for Delphi. All of the VCs I spoke to asked me why we would succeed vs all the other entrants in the space. The vast majority of these entrants were using a method called &#8220;text-to-SQL&#8221;,&#8230;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;A Darker Truth&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64081583,&quot;name&quot;:&quot;David Jayatillake&quot;,&quot;bio&quot;:&quot;VP of AI at Cube.dev&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1597ff03-37e4-4b78-a9fb-065c868972a0_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-03-07T16:39:54.762Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CuMR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb04a38d-2760-4eef-955b-41ca3310651f_1200x1200.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://davidsj.substack.com/p/a-darker-truth&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:142384303,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:13,&quot;comment_count&quot;:4,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;davidj.substack&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!bG38!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fea52a4-dc41-4f4d-93f4-bcfdd60e4ea1_666x666.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>The driver for this change is agentic analytics. When the idea of headless BI, or a universal semantic layer, first made its way into the zeitgeist of data folks, it was meant for use by BI tools and data applications. It may have originated in natural language, like with Cube&#8217;s precursors Statsbot, Metabase, Thoughtspot, Veezoo&#8230;, where strict syntax requests disguised API requests as natural language. However, the destination was all of the other BI tools and data apps out there. A single source of truth, governance, performance&#8230; not specifically AI, as AI was still a dream in this pre-GPT-3 era.</p><p>As AI has captured a greater and greater mindshare, till the point where we are now where it&#8217;s nearly at 100%, any delays to making data agents can no longer be tolerated. It&#8217;s not a case of will they or won&#8217;t they have a semantic layer - any company that wants to offer agentic analytics <strong>must</strong> have one. Databricks, Snowflake, GCP and Microsoft all now have at least the rudiments of a semantic layer with a compiler. Text-to-SQL is dead - dead on arrival. No-one is better placed than a data warehouse vendor to make a success of text-to-SQL as I have explained before, and even they have all given up on the idea and moved to having a semantic layer with compiler. It&#8217;s fundamentally not viable, because LLMs aren&#8217;t magic. </p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;47a8fd10-ee50-4736-ad33-00992ef08921&quot;,&quot;caption&quot;:&quot;Earlier this week, I ran a Cube webinar where I explained the difference between text-to-SQL and text-to-SL (Semantic Layer) methods for self-serve analytics.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;SnowPilot &#10052;&#65039;&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:64081583,&quot;name&quot;:&quot;David Jayatillake&quot;,&quot;bio&quot;:&quot;VP of AI at Cube.dev&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1597ff03-37e4-4b78-a9fb-065c868972a0_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-04-25T17:24:15.424Z&quot;,&quot;cover_image&quot;:&quot;https://images.unsplash.com/photo-1590787996529-a542c86ca267?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxwb2xhciUyMGJlYXJ8ZW58MHx8fHwxNzE0MDAwMzIzfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://davidsj.substack.com/p/snowpilot&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:143967658,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:7,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;davidj.substack&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!bG38!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6fea52a4-dc41-4f4d-93f4-bcfdd60e4ea1_666x666.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>If a really smart person can&#8217;t just take a data model with context only and deliver consistent and accurate results, we won&#8217;t get LLMs to, even with GPT-5 level of power. It&#8217;s not a computational problem; it&#8217;s a metadata and guardrails problem. You don&#8217;t leave things to chance when you know how they should be. You force the system to conform.</p><p>However, one consequence of all this is that headless BI is also dead. Agentic analytics is seen as the new BI, the successor to BI, the BI we always wanted. If every headless BI offering also includes agentic analytics, and they will do so by the end of this year<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a>, then are they really headless? Surely it could be correctly argued that they now have a very smart head! Maybe it&#8217;s only connected by a thin MCP sinew, and you can still flip it off to connect to other things like Tableau, PowerBI and Chart.js&#8230; but that still doesn&#8217;t let it join the headless hunt.</p><p>In all honesty, BI tool vendors have been terrible partners to headless BI vendors. They haven&#8217;t had much incentive to integrate well&#8230; it makes them more replaceable. So I guess it&#8217;s the end of the period of headless BI, and the beginning of the era of agentic analytics. Where the previous headless BI vendors have a big product and technology advantage through their semantic layers, and BI vendors have an advantage in their advanced commercialisation and existing relationships to leverage. Let&#8217;s see who prevails&#8230; perhaps this increases the gravity of the data warehouse further if they can offer agentic analytics directly and bypass the consumption layer entirely.</p><p>Gartner is even preparing the way for an agentic analytics quadrant to exist:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xwjs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67c275a0-c28a-43ad-b7bd-1f3c42adc314_784x622.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xwjs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67c275a0-c28a-43ad-b7bd-1f3c42adc314_784x622.png 424w, https://substackcdn.com/image/fetch/$s_!xwjs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67c275a0-c28a-43ad-b7bd-1f3c42adc314_784x622.png 848w, https://substackcdn.com/image/fetch/$s_!xwjs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67c275a0-c28a-43ad-b7bd-1f3c42adc314_784x622.png 1272w, https://substackcdn.com/image/fetch/$s_!xwjs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67c275a0-c28a-43ad-b7bd-1f3c42adc314_784x622.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xwjs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67c275a0-c28a-43ad-b7bd-1f3c42adc314_784x622.png" width="784" height="622" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/67c275a0-c28a-43ad-b7bd-1f3c42adc314_784x622.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:622,&quot;width&quot;:784,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:192527,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://davidsj.substack.com/i/165350777?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67c275a0-c28a-43ad-b7bd-1f3c42adc314_784x622.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xwjs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67c275a0-c28a-43ad-b7bd-1f3c42adc314_784x622.png 424w, https://substackcdn.com/image/fetch/$s_!xwjs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67c275a0-c28a-43ad-b7bd-1f3c42adc314_784x622.png 848w, https://substackcdn.com/image/fetch/$s_!xwjs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67c275a0-c28a-43ad-b7bd-1f3c42adc314_784x622.png 1272w, https://substackcdn.com/image/fetch/$s_!xwjs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67c275a0-c28a-43ad-b7bd-1f3c42adc314_784x622.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>BI has never been more competitive. Every data tool really is becoming a BI tool. That includes data warehouses in this new agentic analytics era.</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>Every semantic layer is a knowledge graph, but not every knowledge graph is a semantic layer. I know that the term &#8216;semantic layer&#8217; is a bit loaded with many meanings. However, for the purposes of this blog, I always mean a metrics-style semantic layer where the entities of a data model are codified with their attributes and join paths to each other, allowing for simple requests to be compiled to consistent, complex SQL easily. This has been called headless BI or a metrics layer in the past.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>All of the ones I&#8217;m aware of offer this to a greater or lesser extent now. So it may be that they are just in the process of improving and enhancing their agentic offering going forward.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Hurry up]]></title><description><![CDATA[Infosec needs to get proactive]]></description><link>https://davidsj.substack.com/p/hurry-up</link><guid isPermaLink="false">https://davidsj.substack.com/p/hurry-up</guid><dc:creator><![CDATA[David Jayatillake]]></dc:creator><pubDate>Sat, 21 Jun 2025 14:27:08 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1634402149804-67614eb48331?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyM3x8c3BlZWR8ZW58MHx8fHwxNzUwMzU2ODAzfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1634402149804-67614eb48331?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyM3x8c3BlZWR8ZW58MHx8fHwxNzUwMzU2ODAzfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://images.unsplash.com/photo-1634402149804-67614eb48331?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyM3x8c3BlZWR8ZW58MHx8fHwxNzUwMzU2ODAzfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1634402149804-67614eb48331?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyM3x8c3BlZWR8ZW58MHx8fHwxNzUwMzU2ODAzfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1634402149804-67614eb48331?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyM3x8c3BlZWR8ZW58MHx8fHwxNzUwMzU2ODAzfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1634402149804-67614eb48331?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyM3x8c3BlZWR8ZW58MHx8fHwxNzUwMzU2ODAzfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1634402149804-67614eb48331?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyM3x8c3BlZWR8ZW58MHx8fHwxNzUwMzU2ODAzfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" width="4957" height="3305" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1634402149804-67614eb48331?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyM3x8c3BlZWR8ZW58MHx8fHwxNzUwMzU2ODAzfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:3305,&quot;width&quot;:4957,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;a blurry photo of a city street at night&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="a blurry photo of a city street at night" title="a blurry photo of a city street at night" srcset="https://images.unsplash.com/photo-1634402149804-67614eb48331?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyM3x8c3BlZWR8ZW58MHx8fHwxNzUwMzU2ODAzfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1634402149804-67614eb48331?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyM3x8c3BlZWR8ZW58MHx8fHwxNzUwMzU2ODAzfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1634402149804-67614eb48331?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyM3x8c3BlZWR8ZW58MHx8fHwxNzUwMzU2ODAzfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1634402149804-67614eb48331?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyM3x8c3BlZWR8ZW58MHx8fHwxNzUwMzU2ODAzfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="true">Ian Taylor</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p>Recently, I&#8217;ve been hearing that information security teams, who already typically conduct a vendor evaluation before onboarding and granting access to company data, have started requesting a second review when a vendor also offers AI functionality. Every vendor will eventually have AI functionality by the end of this year! Having two security evaluations is very inefficient in a world where every vendor will need it. A year or two ago, you may have been able to say that only a minority of vendors have AI features&#8230; not today and not ever again.</p><p>One interesting example was of a company where at least 20%<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> of the company used Grammarly. Now, Grammarly isn&#8217;t some unheard-of vendor; it's well-known by nearly all information workers and used by a vast number of them, too. The company recently asked all workers who had Grammarly installed to uninstall it, because they realised that Grammarly has AI features&#8230; If you consider what the company is trying to protect itself from, it is attempting to avoid liability for a data breach by Grammarly, where it lacks adequate liability protection because employees are using the free tier of Grammarly and are not on an enterprise plan.</p><p>I understand why the information security team felt the need to tell employees to stop using Grammarly here. It&#8217;s not really going to secure data very much; the data has already bolted through years of use by employees. It is primarily a liability shift; the employees have been instructed not to use Grammarly, and therefore, the company has likely taken reasonable steps to avoid invalidating their insurance policy should a data breach occur.</p><p>However, my main problem is the reactive nature of the information security team here. Of course, an information security team cannot preempt every possible vendor use by employees, especially when it is a tool choice made by engineering, who will know their tools better than the information security team. Where tools are general tools used by all employees, then I think we should expect information security to become more proactive. For example, it is becoming common for employers to provide employees with enterprise ChatGPT accounts, as the level of unofficial usage occurring was so high that it is almost certain that there would be inappropriate data leakage. This is the type of tool that an information security team should proactively offer employees to prevent data leakage to a free-tier or non-corporate account.</p><p>If you look at the tools a typical employee uses &#8212;office suite, operating system, browser, email, and calendar &#8212;all of these will soon have AI features or integrations. It makes more sense for information security to be opinionated about which of these it considers secure from both a software and AI architecture perspective, and to propose which ones to use for procurement. Going halfway doesn&#8217;t make sense. </p><p>For example, imagine if your company used Google Workspace for email, calendar, office applications, and more. Enterprise Google Workspace accounts have Gemini built into nearly every app, and they come with a Gemini-specific app to use like ChatGPT, and NotebookLM - one of the most advanced AI tools available. It&#8217;s not good enough for an infosec team to say that they disapprove of the use of the AI features or AI applications that are available and accessible through workspace accounts. If they are available, then employees will use them, at least in the minority.  Even where the majority tries to stay in line with the infosec policy, it would probably still happen accidentally.</p><p>Clearly, tools like Grammarly are widely used by employees, probably in all companies. It would make sense to get an enterprise account with pro features for all employees to use, instead of waiting for someone to ask for an infosec review when they may not have even realised it needed one.</p><p>The way employees are working is undergoing a change like we haven&#8217;t seen since the dawn of office computing. Whole tool categories are being upended or transformed with AI. The best employees want to maximise their capabilities with AI and make their teams lean in the same way. Information security teams are at risk of being an obstacle. Yes, they should be some of the time, but they could also do with being proactive and opinionated, especially during this era of rapid change.</p><p>If you think Anthropic fits your security profile better than OpenAI, consider purchasing a Claude enterprise subscription for your company to use. Give everyone access and instruct them to stop using ChatGPT, having provided them with an alternative. You can&#8217;t simply say no and offer no alternative; it won&#8217;t work. I also think that where vendors have already been given access to sensitive data, being concerned about the use of their new AI features is pointless. The vendors will already be ensuring that liability and risk do not materially increase from offering AI features, such as BYOLLM, and that they have the appropriate commercial licenses and insurance. Verify that vendors are incorporating these measures as part of their standard information security approval process, rather than having a separate one.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://davidsj.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading davidj.substack! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="directMessage button" data-attrs="{&quot;userId&quot;:64081583,&quot;userName&quot;:&quot;David Jayatillake&quot;,&quot;canDm&quot;:null,&quot;dmUpgradeOptions&quot;:null,&quot;isEditorNode&quot;:true}" data-component-name="DirectMessageToDOM"></div><p></p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>I say at least because the number of workers would have been calculated based on the installation of some combination of the desktop app and browser extensions on their corporate laptops. I doubt this would have covered any web use without an extension or all possible browser extensions.</p></div></div>]]></content:encoded></item><item><title><![CDATA[Brass Tacks]]></title><description><![CDATA[Are LLMs that expensive?]]></description><link>https://davidsj.substack.com/p/brass-tacks</link><guid isPermaLink="false">https://davidsj.substack.com/p/brass-tacks</guid><dc:creator><![CDATA[David Jayatillake]]></dc:creator><pubDate>Sat, 14 Jun 2025 14:00:11 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/964c71be-8b66-4268-ae4b-7821661c4ace_967x963.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A few months ago, I bought a split ortholinear mechanical keyboard. I had noticed that my typing position using my Mac keyboard was not ideal, where I kind of twisted my wrist into position. I also ended up doing little twists during typing to hit specific keys. Long story short, my new keyboard keeps my arms and wrists in a good position, and my wrists can stay stationary during typing<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> &#128588;. </p><p>I learned during this process that I have relatively short little fingers compared to my ring fingers, which actually dictates needing a different type of keyboard layout, where the columns of keys for my little fingers need to be much further down than my ring and middle fingers. Rule of thumb: if the ends of your little fingers don&#8217;t extend past the top knuckle of your ring fingers, then you are probably in the same boat as me<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BGOm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316f6331-1f8c-493b-a865-275206c98ceb_563x283.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BGOm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316f6331-1f8c-493b-a865-275206c98ceb_563x283.png 424w, https://substackcdn.com/image/fetch/$s_!BGOm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316f6331-1f8c-493b-a865-275206c98ceb_563x283.png 848w, https://substackcdn.com/image/fetch/$s_!BGOm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316f6331-1f8c-493b-a865-275206c98ceb_563x283.png 1272w, https://substackcdn.com/image/fetch/$s_!BGOm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316f6331-1f8c-493b-a865-275206c98ceb_563x283.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BGOm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316f6331-1f8c-493b-a865-275206c98ceb_563x283.png" width="563" height="283" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/316f6331-1f8c-493b-a865-275206c98ceb_563x283.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:283,&quot;width&quot;:563,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:35309,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://davidsj.substack.com/i/165928411?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316f6331-1f8c-493b-a865-275206c98ceb_563x283.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BGOm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316f6331-1f8c-493b-a865-275206c98ceb_563x283.png 424w, https://substackcdn.com/image/fetch/$s_!BGOm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316f6331-1f8c-493b-a865-275206c98ceb_563x283.png 848w, https://substackcdn.com/image/fetch/$s_!BGOm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316f6331-1f8c-493b-a865-275206c98ceb_563x283.png 1272w, https://substackcdn.com/image/fetch/$s_!BGOm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F316f6331-1f8c-493b-a865-275206c98ceb_563x283.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>These kinds of keyboards are customisable using a firmware called QMK, which has a CLI that you use to manage your keyboard layouts and flash it with new ones. The CLI, over time, has become reasonably complicated, and there is additional complexity from the sheer number of possible keyboards, modifications and chipsets you can have. I could have spent some time figuring out how to adjust my keymap files manually by Googling and asking the QMK community<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a>, but the year isn&#8217;t 2021.</p><p>I used Windsurf to change or create the files I needed to change my keymap; it did it in one shot with no issues. The repo comes with a bunch of default keymaps, which act as easy examples to learn from for Cascade. However, in order to actually flash your keyboard, you need to both install the CLI successfully, which has a lot of dependencies, and use the correct commands to compile and then flash your keyboard. </p><p>I initially tried using the CLI manually, as I&#8217;m fairly proficient using shells and CLIs. However, I came across some issues. I probably could have figured them out, but after a few tries and making new Python environments, I gave up and decided to try Warp, which is an AI-first terminal. Warp was able to read the error messages output, mostly due to incorrect or missing dependencies<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a>, and resolve them in a couple of tries. Staying on a roll, I got it to generate the QMK commands to compile and then flash my keyboard and it got those right first time. My chipset is a bit new and undocumented, and has an unusual flashing process, which makes things more interesting for someone new to this kind of thing!</p><p>Feeling somewhat happy to have solved this problem, I thought I would document it and share it in one of the subreddits. Oh wow, I wasn&#8217;t expecting how hostile people would be to the idea of using AI to solve this problem. People said I could have just read the docs, Googled or asked the community, but I had done this and not succeeded. The main thing they thought about was how much energy<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-5" href="#footnote-5" target="_self">5</a> I would have consumed to use AI to solve this supposedly basic problem. At the time, I thought&#8230; sure, pre-training LLMs is expensive, but inference doesn&#8217;t use that much energy.</p><p>I recently read this <a href="https://www.snellman.net/blog/archive/2025-06-02-llms-are-cheap/?utm_source=tldrnewsletter">post</a> by Juho Snellman that explores the cost of using LLMs vs web search, and it not only confirmed what I thought about inference being cheap, but also that it is cheaper on average than using web search! </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2DiM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15a1a47c-218e-4951-90b6-50e8cded7a85_678x912.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2DiM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15a1a47c-218e-4951-90b6-50e8cded7a85_678x912.png 424w, https://substackcdn.com/image/fetch/$s_!2DiM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15a1a47c-218e-4951-90b6-50e8cded7a85_678x912.png 848w, https://substackcdn.com/image/fetch/$s_!2DiM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15a1a47c-218e-4951-90b6-50e8cded7a85_678x912.png 1272w, https://substackcdn.com/image/fetch/$s_!2DiM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15a1a47c-218e-4951-90b6-50e8cded7a85_678x912.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2DiM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15a1a47c-218e-4951-90b6-50e8cded7a85_678x912.png" width="678" height="912" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/15a1a47c-218e-4951-90b6-50e8cded7a85_678x912.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:912,&quot;width&quot;:678,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:91056,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://davidsj.substack.com/i/165928411?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15a1a47c-218e-4951-90b6-50e8cded7a85_678x912.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2DiM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15a1a47c-218e-4951-90b6-50e8cded7a85_678x912.png 424w, https://substackcdn.com/image/fetch/$s_!2DiM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15a1a47c-218e-4951-90b6-50e8cded7a85_678x912.png 848w, https://substackcdn.com/image/fetch/$s_!2DiM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15a1a47c-218e-4951-90b6-50e8cded7a85_678x912.png 1272w, https://substackcdn.com/image/fetch/$s_!2DiM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15a1a47c-218e-4951-90b6-50e8cded7a85_678x912.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" style="height:20px;width:20px" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Juho&#8217;s post has a fun calculator to test out your own specific assumptions. I used Google Search, as I never really use any other web search providers. I used a relatively expensive LLM in Claude 3.7 Sonnet, as this is fairly representative of an LLM I would use for a coding problem. I assumed some level of margin and pre-training amortisation so that it&#8217;s fair. I used a very generous amount of tokens - as you can imagine, generating a CLI command would likely only have 20 to 40 output tokens. My keymap files would be more, but very unlikely to be more than 1000.</p><p>On this basis, it would have been cheaper to have gone straight to using an LLM and not wasted the energy on the initial web searches I did.</p><blockquote><p><em><strong>Web search returns results 20x-100x faster than an LLM finishes the query, how could it be more expensive?</strong> - Search latency can be improved by parallelizing the problem, while LLM inference is (for now) serial in nature. The task of predicting a single token can be parallelized, but the you can't predict all the output tokens at onc</em>e.</p></blockquote><p>I thought this was a very interesting point - many people would think that just the wait time for LLM results shows it is using more compute and therefore energy. However, your web search could trigger thousands of parallel subprocesses consuming more energy in total, but running much faster and looking cheaper to the eye.</p><p>Maybe we should actually be talking about the energy costs of using &#8220;traditional&#8221; web search and not LLM inference. It seems as though we now have a cheaper, more energy-efficient<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-6" href="#footnote-6" target="_self">6</a>, more effective alternative.</p><p>Especially if you think about how many web searches we chain together to find something out. We often don&#8217;t know what the best API to find specific information will be when we begin. In the future, LLM systems/agents will have catalogs of well-described APIs to collect context and answer a request. Using an LLM system here to find something out in one shot, rather than multiple web searches, could be one or two orders of magnitude more energy-efficient.</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>Take that, RSI and carpal tunnel syndrome of future David &#128074;</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>The number of times I&#8217;ve held my hand up during a Zoom call to compare my fingers to people I&#8217;ve been speaking to!</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>There are a number of communities dedicated to these kinds of keyboards, where people are always crafting their own new keyboard types and showing them off. It&#8217;s honestly not that dissimilar to other communities that modify cars, etc. There are multiple subreddits dedicated to this, eg for QMK, for ergo keyboards, for mech keyboards, for selling mech keyboards&#8230; they are usually much less belligerent than r/dataengineering.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>I&#8217;m used to fixing or installing necessary dependencies, but the way the CLI errors conveyed this was kind of weird, and I thought it might have been some mapping thing - where I had the packages, but they weren&#8217;t usable without a mapping fix - which can occur with multiple versions of packages when you need to use the correct one in an environment. I might be a bit noob, but it wasn&#8217;t straightforward!</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-5" href="#footnote-anchor-5" class="footnote-number" contenteditable="false" target="_self">5</a><div class="footnote-content"><p>&#8220;You didn&#8217;t need to burn down a forest to solve this!&#8221; is an example of the kind of response I got.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-6" href="#footnote-anchor-6" class="footnote-number" contenteditable="false" target="_self">6</a><div class="footnote-content"><p>Energy costs are a significant component of both training and inference systems, as well as other large-scale technology systems like search. They are proportional to various other costs, such as hardware. More expensive and powerful hardware consumes more energy.</p></div></div>]]></content:encoded></item></channel></rss>