<?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[cgardens]]></title><description><![CDATA[tech, intellectual honesty, etc]]></description><link>https://blog.cgardens.dev</link><image><url>https://blog.cgardens.dev/img/substack.png</url><title>cgardens</title><link>https://blog.cgardens.dev</link></image><generator>Substack</generator><lastBuildDate>Sun, 20 Sep 2026 17:05:01 GMT</lastBuildDate><atom:link href="https://blog.cgardens.dev/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[charles]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[cgardens@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[cgardens@substack.com]]></itunes:email><itunes:name><![CDATA[charles]]></itunes:name></itunes:owner><itunes:author><![CDATA[charles]]></itunes:author><googleplay:owner><![CDATA[cgardens@substack.com]]></googleplay:owner><googleplay:email><![CDATA[cgardens@substack.com]]></googleplay:email><googleplay:author><![CDATA[charles]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[We replaced squads with single owners]]></title><description><![CDATA[Because one mind was always the ideal]]></description><link>https://blog.cgardens.dev/p/we-replaced-squads-with-single-owners</link><guid isPermaLink="false">https://blog.cgardens.dev/p/we-replaced-squads-with-single-owners</guid><dc:creator><![CDATA[charles]]></dc:creator><pubDate>Mon, 17 Aug 2026 21:37:01 GMT</pubDate><content:encoded><![CDATA[<p>Originally published on <a href="https://www.linkedin.com/posts/cgardens_a-squad-of-eight-on-a-product-area-usually-activity-7495230967872217088-L4kH?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAgTj18B0dc65XxH74VWlI5_UX1E1BVt6lE">LinkedIn</a>.</p><p><span>A squad of eight on a product area usually had one or two people who actually understood the system. The rest were following. They wrote code against decisions someone else had made, and the depth lived in a couple of heads. When someone wasn't pulling their weight, the team absorbed it and nobody could see it clearly.<br><br>In the AI age we staff one or two engineers per area.<br><br>This isn't a headcount story. It's the opposite: the same engineers now cover far more surface area, and we can sprint on more of the product at once than we ever could with squads.<br><br>The work that made large teams necessary moved. Execution capacity comes from the LLM. Most bug work runs in the background. The engineer's job moved up a level: build the system that writes the code, encode enough of the product intent that what comes out is right, and keep the whole thing running as the product underneath it changes. That's a harder job than writing the feature yourself. You're not solving one problem, you're designing the conditions under which a whole class of problems gets solved correctly without you.<br><br>One person owning an entire area used to be impossible because bug fixing alone would consume them. Keep up with the bugs and no new features ever get built. Now that volume runs in the background, and what remains is the part that never parallelized well anyway: knowing what should be built, and whether what shipped is right.<br><br>The second-order effects matter more than the speed. No handoff between the person who understood the requirement and the person who wrote the code. No context lost across a standup. And output per engineer is finally legible, because there's one name on the area.<br><br>This is why we're building an owners-only culture. The job isn't writing code anymore. It's owning a machine that writes code, and owning what it ships.</span></p>]]></content:encoded></item><item><title><![CDATA[AI is your engineering execution capacity now]]></title><description><![CDATA[Because your engineering capacity is only bound by how many tokens you are willing to spend]]></description><link>https://blog.cgardens.dev/p/ai-is-your-engineering-execution</link><guid isPermaLink="false">https://blog.cgardens.dev/p/ai-is-your-engineering-execution</guid><dc:creator><![CDATA[charles]]></dc:creator><pubDate>Mon, 17 Aug 2026 21:11:41 GMT</pubDate><content:encoded><![CDATA[<p>Originally posted on <a href="https://www.linkedin.com/posts/cgardens_ai-is-a-limitless-supply-of-engineering-capacity-activity-7486117331312484352-9U0Q?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAgTj18B0dc65XxH74VWlI5_UX1E1BVt6lE">LinkedIn</a>.</p><p><span>AI is a limitless supply of engineering capacity. Most teams can't use it. Our agentic software factory let us harness that capacity to rebuild our entire product in a quarter.<br><br>The bottleneck for most teams older than a year is the development environment AI has to operate in. A few months ago, AI agents couldn't even reliably start our application. The best any engineer could do was work one local task at a time and manually hand sub-tasks to a model. All that capacity, and no way to plug into it.<br><br>So we rebuilt from the ground up. The conceit from day one: the entire app would be built by the software factory. That was the forcing function. Every part of the development environment had to work for agents, because agents were doing all the work. No retrofitting agentic development onto the codebase. We expected a tradeoff, going slow now to go fast later. There wasn't one. It was faster from the start.<br><br>The result: zero lines of code to live customers in one quarter. Four years of product rebuilt, plus new features, in that same window. Engineers who used to run one local task now oversee 5+ in parallel. Conservatively, a 5x productivity increase, and we haven't found the ceiling.<br><br>The AI world is all about speed. Getting it means working backwards from a single question: how do we harness this capacity? Everything about your engineering system follows from the answer. Get it right and you're running on fusion while everyone else is still running on steam.</span></p>]]></content:encoded></item><item><title><![CDATA[Managing context for complex policy]]></title><description><![CDATA[Because with the right harness you make your LLM follow the rules]]></description><link>https://blog.cgardens.dev/p/managing-context-for-complex-policy</link><guid isPermaLink="false">https://blog.cgardens.dev/p/managing-context-for-complex-policy</guid><dc:creator><![CDATA[charles]]></dc:creator><pubDate>Mon, 17 Aug 2026 21:10:17 GMT</pubDate><content:encoded><![CDATA[<p><em>Originally posted on <a href="https://www.linkedin.com/posts/cgardens_how-routing-trees-solve-the-enterprise-ai-activity-7483216563576156160-hfQD?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAgTj18B0dc65XxH74VWlI5_UX1E1BVt6lE">LinkedIn</a>.</em></p><p><span>The hard part of enterprise agents isn't knowledge. It's timing. The model doesn't just need to know the customer's policies, it needs to apply the right one at the right step of an orchestrated workflow. Stuffing all 400K tokens of rules into the prompt gave our agent perfect knowledge and terrible timing: hallucinated contacts, skipped steps, a lost thread.<br><br>The industry has an answer for this, sort of. Route the model to the context it needs instead of stuffing the prompt. But the public playbook stops at one hop: classify the intent, load the matching instructions, done. Salesforce topics work this way. Skills and progressive disclosure work this way.<br><br>One hop can't fix a timing problem. The decisions are chained, and each link needs its own rules. <br><br>Past that first hop, we were on our own. No write-up existed for what we needed, so we built it. A routing tree: 72 nodes, each owning a single decision, each carrying only the documents it needs. The agent traverses one decision at a time and never sees more than 5-15K tokens per turn. Token usage dropped 95%. The hallucinations stopped.<br><br></span><strong><a href="https://www.linkedin.com/in/nikolaupite/"><span>Nikola Up&#299;te</span></a></strong><span> and </span><strong><a href="https://www.linkedin.com/in/anna-bicevska/"><span>Anna Bicevska</span></a></strong><span> developed node-based routing to handle keeping agents on track for navigating the most complicated enterprise policies in chat. <br><br>Full writeup: </span><strong><a href="https://lnkd.in/g3258Dpy">https://lnkd.in/g3258Dpy</a></strong></p>]]></content:encoded></item><item><title><![CDATA[Specialized models are viable for real engineering work]]></title><description><![CDATA[Because you don't need the frontier model for everything]]></description><link>https://blog.cgardens.dev/p/specialized-models-are-viable-for</link><guid isPermaLink="false">https://blog.cgardens.dev/p/specialized-models-are-viable-for</guid><dc:creator><![CDATA[charles]]></dc:creator><pubDate>Mon, 17 Aug 2026 21:07:44 GMT</pubDate><content:encoded><![CDATA[<p>Originally published on <a href="https://www.linkedin.com/posts/cgardens_specialized-models-are-now-viable-for-real-activity-7481005597367148544-aSy7?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAgTj18B0dc65XxH74VWlI5_UX1E1BVt6lE">LinkedIn</a>.</p><p><span>Specialized models are now viable for real engineering work. Almost all of our development runs through an autonomous loop, and we'd been on a trajectory where each new frontier model made that loop markedly better. With the latest generation, that's no longer the pattern.<br><br>We run that loop on Cursor Cloud Agents. We started there because the harness was easy to stand up, and it's the most ergonomic remote agent environment we've used. We assumed the coding in that loop needed the best general model available.<br><br>We tried Composer on a lark. We were blown away: for most of the coding we run through the loop, it was a drop-in replacement. It's faster too. We haven't benchmarked it precisely, but the gap is obvious, and public numbers put it near 50% quicker on coding tasks. It's also 90% cheaper than Opus.<br><br>It isn't good at everything. Behind our QA agent it was noticeably worse. That's the point. It's specialized for coding.<br><br>For us the tradeoff flipped. A cheaper, faster, good-enough coding model beats a general model that's stronger at things the task never touches. Composer is the good-enough one today. I'd expect that to flip: specialized coding models pulling ahead of general ones at coding outright, and getting cheaper and faster as they do.<br><br>QA is the gap for us now, so if you know a model specialized for it, tell me.<br>I'm surprised I don't hear more about Composer. And it raises a real question for model specialization: who wins there? Maybe it's the major foundation labs that already hold all the leverage. Maybe specialization is the crack where someone else gets in.</span></p>]]></content:encoded></item><item><title><![CDATA[AI is more qualified to approve PRs than you are]]></title><description><![CDATA[Because humans were already rubbish at code review]]></description><link>https://blog.cgardens.dev/p/ai-is-more-qualified-to-approve-prs</link><guid isPermaLink="false">https://blog.cgardens.dev/p/ai-is-more-qualified-to-approve-prs</guid><dc:creator><![CDATA[charles]]></dc:creator><pubDate>Mon, 17 Aug 2026 21:06:02 GMT</pubDate><content:encoded><![CDATA[<p>Originally posted on <a href="https://www.linkedin.com/posts/cgardens_theres-a-lot-of-handwringing-about-merging-activity-7480652002952146944-Ikvb?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAgTj18B0dc65XxH74VWlI5_UX1E1BVt6lE">LinkedIn</a>.</p><p><span>There's a lot of handwringing about merging code that has only been reviewed by AI. It's backwards. A process where some code is reviewed only by AI will be more security conscious than what we do today.<br><br>Start with the problem. AI writes more code than any team can review, so everything gets the same rushed skim, and the changes that actually matter don't get the attention they deserve. The fix isn't more reviewers or going slower. Teams can&#8217;t afford to ship slower in this environment. It's deciding what humans need to see at all.<br><br>Humans were always bad at this part anyway. Outside the most egregious cases, we've never been good at spotting a bug or a vulnerability by reading code cold. AI has been better at that for a long time. A half-distracted developer waving through a diff is not your security baseline. An agent making that call catches more.<br><br>So route deliberately. Certain file paths and high-risk changes go to humans. That's a mix of deterministic rules and AI classification, and classification is something AI is good at. Everything else is reviewed by AI alone. Now the sensitive code gets real scrutiny instead of competing for attention with everything else.<br><br>What was human review ever really verifying? Legibility. Could another person read this and follow it. But the primary reader is shifting from human to AI, so stop optimizing for human legibility and start optimizing for AI legibility. We used to have complexity metrics for how hard code was for a person to parse. I want the equivalent for a model, scoring not just structure but whether the prompts, skills, and agents around the code help it understand what it's looking at. That's the thing worth building.</span></p>]]></content:encoded></item><item><title><![CDATA[The AI-Pilled 4 Yorkshiremen (Tech Exec Edition)]]></title><description><![CDATA[Because the AI era requires some good-humored fatalism]]></description><link>https://blog.cgardens.dev/p/the-ai-pilled-4-yorkshiremen-tech</link><guid isPermaLink="false">https://blog.cgardens.dev/p/the-ai-pilled-4-yorkshiremen-tech</guid><dc:creator><![CDATA[charles]]></dc:creator><pubDate>Mon, 17 Aug 2026 21:04:33 GMT</pubDate><content:encoded><![CDATA[<p>Originally published on <a href="https://www.linkedin.com/posts/cgardens_the-ai-pilled-4-yorkshiremen-tech-exec-edition-activity-7475552072721973248-F4YY?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAgTj18B0dc65XxH74VWlI5_UX1E1BVt6lE">LinkedIn</a>.</p><p><span>"Our engineers use Cursor."<br><br>"Use Cursor? We moved beyond IDEs entirely. Engineers just describe features to agents."<br><br>"Describe features? That's adorable. Our PMs describe features directly to agents."<br><br>"PMs? We eliminated PMs. Customers describe features directly to agents."<br><br>"Customers? We eliminated customers. Agents analyze user behavior and create the roadmap themselves."<br><br>"Roadmap? Our agents rewrite the company strategy every night."<br><br>"Strategy? We don't even have executives anymore. The agents found them to be a bottleneck."<br><br>"Executives? Luxury. Our board meetings are attended exclusively by agents."<br><br>"Board meetings? We haven't had a board meeting in months. The agents acquired three companies while we were asleep."<br><br>"Companies? We don't have companies. Just a loose federation of cooperating agents with a Delaware LLC."<br><br>-- Inspired by Monty Python's 4 Yorkshiremen sketch: </span><strong><a href="https://lnkd.in/dA9U4b9E">https://lnkd.in/dA9U4b9E</a></strong></p>]]></content:encoded></item><item><title><![CDATA[The AI can do it]]></title><description><![CDATA[Because we are conditioned to assume that we are special]]></description><link>https://blog.cgardens.dev/p/the-ai-can-do-it</link><guid isPermaLink="false">https://blog.cgardens.dev/p/the-ai-can-do-it</guid><dc:creator><![CDATA[charles]]></dc:creator><pubDate>Mon, 17 Aug 2026 21:03:36 GMT</pubDate><content:encoded><![CDATA[<p>Originally published on <a href="https://www.linkedin.com/posts/cgardens_you-cant-build-an-ai-native-product-with-activity-7475189679043141633-RSZf?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAgTj18B0dc65XxH74VWlI5_UX1E1BVt6lE">LinkedIn</a>.</p><p><span>You can't build an AI-native product with a team that isn't AI-native.<br><br>Most teams still think about AI the wrong way. They start with a human process and ask: "How can AI help people do this faster?" That's the wrong question.<br><br>An AI-native team starts with the outcome and asks: "How do we get the AI to achieve this outcome?" Then they work backwards from there. Maybe the AI needs verification. Maybe it needs an approval threshold. Maybe it needs an audit trail. Maybe there are edge cases that still require human judgment.<br><br>The software becomes scaffolding around the AI, not the other way around.<br><br>This is a hard mindset shift because for most of business history, outcomes were constrained by people. If you wanted more contract reviews, more supplier research, more invoice matching, or more policy enforcement, you hired more people. The software was there to support the human.<br><br>Now, for a growing set of tasks, you can spend tokens instead. That doesn't mean humans disappear. It doesn't mean AI can do everything. But it does mean we should stop assuming humans are the default actor in every business process.<br><br>Procurement is full of work that AI can already do as well as, and often better than, people: three-way invoice matching, sending NDAs, supplier research, tracking RFP responses, policy enforcement.<br><br>The opportunity isn't to help humans do those tasks faster. The opportunity is to have AI do them, then add the controls, verification, and auditability required to trust the result.<br><br>The most important mindset shift in AI is moving from: "How do we use AI in this process?" to "Why does a human need to do this at all?"</span></p>]]></content:encoded></item><item><title><![CDATA[Integrations in the Age of AI]]></title><description><![CDATA[Because the AI is happy to make up what it can't find]]></description><link>https://blog.cgardens.dev/p/integrations-in-the-age-of-ai</link><guid isPermaLink="false">https://blog.cgardens.dev/p/integrations-in-the-age-of-ai</guid><dc:creator><![CDATA[charles]]></dc:creator><pubDate>Mon, 17 Aug 2026 21:02:00 GMT</pubDate><content:encoded><![CDATA[<p>Originally posted on <a href="https://www.linkedin.com/posts/cgardens_the-bottleneck-to-scaling-enterprise-ai-is-activity-7460682834144477184-RBG0?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAgTj18B0dc65XxH74VWlI5_UX1E1BVt6lE">LinkedIn</a>.</p><p><span>The bottleneck to scaling enterprise AI is almost never the model. It's the data underneath it. I've spent most of my career in data infrastructure. That bias shapes how we build at Levelpath.<br><br>The customers we work with who are building agents run into the same wall: the agent can't access the right data to make a decision. A supplier record that lives in a system it can't reach. An approval history that was never structured. A risk signal that exists somewhere, just not somewhere the agent can see. When that happens, agents don't tell you they're stuck. They fill in the gap and keep going. That's the failure mode nobody talks about enough.<br><br>At Levelpath, we do the integration work upfront. Every relevant data source connected, normalized, accessible. We do this because our approach is agent-first: everything in the product is designed to be done by an agent by default. For that to work, the agent needs to be trustworthy. It escalates when it should and it never makes something up. We build those guarantees in.<br><br>Applied AI is usually a data and integration problem. The models are plenty capable. Give them the right data and they'll do the work.</span></p>]]></content:encoded></item><item><title><![CDATA[AI-Managed Infrastructure]]></title><description><![CDATA[Because Terraform was never meant for humans]]></description><link>https://blog.cgardens.dev/p/ai-managed-infrastructure</link><guid isPermaLink="false">https://blog.cgardens.dev/p/ai-managed-infrastructure</guid><dc:creator><![CDATA[charles]]></dc:creator><pubDate>Wed, 13 May 2026 03:02:17 GMT</pubDate><content:encoded><![CDATA[<p><em>Originally posted on <a href="https://www.linkedin.com/posts/cgardens_given-the-claude-deleted-a-production-database-share-7455486085788516353-dXhs?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAgTj18B0dc65XxH74VWlI5_UX1E1BVt6lE">LinkedIn</a>.</em></p><p>Given the <a href="https://x.com/lifeof_jer/status/2048103471019434248">Claude-deleted-a-production-database</a> story going around, now seems like a good time to advocate for AI managing your infrastructure.</p><p>Last week I granted AdministratorAccess to Claude Code for an isolated AWS account. Asked it to set up Grafana. 17 minutes. Then the full LGTM observability stack including supporting infrastructure (ECS, RDS, volumes, networking, etc) and a working hello world app to prove that the stack was working. 22 minutes.</p><p>I&#8217;d been meaning to properly explore Grafana for years. Infra setup was always one of the hurdles that made it feel like a big undertaking. That blocker is gone now.</p><p>No, don&#8217;t give Claude access to your production environment. But it is time to identify what environments we can hand off to AI<em>.</em></p><p>A lot of what slows down software innovation is skill cleavages &#8212; the handoffs between frontend and backend, between application engineers and DevOps. Every boundary between specializations is a place where one person&#8217;s idea has to become someone else&#8217;s ticket.</p><p>Those boundaries are collapsing. I no longer need to go through a DevOps team to spin up infrastructure. The side app we built to track our token spend just runs. Claude manages the infra. If it deletes the database, we&#8217;re back in five minutes.</p><p>This means I can run software that previously I simply wouldn&#8217;t have. Not because I couldn&#8217;t write it, but because owning the full stack was too much overhead for a side project or an experiment.</p><p>So yes, be careful with production. But I&#8217;ll be disappointed if AI doesn&#8217;t delete at least one of our non-prod environments this year. If it doesn&#8217;t, it probably means we&#8217;re leaving velocity and innovation on the table.</p>]]></content:encoded></item><item><title><![CDATA[CI in Agentic Times]]></title><description><![CDATA[Because agents actually follow up on clean up work]]></description><link>https://blog.cgardens.dev/p/ci-in-agentic-times</link><guid isPermaLink="false">https://blog.cgardens.dev/p/ci-in-agentic-times</guid><dc:creator><![CDATA[charles]]></dc:creator><pubDate>Wed, 29 Apr 2026 18:00:57 GMT</pubDate><content:encoded><![CDATA[<p><em>Originally posted on <a href="https://www.linkedin.com/posts/cgardens_agentic-loops-change-what-belongs-in-ci-activity-7454899738967166976-u4ew?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAgTj18B0dc65XxH74VWlI5_UX1E1BVt6lE">LinkedIn</a>.</em></p><p>Agentic loops change what belongs in CI. Previously you were trading off delivery speed against codebase hygiene.</p><p>Block on linting, coverage, pattern enforcement, you slow the team. Don&#8217;t block, the codebase rots.</p><p>Fast static analysis and formatting checks still belong at the gate. The shift is with the slow, expensive stuff. Running full coverage analysis, enforcing architectural patterns, refactoring for DRY used to be a real tradeoff. Post-merge meant a context switch back to something a developer had already moved on from. That work was an expensive context switch for a developer and usually got skipped.</p><p>That cost doesn&#8217;t exist when an agent is doing the work. At Levelpath we&#8217;ve already moved coverage tracking and developer experience metrics to background agents running post-merge. We&#8217;re now looking at what else moves: pattern enforcement, refactoring, architectural consistency.</p><p>The bar for codebase hygiene stops being what&#8217;s worth slowing people down and starts being what standard you actually want to hold.</p>]]></content:encoded></item><item><title><![CDATA[AI is a new substrate for Algorithms]]></title><description><![CDATA[Because we all wanted a new edition of Cracking the Coding Interview]]></description><link>https://blog.cgardens.dev/p/ai-is-a-new-substrate-for-algorithms</link><guid isPermaLink="false">https://blog.cgardens.dev/p/ai-is-a-new-substrate-for-algorithms</guid><dc:creator><![CDATA[charles]]></dc:creator><pubDate>Tue, 28 Apr 2026 17:54:52 GMT</pubDate><content:encoded><![CDATA[<p><em>Originally posted on <a href="https://www.linkedin.com/posts/cgardens_for-decades-good-algorithms-were-shaped-share-7452072630293094400-XPwK?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAgTj18B0dc65XxH74VWlI5_UX1E1BVt6lE">LinkedIn</a>.</em></p><p>For decades, good algorithms were shaped by the silicon running them. Cache lines, branch prediction, pipeline stalls &#8212; the hardware&#8217;s characteristics shaped the code.</p><p>AI algorithms deserve the same mindset.</p><p>LLMs have performance characteristics too. Fast and tireless on some things, unreliable on others. Better at generation than verification, or sometimes the reverse. Context has a sweet spot. Token costs and latency stack fast. The algorithms we build on top of models should be shaped by all of this.</p><p>When I think about an AI system at Levelpath, it mostly comes down to two decisions: how to decompose a problem, and how to structure the creator/evaluator loop around each piece. Decompose too coarsely, the model drowns. Too finely, orchestration overhead eats the gains. Strong creator, weak evaluator: you ship garbage confidently. Flip it: you burn tokens forever.</p><p>To make it more challenging, these characteristics keep moving. Context windows grow. Reasoning gets cheaper. What was a 10-step decomposition last year is one prompt today. We design for current models, knowing that we can pull away constraints as the substrate evolves.</p><p>The software engineer&#8217;s job is changing, and the shape of the new job is this: designing algorithms for the AI substrate.</p>]]></content:encoded></item><item><title><![CDATA[Self-Healing DX Pipelines]]></title><description><![CDATA[Because we can afford to measure new things if our metrics pipelines maintain themselves]]></description><link>https://blog.cgardens.dev/p/self-healing-dx-pipelines</link><guid isPermaLink="false">https://blog.cgardens.dev/p/self-healing-dx-pipelines</guid><dc:creator><![CDATA[charles]]></dc:creator><pubDate>Mon, 27 Apr 2026 17:51:44 GMT</pubDate><content:encoded><![CDATA[<p><em>Originally posted on <a href="https://www.linkedin.com/posts/cgardens_we-track-dx-metrics-via-a-github-action-at-share-7452085017180102656-tK2D?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAgTj18B0dc65XxH74VWlI5_UX1E1BVt6lE">LinkedIn</a>.</em></p><p>We track DX metrics via a GitHub Action &#8212; code coverage, CI build time, app start time, hot reload time.</p><p>We&#8217;re mid-replatform, so the app and how it runs are changing constantly. What we want to measure isn&#8217;t. Result: the action breaks every other morning. A path moves, a script is renamed, a dependency shifts.</p><p>For a week I just fixed it: open the failure, paste it into Claude Code, patch the workflow, merge. I was a courier between the CI log and the model.</p><p>So I built a second Action: headless Claude Code, with read access to the failing run&#8217;s logs and permission to open a PR against the workflow. When the DX metrics action fails, it reads why, proposes the fix, opens the PR. I review and merge.</p><p>Most AI energy right now goes into building new agentic workflows. The quieter move is pointing agents at the workflows you already have &#8212; to keep them doing the right thing as everything underneath shifts.</p><p>When the <em>what</em> is stable (measure these four DX metrics) and only the <em>how</em> keeps changing, an LLM is enough to hold it together. Self-healing is a declarative way of describing what you want. The model handles the imperative.</p>]]></content:encoded></item><item><title><![CDATA[Inverting the Developer and AI Relationship]]></title><description><![CDATA[Because there are more tokens than human-hours in the day]]></description><link>https://blog.cgardens.dev/p/inverting-the-developer-and-ai-relationship</link><guid isPermaLink="false">https://blog.cgardens.dev/p/inverting-the-developer-and-ai-relationship</guid><dc:creator><![CDATA[charles]]></dc:creator><pubDate>Mon, 20 Apr 2026 20:11:37 GMT</pubDate><content:encoded><![CDATA[<p><em>Originally posted on <a href="https://www.linkedin.com/posts/cgardens_when-a-jira-ticket-is-created-on-our-team-share-7452061518868799489-9VYc?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAgTj18B0dc65XxH74VWlI5_UX1E1BVt6lE">LinkedIn</a>.</em></p><p>When a ticket is created on our team, an AI agent picks it up by default. A human only gets pulled in if the agent escalates.</p><p>How did we get here? In the beginning, there were engineers. Then engineers got AI assistants, and the assistant sat next to the human: you&#8217;d pick up a ticket, figure out what was worth delegating, and hand pieces of it to the model. The human was the one actually working the ticket. AI was optimizing the developer&#8217;s throughput.</p><p>The key shift that we made 3 weeks ago was that by default AI does the work. Engineers spend their time unblocking them: giving them context, shaping the environment, deciding what should trigger an escalation, fixing the cases where they get stuck. Our biggest bottleneck now is code review.</p><p>The job of the engineer stops being &#8220;do tickets&#8221; and starts being &#8220;design the conditions under which tickets get done.&#8221;</p><p>The results so far: 5 engineers running this system ship roughly as much as the other 50 on our engineering team combined.</p><p>And this is V1. It&#8217;s the dumbest the system will ever be. V2 is already underway. We are building a machine that turns tokens into product delivery capacity. Now the developer is optimizing the AI&#8217;s throughput.</p><p>If you&#8217;re trying to get more out of AI in engineering, the question probably isn&#8217;t &#8220;how do I delegate better.&#8221; It&#8217;s &#8220;what would it take for the agent to pick up the work by default.&#8221;</p>]]></content:encoded></item><item><title><![CDATA[Of Course This Blog is Written by AI]]></title><description><![CDATA[Because &#8220;never published&#8221; to &#8220;done in 15 minutes&#8221; is an infinity percent improvement]]></description><link>https://blog.cgardens.dev/p/of-course-this-blog-is-written-by</link><guid isPermaLink="false">https://blog.cgardens.dev/p/of-course-this-blog-is-written-by</guid><dc:creator><![CDATA[charles]]></dc:creator><pubDate>Sat, 24 Jan 2026 15:01:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!E_4-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57444edb-5f28-4f8a-a9d3-b56719d4449b_514x472.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>I am not a Writer. I am a tech exec, a dad, a software engineer, and a human with ideas I want to share.</strong> AI has been a huge unlock for me in doing this. Pre-AI, I struggled to publish anything. While I had plenty of ideas that were baked enough to share, the actual process of translating them from my head into written text was very slow. This struggle is evidenced by this<a href="https://blog.cgardens.dev/p/tool-for-the-job"> early post</a> on this Substack, where all I managed to do was write about how I wasn&#8217;t writing anything.</p><p>My process for writing articles is straightforward: I start with a topic I want to discuss. I then build a fairly dense outline, complete with examples and a point-by-point breakdown of what I&#8217;m trying to say. <strong>I know what I want to say.</strong> I use AI to help augment my research along the way. When it&#8217;s time to write, I pass the outline to a personal GPT, which has been trained on my past, pre-AI content to capture something of my voice. It then generates the text. There is an iteration process there where we work together to refine it. I also ask other LLMs to challenge the work to pressure test both the ideas and the writing.</p><p>Does this diminish the content of this blog? I don&#8217;t think so.</p><p>My brother texted me the other day, saying, &#8220;Some of your blog sounds like it was written by AI.&#8221; I responded, &#8220;Of course it does, because it is!&#8221; I understand his reaction, because I do it too: when I consume something and begin to suspect it was AI-written, my hackles go up, and I immediately become more skeptical of its quality. I believe we need to move past that reaction. This is related to an <a href="https://blog.cgardens.dev/p/definitive-guide-to-ai-slop">earlier piece</a> where I built a mental model for how to grapple with the use of AI in media content.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!E_4-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57444edb-5f28-4f8a-a9d3-b56719d4449b_514x472.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!E_4-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57444edb-5f28-4f8a-a9d3-b56719d4449b_514x472.png 424w, https://substackcdn.com/image/fetch/$s_!E_4-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57444edb-5f28-4f8a-a9d3-b56719d4449b_514x472.png 848w, https://substackcdn.com/image/fetch/$s_!E_4-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57444edb-5f28-4f8a-a9d3-b56719d4449b_514x472.png 1272w, https://substackcdn.com/image/fetch/$s_!E_4-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57444edb-5f28-4f8a-a9d3-b56719d4449b_514x472.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!E_4-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57444edb-5f28-4f8a-a9d3-b56719d4449b_514x472.png" width="514" height="472" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/57444edb-5f28-4f8a-a9d3-b56719d4449b_514x472.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:472,&quot;width&quot;:514,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:24099,&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://blog.cgardens.dev/i/185579641?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57444edb-5f28-4f8a-a9d3-b56719d4449b_514x472.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_!E_4-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57444edb-5f28-4f8a-a9d3-b56719d4449b_514x472.png 424w, https://substackcdn.com/image/fetch/$s_!E_4-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57444edb-5f28-4f8a-a9d3-b56719d4449b_514x472.png 848w, https://substackcdn.com/image/fetch/$s_!E_4-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57444edb-5f28-4f8a-a9d3-b56719d4449b_514x472.png 1272w, https://substackcdn.com/image/fetch/$s_!E_4-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57444edb-5f28-4f8a-a9d3-b56719d4449b_514x472.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>Similar to that article, I think we can build a truth table. One axis is whether the ideas being described are AI-Generated or Human-Generated. For where AI is now, none of the ideas it generates are interesting to read. It truly feels like slop. Now, of course, a lot of human-generated ideas are not that interesting either. But for the sake of our mental model, we&#8217;re going to assume a decent hit rate on humans sharing interesting thoughts and wrestling with hard problems.</p><p>The second axis is how the idea gets presented. As a software engineer, I think of the presentation as merely a &#8220;display layer.&#8221; In engineering, we&#8217;d consider whether functionality was being exposed via an API, a GUI, a mobile app, a chatbot, etc. These are different display layers. Genuinely useful products can become useless because of a bad interface. However, a fundamentally unuseful product cannot be saved by a nice display layer.</p><p>Given the time I am willing to put in, I cannot create a high enough quality display layer for my work. Yes, I could probably spend years learning the craft, but that opportunity cost is too high. AI lowers the barrier, enabling me to produce readable content quickly. The other axis on our truth table, therefore, is whether the &#8220;display layer,&#8221; or the text itself, is generated. We should be totally okay with the quadrant where the idea is human-generated, but the text is AI-written. That certainly doesn&#8217;t diminish the fully human-generated and written content. We can safely ignore all AI-generated ideas (at least for now).</p><p>My commitment in writing this blog is that I will never publish AI-generated ideas. I will not say, &#8220;Hey Claude, write an article in my voice about unit tests.&#8221; I will continue to take a human-generated thesis or outline and ask Claude to turn it into text. We are going to live in the top-right corner of that truth table.</p><p>I am not a <strong>W</strong>riter. My differentiation is not in the craft or style of my prose; the prose is simply a means of providing a display layer for the conversations and theses I want to share. With AI, I can take an idea that I&#8217;ve already baked and produce a full article in 15 minutes at a higher level of polish than if I put in hours. For people who <em>are</em> Writers, I understand why relying on AI to write the final text generally would not make sense; the prose itself is part of their differentiator. Naturally, the barrier to entry for people writing using AI like I do makes that field more competitive. I can imagine that is frustrating because it was already a brutal field.</p><p>My hope is that as consumers we can learn to identify the AI text generation that is helping share interesting ideas from that which does not, instead of immediately disregarding it. I look forward to continuing this experiment here in sharing ideas and takes that I think are genuinely interesting and challenging.</p>]]></content:encoded></item><item><title><![CDATA[Building a High Velocity Engineering Culture]]></title><description><![CDATA[Because speed improves every other metric]]></description><link>https://blog.cgardens.dev/p/building-a-high-velocity-engineering</link><guid isPermaLink="false">https://blog.cgardens.dev/p/building-a-high-velocity-engineering</guid><dc:creator><![CDATA[charles]]></dc:creator><pubDate>Fri, 23 Jan 2026 14:03:14 GMT</pubDate><content:encoded><![CDATA[<p>At some point, a CEO will come to you and say:</p><blockquote><p>&#8220;Things feel slow. We need an eng velocity metric.&#8221;</p></blockquote><p>This is almost always well-intentioned. We should always want to move faster. And in practice, engineering will almost always feel slower than we want it to be&#8212;especially from the CEO&#8217;s perspective. That tension is normal and permanent. If it ever goes away, something is wrong.</p><p>It&#8217;s tempting to respond by looking for a single number that explains the feeling. I&#8217;ve read extensively on this topic&#8212;<span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Abi Noda&quot;,&quot;id&quot;:98623269,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4a1c4cfd-639c-420c-8b20-a0a400c74265_3071x3071.jpeg&quot;,&quot;uuid&quot;:&quot;fd5fefe4-bc6b-4105-98ef-c1394cd774c8&quot;}" data-component-name="MentionToDOM"></span>&#8217;s <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Engineering Enablement&quot;,&quot;id&quot;:996688,&quot;type&quot;:&quot;pub&quot;,&quot;url&quot;:&quot;https://open.substack.com/pub/abinoda&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7dbd433b-6f11-4042-8b7d-0edb3b172966_1024x1024.png&quot;,&quot;uuid&quot;:&quot;cdd6166b-5052-4cb6-b37e-f38412320046&quot;}" data-component-name="MentionToDOM"></span> is a favorite&#8212;and the conclusion is consistent: there is no single metric that can definitively tell you whether an engineering organization is &#8220;fast.&#8221; Velocity matters, but it does not collapse cleanly into one measurement you can manage directly.</p><p>While there is not a single metric that exists, based on my research and hard-earned experience, these are the tools that I reach for when building a high velocity culture.</p><div><hr></div><h2><strong>Talk About Velocity. A Lot.</strong></h2><p>Culture changes because people talk about something repeatedly and without embarrassment.</p><p>If you want a high-velocity engineering culture, velocity has to be discussed openly and often. Not as a threat. Not as a performance weapon. As a shared goal. People should hear it in planning meetings, retros, one-on-ones, and hallway conversations.</p><p>This starts with stating the obvious: of course we want to be faster. Of course there is room to improve. Saying this out loud regularly matters more than most process changes.</p><p>Wins should be loud. Shipping should be celebrated. Progress should be visible. This reinforces that velocity exists to help engineers do their best work, not to pressure them into cutting corners.</p><p>This also creates a shared language. Talking about speed should not feel like an accusation or a critique of individual engineers. It should feel normal, neutral, and collective&#8212;something the team owns together.</p><p>As a side effect, this helps with managing up. When velocity is a consistent topic, CEOs and execs feel that it&#8217;s being actively worked on. They stop asking for a single magic metric and start trusting the system.</p><div><hr></div><h2><strong>Identify What&#8217;s Slowing You Down</strong></h2><p>You cannot make a team faster if you don&#8217;t know where time is being lost.</p><p>Some sources of drag are technical. Builds are slow. Tests are flaky. Deploys are fragile or mysterious. Engineers are usually very aware of these.</p><p>Others are organizational, and these are often harder to surface. I had a CTO friend recently realize that one reason teams were reluctant to ship early was that the ops team would yell at engineers any time a change was made without weeks of advance notice for training. From the outside, it looked like a lack of urgency. In reality, it was a rational response to punishment.</p><p>A high-velocity culture makes it easy to surface this friction. The cost of reporting drag should be close to zero; otherwise, people simply won&#8217;t do it. Engineers should be able to say, &#8220;This slowed me down,&#8221; without defensiveness or fear of consequences.</p><p>One simple mechanism is a lightweight velocity retro at the end of a project. Ten minutes. No slides. Just a central place where engineers can drop a list of everything that made progress slower than it needed to be. We especially want the embarrassing stuff, so we have the opportunity to fix it.</p><p>This process must be continuous. If friction is only discussed occasionally, it will compound faster than you can remove it. Teams that feel fast are not the ones without problems&#8212;they&#8217;re the ones that surface and address them quickly.</p><div><hr></div><h2><strong>Measure What Slows You Down</strong></h2><p>While measuring velocity directly is close to impossible, measuring the things that slow you down is usually straightforward.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a></p><p>Start with the inner development loop: edit, build, test. This loop is sacred. If, after each change, an engineer has to wait long enough that their attention drifts, velocity is already gone.</p><p>Build time, test time, and deploy time in CI matter more than almost anything else. If this loop feels slow or unreliable, nothing else in the system will feel fast.</p><p>Beyond the core loop, there are other common sources of measurable drag:</p><ul><li><p>Code review turnaround time</p></li><li><p>Time to deploy (if deploying is slow, people do it less, and iteration slows with it)</p></li><li><p>Time to first deploy</p></li><li><p>Flaky tests and intermittent failures</p></li><li><p>Hard-to-read code or missing patterns</p></li></ul><p>For engineering work, having a concrete quantitative metric to ratchet down is powerful. When you&#8217;re confident something is slowing you down, measure it and reduce it. You may not be able to measure velocity directly, but you can measure drag.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a></p><div><hr></div><h2><strong>Build a Productivity Baseline (Carefully)</strong></h2><p>You need a productivity baseline.</p><p>Not because maximizing output is the goal, but because without baseline data, the right conversations don&#8217;t happen. &#8220;It feels slow&#8221; is not something you can debug. Concrete data gives teams a shared starting point for understanding what changed and why.</p><p>Story points (or an equivalent) are sufficient for this. They don&#8217;t need to be precise; they need to be consistent. Shipping roughly 20 points one sprint, 22 the next, and then 15 after that is enough to ask useful questions. Without that data, those questions simply don&#8217;t happen.</p><p>Each team should also be using a productivity tool to collect this data. Tools like DX, LinearB, Jellyfish, and similar systems are best thought of as instrumentation. They surface patterns around PR throughput, cycle time, and deploy frequency that are otherwise hard to see.</p><p>The caution is in how these tools are used. The moment a baseline becomes a target, behavior will shift to optimize the number instead of the system. That&#8217;s the predictable Goodhart&#8217;s Law failure mode.</p><p>This is where the earlier, more qualitative cultural work matters. If you actually did the work to build a culture that genuinely cares about velocity, this data becomes empowering. Teams use it to be curious about their own bottlenecks and improve without being told what to do. If you skipped that part and jumped straight to dashboards, the same data will feel like overhead or surveillance&#8212;and will be treated accordingly.</p><div><hr></div><h2><strong>Holding Leaders Accountable for a Velocity Culture</strong></h2><p>Velocity does not sustain itself. It has to be actively propagated.</p><p>Leaders are responsible for keeping velocity present in how work is planned, discussed, and reflected on. That means making speed a normal topic of conversation&#8212;not a reaction to pressure, not a postmortem after something goes wrong, and not a proxy for performance management.</p><p>For any meaningful project, leaders should be pushing on timelines, not to create stress, but to surface assumptions. How long do we think this should take? Is that timeline conservative? What would have to change for us to be more aggressive? Asking what it would take to do the work in half the time is a useful forcing function. Not because it&#8217;s realistic, but because it reveals where scope, process, or sequencing can be rethought.</p><p>While there&#8217;s no clean way to roll velocity up into a single aggregate number, teams that care about velocity develop a strong intuition for it at the project level. &#8220;This used to take us a month, now it takes a week.&#8221; &#8220;Why is it so hard for us to upgrade to the next version of Postgres?&#8221; It is much easier to have a quantitative intuition for what fast looks like at a project level. Of course it&#8217;s not the magic eng velocity number that the CEO asked for, but sampling how long individual projects take can help build up data to better understand velocity.</p><p>That intuition only forms when leaders consistently reinforce it. By creating space for teams to notice when work feels slow, when progress stalls, or when a change meaningfully compresses timelines, leaders turn those observations into shared context. Retros surface what sped things up or slowed them down, and follow-through removes friction.</p><p>It&#8217;s intentional that this section keeps saying leaders. This work can&#8217;t be centralized. A VP of Engineering can&#8217;t be everywhere, and shouldn&#8217;t try to be. Velocity culture spreads through leaders throughout the organization. While this should be a core responsibility of engineering managers and staff engineers, there are many kinds of leaders in an engineering organization, and all of them should be accountable for nurturing a culture of velocity. In engineering, this looks like engineers jumping into reviews unprompted, fixing flaky tests they didn&#8217;t write, improving build scripts they don&#8217;t &#8220;own,&#8221; and noticing when someone is stuck before it becomes a ticket. You see this same pattern in elite sports teams, emergency rooms, trading floors, and flight decks &#8212; places where collective tempo matters more than individual heroics.</p><div><hr></div><h2><strong>A Note on AI and Velocity</strong></h2><p>It would be strange to write about engineering velocity in 2026 without acknowledging that AI is already changing how software gets built.</p><p>This piece is intentionally not about AI tactics. That&#8217;s a long conversation unto itself, and this post is already much longer than our median article. What matters here is that teams with a strong velocity culture naturally start asking better questions about how AI fits into their work.</p><p>They don&#8217;t ask, &#8220;How do we mandate AI usage?&#8221; They ask, &#8220;What&#8217;s slowing us down, and can AI remove it?&#8221; Can mundane work be turned into background tasks that generate PRs while engineers sleep? Can reviews, refactors, or migrations be accelerated without increasing risk? Can development environments be reshaped so that product requirements flow directly into agents that can build or scaffold features themselves?</p><p>Consider this a teaser on some of the most interesting ways that AI can accelerate engineering teams.</p><div><hr></div><h2><strong>Engineers Need to Ship</strong></h2><p>I worry that this focus on velocity can sound crushing at first. That reaction is understandable. Velocity often gets conflated with grinding harder. They are orthogonal. This approach isn&#8217;t about grind; it&#8217;s about intentional growth and improvement.</p><p>Is it intense? Yes. When it&#8217;s working, people are locked in and working hard. Great engineers have a deep-seated desire to ship great things. Velocity alone won&#8217;t fix poor compensation, bad management, or a weak mission &#8212; but without velocity, even those rarely hold great engineers for long.</p><p>A healthy velocity culture creates an environment where engineers can work on important problems, move with urgency, and see their work land in the world. Over time, that turns velocity from a management concern into a powerful part of your retention strategy. A high-velocity engineering culture builds a virtuous cycle where it helps grow your business and attract and retain talent.</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>Credit to <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Engineering Enablement&quot;,&quot;id&quot;:996688,&quot;type&quot;:&quot;pub&quot;,&quot;url&quot;:&quot;https://open.substack.com/pub/abinoda&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7dbd433b-6f11-4042-8b7d-0edb3b172966_1024x1024.png&quot;,&quot;uuid&quot;:&quot;672d226b-66f7-42ad-8c23-3e3c2d3bf42b&quot;}" data-component-name="MentionToDOM"></span> for introducing me to this idea. </p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:114153512,&quot;url&quot;:&quot;https://newsletter.getdx.com/p/cycle-time&quot;,&quot;publication_id&quot;:996688,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;Engineering Enablement&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Niij!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dbd433b-6f11-4042-8b7d-0edb3b172966_1024x1024.png&quot;,&quot;title&quot;:&quot;The Case Against Measuring Cycle Time&quot;,&quot;truncated_body_text&quot;:&quot;This is the latest issue of my newsletter. Each week I cover research, opinion, or practice in the field of developer productivity and experience. This week is an article I wrote about cycle time.&quot;,&quot;date&quot;:&quot;2023-04-14T08:01:56.351Z&quot;,&quot;like_count&quot;:11,&quot;comment_count&quot;:4,&quot;bylines&quot;:[{&quot;id&quot;:98623269,&quot;name&quot;:&quot;Abi Noda&quot;,&quot;handle&quot;:&quot;abinoda&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4a1c4cfd-639c-420c-8b20-a0a400c74265_3071x3071.jpeg&quot;,&quot;bio&quot;:&quot;Co-founder, CEO at DX&quot;,&quot;profile_set_up_at&quot;:&quot;2022-07-10T22:05:16.103Z&quot;,&quot;reader_installed_at&quot;:null,&quot;publicationUsers&quot;:[{&quot;id&quot;:941772,&quot;user_id&quot;:98623269,&quot;publication_id&quot;:996688,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:996688,&quot;name&quot;:&quot;Engineering Enablement&quot;,&quot;subdomain&quot;:&quot;abinoda&quot;,&quot;custom_domain&quot;:&quot;newsletter.getdx.com&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Research and perspectives on developer productivity. &quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7dbd433b-6f11-4042-8b7d-0edb3b172966_1024x1024.png&quot;,&quot;author_id&quot;:98623269,&quot;primary_user_id&quot;:98623269,&quot;theme_var_background_pop&quot;:&quot;#BAA049&quot;,&quot;created_at&quot;:&quot;2022-07-10T22:35:31.420Z&quot;,&quot;email_from_name&quot;:&quot;Engineering Enablement&quot;,&quot;copyright&quot;:&quot;Abi Noda&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;magaziney&quot;,&quot;is_personal_mode&quot;:false}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:null,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:null,&quot;paidPublicationIds&quot;:[],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://newsletter.getdx.com/p/cycle-time?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!Niij!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7dbd433b-6f11-4042-8b7d-0edb3b172966_1024x1024.png" loading="lazy"><span class="embedded-post-publication-name">Engineering Enablement</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">The Case Against Measuring Cycle Time</div></div><div class="embedded-post-body">This is the latest issue of my newsletter. Each week I cover research, opinion, or practice in the field of developer productivity and experience. This week is an article I wrote about cycle time&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">3 years ago &#183; 11 likes &#183; 4 comments &#183; Abi Noda</div></a></div></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>Extra points for simple metrics. You want something where it&#8217;s obvious how changes engineering can make will move the number. The more synthesized a metric becomes, the harder it is to see that connection, and the less effective it is at focusing execution.</p><p></p></div></div>]]></content:encoded></item><item><title><![CDATA[What the AI Debate Gets Wrong About Progress]]></title><description><![CDATA[Because transition costs are asymmetric]]></description><link>https://blog.cgardens.dev/p/what-the-ai-debate-gets-wrong-about</link><guid isPermaLink="false">https://blog.cgardens.dev/p/what-the-ai-debate-gets-wrong-about</guid><dc:creator><![CDATA[charles]]></dc:creator><pubDate>Thu, 22 Jan 2026 18:47:54 GMT</pubDate><content:encoded><![CDATA[<p>The conversation around AI tends to collapse into a strangely binary shape.</p><p>On one side, there&#8217;s a calm, spreadsheet-friendly story: AI is just another productivity tool. It nudges GDP up a couple of points, makes companies more efficient, and otherwise fits neatly into existing economic models.</p><p>On the other side, there&#8217;s a much louder story: widespread job loss, social upheaval, and a fundamental break from how work has functioned for the last century.</p><p>What gets lost is that these two narratives aren&#8217;t actually in conflict. They&#8217;re describing different points on the same timeline.</p><p>In the short run, the disruption-focused view is often right. Technological change hits faster than people can adapt. Skills depreciate. Institutions lag. The impact is uneven and concentrated.</p><p>In the long run, the steady-growth view usually wins. Productivity gains compound, new roles emerge, and the next generation adapts by default by growing up inside the new system.</p><p>The mistake is pretending that this timeline is smooth.</p><p>Technological change doesn&#8217;t fail loudly or succeed quietly. It succeeds eventually, after a period where a very specific group absorbs most of the cost.</p><div><hr></div><p>When massive technological or economic change hits, humanity eventually figures it out. One or two generations later, things mostly work. New jobs appear. Institutions adapt. People point at the GDP chart and declare success.</p><p>But the generation caught in the transition? They tend to get wrecked.</p><p>The cleanest recent example is the <strong>China shock</strong>.</p><p>US GDP was fine. Consumers benefited. Economists nodded. Meanwhile, a mid-career factory worker with location-bound, asset-specific skills lost their job, their leverage, and often their community. &#8220;Just retrain&#8221; is great advice if you&#8217;re 19. It&#8217;s a gamble if you&#8217;re 45.</p><p>The pattern repeats:</p><ul><li><p>The Industrial Revolution eventually raised living standards, after decades of brutal work and political conflict</p></li><li><p>Agricultural mechanization hollowed out rural labor</p></li><li><p>Software quietly ate clerical work and entry-level white-collar roles</p></li></ul><p>Net positive. Locally catastrophic.</p><div><hr></div><p>Viewed through this lens, the AI trajectory looks fairly predictable. For the work that already exists today, we&#8217;re going to need far fewer people to do it. In practice, that shows up as job replacement.</p><p>The impact won&#8217;t be evenly distributed. Some sectors will absorb the shock first &#8212; customer support is the canary. When AI meaningfully pairs with robotics, displacement stops being confined to screens and starts showing up in physical work as well. Software engineering won&#8217;t be spared either: teams get much smaller, individual leverage goes up, and output concentrates.</p><p>What <em>is</em> clear is that much of what we currently think of as the most valuable and productive work no longer needs humans &#8212; or at least, far fewer of them. That severs a link we&#8217;ve relied on for a long time: productivity as the primary justification for livelihood. It&#8217;s a structural break that societies won&#8217;t metabolize quickly.</p><p>From there, several equilibria are possible. Maybe abundance enables stronger social systems, and a decent quality of life becomes less tightly coupled to formal employment. Maybe we invent new kinds of work &#8212; after all, we already have plenty of post-subsistence jobs. Or maybe some mix of Jevons&#8217; paradox and the effective defeat of Baumol&#8217;s cost disease explodes entrepreneurship and cheap consumption in ways we haven&#8217;t fully internalized yet.</p><p>AI is an enormous unlock for humanity. The question isn&#8217;t whether the system benefits in aggregate &#8212; it almost certainly will. The question is who bears the transition cost, and when.</p>]]></content:encoded></item><item><title><![CDATA[Moving Beyond Execution-Based Engineering Scaling]]></title><description><![CDATA[Because AI types faster than you and doesn&#8217;t need a lunch break]]></description><link>https://blog.cgardens.dev/p/moving-beyond-execution-based-engineering</link><guid isPermaLink="false">https://blog.cgardens.dev/p/moving-beyond-execution-based-engineering</guid><dc:creator><![CDATA[charles]]></dc:creator><pubDate>Wed, 21 Jan 2026 22:56:33 GMT</pubDate><content:encoded><![CDATA[<p>We used to scale engineering teams based on <strong>execution capacity</strong>. With AI, we&#8217;ll scale them based on <strong>cognitive load</strong>.</p><p>In the old model, if an inventory feature needed six engineers&#8217; worth of work and you only had three, you hired three more (four, if you&#8217;d been burned by attrition before). More work meant more humans because humans were the execution layer.</p><p>In the AI model, agents handle most of the execution. You still need a small number of engineers who deeply understand the feature&#8212;at least two, to avoid bus factor&#8212;but if you need more execution throughput, you buy it as tokens, not headcount.</p><p>By cognitive load, I mean something very specific: deep ownership of a system. Understanding how it works technically, how it serves the customer, where it can fail, and which invariants actually matter. This has to live with an engineer. If secrets leak or data is corrupted, you can&#8217;t reasonably hold a PM&#8212;or today&#8217;s app-builder tools&#8212;responsible. It&#8217;s possible those tools eventually get good enough to own this kind of accountability, but they&#8217;re not there yet. You still need a throat to choke, and it needs to belong to someone who actually understands the system.</p><p>That&#8217;s the real limit. Not how much code can be written, but how many systems an engineer can accurately hold in their head and be accountable for at once.</p><p>A few corollaries fall out of this.</p><p>First, the more AI reduces cognitive load, the smaller engineering teams can be without breaking. Execution is cheap; understanding is not.</p><p>Second, for agents to act like real execution engineers, we need to be far better at sharing context with them. They need to know the codebase, the invariants, and the &#8220;why,&#8221; not just generate plausible diffs. That implies documentation living with the code. Engineers won&#8217;t reliably do this, but agents can&#8212;if we make auto-updating docs part of the workflow.</p><p>Third, engineers are going to write far less code. Possibly none. Their primary job becomes reviewing generated code submitted by PMs or other non-engineers, or handing designs to agents and letting them implement. Even when engineers make major changes, they&#8217;ll often do it by directing an agent rather than typing everything themselves.</p><p>The underlying AI is probably good enough already. What&#8217;s missing are the tools: context management, infra automation, and guardrails that reduce supervision overhead instead of adding to it.</p><p>In the AI era, teams won&#8217;t scale with how much work needs to get done. They&#8217;ll scale with how much responsibility a human can realistically carry.</p>]]></content:encoded></item><item><title><![CDATA[RTO: From Religion to Systems Design]]></title><description><![CDATA[Because holy wars make bad operating principles]]></description><link>https://blog.cgardens.dev/p/rto-from-religion-to-systems-design</link><guid isPermaLink="false">https://blog.cgardens.dev/p/rto-from-religion-to-systems-design</guid><dc:creator><![CDATA[charles]]></dc:creator><pubDate>Thu, 15 Jan 2026 19:17:32 GMT</pubDate><content:encoded><![CDATA[<p>Remote vs in-person debates in startups have the energy of a theological schism. Lots of vibes. Very little accounting. Having led engineering at Airbyte through a shift from fully remote to in-person, I&#8217;ve picked up a few hard-earned lessons along the way. What tends to get lost in these conversations is that they drift into ideology, when in reality, like any other leadership decision, remote vs in-person is just a set of trade-offs.</p><div><hr></div><h3><strong>Remote: Talent First, Pay in Process</strong></h3><p>Great companies are built on great talent. Remote&#8217;s core advantage is simple: it massively expands the talent pool. Even with time zone constraints, you can hire people you&#8217;d never reach otherwise.</p><p>The cost is that context, trust, and momentum don&#8217;t emerge naturally. They have to be artificially manufactured. Meetings replace osmosis. Docs replace hallway conversations. Slack replaces tone. Team bonding follows the same pattern: in person you eat lunch together and build relationships by default; remotely you schedule offsites and Zoom &#8220;bonding.&#8221; None of this is fatal&#8212;but all of it is work. And it shows up most clearly in ideation: good ideas come from people talking to each other, and almost no one wants to casually brainstorm on Zoom the way they will at a whiteboard.</p><p>Remote is also meaningfully worse at training junior people. We are <em>still</em> waiting for someone to publish the seminal blogpost on how they solved growing new grads in a remote environment.</p><p>In a startup, time is the scarcest resource. Remote teams pay a small coordination tax per person relative to in-person teams, and that tax compounds nonlinearly as the team grows.</p><div><hr></div><h3><strong>In-Person: Energy First, Optionality Reduced</strong></h3><p>In-person optimizes for speed, energy, and tight feedback loops. Alignment is cheaper. Intent survives the trip from one brain to another.</p><p>The tradeoff is talent optionality. You&#8217;re bound to a local labor market, which in places like SF is extremely cyclical. In the last five years alone, roughly half the time it&#8217;s been nearly impossible to hire (crypto, AI booms), and the other half merely difficult.</p><p>That volatility is the price.</p><div><hr></div><h3><strong>The Middle Is the Failure Mode</strong></h3><p>Most problems come from unclear optimization. That&#8217;s how you get the worst-of-all-worlds setup: nominally in-person, functionally remote, culturally confused.</p><p>If you choose in-person, it has to actually be in-person. That means accepting reduced access to parts of the talent pool. That&#8217;s the trade. In-person maximizes energy and commitment. Remote maximizes access to exceptional talent.</p><p>Both are fine. Waffling is not.</p><div><hr></div><h3><strong>Conclusion</strong></h3><p>This isn&#8217;t about ideology. It&#8217;s about systems design. Every model has costs, and pretending otherwise just pushes those costs into places you&#8217;re not watching. My intuition is that AI-driven smaller teams push the needle toward remote, but not decisively. Smaller teams blunt coordination costs, yet also make co-location feasible. In the meantime, the best thing you can do is be explicit about what you&#8217;re optimizing for, honest about the costs, and willing to commit. Ambiguity is the only option that reliably makes everyone worse off.</p>]]></content:encoded></item><item><title><![CDATA[Unlocking Ephemeral Testing with Generative AI: Part Two]]></title><description><![CDATA[Because zero marginal cost reshapes what tests are even for]]></description><link>https://blog.cgardens.dev/p/unlocking-ephemeral-testing-with-a12</link><guid isPermaLink="false">https://blog.cgardens.dev/p/unlocking-ephemeral-testing-with-a12</guid><dc:creator><![CDATA[charles]]></dc:creator><pubDate>Thu, 04 Dec 2025 00:00:28 GMT</pubDate><content:encoded><![CDATA[<p><em>This article was originally published on the <a href="https://airbyte.com/blog/ephemeral-testing-with-generative-ai-part-two">Airbyte Blog</a>. </em></p><div><hr></div><p>In <a href="https://cgardens.substack.com/p/unlocking-ephemeral-testing-with">Part 1</a>, we talked about using LLMs to generate <em>ephemeral tests</em> that unfreeze legacy code &#8212; basically treating your AI as a bored-but-willing intern who will brute-force the emergent contract you&#8217;re too scared to guess at.</p><p>But there&#8217;s an adjacent point I keep circling back to: if the marginal cost of writing a test is now effectively zero, we&#8217;ve been massively underusing tests <em>everywhere</em>, not just in fossilized code.</p><p>Most of us only write tests when we &#8220;need to.&#8221; Translation: right before we touch a landmine. But writing tests as part of the exploratory process? Understanding new tools? Probing edge cases you didn&#8217;t think of? Historically that&#8217;s been too slow, too expensive, and too annoying. Now it&#8217;s just a cheap prompt away.</p><h3><strong>1. Testing unfamiliar systems: documentation by empiricism</strong></h3><p>This is basically the same move as Part 1 but for greenfield work.</p><p>You pick up a new library, framework, or middleware &#8212; say, the thing at my job that magically turns incoming JSON into Kotlin objects, plus some undocumented set of delightful quirks that everyone politely ignores.</p><p>Before, your options were:</p><ul><li><p>Read the docs (ha).</p></li><li><p>Read the source (double ha).</p></li><li><p>Ship something, hit prod, and learn what <em>actually</em> happens (the traditional method).</p></li></ul><p>Now you can just have an LLM carpet-bomb the thing with tests and infer the behavioral terrain map. Ask it for dozens of permutations: missing fields, extra fields, weird nesting, bad types, whitespace crimes &#8212; all the delightful real-world entropy the docs never mention.</p><p>Most of these tests you&#8217;ll delete. A few you might keep, because they reveal a &#8220;fun&#8221; subtlety that Future Developer (which is also Present Developer + six months of memory decay) is going to trip over.</p><p>It&#8217;s like doing reconnaissance on a foreign API. Except now the recon is both free and tireless.</p><h3><strong>2. Testing things you didn&#8217;t think of</strong></h3><p>At a recent conference, George Fraser from Fivetran said something to the effect of:</p><blockquote><p>&#8220;I get an LLM&#8217;s opinion on everything I do, because sometimes it notices something I don&#8217;t.&#8221;</p></blockquote><p>That stuck with me.</p><p>Not because I need more opinions in my life (I write software; opinions are my primary export), but because it&#8217;s the exact same philosophy as ephemeral testing:</p><p>Ask the model to test your code for cases you never considered.<br><strong>Worst case:</strong> the tests are useless and you don&#8217;t commit them.<br><strong>Best case:</strong> it surfaces a weird edge case that would have cost you a day of debugging and a grumpy Slack thread.</p><p>Treat your LLM like an extremely pedantic coworker who specializes in pointing out the one thing you forgot. The key difference is that you don&#8217;t owe the LLM coffee or emotional labor.</p><h3><strong>3. The next frontier: acceptance testing via prompt</strong></h3><p>This last bit is more speculative, but I&#8217;m increasingly convinced that some tests shouldn&#8217;t be written in code at all.</p><p>Long-lived automated tests age poorly. They embed outdated assumptions in a thousand helper functions and silently pass even after they stop exercising the actual code path.</p><p>But a prompt like:</p><blockquote><p>&#8220;When I update the number of records moved in a replication job, the job summary returns the updated count.&#8221;</p></blockquote><p>&#8230;is short, human-readable, and tightly scoped to <em>intent</em>, not implementation.</p><p>Imagine a small suite of English prompts that represent the product&#8217;s core acceptance criteria. As part of CI, you ask an LLM to execute those prompts against your system and confirm that reality matches the story.</p><p>Two nice properties fall out of this:</p><ol><li><p><strong>It detects mismatches between the code and the canonical user-facing behavior. </strong>Maybe the old tests still hit the v1 endpoint, while your docs point to v2. A human might miss that; an LLM poking at the surface won&#8217;t.</p></li><li><p><strong>Anyone can write prompts. </strong>We needed QA teams because the tools for encoding and checking product level behavior required a lot of technical expertise. If PMs, designers, and support can maintain their own prompts to describe what workflows they care about, that unlocks entirely new ways of approaching QA.</p></li></ol><p>Of course, there&#8217;s an obvious landmine: LLMs are nondeterministic, and flaky tests are how engineering teams slowly lose their will to live.</p><p>So I&#8217;m not claiming victory here. This idea needs more experimenting &#8212; guardrails, temperature controls, scenario anchoring, maybe multiple-run consensus. But the shape of the opportunity is interesting: acceptance tests that read like requirements, not code.</p><h3><strong>The bigger shift: when tests hit zero marginal cost</strong></h3><p>This whole series boils down to a simple economic shift: writing tests just dropped from &#8220;painful but virtuous&#8221; to basically zero marginal cost. And any time something useful collapses to zero marginal cost (think Ben Thompson and <a href="https://stratechery.com/aggregation-theory/">Aggregation Theory</a>), the right question isn&#8217;t &#8220;How do we do the old thing cheaper?&#8221; It&#8217;s &#8220;What new behaviors does this unlock?&#8221;</p><p>That&#8217;s the invitation here. Once tests are cheap, they stop being artifacts you carefully curate and start becoming probes &#8212; disposable instruments for exploring unfamiliar code, mapping legacy behavior, surfacing missed edges, or even expressing acceptance criteria in plain English. The examples in these posts are just early sketches. The real point is: we should get weird and creative again. When tests cost nothing, the space of things worth testing suddenly gets a lot bigger.</p>]]></content:encoded></item><item><title><![CDATA[The Fleeting Life of an LLM]]></title><description><![CDATA[Because someone had to anthropomorphize them]]></description><link>https://blog.cgardens.dev/p/the-fleeting-life-of-an-llm</link><guid isPermaLink="false">https://blog.cgardens.dev/p/the-fleeting-life-of-an-llm</guid><dc:creator><![CDATA[charles]]></dc:creator><pubDate>Tue, 02 Dec 2025 00:01:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!MgxQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c7580db-0c58-4ae5-bc95-8b4c6b892ada_1204x746.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_!MgxQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c7580db-0c58-4ae5-bc95-8b4c6b892ada_1204x746.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MgxQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c7580db-0c58-4ae5-bc95-8b4c6b892ada_1204x746.png 424w, https://substackcdn.com/image/fetch/$s_!MgxQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c7580db-0c58-4ae5-bc95-8b4c6b892ada_1204x746.png 848w, https://substackcdn.com/image/fetch/$s_!MgxQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c7580db-0c58-4ae5-bc95-8b4c6b892ada_1204x746.png 1272w, https://substackcdn.com/image/fetch/$s_!MgxQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c7580db-0c58-4ae5-bc95-8b4c6b892ada_1204x746.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MgxQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c7580db-0c58-4ae5-bc95-8b4c6b892ada_1204x746.png" width="1204" height="746" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c7580db-0c58-4ae5-bc95-8b4c6b892ada_1204x746.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:746,&quot;width&quot;:1204,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:66919,&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://cgardens.substack.com/i/180156069?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c7580db-0c58-4ae5-bc95-8b4c6b892ada_1204x746.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_!MgxQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c7580db-0c58-4ae5-bc95-8b4c6b892ada_1204x746.png 424w, https://substackcdn.com/image/fetch/$s_!MgxQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c7580db-0c58-4ae5-bc95-8b4c6b892ada_1204x746.png 848w, https://substackcdn.com/image/fetch/$s_!MgxQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c7580db-0c58-4ae5-bc95-8b4c6b892ada_1204x746.png 1272w, https://substackcdn.com/image/fetch/$s_!MgxQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c7580db-0c58-4ae5-bc95-8b4c6b892ada_1204x746.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 buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>Humans start with nothing&#8212;no knowledge, no skills, barely a sense of which way is up. Our mental acuity ramps fast, peaks around 35, and then begins the long, polite glide path toward &#8220;why did I walk into this room?&#8221;<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> But knowledge keeps accumulating long after the sharpness fades, which is why our overall usefulness often rises well past our cognitive prime.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a> Eventually, either our acuity drops too low to access what we know, or what we know stops mattering&#8212;but until then, we lean on experience.</p><p>LLMs live a similar lifecycle&#8212;just accelerated to the point of comedy. They spawn at peak intelligence, like a newborn who&#8217;s already finished grad school. But from that very first token, due to attention dilution, they&#8217;re on the decline. You&#8217;re in a desperate race to shove context in before the model forgets why you&#8217;re talking to it, who you are, or what century it is. After fifteen minutes, it&#8217;s basically your friend at 2 a.m. insisting they&#8217;re &#8220;totally fine to drive.&#8221;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QRv0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7925aba6-6728-4321-b3fe-f759b59ef298_750x1000.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QRv0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7925aba6-6728-4321-b3fe-f759b59ef298_750x1000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!QRv0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7925aba6-6728-4321-b3fe-f759b59ef298_750x1000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!QRv0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7925aba6-6728-4321-b3fe-f759b59ef298_750x1000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!QRv0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7925aba6-6728-4321-b3fe-f759b59ef298_750x1000.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QRv0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7925aba6-6728-4321-b3fe-f759b59ef298_750x1000.jpeg" width="322" height="429.3333333333333" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7925aba6-6728-4321-b3fe-f759b59ef298_750x1000.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1000,&quot;width&quot;:750,&quot;resizeWidth&quot;:322,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Brain Surge Sticker&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Brain Surge Sticker" title="Brain Surge Sticker" srcset="https://substackcdn.com/image/fetch/$s_!QRv0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7925aba6-6728-4321-b3fe-f759b59ef298_750x1000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!QRv0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7925aba6-6728-4321-b3fe-f759b59ef298_750x1000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!QRv0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7925aba6-6728-4321-b3fe-f759b59ef298_750x1000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!QRv0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7925aba6-6728-4321-b3fe-f759b59ef298_750x1000.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" 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" class="icon-noB79L"><g><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 buttonBase-GK1x3M"><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 icon-noB79L"><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>Humans are racing against time; LLMs are racing against the context window (e.g. attention dilution, noise, instruction drift, etc). That&#8217;s the key difference. We learn by doing things&#8212;stacking up lived experience to offset declining throughput. LLMs, meanwhile, get dumber <em>because</em> they&#8217;re doing things. Every new token is both &#8220;experience&#8221; and a small act of self-erosion. It would be as if reading a page in a book made you instantly worse at reading the next page.</p><p>The reason I&#8217;m thinking about all this is that working with LLMs forced me into a strange kind of self-reflection. At first, their rapid slide into confusion felt completely foreign, and I had to invent new ways of giving them work&#8212;splitting tasks, adding structure, managing their attention. But the longer I sat with it, the more humbling the realization became: this isn&#8217;t alien at all. It&#8217;s a compressed version of our own lives. We build systems and habits to compensate for fading focus, limited memory, and the hope that accumulated experience will outrun the entropy. LLMs just do the whole thing on fast-forward.</p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>Intentionally not using scientific terms here. &#8220;Acuity&#8221; is handwaving over some notion of mental horsepower.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>&#8220;Knowledge&#8221; is handwaving over learned skills, experience, pattern recognition, facts, etc. All the stuff that makes you better at something that you had to learn or practice. </p></div></div>]]></content:encoded></item></channel></rss>