<?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[Tabula Mag]]></title><description><![CDATA[AI. Change. Hope.]]></description><link>https://www.tabulamag.com</link><image><url>https://substackcdn.com/image/fetch/$s_!pcFW!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc51e4e97-4395-44e5-b69e-e6a4382f1f72_1024x1024.png</url><title>Tabula Mag</title><link>https://www.tabulamag.com</link></image><generator>Substack</generator><lastBuildDate>Thu, 30 Apr 2026 12:11:45 GMT</lastBuildDate><atom:link href="https://www.tabulamag.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Stephan Schmidt]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[tabulamag@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[tabulamag@substack.com]]></itunes:email><itunes:name><![CDATA[Stephan Schmidt]]></itunes:name></itunes:owner><itunes:author><![CDATA[Stephan Schmidt]]></itunes:author><googleplay:owner><![CDATA[tabulamag@substack.com]]></googleplay:owner><googleplay:email><![CDATA[tabulamag@substack.com]]></googleplay:email><googleplay:author><![CDATA[Stephan Schmidt]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[METR AI Study of Developer Productivity Loss with AI]]></title><description><![CDATA[I so disagree with it. And then I don't.]]></description><link>https://www.tabulamag.com/p/metr-ai-study-of-developer-productivity</link><guid isPermaLink="false">https://www.tabulamag.com/p/metr-ai-study-of-developer-productivity</guid><dc:creator><![CDATA[Stephan Schmidt]]></dc:creator><pubDate>Mon, 26 Jan 2026 10:02:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!NBTV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F813b9146-b65f-49d5-9b8f-153e3af5f39c_1680x575.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Time after time an <a href="https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/">AI study makes</a> the round.</p><blockquote><p><em>&#8220;Against Expert Forecasts and Developer Self-Reports, Early 2025 Ai Slows Down Experienced Open-Source Developers&#8221;</em></p></blockquote><p>Wow, totally not my experience. My experience with Go/Claude Code has been great. I&#8217;m much more productive than before - measured buy I can create several features a day where before it would have taken one day to create one of them. </p><p>How comes?</p><p>Looking deeper at that study it makes a lot of sense and surfaces the common problems with AI.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NBTV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F813b9146-b65f-49d5-9b8f-153e3af5f39c_1680x575.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NBTV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F813b9146-b65f-49d5-9b8f-153e3af5f39c_1680x575.png 424w, https://substackcdn.com/image/fetch/$s_!NBTV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F813b9146-b65f-49d5-9b8f-153e3af5f39c_1680x575.png 848w, https://substackcdn.com/image/fetch/$s_!NBTV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F813b9146-b65f-49d5-9b8f-153e3af5f39c_1680x575.png 1272w, https://substackcdn.com/image/fetch/$s_!NBTV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F813b9146-b65f-49d5-9b8f-153e3af5f39c_1680x575.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NBTV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F813b9146-b65f-49d5-9b8f-153e3af5f39c_1680x575.png" width="1456" height="498" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/813b9146-b65f-49d5-9b8f-153e3af5f39c_1680x575.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:498,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Factor analysis table&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="Factor analysis table" title="Factor analysis table" srcset="https://substackcdn.com/image/fetch/$s_!NBTV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F813b9146-b65f-49d5-9b8f-153e3af5f39c_1680x575.png 424w, https://substackcdn.com/image/fetch/$s_!NBTV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F813b9146-b65f-49d5-9b8f-153e3af5f39c_1680x575.png 848w, https://substackcdn.com/image/fetch/$s_!NBTV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F813b9146-b65f-49d5-9b8f-153e3af5f39c_1680x575.png 1272w, https://substackcdn.com/image/fetch/$s_!NBTV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F813b9146-b65f-49d5-9b8f-153e3af5f39c_1680x575.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Source: <a href="https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/">Quoted study</a></figcaption></figure></div><ul><li><p><strong>Overoptimism</strong>. Developers are generally the most overoptimistic crowd I&#8217;ve met. Especially in what they can do. No wonder developers are overoptimistic with AI. Which - as usual - needs some years of contrary experience for people to adapt to reality.  </p><p></p></li><li><p><strong>AI does not work well with large code bases.</strong> The study uses code bases with &gt;1M LOC 10 years old. Code bases need to be AI friendly, not human friendly. This means code that matches context sizes, e.g. modularization code fitting context windows, tools and prompts that acknowledge size.<br></p></li><li><p><strong>Developers do not well without training.</strong> Most prompts are bad. Especially command prompts vs. plan prompting. Inexperienced developers will not be able to write the right prompts.</p><p></p></li><li><p><strong>Tacit knowledge</strong> - AI does not work well with implicit knowledge. AI works better with frameworks that use coding rules and languages that er explicit - it works worse with "convention over configuration".</p><p></p></li><li><p><strong>Tacit knowledge II</strong> - Organizations do not have all knowledge, documentation and requirements as documents for the AI to read. Most of this is in the heads of developers. Migrating to AI means getting more knowledge into documents (whys, business context, architecture, past problems etc.)<br></p></li><li><p><strong>Delegation is a general problem</strong> (&#8220;Developers accept &lt;44% of AI generations). The biggest problem people have is "This is not what I wanted" Delegation means to learn to accept a solution that solves your problem and not compare a solution to your solution. AI is a delegation problem.</p></li></ul><p>But there are some criticisms I have nevertheless:</p><ul><li><p><strong>Open Source Developers.</strong> The study is about open source developers - or more important open source projects - but then talks about developers mostly. If you&#8217;re a open source project, this is highly relevant to you. If not, it&#8217;s not. Open Source projects (having worked on some myself) are very different from e.g. startups.</p></li></ul><p>I started wanting to disagree with the study, but in the end I would agree with it! </p><p>Who knew!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tabulamag.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 Tabula Mag! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Non-determinism is not the problem of AI]]></title><description><![CDATA[In recent discussions with some developers the topic of determinism surfaced.]]></description><link>https://www.tabulamag.com/p/non-determinism-is-not-the-problem</link><guid isPermaLink="false">https://www.tabulamag.com/p/non-determinism-is-not-the-problem</guid><dc:creator><![CDATA[Stephan Schmidt]]></dc:creator><pubDate>Thu, 22 Jan 2026 10:54:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!pcFW!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc51e4e97-4395-44e5-b69e-e6a4382f1f72_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In recent discussions with some developers the topic of determinism surfaced. This idea  did already surface before: Some developers are not using AI, because AI results are not deterministic. </p><p>But non-determinism is something we already live with.</p><p>If I give a problem - as a manager or fellow developer - to different developers, I different results.</p><p>If I give a problem to the same developer after six months, I get a different result.</p><p>The reason non-determinism is evident in AI, but not with developers, is that AI is faster than developers writing code, so it&#8217;s clearer to see. We let AI write the same code twice or three times - no one pays developers to write the exact same code 10x.</p><p>The second reason developers do not like non-determinism in AI is they live in delusion about determinism. Their belief that compilers are deterministic is delusional. A JIT compiler generates code depending on the hot path driven by user actions - which are non-deterministic. The same happens when a compiler is deterministic but in a different way than developers think. Developers think they know what code is generated, but they don&#8217;t. A compiler translates a double loop or a stream into just one <a href="https://kerkour.com/introduction-rust-simd">SIMD instruction</a> - they think they know what code the compiler generates, but they don&#8217;t - so their trust in the compiler is for the wrong reasons. And even if compilers would be fully deterministic, and people would know the code they generate, compilers are so complex that determinism is not useful for verification - just because &#8216;<em>someone</em>&#8217; looks at compiler output <a href="https://blog.cloudflare.com/how-we-found-a-bug-in-gos-arm64-compiler/">does not mean it&#8217;s correct</a>.</p><div class="pullquote"><p>Then there is always undefined behavior for example in C - no deterministic by definition :-)</p></div><p>Developers do not really want determinism - this is just a scapegoat against AI.</p><p>What we want is correctness, not determinism.</p><p>For correctness we want trust, not determinism.</p><p>We trust someone, because there will be no surprise with the person. They do what they told us they would do. Their results are not wild but within normal parameters. Their results work. Developers trust compilers for the same reason we trust people. They are predictable, mostly don&#8217;t have wild results and we trust the results as &#8216;<em>correct</em>&#8217;.</p><p>Over time AIs will gain the trust of developers. By creating less and less surprises and the results being more and more within normal parameters, people will trust AIs more and more. And will look at code less and less. When I migrated from assembler to C during the 80s - and I felt I was an assembler god (don&#8217;t all teenagers overestimate their skills?) and knew all the optimizations you could do with 68000 machine code, I did look at C compiler output and the compiler wasn&#8217;t as good as me! - but it was predictable and ok - and the productivity gains and easier maintenance didn&#8217;t make me look back.</p><p>The non-determinism will no longer be a problem because of increasing trust.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tabulamag.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 Tabula Mag! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[AI Adoption Levels ]]></title><description><![CDATA[A journey to full AI]]></description><link>https://www.tabulamag.com/p/ai-adoption-levels</link><guid isPermaLink="false">https://www.tabulamag.com/p/ai-adoption-levels</guid><pubDate>Mon, 19 Jan 2026 09:25:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Bw7w!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da655ad-6f15-458c-85e5-389d727270f3_2061x976.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It&#8217;s clear that were heading into a future where there is no more software in the classical way, but AI doing jobs that currently classic software does. This future might be some years or decades away, but we can see parts of it happening right now. For example I already use an AI for accounting. Claude Code classifies all my incoming invoices and loads them into some financial software - there is no code, no IFs and THENs that classifies the invoices, it&#8217;s just AI.</p><p>Contrary to that, most organizations write classical code to solve problems today. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tabulamag.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 Tabula Mag! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>This bears the question: How do we migrate classical software engineering organizations to an AI only mode?</p><p>My<a href="https://www.amazingcto.com/cto-coaching-from-experienced-cto/"> CTO coaching</a> clients seem to be overwhelmed by the road ahead, so are many CTOs and CEO founders I&#8217;ve talked to over the last months.</p><p>To help them to overcome challenges and plot a path into the future I came up with my AI adoption levels. You go from level one, replacing Google search with asking an AI, on the lowest level to AI-only on the highest:</p><ol><li><p>Using AI like Stack Overflow / Google</p></li><li><p>Read-only Prompts for Analyzing, Explaining Code</p></li><li><p>Everyone uses AI daily somehow</p></li><li><p>Analyze Bugs, Suggest Ticket Solutions</p></li><li><p>Generate Functions + Magic Cut &amp; Paste</p></li><li><p>Prototype First (with AI)</p></li><li><p>AI Generates Code, fixes Bugs &amp; Human Review</p></li><li><p>Don&#8217;t Look at Code with AI Guardrails &amp; Automated Ticketing</p></li><li><p>AI &#8211;only / no software</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Bw7w!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da655ad-6f15-458c-85e5-389d727270f3_2061x976.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Bw7w!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da655ad-6f15-458c-85e5-389d727270f3_2061x976.png 424w, https://substackcdn.com/image/fetch/$s_!Bw7w!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da655ad-6f15-458c-85e5-389d727270f3_2061x976.png 848w, https://substackcdn.com/image/fetch/$s_!Bw7w!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da655ad-6f15-458c-85e5-389d727270f3_2061x976.png 1272w, https://substackcdn.com/image/fetch/$s_!Bw7w!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da655ad-6f15-458c-85e5-389d727270f3_2061x976.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Bw7w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da655ad-6f15-458c-85e5-389d727270f3_2061x976.png" width="1456" height="689" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6da655ad-6f15-458c-85e5-389d727270f3_2061x976.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:689,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:192309,&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://www.tabulamag.com/i/185036963?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da655ad-6f15-458c-85e5-389d727270f3_2061x976.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_!Bw7w!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da655ad-6f15-458c-85e5-389d727270f3_2061x976.png 424w, https://substackcdn.com/image/fetch/$s_!Bw7w!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da655ad-6f15-458c-85e5-389d727270f3_2061x976.png 848w, https://substackcdn.com/image/fetch/$s_!Bw7w!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da655ad-6f15-458c-85e5-389d727270f3_2061x976.png 1272w, https://substackcdn.com/image/fetch/$s_!Bw7w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6da655ad-6f15-458c-85e5-389d727270f3_2061x976.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"></figcaption></figure></div><p><strong>Using AI like Stack Overflow / Google</strong></p><p>Instead of Googling a solution or searching Stack Overflow, developers ask an AI for guidance and knowledge on how to implement a feature, use some API, solve some problems, find some third party library to include. The AI does not read or write the code, the developer translates from the code into AI and AI responses into code.</p><p><strong>Read-only Prompts for Analyzing, Explaining Code</strong></p><p>The developer uses an AI to analyze code for bugs, security problems, pen testing. The AI is also used to read configurations from production, read Github CI/CD setups, Terraform configs for the developer to understand what is going on. When moving to a module or a microservice they don&#8217;t know, or for revisiting code they haven&#8217;t worked with for a long time, developers ask the AI to explain the code, draw an ASCII architecture diagram etc. <strong>This is especially useful during onboarding for new developers.</strong> Prompt examples and prompt training are essential here. Developers learn proper prompting for the AI to understand code at this point. AI is used to check if dependencies are necessary, should be upgraded, replaced or removed. </p><p><strong>Everyone uses AI daily in one way or another</strong></p><p>This is a major milestone. AI is no longer a tool you reach to from time to time but an indispensable tool everyone uses everyday. As a manager this is the first milestone to achieve and you should measure AI usage to understand if you&#8217;re there yet.</p><p><strong>Analyze Bugs, Suggest Ticket Solutions</strong></p><p>AI is used to find the reason for bugs, suggest bug fixes. AIs are particular good at that because they relentlessly read code and documentation and get a much broader grasp about the model in the code than developers could ever do. On this level, the AI reads a ticket from Github, Linear or Jira and suggests a plan for implementation - after reading the ticket, reading the code base and reading all internal and external documentation available. It&#8217;s particularity important here that documentation exists and is written in an AI accessible form - not primarily for the consumption of developers but the consumption through AIs. <strong>Everything that is distributed as knowledge in heads of developers needs to be externalized and made accessible to AIs here.</strong></p><p><strong>Generate Functions + Magic Cut &amp; Paste</strong></p><p>On this level, AI generates code - this is another major milestone. Developers trust AI enough to let it write code. Developers use the AI for generating functions, mostly side effect free functions that are tedious for developers to write - like manipulating deep object trees - but simple to write. AI is used to generate data objects, transfer objects, database mappings or simple controllers. Developers use copy and paste for new code, then select the code and let the AI magically fix and adapt the code.</p><p><strong>Prototype First (with AI)</strong></p><p>Here the organization has moved to prototype first. No longer are tickets written, UI designs created before code is written. Instead a ptrototype is created to evaluate the idea, check how it should look like, gather input from stakeholders. After the prototype is created, tickets, UI documents and requirements are created by an AI.</p><p><strong>AI Generates Code, fixes Bugs &amp; Human Review</strong></p><p>AI does all the coding at this level. Developers interact with the model with specs, tickets and prompts, they no longer write code themselves. After the AI has written the code, developers review all code written. This is the last level of human owned code.</p><p><strong>Don&#8217;t Look at Code with AI Guardrails &amp; Automated Ticketing</strong></p><p>We now have transitioned into AI owned code. The AI reads and writes code. Guardrails are implemented for the AI - around security, operations, data protection, privacy, performance and long term maintainability of code. People interact with the AI through tickets. The AI reads a ticket changes the code, commits and deploys on it&#8217;s own.</p><p><strong>AI &#8211;only / no software</strong></p><p>The last level of an AI transition is the replacement of software as the primary tool to solve problems. Instead of writing an ERP system, the AI does ERP with tool integrations and data storage. Instead of a CRM system that sends out emails, the AI does this. Instead of writing a game, the AI creates a game on the spot that you can play  - how the AI does this internally is no longer relevant. Today we already see this in military drones.</p><p><strong>With these levels it should be easier for you to transition towards more AI and give clear guidance to the people around you on the journey.</strong></p><p><em><strong>Some notes:</strong></em></p><ul><li><p><em>These levels overlap. Each developer in an organization is on their own level, some are ahead, some behind. </em></p></li><li><p><em>Different parts of the code base have different levels. The easier and non critical parts are ahead, the more complex and critical parts are behind.</em></p></li><li><p><em>With increasing the levels, risk of failure increases but potential gains increase too.</em></p></li><li><p><em>Different industries have different state-of-the-art levels, depending on risk appetite. Fintech, Health-ech, Firmware, Avionics and other critical systems will lag behind - startups with simple and low risk problems will leap ahead.</em></p></li><li><p><em>Over time, the risk of each level decre</em>ases. Within the next decade AI only will be the default solution to problems.</p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tabulamag.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 Tabula Mag! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Developers are the new middlemen]]></title><description><![CDATA[And sooner or later middlemen get replaced.]]></description><link>https://www.tabulamag.com/p/developers-are-the-new-middlemen</link><guid isPermaLink="false">https://www.tabulamag.com/p/developers-are-the-new-middlemen</guid><dc:creator><![CDATA[Stephan Schmidt]]></dc:creator><pubDate>Sat, 17 Jan 2026 13:34:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!pcFW!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc51e4e97-4395-44e5-b69e-e6a4382f1f72_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A middleman is someone who stands between you and what you want.</p><p>Sometimes this is useful, because they are more skilled in the things that are necessary. Sometime they have the knowledge you haven&#8217;t. Sometimes they have access to resources and people you haven&#8217;t. Then they are not real middlemen.</p><p>Sometimes the inject themselves between you and what you want, to get a slice of the cake. </p><p>They become real middlemen when they no longer have unique skills, unique knowledge or unique success. When these become obsolete or commodities - but they try to stay injected between you and what you want as long as possible.</p><p>Sometimes when technologies change or new technologies arise, middlemen are swept away.</p><p>Then some technology comes along and drives them away. Like the internet (and I assume the newspaper before).</p><p>A long time ago, most people could not read or write. If you wanted to send a letter, you hired a Scribe. The scribe didn't invent the ideas in the letter; they simply possessed the technical skill of penmanship and literacy to transmit the message.</p><p>Lost to history.</p><p>With AI the developer looks more and more like the middleman. </p><p><em><strong>Developer: Where is your value? Think deep. Become a creator.</strong></em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tabulamag.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 Tabula Mag! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Why Developers Don't Like AI]]></title><description><![CDATA[FIRST make AI work for developers]]></description><link>https://www.tabulamag.com/p/why-developers-dont-like-ai</link><guid isPermaLink="false">https://www.tabulamag.com/p/why-developers-dont-like-ai</guid><dc:creator><![CDATA[Stephan Schmidt]]></dc:creator><pubDate>Wed, 14 Jan 2026 13:48:04 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!pcFW!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc51e4e97-4395-44e5-b69e-e6a4382f1f72_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When I talk to #CTOs, they tell me about their main challenge: many developers resist AI adoption. And engineering managers are baffled. Why do developers resist the transition to AI? Isn&#8217;t AI a great and astonishing technology? Why do seniors seem to resist most? Where does that push-back come from?</p><p>AI brings a lot of change and many new possibilities. AI means <a href="https://en.wikipedia.org/wiki/Tabula_rasa">Tabula Rasa</a> for most of the things we have taken for granted. The times are as exciting as the Apollo program, the first home computers or the arrival of the internet. Why do so many developers resist AI, why do so many developers downplay the benefits and try to find the flaws in AIs? Why is their first reflex to dismiss the code AIs are creating?</p><p>To understand we need to switch perspectives, take the view of developers on AI. We hear how AI enables companies to write more code with less developers. <em>&#8220;We write X% of our code with AI&#8221;</em> is the new CEO flex. If AI is only about writing more code in a shorter amount of time, developers do not benefit from this. Their job is being taken away, their skills are devalued, their income shrinks. They have been the kings (and queens!) of the world for several decades, salaries knew only one way - up, up, up! Developers were valued, developers were treated like royalty. <a href="https://thenewkingmakers.com/">&#8220;The New Kingmakers -  how developers took over the world&#8221;</a> is a sign of that era. </p><p><strong>Companies want to deliver 2x the features, but the salary stays the same - developers should be happy about this? Are managers mad?</strong></p><p>One might argue, developers do more than writing code. But if you ask any CEO, what they think developers are doing, it&#8217;s <em>&#8220;writing code&#8221;. </em>As CTO I was often asked by CEOs why developers didn&#8217;t sit at their desk, don&#8217;t they know we need to deliver features? When the pressure is up to deliver more code, the view on what developers do shrinks to writing code. </p><p>Through this lens developers do not benefit from AI. Developers face the problems of bad code written by AIs down the road - they get up at night for the incident, they are blamed for the critical bug. They do not benefit from AI, but they own the downsides. Their boss, or the CEO, or the head of marketing, gets all the benefits.</p><p>We have seen this before - <em>with testing.</em> By writing tests, developers do not benefit in the short term but need to own the downsides. I wrote about the phenomenon in <a href="https://www.amazingcto.com/tests-are-bad-for-developers/">&#8220;Tests Are Bad For Developers - The real reason developers don't write tests&#8221;</a>. Developers are under pressure to deliver, writing a test takes time and can only find a bug - which then means even more stress to make the sprint deadline. Writing tests does not bring short term benefits but short term downsides for developers. Not writing tests is the better short term strategy. A bug found in production is bad, but it&#8217;s a problem of the future, not of the current sprint deadline.</p><p><em>The same is true for AI.</em></p><p>Asking and looking around, it seems senior developers are resisting AI adoption even more. What is it about senior developers?  When the thing that gives you value and distinguishes you in the market place is taken away - why not resist? But shouldn&#8217;t they have more experience and see the possibilities that AI brings to creation? No - seniors have to lose most with the introduction of AI. They have invested years or decades to hone their skills, to get where they are. Now an AI generates code - their skills that made their salary, their status in the world and often their identity are devalued by AI. The thing that distinguishes you from a junior is taken away with AI - AI the great equalizer it seems. While at the same time, companies expect more features, more oversight, taking responsibility for what the AI does by senior developers and more code reviews - the job gets more stressful than it was before.</p><p>But there is a lot of candy - and a brighter future - in there for developers. Developers are often either mainly coders or creators. Creators will flourish, for them AI is just another tool, like the many programming languages and tools and frameworks before. Another tool to create in a long line of tools. Creators were drawn to coding because of creation, <strong>wringing something into existence out of the void of an empty screen.</strong> </p><p>What greater thing can be there? They can welcome AIs for writing most of their code. </p><p>On the other hand we have the coders. They love the tools more than the creation, coding and the intricacies of code more than the product. And in an industry with shallow products it&#8217;s no wonder many developers are coders first, creators second. </p><p>Our industry has taken agency away from developers for 40 years. In the 1980s there were many one man shops, game developers, application developers who did it all. With software development growing, roles specialized and agency was take away. This accelerated with the introduction of product managers in the 2000s when developers - despite the claims of agile! - lost the last bit of agency they had and were degraded to execution machines. <em>We tell you what to do, you code it! FASTER!</em></p><p>No wonder most developers are coders and not creators.</p><p>If we want to convince developers to use more AI, we need to explain: <strong>What is in it for them!</strong> If you want to sell something, it&#8217;s not about you, but about the other person. Put yourself in their shoes and understand them. What is in it for them? What are their desires? What are their problems? How can you help?</p><p>Luckily there are lots of things in AI for developers. </p><p><strong>First</strong>, developers are often bored by some things - proper error handling everywhere, thinking about security first. Finding and fixing that bug that isn&#8217;t critical but just annoying. Changing dozens of files is tiring and boring. AI can do all those things - <em>the AI is never bored.</em> </p><p><strong>Second</strong>, AI is a great tool beyond writing code. AI can do many things and help developers make their coding task easier. Analyze code. Make refactoring suggestions, finding security problems, plan a pen test, explain the architecture of a module you&#8217;re not familiar with. The benefit of AI is not mainly writing code, but interacting with code in general.</p><p><strong>Third</strong>, developers can get back their agency! We need to nurture the creator inside every developer. With hackathons and prototyping we can make developers see the creator in themselves again - and give them back the agency they have lost over the last decades.</p><p>CEOs have been focusing on the wrong things for a long time now: they see technology as a feature factory. Just recently a CTO told me their CEO asked them to use AI to write more code faster. The CEO didn&#8217;t ask for using AI to find better ideas, or write better requirements. No, write code faster. Deliver faster. </p><p>AI is the opportunity to change this.  I told the CTO: Push back, all of you focus on the wrong things. Use AI to focus on building the right things. Ask the AI for better ideas. <strong>Ask the AI if a feature should be build at all! </strong>Ask the AI how a feature can be promoted to be used more - and give developers the impact their work deserves.</p><p><em>Opportunities are endless. </em></p><p><em>Don&#8217;t use AI to push out more code. </em></p><p><em>If you do, developers will resist.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tabulamag.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 Tabula Mag! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[A new way to integrate data into AI agents]]></title><description><![CDATA[Using Fuse filesystems to get your and other data into an agent]]></description><link>https://www.tabulamag.com/p/a-new-way-to-integrate-data-into</link><guid isPermaLink="false">https://www.tabulamag.com/p/a-new-way-to-integrate-data-into</guid><dc:creator><![CDATA[Stephan Schmidt]]></dc:creator><pubDate>Tue, 13 Jan 2026 14:06:17 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!bT3e!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64d903dc-790a-410f-ab5c-a0c96d58da3c_814x397.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>How do you integrate AI or an AI agent with existing infrastructure, existing data sources and existing services?</p><p>Integrating services into your AI lets you do many things. You can ask the agent to</p><ul><li><p>Tell me which are my most profitable customers?</p></li><li><p>What customers are going to churn in 2025?</p></li><li><p>Add a subdomain and certificate to acme.com</p></li><li><p>Make CI/CD on Github work again</p></li><li><p>Check server &#8216;A&#8217; for vulnerabilities</p></li><li><p>Check my backups</p></li></ul><p>There are many ways to integrate your system and third party APIs into your AI agent, three options I want to talk about are:</p><ul><li><p><a href="https://en.wikipedia.org/wiki/Model_Context_Protocol">MCP</a></p></li><li><p>CLI Client</p></li><li><p>and - tada! - <a href="https://en.wikipedia.org/wiki/Filesystem_in_Userspace">Fuse</a></p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tabulamag.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 Tabula Mag! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>MCP</h2><p>MCP is the default way to integrate backend services and data into your agent, enabling the agent to work with your own data and services or a third party API and data. </p><p>MCP is well understood, well supported and used by many. The downside of MCP is you need to change the agent configuration and there is no standard way of discovery for the agent to find out the capabilities of the MCP server - or find tutorials, examples and ideas.</p><p><strong>Benefits</strong></p><ul><li><p>Standard</p></li><li><p>Well understood</p></li><li><p>Easy to integrate in AI </p></li><li><p>Easy to host as a remote service</p></li><li><p><em>(MCP also has a local tools mode)</em></p></li></ul><p><strong>Downsides</strong></p><ul><li><p>Difficult discoverability</p></li><li><p>Sometimes complicated to get working (tool me a day to get Playwright MCP working)</p></li><li><p>Need to change agent configuration</p></li><li><p>No automatic integration of different tools</p></li></ul><h2>CLI Client</h2><p>Writing a CLI Client has been my preferred way of integrating my systems and 3rd party APIs with an AI agent. You let the AI write a small CLI client to access the data or API e.g. in <code>Go</code>. Then the agent can just use the CLI client to access the data, no configuration needed.</p><p>For my #<a href="https://www.amazingcto.com/cto-coaching-from-experienced-cto/">CTO coaching</a> application this looks like this (<em>though I don&#8217;t use the client for agent integration but for my convenience in the terminal, faster than using the website</em>):</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bT3e!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64d903dc-790a-410f-ab5c-a0c96d58da3c_814x397.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bT3e!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64d903dc-790a-410f-ab5c-a0c96d58da3c_814x397.png 424w, https://substackcdn.com/image/fetch/$s_!bT3e!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64d903dc-790a-410f-ab5c-a0c96d58da3c_814x397.png 848w, https://substackcdn.com/image/fetch/$s_!bT3e!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64d903dc-790a-410f-ab5c-a0c96d58da3c_814x397.png 1272w, https://substackcdn.com/image/fetch/$s_!bT3e!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64d903dc-790a-410f-ab5c-a0c96d58da3c_814x397.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bT3e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64d903dc-790a-410f-ab5c-a0c96d58da3c_814x397.png" width="608" height="296.53071253071255" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/64d903dc-790a-410f-ab5c-a0c96d58da3c_814x397.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:397,&quot;width&quot;:814,&quot;resizeWidth&quot;:608,&quot;bytes&quot;:64108,&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://www.tabulamag.com/i/184408824?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64d903dc-790a-410f-ab5c-a0c96d58da3c_814x397.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_!bT3e!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64d903dc-790a-410f-ab5c-a0c96d58da3c_814x397.png 424w, https://substackcdn.com/image/fetch/$s_!bT3e!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64d903dc-790a-410f-ab5c-a0c96d58da3c_814x397.png 848w, https://substackcdn.com/image/fetch/$s_!bT3e!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64d903dc-790a-410f-ab5c-a0c96d58da3c_814x397.png 1272w, https://substackcdn.com/image/fetch/$s_!bT3e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64d903dc-790a-410f-ab5c-a0c96d58da3c_814x397.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I often use CLIs as a first step to integrating external APIs. When I integrated Zoom into my coach app, I let the agent first write a CLI <code>zoom-cli </code>to access the Zoom API. The agent can use that to explore the data inside, gaps in the data, what to expect, edge cases, data formats (like time/date) and understand both the API and the data at the same time. </p><p>This makes the integration of an API like Zoom into an application, like my coach app, much easier for the agent. After integration, the CLI can also help the agent debug the integration if there are problems, because the CLI is easy to use for the agent, compared to driving a website.</p><p><strong>Benefits</strong></p><ul><li><p>With <code>&#8212;help</code> the CLI tool can give a comprehensive help for the agent, including parameters, examples how to use it, usage guidelines</p></li><li><p>CLIs have a rich parameter semantic with default &#8212;param1 p1 &#8212;param2 p2 etc.</p></li><li><p>CLIs are fast</p></li><li><p>CLIs are easy to install - no agent configuration needed</p></li><li><p>Easy to implement more complicated methods and services calls beyond CRUD</p></li><li><p>Can be used on it&#8217;s own compared to MCP</p></li></ul><p><strong>Downsides</strong></p><ul><li><p>Limited auto-discoverability for the agent</p></li><li><p>Non standard way to integrate</p></li><li><p>Remote hosting is difficult, although it can be done with SSH</p></li></ul><h2>Fuse</h2><p>For months now the CLI approach has been my goto method of integrating data into the agents I use. Recently I&#8217;ve read <a href="https://jakobemmerling.de/posts/fuse-is-all-you-need/">an article</a> to use a filesystem with plain file operations to do so.</p><p>I wanted to see how integrating data this way works and start some experiments.</p><p>The way to do this is using Fuse - <em><strong>F</strong>ilesystem in <strong>Use</strong>rspace</em>. Fuse works on OS X, Linux and I use it in WSL with Windows. Fuse creates a file system in userspace as the name suggests. Which doesn&#8217;t sound exciting, but it is! This way it&#8217;s very easy to create your own file system, I use <a href="https://github.com/jacobsa/fuse">https://github.com/jacobsa/fuse</a> to build that file system in <code>Go</code>. And the filesystem can be anything - a mapping to existing data or &#8220;files&#8221; and &#8220;directories&#8221; presenting other things like email. Or it can represent data as files that does not exist at all and is made up on the fly. The possibilities are limitless. </p><p>For example, as an experiment I wrote a Fuse filesystem that uses the API of my coach app to represent data as files. Fuse can represent my CTO coaching data, clients and their sessions as files - although the data is not in files at all but spread over many different tables in a <a href="https://www.amazingcto.com/postgres-for-everything/">Postgres </a>database. Calling the terminal command <code>tree </code>on the development data, results in a tree with all the clients as directories, sessions and profile data as files.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MJhz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4fc3bef-5850-4e05-be69-e6cd63a5b238_514x1750.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MJhz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4fc3bef-5850-4e05-be69-e6cd63a5b238_514x1750.png 424w, https://substackcdn.com/image/fetch/$s_!MJhz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4fc3bef-5850-4e05-be69-e6cd63a5b238_514x1750.png 848w, https://substackcdn.com/image/fetch/$s_!MJhz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4fc3bef-5850-4e05-be69-e6cd63a5b238_514x1750.png 1272w, https://substackcdn.com/image/fetch/$s_!MJhz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4fc3bef-5850-4e05-be69-e6cd63a5b238_514x1750.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MJhz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4fc3bef-5850-4e05-be69-e6cd63a5b238_514x1750.png" width="264" height="898.8326848249027" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f4fc3bef-5850-4e05-be69-e6cd63a5b238_514x1750.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1750,&quot;width&quot;:514,&quot;resizeWidth&quot;:264,&quot;bytes&quot;:170657,&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://www.tabulamag.com/i/184408824?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4fc3bef-5850-4e05-be69-e6cd63a5b238_514x1750.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_!MJhz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4fc3bef-5850-4e05-be69-e6cd63a5b238_514x1750.png 424w, https://substackcdn.com/image/fetch/$s_!MJhz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4fc3bef-5850-4e05-be69-e6cd63a5b238_514x1750.png 848w, https://substackcdn.com/image/fetch/$s_!MJhz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4fc3bef-5850-4e05-be69-e6cd63a5b238_514x1750.png 1272w, https://substackcdn.com/image/fetch/$s_!MJhz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4fc3bef-5850-4e05-be69-e6cd63a5b238_514x1750.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The biggest benefit of representing data and services as a file system is that the agent (Claude) can reuse all the tools it knows, <code>grep (or ripgrep) </code>or <code>find (or fd) </code>and combine them with bash commands. If I ask an agent about the clients - <em>hypothetically, as my coach app already has a dashboard - </em>with the most sessions, it does use <code>bash</code>, <code>wc </code>and <code>sort </code>to come up with an answer.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mCx4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52f80f50-665a-48c2-ab1a-5d8121bf3613_1550x259.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mCx4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52f80f50-665a-48c2-ab1a-5d8121bf3613_1550x259.png 424w, https://substackcdn.com/image/fetch/$s_!mCx4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52f80f50-665a-48c2-ab1a-5d8121bf3613_1550x259.png 848w, https://substackcdn.com/image/fetch/$s_!mCx4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52f80f50-665a-48c2-ab1a-5d8121bf3613_1550x259.png 1272w, https://substackcdn.com/image/fetch/$s_!mCx4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52f80f50-665a-48c2-ab1a-5d8121bf3613_1550x259.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mCx4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52f80f50-665a-48c2-ab1a-5d8121bf3613_1550x259.png" width="1456" height="243" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/52f80f50-665a-48c2-ab1a-5d8121bf3613_1550x259.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:243,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:46275,&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://www.tabulamag.com/i/184408824?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52f80f50-665a-48c2-ab1a-5d8121bf3613_1550x259.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_!mCx4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52f80f50-665a-48c2-ab1a-5d8121bf3613_1550x259.png 424w, https://substackcdn.com/image/fetch/$s_!mCx4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52f80f50-665a-48c2-ab1a-5d8121bf3613_1550x259.png 848w, https://substackcdn.com/image/fetch/$s_!mCx4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52f80f50-665a-48c2-ab1a-5d8121bf3613_1550x259.png 1272w, https://substackcdn.com/image/fetch/$s_!mCx4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52f80f50-665a-48c2-ab1a-5d8121bf3613_1550x259.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><strong>Benefits</strong></p><ul><li><p>File format can be anything depending on needs:<br>Markdown, CSV, or JSON. The agent will easily understand this, like <em>CLIENTS.csv, &lt;meeting&gt;.md </em>or <em>&lt;client&gt;.json</em> and use the appropriate tools (like <code>jq </code>for JSON) - or even on file ending, e.g. &lt;client&gt;.json returns JSON and &lt;client&gt;.md returns Markdown and the agent decides what it finds more useful at that point</p></li><li><p>The agent can use standard tools to analyze, explore and combine data <br>(<code>bash, sort, cut</code>)</p></li><li><p>Easy discoverability <br>(just use<code> ls, find, grep, tree</code>)</p></li><li><p>Easy to cross link: If you have two file systems implemented this way, it&#8217;s easy to cross link between those two APIs/Data pools, just use the file path to connect them, e.g. <em>&lt;client&gt;.md</em> refers to /<em>otherdatapool/company.md</em> . Then the agent just reads that other file from that other path (like HTML links)</p></li><li><p>Can be used standalone and be useful, contrary to MCP</p></li></ul><p><strong>Downsides</strong></p><ul><li><p>CRUD operations are easy, service calls are more difficult</p></li><li><p>No help like with <code>coachapp &#8212;help</code> <br>(can be done with <em><strong>README_FIRST.md</strong></em> in the file system)</p></li><li><p>Non standard way to integrate</p></li><li><p>Remote hosting is possible but difficult</p></li></ul><h2><strong>Conclusion</strong></h2><p>I wasn&#8217;t convinced MCP is the best tool in the past to integrate systems and I&#8217;m still not convinced it&#8217;s the best tool. </p><p>A CLI client for many situations is the better way forward, it can be used standalone and with an agent, there is more value in it. It&#8217;s easier to install and has easier discoverability compared to MCP - if you don&#8217;t need to host it as a server there is not much of a benefit. It can help you with debugging. Fuse has the benefit over a CLI client of very easy discoverability (just use <code>find</code>) but the downside of making actions like &#8220;<em>new client</em>&#8221; (create file?) much more difficult and error prone than an CLI. </p><p>I will use Fuse in the future for analytical parts, for combining different data sources inside an agent and keep using CLI clients for everything else. </p>]]></content:encoded></item><item><title><![CDATA[My 2025 Eureka AI Moments ]]></title><description><![CDATA[AI insights that changed my mind]]></description><link>https://www.tabulamag.com/p/my-2025-eureka-ai-moments</link><guid isPermaLink="false">https://www.tabulamag.com/p/my-2025-eureka-ai-moments</guid><dc:creator><![CDATA[Stephan Schmidt]]></dc:creator><pubDate>Sun, 04 Jan 2026 08:04:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7oC1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab15ae6-cc77-4c1b-a27f-e2b9aabab933_906x505.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Everybody is looking back at 2025. And I&#8217;m taking a look back at 2025 too through the lens of AI. Many things have changed in AI. Where I still used Cursor to generate code for my projects, tell Cursor what code to write and inspecting it at the beginning of the year, today I only work through Claude Code and with Vibe Engineering.</p><p>On that backdrop of AI progress I found three moments and insights particular powerful for me:</p><ol><li><p>Code as Meta-Token</p></li><li><p>Coder vs. Creator</p></li><li><p>Model vs. Agent</p></li></ol><h2>Code as Meta-Token</h2><p>Many people - including me in the past - have a wrong view on how AI operates when writing code. They believe the AI is a trained developer, &#8220;trained&#8221; like a developer on code examples and then, depending on the training, making good or bad decisions about what code to write. They imagine the AI being a developer, analyzing the exiting code, analyzing and thinking about the requirements, then finding the best solution and code to implement it. The quality of the code depends on the training of the AI, good source material leads to a well trained AI which creates good code.</p><p><em><strong>This is wrong.</strong></em></p><p>The AI training is very different from training a developer. The AI takes the input and generates the most probable extension to that input. The input - not only being the prompt with the requirements, <em><strong>but also the existing cod</strong></em>e. If your project is one long source code file, the AI is happy to add to that long file. If you don&#8217;t use classes, the AI is happy to also not use classes. The AI is not taking requirements, thinking about the best solution based on the best code they have seen, and then trying to apply it to your code. The AI evolves your code in the most probable way. <em><strong>If the generated code is bad, this says more about your code (or the code in the context window) base than about the training data.</strong></em></p><p>For this it is helpful to think of all your existing code base as a <a href="https://www.tabulamag.com/p/the-meta-token-mental-model-for-vibe">META TOKEN, </a>and the AI generating the next token (the new code) based on the current one. After having understood that, and how refactoring the code from time to time by hand, the code the AI would generate was much better and of higher quality. It will quickly pick up the way of your code, from logging to error handling and structure.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7oC1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab15ae6-cc77-4c1b-a27f-e2b9aabab933_906x505.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7oC1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab15ae6-cc77-4c1b-a27f-e2b9aabab933_906x505.webp 424w, https://substackcdn.com/image/fetch/$s_!7oC1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab15ae6-cc77-4c1b-a27f-e2b9aabab933_906x505.webp 848w, https://substackcdn.com/image/fetch/$s_!7oC1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab15ae6-cc77-4c1b-a27f-e2b9aabab933_906x505.webp 1272w, https://substackcdn.com/image/fetch/$s_!7oC1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab15ae6-cc77-4c1b-a27f-e2b9aabab933_906x505.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7oC1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab15ae6-cc77-4c1b-a27f-e2b9aabab933_906x505.webp" width="906" height="505" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3ab15ae6-cc77-4c1b-a27f-e2b9aabab933_906x505.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:505,&quot;width&quot;:906,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:15092,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.tabulamag.com/i/183239599?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab15ae6-cc77-4c1b-a27f-e2b9aabab933_906x505.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7oC1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab15ae6-cc77-4c1b-a27f-e2b9aabab933_906x505.webp 424w, https://substackcdn.com/image/fetch/$s_!7oC1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab15ae6-cc77-4c1b-a27f-e2b9aabab933_906x505.webp 848w, https://substackcdn.com/image/fetch/$s_!7oC1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab15ae6-cc77-4c1b-a27f-e2b9aabab933_906x505.webp 1272w, https://substackcdn.com/image/fetch/$s_!7oC1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ab15ae6-cc77-4c1b-a27f-e2b9aabab933_906x505.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>Coder vs. Creator</h2><p>The second insight from 2025 is that there are coders and creators. For 40 years I thought of myself as a coder. I was in it for writing code. I thought of developers as people who want to write code.</p><p>In 2025 I found out that you can split developers into coders and creators. I learned about myself that I was not a coder, but a creator. In 1981 - as a kid - I got into coding because I wanted to play the video game ideas in my head. Creators want to create things, and coding is the tool to do so. Creators want to create apps and games. </p><p>Coders on the other hand love the coding, they are in it for coding not creating. They love the tools and identify through programming languages. Myself, I was using more than 20 programming languages over the decades, and I currently like Go a lot, but I&#8217;m not tied to any of those languages, or even identify through them. A coder would. A code sees themselves as a Python, or a Rust or a Haskell person. A coder cares mostly about the tool, about the intricacies of the beauty of the code, not the impact. Something I&#8217;ve learned, I don&#8217;t care about mechanical watches, my quartz Casio is fine - I care about the time more than the inner working of my watch. I do love coding, I do love when it clicks, something complicated works, the brain teasing, the inner beauty of code - a function design that is beautiful - it&#8217;s just that creating is more important to me.</p><p>Creators will be fine with AI - they will flourish because AI is a super power to create. Coders who identify as such will have a hard time when no more code is written.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tabulamag.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 Tabula Mag! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>Model vs. Agent</h2><p>My third Eureka moment was understanding the contribution of the agent. People mostly talk about the LLM model, like Opus 4.5 vs. Gemini 3 Pro. </p><p>What I&#8217;ve learned in 2025  is how important the agent is. Half of what makes an AI good at coding is the agent, the other half is the LLM model. The quality of the code is already good from most models, but how tools are used, if the model overengineers and many more things are tied to the agent and it&#8217;s system prompts and prompt wrapping, and the way it uses tooling. </p><p>I&#8217;ve learned this by using Gemini in the terminal. While the model beats Anthropic models on (some) benchmarks, it&#8217;s way worse when actual working with it. It wants to code all the time, there is no planning mode or discussion in Gemini CLI.</p><p>Claude Code is currently the best way to Vibe Engineering because the model is great and the CLI agent is great too.</p><p><em><strong>Those were my three Eureka AI moments of 2025 that changed my thinking.</strong></em></p><p><em><strong>I wonder what the moments of 2026 will be.</strong></em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tabulamag.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 Tabula Mag! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Adventures in Migrating from Go to Zig and Rust with Claude Code]]></title><description><![CDATA[How good are AIs with different languages?]]></description><link>https://www.tabulamag.com/p/adventures-in-migrating-from-go-to</link><guid isPermaLink="false">https://www.tabulamag.com/p/adventures-in-migrating-from-go-to</guid><dc:creator><![CDATA[Stephan Schmidt]]></dc:creator><pubDate>Fri, 12 Dec 2025 06:05:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!SaRr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bd6ba99-7056-4586-8270-1bd650a1b9ae_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;m very happy with <a href="https://www.claude.com/product/claude-code">Claude Code</a> generating code in my projects. I often hear that AI does not work for developers, ROI for AI fails, there is no measurable speedup. I suspect <a href="https://www.amazingcto.com/ai-cto/">there are different factors</a> why I&#8217;m successfully using an AI to write 99% of code while many others fail.</p><p>One of those reasons might be the usage of Go. <strong>Go is AI friendly because:</strong></p><ul><li><p>Many libraries to use</p></li><li><p>Many examples for AIs to train on</p></li><li><p>Simple syntax - not difficult for AIs to get right</p></li><li><p>One way to do things </p></li><li><p>Compile time checking of generated code</p></li><li><p>Explicit constructs - lots of boiler code noise, e.g. error handling (compare to Rust &#8220;Magic&#8221;) that helps AI understand what is going on</p></li><li><p>No major changes for the last 10 years, documentation that is 5 years old is still mostly relevant (Big changes like introduction of Context are few and far).</p></li></ul><p>I have a small project called <a href="https://github.com/stephanSchmidt/hop">Hop</a> which I use to manage my static website Amazing CTO for my <a href="https://www.amazingcto.com/">CTO Coaching</a> on <a href="https://bunny.net/cdn/">Bunny CDN</a>. With Hop I can change 302 redirect rules, push files to the CDN, manage and check DNS and minify HTML, CSS, JavaScript and images (PNGs to WEBP).</p><p>Using Hop we&#8217;ll find out two things:</p><ol><li><p>Do Zig and Rust work as well with AI as Go does</p></li><li><p>Are Zig and Rust much more performant than Go and it makes sense to migrate projects</p></li></ol><p>To test this, I converted the Go project both to <a href="https://ziglang.org/">Zig</a> and to <a href="https://rust-lang.org/">Rust</a>.</p><h2><strong>Zig</strong></h2><p>Start with the new kid on the block: Zig. Touted being as fast as C but safer. Having a fast compiler and nice error semantics. We&#8217;ll try to convert our little tool to Zig.</p><p>First we let Claude generate a <em>plan_zig.md</em> file for the migration and tell Claude what we want it to do. Examine the Hop code, extract the functionality, find Zig replacements for the Go libraries used, migrate the code, build and test the result.</p><p>As usual I asked Claude after it finished the plan to check the plan for details and make sure it works with the code. To read the documentation again and make sure the plan works. One issue were dependencies. We iterated over the plan for finding the right dependencies replacements. Many libraries that are available in Go are not available in Zig, and it had trouble to also find C libraries e.g. for minify - Claude suggested to fork cminify and make it a C library and I agreed. After we were finished with refining the plan I asked Claude if it was <em>&#8220;confident&#8221;</em> to make the plan work, it wasn&#8217;t and made some changes, added some lines and checked more documentation.</p><p>When starting coding, <strong>Claude failed miserably.</strong> It could not get IO working because Zig recently changed how it does IO. Zig was confusing as it had old documentation an new documentation. Documentation on the Zig site was subpar, API docs being spotty and the website and the internet lacking great tutorials. Giving 4 URLs to Claude to check how IO works now didn&#8217;t work and Claude was not able to get something compiled for half an hour.</p><p>I stopped the migration to Zig at that point.</p><h2><strong>Rust</strong></h2><p>On to Rust, which is much older than Zig and should not be a challenge because of lacking documentation or fast changes. Rust might be a challenge because of the complicated syntax though, can Claude manage that?</p><p>Going the same route with the plan and iterating over it as we did wit Zig, Claude had problems finding dependencies, at one point Claude wanted to minify JavaScript by wrapping it in <em>&lt;script&gt;</em> and using a HTML minifier instead of using e.g. <a href="https://github.com/wilsonzlin/minify-js">minify-js</a><br>We did not find a library to convert fonts into the smaller WOFF2 (Go had a library), and Claude suggested to use C++ which I refused, I didn&#8217;t want to drag in a C++ toolchain. As I can convert the fonts once and for all, I dropped the font-conversion requirements.</p><p>Claude worked for several long minutes and in the end: Compiled on first try.</p><p>Contrary to Zig, Claude had no problem converting the project to Rust, and make it compile.</p><p>Going into the details of what Claude did, revealed many problems though. Command line arguments were different between the versions, e.g. <em>&#8212;key vs. &#8212;api-key</em>, and even parameters were different  <em>&#8212;zone &lt;zonename&gt; vs &#8212;pull-zone-id &lt;zoneid&gt;</em> with different semantics. And then some parameters were missing completely and some were added:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PPEc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b037c12-824e-4273-a4ae-7ef087725d53_1258x1112.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PPEc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b037c12-824e-4273-a4ae-7ef087725d53_1258x1112.png 424w, https://substackcdn.com/image/fetch/$s_!PPEc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b037c12-824e-4273-a4ae-7ef087725d53_1258x1112.png 848w, https://substackcdn.com/image/fetch/$s_!PPEc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b037c12-824e-4273-a4ae-7ef087725d53_1258x1112.png 1272w, https://substackcdn.com/image/fetch/$s_!PPEc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b037c12-824e-4273-a4ae-7ef087725d53_1258x1112.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PPEc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b037c12-824e-4273-a4ae-7ef087725d53_1258x1112.png" width="1258" height="1112" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6b037c12-824e-4273-a4ae-7ef087725d53_1258x1112.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1112,&quot;width&quot;:1258,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:110109,&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://www.tabulamag.com/i/181319319?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b037c12-824e-4273-a4ae-7ef087725d53_1258x1112.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_!PPEc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b037c12-824e-4273-a4ae-7ef087725d53_1258x1112.png 424w, https://substackcdn.com/image/fetch/$s_!PPEc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b037c12-824e-4273-a4ae-7ef087725d53_1258x1112.png 848w, https://substackcdn.com/image/fetch/$s_!PPEc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b037c12-824e-4273-a4ae-7ef087725d53_1258x1112.png 1272w, https://substackcdn.com/image/fetch/$s_!PPEc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b037c12-824e-4273-a4ae-7ef087725d53_1258x1112.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><code><br> </code></p><p>There are big differences in the CLI API of both versions, but differences do not stop there. Both versions have different functionality, the Rust version (Rhop) has a JSON rule file which was not part of the original Hop application.</p><blockquote><p>Learning: My prompt should have been more specific to copy the parameters verbatim and make sure the CLI API stays compatible.</p></blockquote><p>Beside that, the &#8220;rules list&#8221; command did not work, it listed all Edge rules of the project not only redirects, where the Go version would only print redirect rules (as intended). Minify did not work. The minify command in Rhop did not copy files it could not minify but ignored them. Second, when minify had an error with a JS file or CSS file, because it could not parse it, Rhop did not copy the file but also ignored it. The Go version creates a responsive <em>srcset</em> of WEBP files from one PNG, Rhop only converts one PNG to one WEBP file - forgetting the responsiveness functionality.</p><p>The HTML was also broken, the minifier was too aggressive to minify HTML which resulted in broken pages. Then Claude tuned the minifier down to be less aggressive, but it still broke the page. What happened? It turned out some of my pages were not correct HTML to begin with - Hop with Go was just more forgiving than Rhop with invalid HTML.</p><p>A short Claude Code planning and coding session removed those bugs and made Rhop work.</p><p><em><strong>Eureka! </strong>We converted a Go project successfully to Rust.</em></p><p>Let&#8217;s compare both versions, the Rust and the Go one (You remember Zig failed). I focus on the minify functionality here. The difference in the minified size between the Go and the Rust version wasn&#8217;t that big:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_CYR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F627207b3-e58e-4b71-ba28-cd7bd5e058f4_1327x315.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_CYR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F627207b3-e58e-4b71-ba28-cd7bd5e058f4_1327x315.png 424w, https://substackcdn.com/image/fetch/$s_!_CYR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F627207b3-e58e-4b71-ba28-cd7bd5e058f4_1327x315.png 848w, https://substackcdn.com/image/fetch/$s_!_CYR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F627207b3-e58e-4b71-ba28-cd7bd5e058f4_1327x315.png 1272w, https://substackcdn.com/image/fetch/$s_!_CYR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F627207b3-e58e-4b71-ba28-cd7bd5e058f4_1327x315.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_CYR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F627207b3-e58e-4b71-ba28-cd7bd5e058f4_1327x315.png" width="1327" height="315" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/627207b3-e58e-4b71-ba28-cd7bd5e058f4_1327x315.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:315,&quot;width&quot;:1327,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:44150,&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://www.tabulamag.com/i/181319319?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F627207b3-e58e-4b71-ba28-cd7bd5e058f4_1327x315.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_!_CYR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F627207b3-e58e-4b71-ba28-cd7bd5e058f4_1327x315.png 424w, https://substackcdn.com/image/fetch/$s_!_CYR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F627207b3-e58e-4b71-ba28-cd7bd5e058f4_1327x315.png 848w, https://substackcdn.com/image/fetch/$s_!_CYR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F627207b3-e58e-4b71-ba28-cd7bd5e058f4_1327x315.png 1272w, https://substackcdn.com/image/fetch/$s_!_CYR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F627207b3-e58e-4b71-ba28-cd7bd5e058f4_1327x315.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>The difference in runtime also wasn&#8217;t as big as I had hoped - Rust is touted as a very fast language rivaling C but the results felt mixed:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Swho!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F602091cf-b0ba-495d-bc39-6814314056ca_1216x211.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Swho!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F602091cf-b0ba-495d-bc39-6814314056ca_1216x211.png 424w, https://substackcdn.com/image/fetch/$s_!Swho!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F602091cf-b0ba-495d-bc39-6814314056ca_1216x211.png 848w, https://substackcdn.com/image/fetch/$s_!Swho!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F602091cf-b0ba-495d-bc39-6814314056ca_1216x211.png 1272w, https://substackcdn.com/image/fetch/$s_!Swho!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F602091cf-b0ba-495d-bc39-6814314056ca_1216x211.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Swho!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F602091cf-b0ba-495d-bc39-6814314056ca_1216x211.png" width="1216" height="211" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/602091cf-b0ba-495d-bc39-6814314056ca_1216x211.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:211,&quot;width&quot;:1216,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:22395,&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://www.tabulamag.com/i/181319319?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F602091cf-b0ba-495d-bc39-6814314056ca_1216x211.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_!Swho!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F602091cf-b0ba-495d-bc39-6814314056ca_1216x211.png 424w, https://substackcdn.com/image/fetch/$s_!Swho!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F602091cf-b0ba-495d-bc39-6814314056ca_1216x211.png 848w, https://substackcdn.com/image/fetch/$s_!Swho!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F602091cf-b0ba-495d-bc39-6814314056ca_1216x211.png 1272w, https://substackcdn.com/image/fetch/$s_!Swho!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F602091cf-b0ba-495d-bc39-6814314056ca_1216x211.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>A reduction of running time of <em>30s</em> is not nothing but it&#8217;s not twice as fast with no cache. It is much faster when we&#8217;re mostly CPU bound when all images are cached and skipped and only HTML minifying is applied. In this case Rust is ~4x faster - though for my website the Go version is fast enough with 6 seconds. Perhaps the Rust code wasn&#8217;t very optimized? Telling Claude Code to optimize the Rust code, it changed the parallelization strategy,  applied read optimizations, optimized copies and more, and the time went <strong>up</strong> to ~100s. Go figure.</p><p>How much code did Claude produce? Comparing the implementations, the versions are similar in size:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bJV1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76631082-d78c-4043-9ea6-c3fb15b4473e_1333x345.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bJV1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76631082-d78c-4043-9ea6-c3fb15b4473e_1333x345.png 424w, https://substackcdn.com/image/fetch/$s_!bJV1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76631082-d78c-4043-9ea6-c3fb15b4473e_1333x345.png 848w, https://substackcdn.com/image/fetch/$s_!bJV1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76631082-d78c-4043-9ea6-c3fb15b4473e_1333x345.png 1272w, https://substackcdn.com/image/fetch/$s_!bJV1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76631082-d78c-4043-9ea6-c3fb15b4473e_1333x345.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bJV1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76631082-d78c-4043-9ea6-c3fb15b4473e_1333x345.png" width="1333" height="345" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/76631082-d78c-4043-9ea6-c3fb15b4473e_1333x345.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:345,&quot;width&quot;:1333,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:31931,&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://www.tabulamag.com/i/181319319?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76631082-d78c-4043-9ea6-c3fb15b4473e_1333x345.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_!bJV1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76631082-d78c-4043-9ea6-c3fb15b4473e_1333x345.png 424w, https://substackcdn.com/image/fetch/$s_!bJV1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76631082-d78c-4043-9ea6-c3fb15b4473e_1333x345.png 848w, https://substackcdn.com/image/fetch/$s_!bJV1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76631082-d78c-4043-9ea6-c3fb15b4473e_1333x345.png 1272w, https://substackcdn.com/image/fetch/$s_!bJV1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F76631082-d78c-4043-9ea6-c3fb15b4473e_1333x345.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The implementation in Rust has less code than Go, something to be expected because Go is more verbose, but also surprising as LLMs often add more lines of code and are very verbose. On top it looks like Claude Code is not very noisy by adding lots of comments, as LLMs have also been accused of.</p><p>Overall at this point I feel the conversion was not satisfying. Claude Code totally failed with Zig, and the Rust version of Hop was only superficially the same. From the wrong parameters, to the missing features - the implementation was totally different - e.g. the WEBP conversion didn&#8217;t include responsive output. Perhaps a better prompt is needed to make this happen.</p><p>In the grand scheme of things though, <em><strong>it was amazing to convert between programming languages in a few hours</strong></em>, something which would have taken days for a developer to accomplish - if I could make them start this dreadful task at all. As this will only get better over time, we are moving to a place where programming languages do no longer matter as we can covert between languages and frameworks. Indeed a conversion prompt, that tackles the main dependencies, based on what works, between projects to guide the LLM, could make this conversion even faster.</p><p>Second we wanted to see if a conversion makes sense because of performance gains, and if an LLM can handle Zig and Rust as well as Go. From a language perspective, the LLM failed with Zig but Rust seems to work as well as Go with AIs. My usual problems when writing Rust code did not occur. I had no borrow checker problems (though I do suspect the AI uses quite some Arc&lt;&gt;) -  the second reason I left Rust stayed with me: <em><strong>compile times in Rust are atrocious compared to Go.   </strong></em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tabulamag.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 Tabula Mag! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Asking Claude to translate Python to Go 9x]]></title><description><![CDATA[The current limits of generating deterministic code with AI as Compiler]]></description><link>https://www.tabulamag.com/p/ai-as-compiler</link><guid isPermaLink="false">https://www.tabulamag.com/p/ai-as-compiler</guid><dc:creator><![CDATA[Stephan Schmidt]]></dc:creator><pubDate>Thu, 04 Dec 2025 08:03:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!zjgb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8edfe75-d01a-4625-96ba-b47f6232827a_2171x861.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Many developers think they know what a compiler does - I did think so too! That&#8217;s the reason they trust compilers more than they should - I did! In the elements of my <a href="https://www.tabulamag.com/p/introduction-to-theory-of-control">Theory of Control,</a> they think they control compilers. </p><p>This is an illusion. Compilers today do things that are not in the source code. In this example from the <a href="https://xania.org/202512/03-more-adding-integers">Advent of Compiler Optimizations</a>, we see source code to the left and machine code (ARM) to the right. And as we can see, the tail recursive function <em>add_v4</em> of add to the left is replaced with a simple add on the right - not what developers would expect.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zjgb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8edfe75-d01a-4625-96ba-b47f6232827a_2171x861.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zjgb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8edfe75-d01a-4625-96ba-b47f6232827a_2171x861.png 424w, https://substackcdn.com/image/fetch/$s_!zjgb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8edfe75-d01a-4625-96ba-b47f6232827a_2171x861.png 848w, https://substackcdn.com/image/fetch/$s_!zjgb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8edfe75-d01a-4625-96ba-b47f6232827a_2171x861.png 1272w, https://substackcdn.com/image/fetch/$s_!zjgb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8edfe75-d01a-4625-96ba-b47f6232827a_2171x861.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zjgb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8edfe75-d01a-4625-96ba-b47f6232827a_2171x861.png" width="1456" height="577" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f8edfe75-d01a-4625-96ba-b47f6232827a_2171x861.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:577,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:195336,&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://www.tabulamag.com/i/180674950?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8edfe75-d01a-4625-96ba-b47f6232827a_2171x861.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_!zjgb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8edfe75-d01a-4625-96ba-b47f6232827a_2171x861.png 424w, https://substackcdn.com/image/fetch/$s_!zjgb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8edfe75-d01a-4625-96ba-b47f6232827a_2171x861.png 848w, https://substackcdn.com/image/fetch/$s_!zjgb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8edfe75-d01a-4625-96ba-b47f6232827a_2171x861.png 1272w, https://substackcdn.com/image/fetch/$s_!zjgb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8edfe75-d01a-4625-96ba-b47f6232827a_2171x861.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Compilers do not stop there, they might generate something completely different, for example replacing a nested for loop on array operations into <a href="https://www.nickwilcox.com/blog/autovec/">SIMD vector instructions</a>. But as someone pointed out on Linkedin, Compilers are <a href="https://en.cppreference.com/w/cpp/language/as_if.html">limited in what they are allowed to do</a> (thanks for the link!)</p><p>What does this have to do with AI? Developers distrust AI because they can&#8217;t control it, because they can&#8217;t predict the output, or better, they can&#8217;t predict the effect of it&#8217;s output. </p><p>Compilers are optimized to have predictable output. If the source code adds 3 + 7, the compiler should create machine code that also adds 3 + 7, not subtract 3 from 7 for example. Compilers in this way are deterministic (<a href="https://www.baeldung.com/graal-java-jit-compiler">JIT</a> compilers are stochastic in some other way - the reasons benchmarks often fail). </p><p>AI&#8217;s are, for now, not optimized for predictable, repeatable and deterministic output. You give the same input to an AI 9 times, and you get 9 different results. I&#8217;ve tried that with<a href="https://www.tabulamag.com/p/i-asked-claude-code-to-write-the"> generating a Minesweeper game 9x.</a> (actually 10x) The result were 9 different games with different UI, look and feel and <em><strong>even different algorithms and bugs.</strong></em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EA0Y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df0b654-03c6-4353-a992-c063deab3e70_1365x1332.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EA0Y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df0b654-03c6-4353-a992-c063deab3e70_1365x1332.png 424w, https://substackcdn.com/image/fetch/$s_!EA0Y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df0b654-03c6-4353-a992-c063deab3e70_1365x1332.png 848w, https://substackcdn.com/image/fetch/$s_!EA0Y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df0b654-03c6-4353-a992-c063deab3e70_1365x1332.png 1272w, https://substackcdn.com/image/fetch/$s_!EA0Y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df0b654-03c6-4353-a992-c063deab3e70_1365x1332.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EA0Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df0b654-03c6-4353-a992-c063deab3e70_1365x1332.png" width="1365" height="1332" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0df0b654-03c6-4353-a992-c063deab3e70_1365x1332.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1332,&quot;width&quot;:1365,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:743905,&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://www.tabulamag.com/i/180674950?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df0b654-03c6-4353-a992-c063deab3e70_1365x1332.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_!EA0Y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df0b654-03c6-4353-a992-c063deab3e70_1365x1332.png 424w, https://substackcdn.com/image/fetch/$s_!EA0Y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df0b654-03c6-4353-a992-c063deab3e70_1365x1332.png 848w, https://substackcdn.com/image/fetch/$s_!EA0Y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df0b654-03c6-4353-a992-c063deab3e70_1365x1332.png 1272w, https://substackcdn.com/image/fetch/$s_!EA0Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df0b654-03c6-4353-a992-c063deab3e70_1365x1332.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" 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>We have seen AIs progress before. A year ago AIs struggled hard to generate correct text. The easiest way back then to detect AI generated images was garbled text in the image. Nano Banana Pro has solved this mostly. We have seen people with six fingers at each hand. Today you rarely see AI images with people who have six fingers (or four!). There was a need to make AI work in certain scenarios and AIs were adapted - a need to limit AI to &#8220;correct&#8221; output.</p><p>AIs as compilers?</p><p>AIs are very different from compilers in one way, they are not deterministic. AIs are similar to compilers in other ways, as they can translate text into code, or code into code. Compilers have the concept of correctness, AIs currently lack that concept - not only when generating code, but it&#8217;s here, where the code might do incorrect things, that it surfaces most and is easy to see - or even binary: the code works or it doesn&#8217;t.</p><p>How deterministic can AIs be?</p><p>I wanted to see what does work right now and where we are standing. Can AIs be deterministic for small input variance? What if we only use code as input, just like a compiler does? To find a small example that works to establish a data point, not to proof that it works for all input.</p><p>For that I created a small Python script and let<a href="https://www.anthropic.com/claude/sonnet"> Claude Code Sonnet 4.5</a> translate it 9 times to Go. The Python script is very simple and similar to the Compiler example above.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OmUL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed29330-b0d6-4999-898f-927ce25fff59_718x531.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OmUL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed29330-b0d6-4999-898f-927ce25fff59_718x531.png 424w, https://substackcdn.com/image/fetch/$s_!OmUL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed29330-b0d6-4999-898f-927ce25fff59_718x531.png 848w, https://substackcdn.com/image/fetch/$s_!OmUL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed29330-b0d6-4999-898f-927ce25fff59_718x531.png 1272w, https://substackcdn.com/image/fetch/$s_!OmUL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed29330-b0d6-4999-898f-927ce25fff59_718x531.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OmUL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed29330-b0d6-4999-898f-927ce25fff59_718x531.png" width="718" height="531" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4ed29330-b0d6-4999-898f-927ce25fff59_718x531.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:531,&quot;width&quot;:718,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:41239,&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://www.tabulamag.com/i/180674950?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed29330-b0d6-4999-898f-927ce25fff59_718x531.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_!OmUL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed29330-b0d6-4999-898f-927ce25fff59_718x531.png 424w, https://substackcdn.com/image/fetch/$s_!OmUL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed29330-b0d6-4999-898f-927ce25fff59_718x531.png 848w, https://substackcdn.com/image/fetch/$s_!OmUL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed29330-b0d6-4999-898f-927ce25fff59_718x531.png 1272w, https://substackcdn.com/image/fetch/$s_!OmUL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed29330-b0d6-4999-898f-927ce25fff59_718x531.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Translating this 9x into Go source code with Claude Code Sonnet 4.5 resulted in 9 go versions, <em>add1.go</em> to <em>add9.go</em> </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qJuN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5645bd-5c40-45a0-8402-be8cc49d731b_2646x2148.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qJuN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5645bd-5c40-45a0-8402-be8cc49d731b_2646x2148.png 424w, https://substackcdn.com/image/fetch/$s_!qJuN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5645bd-5c40-45a0-8402-be8cc49d731b_2646x2148.png 848w, https://substackcdn.com/image/fetch/$s_!qJuN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5645bd-5c40-45a0-8402-be8cc49d731b_2646x2148.png 1272w, https://substackcdn.com/image/fetch/$s_!qJuN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5645bd-5c40-45a0-8402-be8cc49d731b_2646x2148.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qJuN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5645bd-5c40-45a0-8402-be8cc49d731b_2646x2148.png" width="1456" height="1182" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/de5645bd-5c40-45a0-8402-be8cc49d731b_2646x2148.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1182,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:289889,&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://www.tabulamag.com/i/180674950?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5645bd-5c40-45a0-8402-be8cc49d731b_2646x2148.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_!qJuN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5645bd-5c40-45a0-8402-be8cc49d731b_2646x2148.png 424w, https://substackcdn.com/image/fetch/$s_!qJuN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5645bd-5c40-45a0-8402-be8cc49d731b_2646x2148.png 848w, https://substackcdn.com/image/fetch/$s_!qJuN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5645bd-5c40-45a0-8402-be8cc49d731b_2646x2148.png 1272w, https://substackcdn.com/image/fetch/$s_!qJuN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5645bd-5c40-45a0-8402-be8cc49d731b_2646x2148.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Claude Code generated the same Go code 9x. A small limited input generated deterministic output. I struggled with suppressing Markdown output, currently AIs love generating Markdown, it worked with </p><blockquote><p><em>Translate this Python code to Go. Output ONLY the Go code, NEVER add explanations NEVER add markdown or wrap it with markdown like \`\`\`go\`\`\` ALWAYS generate go source only - check after generation.</em></p></blockquote><p>Especially the <em>&#8220;check after generation&#8221;</em> is helping, as it does with <a href="https://simonwillison.net/2025/Oct/7/vibe-engineering/">Vibe Engineering</a> in general - AIs would profit from being 2-pass compilers. A script runs the prompt 9 times (WSL2, Windows11), <a href="https://github.com/Aloxaf/silicon">Silicon</a> generates the syntax highlighted images, Image Magick generates the 3x3 image then as a <a href="https://usage.imagemagick.org/montage/">montage</a>.</p><p>When we try the same with Gemini 2.5-pro (I don&#8217;t have 3.0 CLI access yet), it gets interesting. First, Gemini can&#8217;t strip Markdown as reliably as Claude so I had to remove it often myself (check the number of lines in each run). </p><p><strong>Second, the generated code is the same for this simple example!</strong></p><p><em>(Also compared to Claude Code the Gemini CLI is much slower, to the point of being unusable)</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!prGD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1292bafa-63ed-493f-be57-a43e692140e6_2646x2346.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!prGD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1292bafa-63ed-493f-be57-a43e692140e6_2646x2346.png 424w, https://substackcdn.com/image/fetch/$s_!prGD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1292bafa-63ed-493f-be57-a43e692140e6_2646x2346.png 848w, https://substackcdn.com/image/fetch/$s_!prGD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1292bafa-63ed-493f-be57-a43e692140e6_2646x2346.png 1272w, https://substackcdn.com/image/fetch/$s_!prGD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1292bafa-63ed-493f-be57-a43e692140e6_2646x2346.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!prGD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1292bafa-63ed-493f-be57-a43e692140e6_2646x2346.png" width="1456" height="1291" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1292bafa-63ed-493f-be57-a43e692140e6_2646x2346.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1291,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:365029,&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://www.tabulamag.com/i/180674950?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1292bafa-63ed-493f-be57-a43e692140e6_2646x2346.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_!prGD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1292bafa-63ed-493f-be57-a43e692140e6_2646x2346.png 424w, https://substackcdn.com/image/fetch/$s_!prGD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1292bafa-63ed-493f-be57-a43e692140e6_2646x2346.png 848w, https://substackcdn.com/image/fetch/$s_!prGD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1292bafa-63ed-493f-be57-a43e692140e6_2646x2346.png 1272w, https://substackcdn.com/image/fetch/$s_!prGD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1292bafa-63ed-493f-be57-a43e692140e6_2646x2346.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Interestingly both Claude and Gemini chose <em>int </em>as the type for parameters <em>a</em> and <em>b</em>.<strong> </strong>Probably because of the one example given. </p><p>We can assume that we get different results with a different Python code example that does not add <em>ints</em>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9OpS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3afcec29-efe6-4528-b52a-09a29778e574_814x531.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9OpS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3afcec29-efe6-4528-b52a-09a29778e574_814x531.png 424w, https://substackcdn.com/image/fetch/$s_!9OpS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3afcec29-efe6-4528-b52a-09a29778e574_814x531.png 848w, https://substackcdn.com/image/fetch/$s_!9OpS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3afcec29-efe6-4528-b52a-09a29778e574_814x531.png 1272w, https://substackcdn.com/image/fetch/$s_!9OpS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3afcec29-efe6-4528-b52a-09a29778e574_814x531.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9OpS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3afcec29-efe6-4528-b52a-09a29778e574_814x531.png" width="814" height="531" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3afcec29-efe6-4528-b52a-09a29778e574_814x531.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:531,&quot;width&quot;:814,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:46255,&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://www.tabulamag.com/i/180674950?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3afcec29-efe6-4528-b52a-09a29778e574_814x531.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_!9OpS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3afcec29-efe6-4528-b52a-09a29778e574_814x531.png 424w, https://substackcdn.com/image/fetch/$s_!9OpS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3afcec29-efe6-4528-b52a-09a29778e574_814x531.png 848w, https://substackcdn.com/image/fetch/$s_!9OpS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3afcec29-efe6-4528-b52a-09a29778e574_814x531.png 1272w, https://substackcdn.com/image/fetch/$s_!9OpS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3afcec29-efe6-4528-b52a-09a29778e574_814x531.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>And the Go result reflects this (Claude Code Sonnet 4.5 again).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OiSm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b800662-c0da-480e-b5d1-ac73d3348024_2934x2148.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OiSm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b800662-c0da-480e-b5d1-ac73d3348024_2934x2148.png 424w, https://substackcdn.com/image/fetch/$s_!OiSm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b800662-c0da-480e-b5d1-ac73d3348024_2934x2148.png 848w, https://substackcdn.com/image/fetch/$s_!OiSm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b800662-c0da-480e-b5d1-ac73d3348024_2934x2148.png 1272w, https://substackcdn.com/image/fetch/$s_!OiSm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b800662-c0da-480e-b5d1-ac73d3348024_2934x2148.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OiSm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b800662-c0da-480e-b5d1-ac73d3348024_2934x2148.png" width="1456" height="1066" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7b800662-c0da-480e-b5d1-ac73d3348024_2934x2148.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1066,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:318720,&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://www.tabulamag.com/i/180674950?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b800662-c0da-480e-b5d1-ac73d3348024_2934x2148.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_!OiSm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b800662-c0da-480e-b5d1-ac73d3348024_2934x2148.png 424w, https://substackcdn.com/image/fetch/$s_!OiSm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b800662-c0da-480e-b5d1-ac73d3348024_2934x2148.png 848w, https://substackcdn.com/image/fetch/$s_!OiSm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b800662-c0da-480e-b5d1-ac73d3348024_2934x2148.png 1272w, https://substackcdn.com/image/fetch/$s_!OiSm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b800662-c0da-480e-b5d1-ac73d3348024_2934x2148.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>What have we learned?</strong></p><p>AIs can generate deterministic output currently from small input. And they break down for high variance input, like the Minesweeper example above. Somewhere between these two data points, <em><strong>large-example-English</strong></em> and <em><strong>small-example-Python</strong></em> is a red line drawn where AIs start to struggle to keep determinism.</p><p><em>If we need more determinism in AI output, I&#8217;m sure we&#8217;ll see the same play out as with the text and the fingers. Looking at my <a href="https://www.tabulamag.com/p/introduction-to-theory-of-control">Theory of Control</a>, I&#8217;m not sure that control is really the thing we want when moving ahead with AI though.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tabulamag.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 Tabula Mag! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[AI instead of Software]]></title><description><![CDATA[How AI is replacing software]]></description><link>https://www.tabulamag.com/p/ai-instead-of-software</link><guid isPermaLink="false">https://www.tabulamag.com/p/ai-instead-of-software</guid><dc:creator><![CDATA[Stephan Schmidt]]></dc:creator><pubDate>Mon, 10 Nov 2025 12:03:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!oSnS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfa621b3-d42f-4214-8104-0191fa0e4568_2117x1202.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>AI will replace software as a tool. We have been living with software for a long time, so we can&#8217;t imagine software going away. Software is in your phone, you use apps from the app store, software is on your computer, in your watch, your washing machine and your car. But let me tell you, it will go away just as other categories of tools went away.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tabulamag.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 Tabula Mag! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Over the last ten thousand years, there always was a dominant category of tools, starting with fingers. People solved all kind of problems with their fingers, like adding numbers. New categories of tools emerged: manual, mechanical, electrical, electronic, integrated circuits (CPUs), software and most recently Saas/mobile. When building a tool, you most often chose the newest and best category. For decades this &#8220;best tool&#8221; now was software and Saas. Have a problem? Build a Saas or mobile app (or some software). <strong>But this is coming to an end, AI is the emerging best tool category.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oSnS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfa621b3-d42f-4214-8104-0191fa0e4568_2117x1202.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oSnS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfa621b3-d42f-4214-8104-0191fa0e4568_2117x1202.png 424w, https://substackcdn.com/image/fetch/$s_!oSnS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfa621b3-d42f-4214-8104-0191fa0e4568_2117x1202.png 848w, https://substackcdn.com/image/fetch/$s_!oSnS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfa621b3-d42f-4214-8104-0191fa0e4568_2117x1202.png 1272w, https://substackcdn.com/image/fetch/$s_!oSnS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfa621b3-d42f-4214-8104-0191fa0e4568_2117x1202.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oSnS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfa621b3-d42f-4214-8104-0191fa0e4568_2117x1202.png" width="1456" height="827" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dfa621b3-d42f-4214-8104-0191fa0e4568_2117x1202.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:827,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1228444,&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://www.tabulamag.com/i/178336507?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfa621b3-d42f-4214-8104-0191fa0e4568_2117x1202.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_!oSnS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfa621b3-d42f-4214-8104-0191fa0e4568_2117x1202.png 424w, https://substackcdn.com/image/fetch/$s_!oSnS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfa621b3-d42f-4214-8104-0191fa0e4568_2117x1202.png 848w, https://substackcdn.com/image/fetch/$s_!oSnS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfa621b3-d42f-4214-8104-0191fa0e4568_2117x1202.png 1272w, https://substackcdn.com/image/fetch/$s_!oSnS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfa621b3-d42f-4214-8104-0191fa0e4568_2117x1202.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>People confuse AI with software. But AI is something different. AI is about training, not about translating requirements into logical, sequential code. AI is not software but a new category for tools that goes beyond software.</p><p><strong>&#8220;Stephan that&#8217;s nice, but when is it going to happen? How does it look like?&#8221;</strong> I hear you say. How does it look like? </p><p>Your current tech setup might be a mix of microservices, ERP and CRM systems, external integration with tools like Hubspot and a data warehouse in the cloud. When you want to send an upsell email, you use your ERP, CRM, data and Hubspot to create, target and send the email out to potential customers who might take  the upsell offer.</p><p>With AI, you have an AI running on top of storage and you tell the AI to send out that email. There is no ERP or CRM code in the AI that runs and does this. The AI will do it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6DvC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d0af7db-99d9-4043-9b89-478662314e5f_2172x1205.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6DvC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d0af7db-99d9-4043-9b89-478662314e5f_2172x1205.png 424w, https://substackcdn.com/image/fetch/$s_!6DvC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d0af7db-99d9-4043-9b89-478662314e5f_2172x1205.png 848w, https://substackcdn.com/image/fetch/$s_!6DvC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d0af7db-99d9-4043-9b89-478662314e5f_2172x1205.png 1272w, https://substackcdn.com/image/fetch/$s_!6DvC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d0af7db-99d9-4043-9b89-478662314e5f_2172x1205.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6DvC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d0af7db-99d9-4043-9b89-478662314e5f_2172x1205.png" width="1456" height="808" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5d0af7db-99d9-4043-9b89-478662314e5f_2172x1205.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:808,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:217164,&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://www.tabulamag.com/i/178336507?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d0af7db-99d9-4043-9b89-478662314e5f_2172x1205.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_!6DvC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d0af7db-99d9-4043-9b89-478662314e5f_2172x1205.png 424w, https://substackcdn.com/image/fetch/$s_!6DvC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d0af7db-99d9-4043-9b89-478662314e5f_2172x1205.png 848w, https://substackcdn.com/image/fetch/$s_!6DvC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d0af7db-99d9-4043-9b89-478662314e5f_2172x1205.png 1272w, https://substackcdn.com/image/fetch/$s_!6DvC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d0af7db-99d9-4043-9b89-478662314e5f_2172x1205.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" 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>&#8220;<strong>When is it going to happen?&#8221; </strong>Lets take a look where we are we with this. To find out I&#8217;ve done some experiments with AI/LLMs in this case Claude Code with some simple games.</p><p>AI means there is no source code for doing something, instead of software running that does something. Generating source code with AI, like all developers currently do, is not AI but still software. AI means there is no source code.</p><p>This said, what works and what doesn&#8217;t? In short:</p><ul><li><p>Claude Code can play Tic-Toc-Toe already.</p></li><li><p>Claude Code can play &#8220;Connect four&#8221;</p></li><li><p>Claude Code can&#8217;t play Minesweeper yet.</p></li></ul><p></p><p>Start with the simplest game, Tic-Tac-Toe. Some months ago I&#8217;ve tried to play Tic-Tac-Toe against an LLM and it didn&#8217;t really work. For example, it didn&#8217;t find out that it did win, it made mistakes, didn&#8217;t understand the board.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jTYA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56b188da-1401-452c-8423-5e0c1b17047f_1589x1151.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jTYA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56b188da-1401-452c-8423-5e0c1b17047f_1589x1151.png 424w, https://substackcdn.com/image/fetch/$s_!jTYA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56b188da-1401-452c-8423-5e0c1b17047f_1589x1151.png 848w, https://substackcdn.com/image/fetch/$s_!jTYA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56b188da-1401-452c-8423-5e0c1b17047f_1589x1151.png 1272w, https://substackcdn.com/image/fetch/$s_!jTYA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56b188da-1401-452c-8423-5e0c1b17047f_1589x1151.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jTYA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56b188da-1401-452c-8423-5e0c1b17047f_1589x1151.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/56b188da-1401-452c-8423-5e0c1b17047f_1589x1151.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:206220,&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://www.tabulamag.com/i/178336507?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56b188da-1401-452c-8423-5e0c1b17047f_1589x1151.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_!jTYA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56b188da-1401-452c-8423-5e0c1b17047f_1589x1151.png 424w, https://substackcdn.com/image/fetch/$s_!jTYA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56b188da-1401-452c-8423-5e0c1b17047f_1589x1151.png 848w, https://substackcdn.com/image/fetch/$s_!jTYA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56b188da-1401-452c-8423-5e0c1b17047f_1589x1151.png 1272w, https://substackcdn.com/image/fetch/$s_!jTYA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56b188da-1401-452c-8423-5e0c1b17047f_1589x1151.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Recently I played Tic-Tac-Toe again, no problems this time. Clean games, the LLM detected when it won. Remind you, there is no Tic-Tac-Toe game code generated or running, it&#8217;s the AI playing the game by thinking.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1RTL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25883efa-1b8a-41e8-b6a6-de28cc26b0de_2000x1074.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1RTL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25883efa-1b8a-41e8-b6a6-de28cc26b0de_2000x1074.png 424w, https://substackcdn.com/image/fetch/$s_!1RTL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25883efa-1b8a-41e8-b6a6-de28cc26b0de_2000x1074.png 848w, https://substackcdn.com/image/fetch/$s_!1RTL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25883efa-1b8a-41e8-b6a6-de28cc26b0de_2000x1074.png 1272w, https://substackcdn.com/image/fetch/$s_!1RTL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25883efa-1b8a-41e8-b6a6-de28cc26b0de_2000x1074.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1RTL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25883efa-1b8a-41e8-b6a6-de28cc26b0de_2000x1074.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/25883efa-1b8a-41e8-b6a6-de28cc26b0de_2000x1074.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:356460,&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://www.tabulamag.com/i/178336507?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25883efa-1b8a-41e8-b6a6-de28cc26b0de_2000x1074.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_!1RTL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25883efa-1b8a-41e8-b6a6-de28cc26b0de_2000x1074.png 424w, https://substackcdn.com/image/fetch/$s_!1RTL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25883efa-1b8a-41e8-b6a6-de28cc26b0de_2000x1074.png 848w, https://substackcdn.com/image/fetch/$s_!1RTL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25883efa-1b8a-41e8-b6a6-de28cc26b0de_2000x1074.png 1272w, https://substackcdn.com/image/fetch/$s_!1RTL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25883efa-1b8a-41e8-b6a6-de28cc26b0de_2000x1074.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>I did some experiments with <a href="https://en.wikipedia.org/wiki/Minesweeper_(video_game)">Minesweeper</a> in the past - e.g. letting an AI generate a Minesweeper game.<a href="https://www.tabulamag.com/p/one-shotting-minesweeper"> That worked great!</a> Now instead of letting the LLM generate the source code of the game to play, how did it fare with playing the game directly instead? Not so well. It sometimes worked, but it often didn&#8217;t reveal the right cells. Or it made impossible boards that could not been solved. We&#8217;re not yet able to play Minesweeper.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hRq0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59cb0a4-8940-4f62-8c02-c361cb218e00_2079x864.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hRq0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59cb0a4-8940-4f62-8c02-c361cb218e00_2079x864.png 424w, https://substackcdn.com/image/fetch/$s_!hRq0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59cb0a4-8940-4f62-8c02-c361cb218e00_2079x864.png 848w, https://substackcdn.com/image/fetch/$s_!hRq0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59cb0a4-8940-4f62-8c02-c361cb218e00_2079x864.png 1272w, https://substackcdn.com/image/fetch/$s_!hRq0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59cb0a4-8940-4f62-8c02-c361cb218e00_2079x864.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hRq0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59cb0a4-8940-4f62-8c02-c361cb218e00_2079x864.png" width="2079" height="864" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d59cb0a4-8940-4f62-8c02-c361cb218e00_2079x864.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:864,&quot;width&quot;:2079,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:211869,&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://www.tabulamag.com/i/178336507?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88984220-da84-49ea-a1d7-565e910e4787_2079x999.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_!hRq0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59cb0a4-8940-4f62-8c02-c361cb218e00_2079x864.png 424w, https://substackcdn.com/image/fetch/$s_!hRq0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59cb0a4-8940-4f62-8c02-c361cb218e00_2079x864.png 848w, https://substackcdn.com/image/fetch/$s_!hRq0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59cb0a4-8940-4f62-8c02-c361cb218e00_2079x864.png 1272w, https://substackcdn.com/image/fetch/$s_!hRq0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd59cb0a4-8940-4f62-8c02-c361cb218e00_2079x864.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>So let&#8217;s try something simpler, <a href="https://en.wikipedia.org/wiki/Connect_Four">Connect4</a>. A simple game I&#8217;ve played as a kid in the past. You still need to do some thinking, but the &#8220;physics&#8221; of the game are simpler than minesweeper.</p><p>And Claude Code had no problems playing Connect4. I won, and it didn&#8217;t play very good, but it didn&#8217;t make mistakes and made legal moves and tried to win. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!c15P!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7803d3-17de-45f3-9059-f27df975a507_1618x1018.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!c15P!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7803d3-17de-45f3-9059-f27df975a507_1618x1018.png 424w, https://substackcdn.com/image/fetch/$s_!c15P!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7803d3-17de-45f3-9059-f27df975a507_1618x1018.png 848w, https://substackcdn.com/image/fetch/$s_!c15P!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7803d3-17de-45f3-9059-f27df975a507_1618x1018.png 1272w, https://substackcdn.com/image/fetch/$s_!c15P!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7803d3-17de-45f3-9059-f27df975a507_1618x1018.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!c15P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7803d3-17de-45f3-9059-f27df975a507_1618x1018.png" width="1456" height="916" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cb7803d3-17de-45f3-9059-f27df975a507_1618x1018.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:916,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:127311,&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://www.tabulamag.com/i/178336507?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7803d3-17de-45f3-9059-f27df975a507_1618x1018.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_!c15P!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7803d3-17de-45f3-9059-f27df975a507_1618x1018.png 424w, https://substackcdn.com/image/fetch/$s_!c15P!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7803d3-17de-45f3-9059-f27df975a507_1618x1018.png 848w, https://substackcdn.com/image/fetch/$s_!c15P!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7803d3-17de-45f3-9059-f27df975a507_1618x1018.png 1272w, https://substackcdn.com/image/fetch/$s_!c15P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb7803d3-17de-45f3-9059-f27df975a507_1618x1018.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This is where we stand right now, Tic-Tac-Toe and Connect4 works, Minesweeper is still too complex. But as can be seen with the Tic-Tac-Toe progression, change is fast.</p><p>Will AI replace all of software? No, it will just become the dominant tool. And like software needs ICs to run, and ICs need electronics to work, and electronics need electrical systems to work and they need a mechanical setup like screws, AI will need software to run and work. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8T0v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00a30c48-8c6f-43e5-867c-5cef9c75bf78_1542x1085.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8T0v!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00a30c48-8c6f-43e5-867c-5cef9c75bf78_1542x1085.png 424w, https://substackcdn.com/image/fetch/$s_!8T0v!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00a30c48-8c6f-43e5-867c-5cef9c75bf78_1542x1085.png 848w, https://substackcdn.com/image/fetch/$s_!8T0v!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00a30c48-8c6f-43e5-867c-5cef9c75bf78_1542x1085.png 1272w, https://substackcdn.com/image/fetch/$s_!8T0v!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00a30c48-8c6f-43e5-867c-5cef9c75bf78_1542x1085.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8T0v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00a30c48-8c6f-43e5-867c-5cef9c75bf78_1542x1085.png" width="1456" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00a30c48-8c6f-43e5-867c-5cef9c75bf78_1542x1085.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:89099,&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://www.tabulamag.com/i/178336507?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00a30c48-8c6f-43e5-867c-5cef9c75bf78_1542x1085.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_!8T0v!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00a30c48-8c6f-43e5-867c-5cef9c75bf78_1542x1085.png 424w, https://substackcdn.com/image/fetch/$s_!8T0v!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00a30c48-8c6f-43e5-867c-5cef9c75bf78_1542x1085.png 848w, https://substackcdn.com/image/fetch/$s_!8T0v!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00a30c48-8c6f-43e5-867c-5cef9c75bf78_1542x1085.png 1272w, https://substackcdn.com/image/fetch/$s_!8T0v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00a30c48-8c6f-43e5-867c-5cef9c75bf78_1542x1085.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Software will act in three different ways in this new world:</p><ul><li><p><strong>Software as glue.</strong> Software is gluing AI parts together, like we today see companies who use software glue to connect AI prompts to the UI and glue AI prompt results to storage. Like Bash glues things together.</p></li><li><p><strong>Software as a optimization.</strong> AIs might create temporary software to speed up a solution, like a database today uses an index to speed up. A user does not see the index, but it helps make queries faster. The user does not see the generated software, or even recognize that there is any.</p></li><li><p><strong>Software as an effector.</strong> AIs use software services to effect other systems, like an effector for sending emails or posting to the web. These effectors will also be software.</p></li></ul><p><em>Software will stay with us, but no longer be the dominant tool to help us manage the world.</em></p><p><em>Thanks to <a href="https://www.linkedin.com/in/ingo-eichhorst/">Ingo Eichhorst</a> for some insights.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tabulamag.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 Tabula Mag! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Through AI: The rise of the single user app]]></title><description><![CDATA[With AI everyone can have their personal apps]]></description><link>https://www.tabulamag.com/p/through-ai-the-rise-of-the-single</link><guid isPermaLink="false">https://www.tabulamag.com/p/through-ai-the-rise-of-the-single</guid><dc:creator><![CDATA[Stephan Schmidt]]></dc:creator><pubDate>Tue, 04 Nov 2025 10:02:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Nqa1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b0ac509-6cf3-4c9b-aae1-226a8f5489be_1280x1247.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><p><em><strong>There is a new wave of software coming, the single user application (SUA)</strong></em>. AI makes it easy to write apps, and as a consequence, costs for writing software is going down massively and developing software is becoming cheap. What was not possible in the past, because it was too expensive, is now possible. We can write apps for a single user. </p><p>I wrote several single user apps over the last months, <em><strong>with the single user being me.</strong></em> Whenever I say &#8220;I wrote&#8221; I mean &#8220;Claude Code&#8221; wrote the code - and I managed the AI (architecture, testing, components, maintainable code, code reuse, &#8230;). To make this possible, you need<a href="https://www.tabulamag.com/p/i-no-long-look-at-source-code"> to do it the right way</a> - and it helps that I&#8217;ve been writing code for ~45 years (don&#8217;t create a SPA - 90% of use cases don&#8217;t need one!). </p><p>What single user apps did I write you may ask?</p><ul><li><p>I wrote a blog app for my website, which is generated using Hugo. While Hugo creates the site, I use a &#8220;<em><strong>blogcli</strong></em>&#8221; app now to manage blog entries, see which ones are already on Linkedin, create SEO friendly descriptions and more.</p></li><li><p>I wrote an app to manage the<a href="https://bunny.net/cdn/"> CDN I use</a>.  There is an unofficial app, but it&#8217;s bad and lacks features. So my &#8220;<em><strong>bunnycli</strong></em>&#8221; manages redirects, domains, uploads, syncs faster etc. for my own websites (like <a href="https://www.amazingcto.com">https://www.amazingcto.com </a>).</p></li><li><p>I wrote an app for my <a href="https://www.amazingcto.com/cto-newsletter/">CTO newsletter.</a> The app downloads the bookmarks I collected over the week from <a href="https://raindrop.io/">Raindrop</a>, creates a file in my newsletter file format which I then edit and add my opinions and then creates a final Markdown file for Hugo which I can upload to my email provider. An application 100% tailored to my workflow.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Nqa1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b0ac509-6cf3-4c9b-aae1-226a8f5489be_1280x1247.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Nqa1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b0ac509-6cf3-4c9b-aae1-226a8f5489be_1280x1247.png 424w, https://substackcdn.com/image/fetch/$s_!Nqa1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b0ac509-6cf3-4c9b-aae1-226a8f5489be_1280x1247.png 848w, https://substackcdn.com/image/fetch/$s_!Nqa1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b0ac509-6cf3-4c9b-aae1-226a8f5489be_1280x1247.png 1272w, https://substackcdn.com/image/fetch/$s_!Nqa1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b0ac509-6cf3-4c9b-aae1-226a8f5489be_1280x1247.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Nqa1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b0ac509-6cf3-4c9b-aae1-226a8f5489be_1280x1247.png" width="1280" height="1247" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9b0ac509-6cf3-4c9b-aae1-226a8f5489be_1280x1247.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1247,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:970050,&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://www.tabulamag.com/i/177716259?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b0ac509-6cf3-4c9b-aae1-226a8f5489be_1280x1247.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_!Nqa1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b0ac509-6cf3-4c9b-aae1-226a8f5489be_1280x1247.png 424w, https://substackcdn.com/image/fetch/$s_!Nqa1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b0ac509-6cf3-4c9b-aae1-226a8f5489be_1280x1247.png 848w, https://substackcdn.com/image/fetch/$s_!Nqa1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b0ac509-6cf3-4c9b-aae1-226a8f5489be_1280x1247.png 1272w, https://substackcdn.com/image/fetch/$s_!Nqa1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b0ac509-6cf3-4c9b-aae1-226a8f5489be_1280x1247.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The biggest single user application yet: I&#8217;m writing a 35.000 LOC Go web application for managing my coaching clients. I was triggered to write this by a big influx of new clients, and my CTO coaching operations and client management became slower and slower and ever more painful. </p><p>The application I wrote is much better than the one I was using, because the creators of that app do not care nor do they even know about <a href="https://strategyn.com/jobs-to-be-done/">my jobs that I need to get done. </a>But also, my app <strong>caters to an audience of one</strong> not an audience of millions. It&#8217;s perfect for my use case of <a href="https://www.amazingcto.com/cto-coaching-from-experienced-cto">CTO Coaching</a>, making my life much easier and smoother. I dread admin work, like writing down session times and discussed topics for my clients, creating and sending invoices - for companies on one hand and CTOs who pay by themself on the other, inside the EU and outside of the EU (different invoices), companies in Germany, in the EU, and outside of the EU (different invoices to remember), different payment processors (IBAN, Wise, &#8230;) for different parts of the world (Africa, South America, US) and different tax requirements. </p><p>With my own app, all those pain points have gone away, and it&#8217;s smooth sailing. Agreed, no one else might have the exact same requirements, and the invoicing company I was using needed to think about all their clients - but should I care? I only care about my use cases.</p><p>If those use cases work, the app is feature complete! Too many apps today are in search for new users and new markets - they add more and more features, they start as something you want but end as something that you don&#8217;t need. Redesigns, rework, learning all the time, lost muscle memory. Ever rising prices for things you don&#8217;t need or want. </p><p>On top of that, with your own app, you own the data. You own your customers. When I asked my current time tracking and invoice provider if I could export some data, they told me that wasn&#8217;t possible. Huh?</p><p>This might not be for everyone, but the time investment pays off for me as a<a href="https://www.amazingcto.com/cto-coach/"> CTO coach</a> with my&#8221;margins&#8221;. Would it be better to buy something that perfectly fits my use cases? Yes. Does this mythical unicorn exist? No, see above (also most coaching applications focus on getting new clients, not on making ops smooth and automated).</p><p>Why now and not before? Before AI, single user applications were a maintenance nightmare. A bug happens, I need to spend hours understanding the code I wrote months ago. Framework and library updates? Pain. Framework updates with Claude Code? Easy. Bug fixing with AI? Easy too (ALWAYS use plan mode, iterate on the plan, not the prompt). Claude Code reads the code and presents me the requirements in the code. It reads the code and fixes the bug. I no longer need to come back to 12 months old code I wrote and despair.</p><p>Over time there are also some significant cost savings. No subscription costs - in the era of everything going subscription, and you no longer can buy applications, this is a huge reduction in costs over time. A friend recently told me he has $1000/month subscription costs (including AI). I still need to work some hours to get that money back. Hosting is cheap too. If  your application needs hosting, costs are low, because there is only one user. It&#8217;s $5-$10/month for running several of those apps in the cloud.</p><p>Is this for everyone? No. For now you need to know what you do.</p><p>Barriers will fall though and things will become easier for more and more people.</p><p><em><strong>Soon there will be millions of single user apps (SUA).</strong></em></p>]]></content:encoded></item><item><title><![CDATA[Creators and Coders]]></title><description><![CDATA[Who will survive the AI tornado]]></description><link>https://www.tabulamag.com/p/creators-and-coders</link><guid isPermaLink="false">https://www.tabulamag.com/p/creators-and-coders</guid><dc:creator><![CDATA[Stephan Schmidt]]></dc:creator><pubDate>Wed, 29 Oct 2025 13:15:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!8g-6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa533577b-41c8-430b-acde-3690c816f4c2_1512x2646.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Like the <a href="https://en.wikipedia.org/wiki/Hacker_Manifesto">hacker manifesto</a> said in 1986, <em>&#8220;They&#8217;re all alike.&#8221;</em> Hackers are all the same. Coders are all the same. Developers are all the same.</p><p>I thought so for a very long time too, as a hacker (don&#8217;t ask, no questions no lies ;-) coder and developer.</p><p>But I was wrong. Developers are not all the same, they are not all alike. If we look close enough, we can see two distinct groups of developers.</p><p>These two groups are creators and coders.</p><p>And while there is a little bit of a coder in every creator, and a little bit of a creator in every coder, they are different.</p><p><strong>A creator wants to create something.</strong> Wanting to create, they look for the right tool. A pen, a brush, clay, code. Coding is a tool for them to create. As a kid, I was a creator. I played video games in the 1970s/80s and wanted to create my own games, I had ideas that needed to manifest. The tool was coding, so I taught myself coding in a department store, following what other kids did. I wanted to create video games and I did. I&#8217;ve learned to love my tools. I love the inner logic, the intricacies of the code, the beauty of the code, the challenges of the code, the architecture, the clockwork, I love the tool. But I take if for what it is to me, a tool to create something. And I write poems and create books with other tools. I consider myself a creator. Others share the same urge, to create. Just like me they got into coding to create something. I&#8217;ve met many of them in my 1980s demo scene days. We wrote computer demos, to show off, to create something magnificent and astonishing and breathtaking. We worked hard on our tools - <a href="http://www.theflamearrows.info/documents/asminfo.html">SEKA</a> forever! - to make this happen. But we were creators.</p><p>Then came the coders. They want to write code. They love the code and don&#8217;t care about what they are creating. An eCommerce app, a game, an ERP system. A coder is about the code. They don&#8217;t see programming or source code as a tool to create something, but an end in itself. They are not interested in the creation, they are interested in the code. </p><p>Coders have very strong opinions about their tools. They have fights and discussions about what programming language is better. I - a creator - use what is at hand. I&#8217;ve used Perl, and Ruby, and C, Pascal and Modula2, Lisp, and machine code, and Java and Scala, Rust, JavaScript, Typescript and Go - and wrote a database in Bash. I&#8217;ve enjoyed the type system of Scala and the simplicity and beauty of Ruby. But they are tools. A creator does not define themselves by the tools they use, but the things they create. Coders define themselves by the tools they use, &#8220;I&#8217;m a functional coder&#8221; they might say, and abhor object oriented programming.  </p><p>Hasn&#8217;t Paul Graham also written about creators?  Paul Graham made the distinction of<a href="https://www.paulgraham.com/makersschedule.html"> Maker and Manager</a>: <em>&#8220;There are two types of schedule, which I&#8217;ll call the manager&#8217;s schedule and the maker&#8217;s schedule.&#8221;  </em>Is this the same?<em> </em>Is the Maker a creator or a coder? A maker can be both, and I do think the term maker isn&#8217;t the best, it seems to suggest all developers are creators, they are not. In the wording of Paul Graham, I&#8217;d call them Maker and Producer (vs. Manager) instead of Creator and Coder.</p><p>This also solves the age old question of <a href="https://www-cs-faculty.stanford.edu/~knuth/taocp.html">&#8220;Art or Craft&#8221;</a>. Is programming art or a craft? Is it craftsmanship? For coders it is primarily craftsmanship, for creators it&#8217;s primarily art.</p><p>How does this relate to AI? Be patient young Padawan, we&#8217;ll get there.</p><p><em>Start with: Creators are often leaders, and coders are followers.</em></p><p>Creators want to create, and find the most astonishing things to help them as tools. They are on the lookout for new tools so they can create new things that weren&#8217;t possible before, without that new tool. When the tool has been established, and people pay for tools usage, there is a job market which draws in coders.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8g-6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa533577b-41c8-430b-acde-3690c816f4c2_1512x2646.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8g-6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa533577b-41c8-430b-acde-3690c816f4c2_1512x2646.png 424w, https://substackcdn.com/image/fetch/$s_!8g-6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa533577b-41c8-430b-acde-3690c816f4c2_1512x2646.png 848w, https://substackcdn.com/image/fetch/$s_!8g-6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa533577b-41c8-430b-acde-3690c816f4c2_1512x2646.png 1272w, https://substackcdn.com/image/fetch/$s_!8g-6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa533577b-41c8-430b-acde-3690c816f4c2_1512x2646.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8g-6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa533577b-41c8-430b-acde-3690c816f4c2_1512x2646.png" width="1456" height="2548" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a533577b-41c8-430b-acde-3690c816f4c2_1512x2646.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2548,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1176567,&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://www.tabulamag.com/i/177242236?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa533577b-41c8-430b-acde-3690c816f4c2_1512x2646.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_!8g-6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa533577b-41c8-430b-acde-3690c816f4c2_1512x2646.png 424w, https://substackcdn.com/image/fetch/$s_!8g-6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa533577b-41c8-430b-acde-3690c816f4c2_1512x2646.png 848w, https://substackcdn.com/image/fetch/$s_!8g-6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa533577b-41c8-430b-acde-3690c816f4c2_1512x2646.png 1272w, https://substackcdn.com/image/fetch/$s_!8g-6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa533577b-41c8-430b-acde-3690c816f4c2_1512x2646.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>During my four decades in the industry I have seen and first an influx of creators followed by an influx of coders. In the 1980s, home computers put a computer on every desk, inside homes and in companies. Creators used those new tools to create something. </p><p>They coded <a href="http://www.bricklin.com/firstspreadsheetquestion.htm">VisiCalc</a> and Lotus 1-2-3, they coded Uridium, The Sentinel, Elite, Apple Writer and CP/M. Creators were everywhere. They were drawn to computers to create. Later when there was a job market, coders came. Not every coder is in it for the job, but many are.</p><p>The same happened with mobile apps. Creators were drawn to mobile apps to create. When there was a job market, coders came. Same with the gaming marketplace of Steam which enabled everyone to distribute their game, Indy creators created games and coders followed.</p><p><strong>Now Tabula Mag is about AI. What has that to do with AI? Right.</strong></p><p>Who will survive the AI tornado?</p><p>Creators will. They don&#8217;t primarily care about the tool, they care about creating. Water or oil, they might prefer one, but they are in it for the creation of paintings. Otherwise they would not be an artist, but a painter painting walls with the best brushes. AI is just another tool to them. A better tool, to create more magnificent things.</p><p>Coders will not. They cling to the tool, they identify by the tool, and when the tool goes away, the coder will. They resist the adoption of AI. Whenever I talk to my <a href="https://www.amazingcto.com/cto-coaching-from-experienced-cto">CTO coaching</a> clients, they tell me they have two types of developers. Those that resist AI, and those who eagerly adopt AI. A resistor might say <a href="https://chrisloy.dev/post/2025/09/28/the-ai-coding-trap">&#8220;for complex software, much of the time will be spent on post hoc understanding of what code the AI has written.&#8221;</a> They care more about the tool, the code, than the creation.</p><p><a href="https://www.amazingcto.com/ctos-will-be-creators-again">AI is democratizing creation</a>. You no longer need to be a coder to create software. Just like the home computers of the 1980s put a new tool in the hands of millions of people, to become creators, just like me, to enable them to create who could not create before, AI puts creation into many more hands. You can be a creator with AI.</p><p>Though this time will be different for coders. The market for coders expanded every time there was a new tool for creators, like home computers or mobile apps, it created more jobs for coders. AI will not. It will take away all the code.</p><p>Creators will flourish, and coders will go away. </p><p>So now you know who will survive the AI tornado.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.tabulamag.com/p/creators-and-coders?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Tabula Mag! This post is public please share it to help meLike.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tabulamag.com/p/creators-and-coders?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.tabulamag.com/p/creators-and-coders?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p>]]></content:encoded></item><item><title><![CDATA[I no longer look at source code]]></title><description><![CDATA[Trust the AI and move on]]></description><link>https://www.tabulamag.com/p/i-no-long-look-at-source-code</link><guid isPermaLink="false">https://www.tabulamag.com/p/i-no-long-look-at-source-code</guid><dc:creator><![CDATA[Stephan Schmidt]]></dc:creator><pubDate>Sat, 25 Oct 2025 07:30:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!N-6W!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd37aaab8-7ee8-4086-b794-6acee4caef0e_896x1152.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In my latest project, a Coaching Operating System called <em><strong>Sumitos</strong></em> to make my <a href="https://www.amazingcto.com/cto-coach/">#CTOCoaching</a> operation smoother, in dire need due to a big influx of new CTO clients, I came to the point to no longer look at the code I ship. </p><p>In the beginning I&#8217;ve worked on the project like every other project over the last decades, by reading code, thinking and writing code. I did use LLMs to generate some of the code for me, with Claude Code and Cursor, bigger and bigger junks. </p><p>I now no longer look at the code and just let Claude Code do it&#8217;s thing.</p><p><em><strong>This sounds incredible. But it works. Let&#8217;s see how.</strong></em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!N-6W!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd37aaab8-7ee8-4086-b794-6acee4caef0e_896x1152.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!N-6W!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd37aaab8-7ee8-4086-b794-6acee4caef0e_896x1152.png 424w, https://substackcdn.com/image/fetch/$s_!N-6W!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd37aaab8-7ee8-4086-b794-6acee4caef0e_896x1152.png 848w, https://substackcdn.com/image/fetch/$s_!N-6W!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd37aaab8-7ee8-4086-b794-6acee4caef0e_896x1152.png 1272w, https://substackcdn.com/image/fetch/$s_!N-6W!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd37aaab8-7ee8-4086-b794-6acee4caef0e_896x1152.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!N-6W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd37aaab8-7ee8-4086-b794-6acee4caef0e_896x1152.png" width="896" height="1152" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d37aaab8-7ee8-4086-b794-6acee4caef0e_896x1152.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1152,&quot;width&quot;:896,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:933455,&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://www.tabulamag.com/i/177071826?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd37aaab8-7ee8-4086-b794-6acee4caef0e_896x1152.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_!N-6W!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd37aaab8-7ee8-4086-b794-6acee4caef0e_896x1152.png 424w, https://substackcdn.com/image/fetch/$s_!N-6W!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd37aaab8-7ee8-4086-b794-6acee4caef0e_896x1152.png 848w, https://substackcdn.com/image/fetch/$s_!N-6W!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd37aaab8-7ee8-4086-b794-6acee4caef0e_896x1152.png 1272w, https://substackcdn.com/image/fetch/$s_!N-6W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd37aaab8-7ee8-4086-b794-6acee4caef0e_896x1152.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Let&#8217;s look at some reasons why this works:</p><ul><li><p>I have 40 years of coding experience in many different languages and frameworks. I might be able to write better prompts because I know what can go wrong.</p></li><li><p>Obviously always use Git. When using more than one agent to change code, I use <a href="https://claudecode.io/blog/how-to-use-git-worktree-in-claude-code">git worktrees</a>. Most often though I have two Claude Codes running, with one working and one planning with me.</p></li><li><p>From working with other agents, Claude Code, especially with <a href="https://www.anthropic.com/news/claude-sonnet-4-5">Sonnet 4.5</a> is by far the best coding agent. People might think there is little difference in coding agents, but there is.</p></li><li><p>I use the <a href="https://www.anthropic.com/news/max-plan">$100 Max </a>plan from Anthropic which mostly gets me through the day. Sometimes Anthropic changes the algorithm and token usage and I run out of tokens. As of this writing I&#8217;m not running out of tokens with the $100 Max plan.</p></li><li><p>Agile work - small changes, agile discovery. Feature by feature, not huge chunks of code at once. I check the result and if I don&#8217;t like it, I change it. I ship it if I like it.</p></li><li><p>My work and the code structure I&#8217;ve started with act as a great template for the LLM to base it&#8217;s code changes on. Without a good starting template the LLM goes haywire from the beginning. I suspect coding frameworks with great templates, like Django and Rails, work better than code projects without great starter templates. My - structured - code was my starter template.</p></li><li><p>My code is setup in vertical modules not in layers. Layers are confusing to LLMs, because they have too many dependencies, essentially the whole top layer depends on the layer below. Changes to that layer ripple through the code base. A <a href="https://www.amazingcto.com/modulith-vs-monolith-vs-microservices/">Modulith</a> with decoupled modules works much better for LLMs as it keeps the impact on other code low and it fills the context window with the right context, instead of those large layers. <em><strong>I suspect this has a huge impact on the success of the LLM.</strong></em></p></li><li><p>Use Claude Code plan mode for everything! Don&#8217;t jump into prompting. <em><strong>Iterate on the plan, not on the prompt.</strong></em> Iterating on the prompt just creates more and more wrong code until the LLM chokes. I write my requirements into Claude Code plan mode. I read the plan, I add or remove requirements until I&#8217;m happy with the plan. I tell Claude in plan mode to finally check the code and the documentation (with URLs) to make sure the plan works. I tell Claude Code to check if there is pre-existing functionality to reuse for the plan. I point Claude Code to libraries it should use. <strong>If I&#8217;m happy, only then do I tell Claude to start coding.</strong></p></li><li><p>I have many tests in place. After each feature, I ask Claude Code to refactor the new code to extract side effect free functions and write code for them. Claude Code runs the tests after changes and I told it to decide for failing tests if the tests need to be adapted or the code has a bug. Otherwise, Claude Code might undo the code changes just to make the test working again.</p></li><li><p>The stack I use is very simple: Go, Alpine.js and HTMX. It might be the case that with having a compiler, the very simple language and the simple type system of #Go - most often there is only one simple way to do things in Go - Claude Code works better than with some other languages. Also has a big code base on Github for LLMs to be trained on. Finally the compiler is really fast, and as Claude Code compiles during changing code, this is not slowing down the AI.</p></li><li><p>My build process includes all the Go linters like <em><strong>govet, goimports, gosec, golangci-lint, nilaway, govulncheck, staticcheck</strong></em>, and more. <em><strong>CLAUDE.md</strong></em> tells Claude Code to run the &#8220;make lint&#8221; target after it finished up coding and to fix the detected problems.</p></li><li><p>Sometimes I tell Claude to create a small Python script to make changes, or understand data, instead of changing code directly.</p></li><li><p>I run prompts to check for security, architecture, testing opportunities and weak code, then letting Claude Code suggest changes - <a href="https://claudelog.com/mechanics/plan-mode/">Plan Mode!</a> - to make the code better after some features.</p></li><li><p><em><strong>My work flow model is:</strong></em> <br>Let the LLM code, code, code, then I do some refactoring through the LLM. <a href="https://www.amazingcto.com/what-you-think-ai-is-doing/">The LLM is a probability machine</a>, it creates the code that is most probable for the existing codebase. Starting from scratch, or with a bad codebase, the LLM will make it much worse. LLM, LLM, LLM, refactor, LLM, LLM, LLM, refactor leads to good code. With bad code, LLMs come to a point where they can&#8217;t move forward, because one thing breaks and the fix breaks something else.</p></li><li><p><strong>This is a game of trust.</strong> Many developers do not trust an LLM. <br>My question is: Do you trust your coworkers? If you do, why?</p></li><li><p>The setup works very well for greenfield projects and is very suitable for startups. Hire experienced senior developers and you will be able to let LLMs write most of the code and gain maximum development speed. Make developers product engineers and teach them business and product understanding. You can easily outpace your competition who works in traditional Scrum/Senior Developer setups<strong>.</strong></p></li><li><p><strong>Caveat:</strong> I would not trust AIs with the core of a large existing system, or a complex code base, in fintech, health-tech etc. or other CTO positions I&#8217;ve held in the past - not yet. <em>To get more and more modules in your company work this way, the key is to have proper guardrails in place. </em></p><p></p></li></ul><p><em>Overall think of the old times, a Head of QA gave green or red light for a release based on the guardrails - tests, not by looking at the code. Neither should you need to look at the code to make that decision.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tabulamag.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 Tabula Mag! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p> </p>]]></content:encoded></item><item><title><![CDATA[Will distinguishes you from AI]]></title><description><![CDATA[How not to be replaced]]></description><link>https://www.tabulamag.com/p/will-distinguishes-you-from-ai</link><guid isPermaLink="false">https://www.tabulamag.com/p/will-distinguishes-you-from-ai</guid><dc:creator><![CDATA[Stephan Schmidt]]></dc:creator><pubDate>Fri, 08 Aug 2025 11:50:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!MQsY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f20fc9e-992e-4c5a-8b43-49771f41f9e6_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_!MQsY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f20fc9e-992e-4c5a-8b43-49771f41f9e6_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MQsY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f20fc9e-992e-4c5a-8b43-49771f41f9e6_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!MQsY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f20fc9e-992e-4c5a-8b43-49771f41f9e6_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!MQsY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f20fc9e-992e-4c5a-8b43-49771f41f9e6_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!MQsY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f20fc9e-992e-4c5a-8b43-49771f41f9e6_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MQsY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f20fc9e-992e-4c5a-8b43-49771f41f9e6_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3f20fc9e-992e-4c5a-8b43-49771f41f9e6_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;:null,&quot;bytes&quot;:2132120,&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://www.tabulamag.com/i/169734377?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f20fc9e-992e-4c5a-8b43-49771f41f9e6_1024x1024.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_!MQsY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f20fc9e-992e-4c5a-8b43-49771f41f9e6_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!MQsY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f20fc9e-992e-4c5a-8b43-49771f41f9e6_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!MQsY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f20fc9e-992e-4c5a-8b43-49771f41f9e6_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!MQsY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f20fc9e-992e-4c5a-8b43-49771f41f9e6_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" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><ul><li><p>AI brings many changes in a short amount of time. In the last twelve months we have seen already drastic changes to how people work.</p></li><li><p>AI partially takes over jobs and roles, or even replaces people in vulnerable jobs like customer support.</p></li><li><p>People wonder, where does AI stop? Can AI do everything that people can do? If you&#8217;re an engineer, a manager or in any other role, you wonder, am I safe?</p></li><li><p>You might also think, what is left that makes me valuable? What is the value I add? How can I stay relevant in the future?</p></li><li><p>This boils down to the question, what distinguishes me from an AI?</p></li><li><p>It can&#8217;t be knowledge. In the context of AIs we can categorize knowledge as wide or deep. Wide knowledge is knowing how ZIP codes in China look. Something an AI shows to be much better than you. Deep knowledge is knowledge that only a few persons have or a few specialized companies have and that hasn&#8217;t leaked (yet?) to an AI. Although the second part can distinguish you from an AI, it&#8217;s hard to get and keep.</p></li><li><p>It can&#8217;t be skills when you&#8217;re not working with your hands. An AI has a much broader set of skills and is also often better at it because it can apply many different skills at once.</p></li><li><p>It can&#8217;t be work. An AI is much faster doing the work, creating texts and source code, summarizing information and suggesting decisions than you can ever be.  Another aspect: It is not bored to do long tedious and boring work.</p></li><li><p><em>The question remains: What distinguishes you from an AI?</em></p></li><li><p>There is one thing that distinguishes you from an AI: <strong>Your will.</strong></p></li><li><p><em><strong>AIs don&#8217;t have a vision or a will. AIs don&#8217;t want things. AIs live in the now, not in the future.</strong></em> </p></li><li><p>You have a will and a vision for the future. Know what you want is distinguishing you from an AI.</p></li><li><p>Sadly many people I meet do not have a vision or a clear will on what they want<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>. When asked, they might say &#8220;everything is fine&#8221;, or &#8220;I&#8217;m happy&#8221; or &#8220;I don&#8217;t know what I want.&#8221;</p></li><li><p>There is a book called &#8220;<em>The Neverending Story&#8221;. </em>It has two parts. In the first part, the protagonist Bastian saves a fictional world called Fantasia. If people know the book or the film, this is often what they know. The second, much more important part, is more obscure. After saving the world, Bastian gets a medallion which says <em><strong>&#8220;Do what you want&#8221;</strong></em>. And Bastian, does what he wants - even becoming the king. After a lot of pain and his downfall, he understands &#8220;Do what you want&#8221; does not mean &#8220;Do whatever fancies you&#8221; but &#8220;Find out what you really want and then do it.&#8221;</p></li><li><p>Many people I meet are like Bastian. They don&#8217;t really know what they want. They have no vision or will. </p></li><li><p>What  distinguishes you from an AI, is your will and vision. If you lack this, think about it. What do you want? What do you want to achieve? Articulate what you want and then get what you want. Don&#8217;t be an AI.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tabulamag.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 Tabula Mag! 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></li></ul><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>This is also true for companies - they don&#8217;t have intent. Read about intent and companies at <a href="https://intentful.ueberproduct.de/">The Intentful Company</a>  </p><p></p></div></div>]]></content:encoded></item><item><title><![CDATA[Why you fail as a manager]]></title><description><![CDATA[Maximize solution success so problems are solved and stay solved]]></description><link>https://www.tabulamag.com/p/why-you-fail-as-a-manager</link><guid isPermaLink="false">https://www.tabulamag.com/p/why-you-fail-as-a-manager</guid><dc:creator><![CDATA[Stephan Schmidt]]></dc:creator><pubDate>Thu, 07 Aug 2025 10:51:27 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/170237668/55dbf3faebb1f1e4faecb56b5cc173a0.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<ul><li><p>If you know anything about CPUs you know about the last launch of AMD Ryzen and Intel Core CPUs.</p></li><li><p>Intel screwed it&#8217;s launch big time.</p></li><li><p>They were outclassed by the basic AMD Ryzen CPUs and left way behind by AMD 3D cache technology.</p></li><li><p>Intel had to update microcode and firmware several times trying to catch up, but the brand damage to the product was done and people didn&#8217;t buy CPUs from Intel. </p></li><li><p>AMD had new records of CPU sales.</p></li><li><p>Intel could have easily averted this. </p></li><li><p>They could have added more cores.</p></li><li><p>Or higher frequencies with using TSMC as a manufacturer.</p></li><li><p>Or add cache - they have the technology - the way AMD does it.</p></li><li><p>But for profit they decided to do something that was <em><strong>&#8220;just good enough&#8221;.</strong></em></p></li><li><p>Over decades this thinking was ingrained into Intel. Never release what you can do, release CPUs that are just a little better, enough to make people buy one.</p></li><li><p>The first time this strategy took a big hit when Apple switched to ARM and their own production, because Intel was holding back and doing too little.</p></li><li><p>The last hit with the launch I&#8217;ve mentioned put Intel into a tailspin.</p></li><li><p>Are you doing the same?</p></li><li><p>Do you use the minimum amount of resources to solve a problem?</p></li><li><p>If you under-provision resources to problems, you dramatically increase the risk that your solution will not solve the problem.</p></li><li><p>Best case, the problem comes back again and again.</p></li><li><p>Worst case, it does cost you your job or company.</p></li><li><p>Even in the best case, managers struggle with problems that come back which they had thought were solved.</p></li><li><p>They are overwhelmed by new problems that arise and more and more old problems that come back.</p></li><li><p>Instead of under-provision, solve problems in a way the solution surely works and the problem does not come back.</p></li><li><p>Ignore problems that don&#8217;t need to be solved, over-provision solutions to problems that are critical.</p></li><li><p>Think <em><strong>&#8220;What are all the things I can do to solve the problem and make it stay solved?&#8221;</strong></em> instead &#8220;What is the minimal thing I can do that could work?&#8221;</p></li></ul><blockquote><p><em><strong>&#8220;What are all the things I can do to solve the problem and make it stay solved?&#8221;</strong></em></p></blockquote><ul><li><p>This way, as an engineer or engineering manager or CTO you can make sure to not get overwhelmed by Boomerang problems.</p></li><li><p><em><strong>Don&#8217;t make the mistakes Intel made.</strong></em>   </p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tabulamag.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 Tabula Mag! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p></li></ul>]]></content:encoded></item><item><title><![CDATA[Reading Code, the new SuperSkill]]></title><description><![CDATA[Often neglected, with AI coming back with a vengeance]]></description><link>https://www.tabulamag.com/p/reading-code-the-new-superskill</link><guid isPermaLink="false">https://www.tabulamag.com/p/reading-code-the-new-superskill</guid><dc:creator><![CDATA[Stephan Schmidt]]></dc:creator><pubDate>Tue, 05 Aug 2025 10:28:11 GMT</pubDate><enclosure url="https://api.substack.com/feed/podcast/170164242/ec00d40cfb5c88171da5cdd034fe759d.mp3" length="0" type="audio/mpeg"/><content:encoded><![CDATA[<ul><li><p>Did you also hire developers the wrong way?</p></li><li><p>Instead of letting them read code, you did let them write code? Or you still do?</p></li><li><p>Reading code was always neglected in interviews, but developers most often need to read and understand code. </p></li><li><p>When planning a feature they need to read code. When finding a bug, they need to read code. When doing a code review, they - need to read code. When new to a module, they need to read code.</p></li><li><p>Developers always needed to read code more than write code.</p></li><li><p>But interviewers still focus on letting developers write code, solve coding puzzles or invert binary trees on a whiteboard.</p></li><li><p>Instead of testing if a potential hire can read and understand code, they focus on candidates to exclusively write code.</p></li><li><p>With the advent of AI, this becomes even more of a problem.</p></li><li><p>The software developer role is changing and on one hand moving more to a product oriented role. </p></li><li><p>With AI engineers can take on more product responsibilities, their skills supplemented by AI.</p></li><li><p>On the other hand developers become reviewers and managers of AI.</p></li><li><p>Developers now need to read and understand much more code, code that an AI has created. AIs get stuck in a loop and you need to understand the code to help them out. AIs go off the track and you need to understand the code to create guardrails for the AI.</p></li><li><p>Have you adapted your role descriptions? </p></li><li><p>Have you already adapted your recruiting practices?</p></li><li><p>Neglecting code reading skills is no longer an option.</p></li></ul>]]></content:encoded></item><item><title><![CDATA[The Meta-Token Mental Model For Vibe Coding]]></title><description><![CDATA[Why AI generates code in your code base the way it does]]></description><link>https://www.tabulamag.com/p/the-meta-token-mental-model-for-vibe</link><guid isPermaLink="false">https://www.tabulamag.com/p/the-meta-token-mental-model-for-vibe</guid><dc:creator><![CDATA[Stephan Schmidt]]></dc:creator><pubDate>Sat, 02 Aug 2025 12:31:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!6AuO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36727157-4d6f-4a22-8f9e-92d53461be30_906x505.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<ul><li><p>Over the last weeks I have been working hard on <a href="https://www.marvai.dev/">Marvai</a>. Marvai is a tool to find, download and install prompts for developer use. <em>Think NPM for prompts.</em></p></li><li><p>All of the code was written by Claude Code. And while this worked great for some time, when I wanted to add a feature that depended on the correct flow of data through some goroutines and channels, it didn&#8217;t work.  </p></li><li><p>All the analyzing, the chanting of <em>&#8220;Now I know what the problem is! It&#8217;s clear now!&#8221; </em>by Claude didn&#8217;t help. It was stuck in a loop. Because the code was so tangled within one 10.000 lines of code file, the AI was no longer able to add code (also see context engineering). </p></li><li><p>I refactored the code, got the feature working, added more methods, added more tests, added more files, it worked again. </p></li><li><p>From that point on, Claude also didn&#8217;t put all code into one file, but created new files as needed. <em>A lightbulb went off in my head.</em></p></li><li><p>Claude created new code that fitted the existing code (no CLAUDE.md / system prompt). And because it started with one file, it added to that file. And because it started with average code, the code deteriorated faster than expected.</p></li><li><p>LLMs aren&#8217;t very difficult to understand on a high level. Simplified they are token predicting machines. You might have seen &#8216;tokens&#8217; when coding, like in <em>tokens/second,</em> Input tokens, Output tokens or $/million tokens for API costs. </p></li><li><p><em><strong>Tokens are the oil that make the AI machine run.</strong></em></p></li><li><p>Simplified, AIs (the sub-sub category of LLMs) work by predicting the next token (their output) for a chain of tokens (your input). They predict the most probable next token based on the tokens that came before (varies by parameters, like <em>&#8220;temperature&#8221;</em>) .</p></li><li><p>You can imagine generative AI for source code as a transition from one code base to the next codebase.</p></li><li><p>Then if you look at your codebase, you can view it as one <em><strong>meta-token</strong></em>. Then a feature the LLM generates - the code it generates - is the next meta-token.</p></li><li><p>I call this the <em><strong>Meta-Token Mental Model</strong></em> of Generative AI vibe coding (what a mouthful).</p></li></ul><blockquote><p><strong>The code the AI generates is the most probable token, based on your existing code base.</strong></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_!6AuO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36727157-4d6f-4a22-8f9e-92d53461be30_906x505.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6AuO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36727157-4d6f-4a22-8f9e-92d53461be30_906x505.png 424w, https://substackcdn.com/image/fetch/$s_!6AuO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36727157-4d6f-4a22-8f9e-92d53461be30_906x505.png 848w, https://substackcdn.com/image/fetch/$s_!6AuO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36727157-4d6f-4a22-8f9e-92d53461be30_906x505.png 1272w, https://substackcdn.com/image/fetch/$s_!6AuO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36727157-4d6f-4a22-8f9e-92d53461be30_906x505.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6AuO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36727157-4d6f-4a22-8f9e-92d53461be30_906x505.png" width="906" height="505" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/36727157-4d6f-4a22-8f9e-92d53461be30_906x505.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:505,&quot;width&quot;:906,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:36683,&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://www.tabulamag.com/i/169912622?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36727157-4d6f-4a22-8f9e-92d53461be30_906x505.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_!6AuO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36727157-4d6f-4a22-8f9e-92d53461be30_906x505.png 424w, https://substackcdn.com/image/fetch/$s_!6AuO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36727157-4d6f-4a22-8f9e-92d53461be30_906x505.png 848w, https://substackcdn.com/image/fetch/$s_!6AuO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36727157-4d6f-4a22-8f9e-92d53461be30_906x505.png 1272w, https://substackcdn.com/image/fetch/$s_!6AuO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36727157-4d6f-4a22-8f9e-92d53461be30_906x505.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p>If your code base is bad, the AI will produce code <em>that is the most probable succession of your code.</em> It does follow the average of what it has learned - but it will primarily produce code that fits your code, <em>"the most likely next token&#8221;. </em></p></li><li><p>As code gets worse over time, and adding bad code to bad code makes it worse faster, the code base deteriorates.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SrBW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd10e9b7-186b-44b2-bf7d-a0d3c725a862_1891x1040.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SrBW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd10e9b7-186b-44b2-bf7d-a0d3c725a862_1891x1040.png 424w, https://substackcdn.com/image/fetch/$s_!SrBW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd10e9b7-186b-44b2-bf7d-a0d3c725a862_1891x1040.png 848w, https://substackcdn.com/image/fetch/$s_!SrBW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd10e9b7-186b-44b2-bf7d-a0d3c725a862_1891x1040.png 1272w, https://substackcdn.com/image/fetch/$s_!SrBW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd10e9b7-186b-44b2-bf7d-a0d3c725a862_1891x1040.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SrBW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd10e9b7-186b-44b2-bf7d-a0d3c725a862_1891x1040.png" width="1456" height="801" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fd10e9b7-186b-44b2-bf7d-a0d3c725a862_1891x1040.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:801,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:76373,&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://www.tabulamag.com/i/169912622?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd10e9b7-186b-44b2-bf7d-a0d3c725a862_1891x1040.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_!SrBW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd10e9b7-186b-44b2-bf7d-a0d3c725a862_1891x1040.png 424w, https://substackcdn.com/image/fetch/$s_!SrBW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd10e9b7-186b-44b2-bf7d-a0d3c725a862_1891x1040.png 848w, https://substackcdn.com/image/fetch/$s_!SrBW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd10e9b7-186b-44b2-bf7d-a0d3c725a862_1891x1040.png 1272w, https://substackcdn.com/image/fetch/$s_!SrBW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd10e9b7-186b-44b2-bf7d-a0d3c725a862_1891x1040.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" 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></li><li><p>It deteriorates to a point where the AI is not able to add more code without creating bugs - just like humans. </p></li><li><p>In contrast to human developers most likely you will get stuck in a loop with the AI. The AI produces bad code, then rolls it back, and then <strong>adds the same code again, as it is the most probable next token. </strong>A little bit different because of your feedback, but essentially the same. You&#8217;re stuck in a loop.</p></li><li><p>What you can do? </p></li><li><p><strong>Show the AI what you want!</strong></p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3fxJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b4a6fb9-b1cb-4828-86f3-592a73d6a309_1891x1040.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3fxJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b4a6fb9-b1cb-4828-86f3-592a73d6a309_1891x1040.png 424w, https://substackcdn.com/image/fetch/$s_!3fxJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b4a6fb9-b1cb-4828-86f3-592a73d6a309_1891x1040.png 848w, https://substackcdn.com/image/fetch/$s_!3fxJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b4a6fb9-b1cb-4828-86f3-592a73d6a309_1891x1040.png 1272w, https://substackcdn.com/image/fetch/$s_!3fxJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b4a6fb9-b1cb-4828-86f3-592a73d6a309_1891x1040.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3fxJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b4a6fb9-b1cb-4828-86f3-592a73d6a309_1891x1040.png" width="1456" height="801" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5b4a6fb9-b1cb-4828-86f3-592a73d6a309_1891x1040.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:801,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:99803,&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://www.tabulamag.com/i/169912622?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b4a6fb9-b1cb-4828-86f3-592a73d6a309_1891x1040.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_!3fxJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b4a6fb9-b1cb-4828-86f3-592a73d6a309_1891x1040.png 424w, https://substackcdn.com/image/fetch/$s_!3fxJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b4a6fb9-b1cb-4828-86f3-592a73d6a309_1891x1040.png 848w, https://substackcdn.com/image/fetch/$s_!3fxJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b4a6fb9-b1cb-4828-86f3-592a73d6a309_1891x1040.png 1272w, https://substackcdn.com/image/fetch/$s_!3fxJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b4a6fb9-b1cb-4828-86f3-592a73d6a309_1891x1040.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" 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></li><li><p>Let the AI generate code.</p></li><li><p><em><strong>Refactor in a way that makes the code look like it should.</strong></em> More files, smaller methods, error handling, exception handling, security, using frameworks instead of writing it&#8217;s own code (<a href="https://en.wikipedia.org/wiki/Not_invented_here">NIH</a>-syndrome), &#8230;.</p></li><li><p>Let the AI resume generating code.</p></li><li><p>The new code will fit your refactored code.</p></li><li><p>If it starts fresh with a blank slate, it does not know in which direction it goes, it will tend to the average. </p></li><li><p>It&#8217;s like chaos theory - on a blank page too many things are possible, and small changes in the beginning lead to large variations over time.</p></li><li><p><em>If you lift the quality level, it will produce the code that is most likely the next step for your code base. It does not have an inherent desire to create great code. I creates code that fits yours!</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tabulamag.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 Tabula Mag! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p></li></ul>]]></content:encoded></item><item><title><![CDATA[Too Fast to Think: The Hidden Fatigue of AI Vibe Coding]]></title><description><![CDATA[Getting to the limits of what developers can do]]></description><link>https://www.tabulamag.com/p/too-fast-to-think-the-hidden-fatigue</link><guid isPermaLink="false">https://www.tabulamag.com/p/too-fast-to-think-the-hidden-fatigue</guid><dc:creator><![CDATA[Stephan Schmidt]]></dc:creator><pubDate>Mon, 14 Jul 2025 09:37:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9BCU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6754724e-cd49-4ce5-91bd-35cce738c763_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9BCU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6754724e-cd49-4ce5-91bd-35cce738c763_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9BCU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6754724e-cd49-4ce5-91bd-35cce738c763_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!9BCU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6754724e-cd49-4ce5-91bd-35cce738c763_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!9BCU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6754724e-cd49-4ce5-91bd-35cce738c763_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!9BCU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6754724e-cd49-4ce5-91bd-35cce738c763_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9BCU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6754724e-cd49-4ce5-91bd-35cce738c763_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6754724e-cd49-4ce5-91bd-35cce738c763_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;:null,&quot;bytes&quot;:1161606,&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://www.tabulamag.com/i/167884746?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6754724e-cd49-4ce5-91bd-35cce738c763_1024x1024.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_!9BCU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6754724e-cd49-4ce5-91bd-35cce738c763_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!9BCU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6754724e-cd49-4ce5-91bd-35cce738c763_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!9BCU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6754724e-cd49-4ce5-91bd-35cce738c763_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!9BCU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6754724e-cd49-4ce5-91bd-35cce738c763_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" 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>After vibe coding for some time, I feel fatigue. I&#8217;m coding <a href="https://www.marvai.dev/">Marvai - a package manager for prompts</a> on my own, with a combination of Claude Code and Cursor.</p><ul><li><p>I use Claude Code for code generation,<a href="https://www.tabulamag.com/p/how-to-use-ai-as-a-developer-today"> bug fixing</a>, test writing, test fixing, security checks etc.</p></li><li><p>Claude Code is especially useful to fix linting errors from nilaway or staticcheck - for a developer those are boring and tedious.</p></li><li><p>I use Cursor for augmented coding, generate functions, adapt copy&amp;pasted code, for refactoring, fix error handling, and many other tedious tasks.</p></li><li><p>I have been a coder for 40 years and I have seen many tools for developers that haven&#8217;t worked, like Model Driven Development MDD/MDA and executable UML.</p></li><li><p>With AI I&#8217;m now much faster at generating code and building features than I ever was before. <strong>The combination of Claude Code and Cursor is a real speedup.</strong></p></li><li><p><em><strong>I encountered a new phenomenon.</strong></em></p></li><li><p>Again and again I feel fatigue. I finish a feature, and another feature, concetrate on  reviewing the code the AI generated, and fix a bug and finish a feature with such velocity and I feel fatigue after some hours - sometimes as soon as one hour. AI working at such speed, finishing things to accept or review, feels too much for my brain to process or keep up with. <em><strong>I need to  pause for some time before I can start again.</strong></em></p></li><li><p>I haven&#8217;t felt this before as a developer. </p></li><li><p>I first encountered the concept of cognitive load in the book<a href="https://teamtopologies.com/book"> Team Toplogies</a>. The idea there is to structure teams in a way that the cognitive load for developers is not too small and not to big. The more responsibilities a team and it&#8217;s members get, the bigger the cognitive load. And if you put many different topics on a team, the cognitive load for the team becomes too big for the team to work.</p></li><li><p>As a young adult I was working in a plastic factory, sitting at a machine. The machine produced vacuum cleaner cases, had it&#8217;s rhythm, it finished vacuum cleaner cases on it&#8217;s own schedule, made a &#8220;PING&#8221; when finished, opened the door and I had to grab the casing and put it down (and package it in fine paper etc. which took some time). The machine would close while I was finishing the casing. And for some time it was stressful, working to the rhythm of the machine. Then I got accustomed to the speed and rhythm, until my boss increased the frequency. <em><strong>Living by machine time is what I sometimes feel with Vibe Coding and Cursor generating code or Claude fixing a bug</strong></em>.</p></li><li><p>I had <a href="https://xkcd.com/303/">waiting times with compiling</a> and waited for the machine to finish, but it feels differently, with vibe coding it feels like the machine is in control not me.</p></li><li><p>With traditional coding, the speed of your output matches the complexity of the task and the speed of your coding. This gives your brain time to process what is happening. With vibe coding the coding happens so fast, that my brain can&#8217;t process what is happening in real time, and thoughts are getting clogged up. Complex tasks are compressed into seconds or minutes.</p></li><li><p>My brain does not get the baking time to mentally process architecture, decisions and edge cases the AI creates - not enough time to put the AI output into one coherent picture. I&#8217;m running a marathon at the pace of a sprint - speeds don&#8217;t match.</p></li><li><p>One reason developers are developers is the dopamine loop.</p></li><li><p>You write code, it doesn&#8217;t work, you fix it, it works, great! Dopamine rush. Several dozens or a hundred times a day. Now this loop speeds up. Faster and faster we run around that loop, and get washed with Dopamine - and your brain gets overwhelmed. And stress hormones at the same time! <em><strong>You get fatigue - instead of the usually happiness and satisfaction of coding.</strong></em></p></li><li><p>With coding there is a limit to context switching. A context switch in coding is like dumping the cache of your brain and reloading the cache of your brain with a new context. This takes time and energy. You need to build a <a href="https://leanpub.com/ideaflow/">mental model of the code</a>, to decide what to change and how to change it and then writing the changes out into source code, the essence of coding.</p></li><li><p>With vibe coding the frequency of content switches speeds up tremendously - with the AI fixing and creating many different things in different packages or modules with one go. Even when I <em>&lt;tab&gt;, &lt;tab&gt;, &lt;tab&gt;</em> in Cursor, each change is a micro-content switch from function to function.</p></li><li><p>Each context switch takes energy, every context switch is heavy lifting for your brain. Normally this materializes as the fact that it takes time to context switch. With AI in the driver seat, context switches are forced on you faster and faster. </p></li><li><p>When each context switch takes energy, fast energy switches from feature delivered to feature delivered, vibe coding drains your energy - fatigue!</p></li><li><p>With AI it seems we all become managers, we all become reviewers. The core of the role is changing from turning requirements into code to managing AI output - more like a team lead manages the output of a team, but on a much deeper level. Your responsibility grows to manage a team of five with vibe coding, while still being a developer being responsible for the code. It&#8217;s like being a traffic officer in the middle of a busy intersection - which is a stressful job on it&#8217;s own - while also overseeing five intersections in parallel.</p></li><li><p>Reviewing, directing and guiding an AI puts more stress on you than writing code, where your writing matches your thinking and doesn&#8217;t jump ahead, with you in a rush to catch up.</p></li><li><p>What can be said:</p><ul><li><p>Me and many more I assume feel fatigue from vibe coding</p></li><li><p>We need deliberate pacing when working with AI tools</p></li><li><p>We need AI-aware retrospectives to understand what is going on - perhaps having a daily retrospective to get the mind and the code in sync again</p></li><li><p>We need to be aware of new mental health challenges for AI coders</p></li><li><p>We might need to <a href="https://www.tabulamag.com/p/introduction-to-theory-of-control">let go of micro managing AIs</a> and trust the AI more - stop trying to bridge the gap between managing an AI and controlling it&#8217;s output</p></li></ul></li><li><p>I don&#8217;t think we&#8217;ve figured out yet where this is going. AI has made us faster than we&#8217;ve ever been, but our brains haven&#8217;t caught up to the pace. We&#8217;re like early pilots flying with autopilot&#8212;capable, but drained. We need new rhythms, new boundaries, and new ways of thinking about what it means to &#8220;code.&#8221;</p></li><li><p><em>Maybe the future of coding isn&#8217;t just faster. Maybe it&#8217;s also slower in a way, on purpose.</em></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tabulamag.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 Tabula Mag! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p></li></ul>]]></content:encoded></item><item><title><![CDATA[How to Use AI as a Developer Today in 2025]]></title><description><![CDATA[Chatbots vs. Augmented vs. Agentic vs. MCP]]></description><link>https://www.tabulamag.com/p/how-to-use-ai-as-a-developer-today</link><guid isPermaLink="false">https://www.tabulamag.com/p/how-to-use-ai-as-a-developer-today</guid><dc:creator><![CDATA[Stephan Schmidt]]></dc:creator><pubDate>Thu, 10 Jul 2025 13:39:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!fA5Y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac59eacd-d5f2-425f-8858-de12fcadc567_1742x1081.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>What works for AI as a developer in 2025? Sometimes it&#8217;s tough to decide between AI hype and AI bashing. What works, what should you do? What can you do?</p><p>We first need to start with an important distinction. For the code you are working on, is the module or microservice AI owned or human owned? Is the code primarily read and written by an AI or by a human developer? For all your modules and microservices decide who is in the lead. Code that is written for humans is different than code that needs to be read and written by an AI. Human code has layers, patterns, abstractions, domain driven design. AI code doesn&#8217;t need to have the same. But AI works better with more documentation, API descriptions, ASCIIdoc architecture guidelines, coding guidelines, test guidelines. Yes developers would profit from those too, but without them AI easily derails, while developers still produce working code. While short methods work for developers, perhaps long methods and copy and paste work best for an AI (we don&#8217;t know yet). </p><p>With this in mind, AIs can&#8217;t be responsible for code. Whether a developer or an AI wrote some code isn&#8217;t important as AI&#8217;s can&#8217;t own code. <strong>Both code written by humans and by AIs must be owned by an human. Only they can be made accountable. The AIs can&#8217;t be fired, they don&#8217;t care, they don&#8217;t get woken up at 2pm to fix an incident. All code needs to be owned by a human being. </strong>If a developer creates code through augmented coding or a coding agent, they are responsible and should be held accountable.<strong> </strong></p><p><strong>Augmented vs. Agentic</strong></p><p>There are two main modes of working with GenAI in coding: Augmented and Agentic. In Augmented Coding, developers use an IDE like Cursor, are in the driving seat and tell the AI what code to write on a granular level. In Agentic Coding, the AI is in the driving seat and writes all code based on the requirements you tell it to follow. Augmented Coding works best for human owned code, agentic coding works best for AI owned code. </p><p>Beside these two, there are two more ways to use AI as a developer:</p><ul><li><p><em>Chatbot (&#8220;ChatGPT&#8221;)</em></p></li><li><p><em>MCP</em></p></li><li><p><em>Augmented (&#8220;Cursor&#8221;)</em></p></li><li><p><em>Agentic (&#8220;Claude Code&#8221;)</em></p></li></ul><p>With those many different AI tools at their fingertips, not a lot of experience as an industry and no guidance from their managers, except of <em>&#8220;More code, faster!&#8221;</em> developers struggle with what and how to use their new tools.</p><p>Let&#8217;s take a look.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fA5Y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac59eacd-d5f2-425f-8858-de12fcadc567_1742x1081.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fA5Y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac59eacd-d5f2-425f-8858-de12fcadc567_1742x1081.png 424w, https://substackcdn.com/image/fetch/$s_!fA5Y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac59eacd-d5f2-425f-8858-de12fcadc567_1742x1081.png 848w, https://substackcdn.com/image/fetch/$s_!fA5Y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac59eacd-d5f2-425f-8858-de12fcadc567_1742x1081.png 1272w, https://substackcdn.com/image/fetch/$s_!fA5Y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac59eacd-d5f2-425f-8858-de12fcadc567_1742x1081.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fA5Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac59eacd-d5f2-425f-8858-de12fcadc567_1742x1081.png" width="1456" height="904" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ac59eacd-d5f2-425f-8858-de12fcadc567_1742x1081.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:904,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:194575,&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://www.tabulamag.com/i/167966580?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac59eacd-d5f2-425f-8858-de12fcadc567_1742x1081.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_!fA5Y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac59eacd-d5f2-425f-8858-de12fcadc567_1742x1081.png 424w, https://substackcdn.com/image/fetch/$s_!fA5Y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac59eacd-d5f2-425f-8858-de12fcadc567_1742x1081.png 848w, https://substackcdn.com/image/fetch/$s_!fA5Y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac59eacd-d5f2-425f-8858-de12fcadc567_1742x1081.png 1272w, https://substackcdn.com/image/fetch/$s_!fA5Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac59eacd-d5f2-425f-8858-de12fcadc567_1742x1081.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Chatbot (&#8220;ChatGPT&#8221;)</strong></p><ul><li><p>The best thing you can do with AI is to use it for better ideas. The problem of software development is not how to build things, or how to build things as fast as possible, the real problem is what to build. Everyone thinks their ideas are the best - truth be told, they are not. I have seen so many bad ideas that have been implemented with hundreds of developer-hours that it makes me sad when I think about it. The best use of AI is to come up with better ideas or sharpen your ideas of what to build.</p></li><li><p>Many companies I work with or worked for have a poor understanding of the customer, the market or the competition. CEOs do not spend enough time having the most knowledge in the industry about their niche. A Chatbot is a wonderful tool to find out more about your customers, the job they want to get done, the market and the competition - to build the right features and products instead of the wrong ones faster.</p></li><li><p>A simple way to get feedback: post your roadmap or a screenshot of your Kanban board into ChatGPT and ask the AI: &#8220;Are we working on the right things?&#8221;, &#8220;Do we become market leaders with this?&#8221;, &#8220;Can we reach an X% increase in revenue with this?&#8221;, &#8220;Give me five counterpoints on why the roadmap is bad&#8221;, &#8220;What do you think we should work on instead?&#8221; ChatGPT, while being a sycophant, doesn&#8217;t have the group think of your company and will help you steer a better course.</p></li></ul><p><strong>Augmented (&#8220;Cursor&#8221;)</strong></p><ul><li><p>I use Cursor to write functions for me, like &#8220;Create a struct X and extract X from this data structure" or &#8220;Sort Y by Z, load Z from the database, update Y and store it again&#8221;. Writing functions with augmented coding works fine, the amount of new code is limited, functions have often a limited amount of dependencies and side effects and can be easily reviewed by you while written by an AI.</p></li><li><p>Copy and paste now works! Copy and pasting code is - admit it - what developers do to deliver code (I bow before you if you never copy &amp; pasted code). But after pasting a chunk of code, you need to review all variables, and all code. Many times have I overseen a mistake in a line of code which lead to the wrong behavior with a debugging cycle after copy and pasting some code. </p></li><li><p>Bad error handling is the biggest reason for incidents according to studies. But error handling is tiring, boring and there is always lots of pressure to deliver. &#8220;I deliver now and think of the incidents later&#8221; is what a developer might think. The importance of error handling for development can be seen in the many approaches to error handling, finding the magic grail, from Go errors to Haskell monads. But still developer don&#8217;t write correct error management and handling code. The AI is not bored, the AI is not tired and will fix all those `return err` into something more useful for debugging, tracing and mitigation.</p></li></ul><p><strong>Agentic (&#8220;Claude Code&#8221;)</strong></p><ul><li><p>Today AI is perfectly fine for <a href="https://www.tabulamag.com/p/minesweeper-ai-migration-javascript">writing prototypes</a>. Indeed what I encourage companies to focus on, is not write more code with AI, but experiment more. In the past a prototype of a product or feature might have taken several day or even a full sprint. With agentic coding companies can build a prototype a day, understanding potential products and features, experimenting more and have more powerful products and features that move the needle. Prototypes can be fully created by a coding agent from some requirement artifacts.</p></li><li><p>With an experiment pipeline of prototypes we can create a Prototype &#8594; MVP &#8594; product funnel. From every ten prototypes to evaluate an idea you create one MVP to test the idea with customers. The requirements for security and styling are higher for an MVP but if you commit to throwing the code away, an MVP can easily be create like a prototype by an coding agent - with more care on your side.</p></li><li><p>Agentic coding is excellent for bug fixing. Claude Code finds many bugs much faster than a human coder and can explain the reason for the bug happening if you ask the agent. It can write a test to isolate the bug and then fix the bug (and it&#8217;s root cause, if you dig in together with Claude Code), doing it all by the book while I as a developer might be bored by writing tests to isolate the bug - and because of delivery pressure my resort to a shallow fix without tests. Recently I had a complicated session bug where in edge cases the session wasn&#8217;t saved and Claude Code was able to find the reason and fix it.</p></li><li><p>Agentic coding is great for framework, dependency or language upgrades. Most often upgrading a framework, a dependency or you language version isn&#8217;t very difficult (it sometimes is!) but tedious. It takes a lot of time and you need to be careful about what you do. And you might not have enough tests in place. The AI does not get bored and fixes broken tests until they work. Reviewing the tests after the upgrade is the easiest part left for you to do.</p></li><li><p>The mainstream opinion is that AIs are bad at security. From my experience coding agents, when asked, are above the average developer (like me!) and below a security researcher or pentester. Having a security prompt to check security in your project (OWASP, parameters, exploits, data leaks, missing encryption) lets the AI check the security of your code. Not like a pentester, but well above most developers I have encountered.</p></li><li><p>When you&#8217;re new to a company, new to a team or new to a microservice, understanding what the code models, how it is structured and how it works takes a lot of time. Letting the coding agent explain the code, used framworks, detected layers, domain boundaries and design patterns used (an let the AI guess what are the oldest and what are the newest parts ;-) makes it much easier for a developer to get into new code.</p></li><li><p>In the past I have used Claude Code with the right prompt with great success for optimizing code, finding bottlenecks and memory throughput. Recently in one project I let Claude Code find the reason for GC pressure and fix it.</p></li><li><p>You can have a prompt for pre-committing code. Ask the agent &#8220;Am I finished according to the code guidelines here and the ticket there? Is there something left I should do?&#8221;</p></li></ul><p><strong>MCP</strong></p><ul><li><p>Last not least we have MCP. Start with integrating existing services and data lakes into MCP. Many problems can be solved by just tapping into what you already have. Show the CEO the power of AI with your own data and services.</p></li><li><p>Integrate operations data from you logs, metrics and monitoring like load, memory usage etc. with MCP into you coding agent. Finding bugs, GC pressure, explaining those spikes becomes much easier.</p></li><li><p>Lastly integrate user usage analytics with MCP into your system. From then on you can ask the AI about how much this code you are working on is used and how it is used by users  - which gives you a deeper understanding on hot paths, where to work and what features to improve.</p></li><li><p>With MCP in place you can replace some of your coding with AI orchestration.</p></li></ul><p>Today there are already many different ways to use AI as a developer, way beyond of &#8220;write more code faster&#8221;. The main benefits are not code generation, but streamlining and optimizing all those other tasks. <em><strong>AI is your friend, not your enemy.</strong></em></p>]]></content:encoded></item><item><title><![CDATA[CTOs and developers are out of control, and AI makes it worse]]></title><description><![CDATA[About being out of the control loop]]></description><link>https://www.tabulamag.com/p/ctos-and-developers-are-out-of-control</link><guid isPermaLink="false">https://www.tabulamag.com/p/ctos-and-developers-are-out-of-control</guid><dc:creator><![CDATA[Stephan Schmidt]]></dc:creator><pubDate>Sun, 22 Jun 2025 05:07:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!j2k4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff387e94d-e332-4f9e-8a3c-4eeb7d70cd87_2048x1132.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p>CTOs are out of control. </p></blockquote><p>When I was CTO, this was the biggest problem for me and developers. I was out of control. <strong>I was cut out of the control loop.</strong> I was the only executive in the company who needed to ask someone else - the Head of Product or CPO - if I could tell the people in my department what to do. Imagine, the VP of Marketing would need to ask the CTO before a marketeer could work on a campaign - or what the marketeer should work on at all. But for me, the CTO, this was normal. The roadmap was stuffed and I had to ask - sometimes beg - to get tech topics into it.</p><p>And I&#8217;m not alone. Many of my CTO clients suffer the same fate. They are out of control, <em>out of the control loop of what is being built</em>. How did this happen? </p><p>We need to look at the <a href="https://www.tabulamag.com/p/introduction-to-theory-of-control">Theory of Control</a>. We have looked at software development as managing work and - especially with Lean - work flow. But software development is not about work flow, it is about control flow. Who controls what, when and how something is build. We have work elements and control elements in a company. Work elements, like <em>Developing, </em>produce output. Control elements, often meetings like <em>Sprint Planning</em>, control what, when and how something is build.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!j2k4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff387e94d-e332-4f9e-8a3c-4eeb7d70cd87_2048x1132.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!j2k4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff387e94d-e332-4f9e-8a3c-4eeb7d70cd87_2048x1132.png 424w, https://substackcdn.com/image/fetch/$s_!j2k4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff387e94d-e332-4f9e-8a3c-4eeb7d70cd87_2048x1132.png 848w, https://substackcdn.com/image/fetch/$s_!j2k4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff387e94d-e332-4f9e-8a3c-4eeb7d70cd87_2048x1132.png 1272w, https://substackcdn.com/image/fetch/$s_!j2k4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff387e94d-e332-4f9e-8a3c-4eeb7d70cd87_2048x1132.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!j2k4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff387e94d-e332-4f9e-8a3c-4eeb7d70cd87_2048x1132.png" width="1456" height="805" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f387e94d-e332-4f9e-8a3c-4eeb7d70cd87_2048x1132.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:805,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:130333,&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://www.tabulamag.com/i/166448942?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff387e94d-e332-4f9e-8a3c-4eeb7d70cd87_2048x1132.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_!j2k4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff387e94d-e332-4f9e-8a3c-4eeb7d70cd87_2048x1132.png 424w, https://substackcdn.com/image/fetch/$s_!j2k4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff387e94d-e332-4f9e-8a3c-4eeb7d70cd87_2048x1132.png 848w, https://substackcdn.com/image/fetch/$s_!j2k4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff387e94d-e332-4f9e-8a3c-4eeb7d70cd87_2048x1132.png 1272w, https://substackcdn.com/image/fetch/$s_!j2k4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff387e94d-e332-4f9e-8a3c-4eeb7d70cd87_2048x1132.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>With Scrum control flow was rerouted.</strong> Before Scrum, control flowed from the CEO through the CTO into a program office into program managers and project managers. The CTO was part of the control loop. Then Scrum showed up and the product owner was invented. We <em>could of course </em>had made the PO part of technology - there is no rule that the PO had to be a product manager, it could be a tech lead - but the PO was made part of something that was also new, product management. And while requirement engineering and analysts often were part of the CTO realm, product management, for whatever reason, was not. Product management injected themselves between the CEO and development. Coup d&#8217;&#201;tat accomplished. </p><p><strong>From that point on, the CTO was cut out of the control loop. She was out of control.</strong></p><p>But the how to build software, the clean code, and architecture, system design and tech choices still rest with the CTO (or with developers). At least this part of development is still controlled by technology and not somebody else.</p><p>Then AI showed up. And just like Scrum, rerouted control. AI generates the code. And people don&#8217;t know what code is generated, many don&#8217;t even care. The last part of control CTOs held is on the edge of being taken away. AI makes it worse. The last bit of control lost. </p><p>What can CTOs do? They need to get in control again. They need to take a stand. In the end, developers are part of technology and it is ridiculous that CTOs need to ask other executives if they are allowed to tell developers what to do. Demand a say in what is build. If you believe some technological debt needs to be payed back, go for it. Don&#8217;t let others drive you to postpone what needs to be done. </p><p>Some CTOs I know have lost the AI topic to other departments, just like they lost control over what is build. Don&#8217;t let them cut you out of the control loop again. <strong>Own AI. Became a CAIO. Regain control.</strong></p>]]></content:encoded></item></channel></rss>