<?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[Tall Tree Technology]]></title><description><![CDATA[Writing about AI-augmented software development, organizational constraints, and how engineering teams actually deliver outcomes at scale. Focused on clarity over hype.]]></description><link>https://writing.talltree.io</link><image><url>https://substackcdn.com/image/fetch/$s_!Az9O!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6831872-7845-41f3-a41a-aca9b6be4bc4_1024x1024.png</url><title>Tall Tree Technology</title><link>https://writing.talltree.io</link></image><generator>Substack</generator><lastBuildDate>Sun, 08 Nov 2026 09:27:08 GMT</lastBuildDate><atom:link href="https://writing.talltree.io/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Ken Britton]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[kenbritton@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[kenbritton@substack.com]]></itunes:email><itunes:name><![CDATA[Tall Tree Technology]]></itunes:name></itunes:owner><itunes:author><![CDATA[Tall Tree Technology]]></itunes:author><googleplay:owner><![CDATA[kenbritton@substack.com]]></googleplay:owner><googleplay:email><![CDATA[kenbritton@substack.com]]></googleplay:email><googleplay:author><![CDATA[Tall Tree Technology]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[The Tests Were Passing]]></title><description><![CDATA[AI tools reduce the cost to build. Good judgment spreads one pairing session at a time.]]></description><link>https://writing.talltree.io/p/the-tests-were-green</link><guid isPermaLink="false">https://writing.talltree.io/p/the-tests-were-green</guid><dc:creator><![CDATA[Tall Tree Technology]]></dc:creator><pubDate>Thu, 24 Sep 2026 23:53:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Az9O!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6831872-7845-41f3-a41a-aca9b6be4bc4_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Everyone I talk to is using AI, and it&#8217;s changing how they run their business. But most are uneasy about whether they&#8217;re using it well. They suspect their competitors have figured out something they haven&#8217;t. One practice from software engineering can help: pair programming, where two people work through a problem together, making their reasoning visible as they go. It&#8217;s a practical way to learn how to use AI, and to spread the judgement already present in your organization.</p><h3>A pairing session</h3><p>Last week I spent an hour pair programming with a director of engineering on his system. He was using Claude Code and we were in a Google Meet together, discussing the changes.</p><p>We were changing feature-flagging, a feature that allows his company to slowly roll out new features and changes, ensuring that things don&#8217;t break as they release software. During the session we discovered that a misconfigured flag would unintentionally be released to all users. This was a big bug that needed to be fixed; however, there was a bigger problem we needed to address - the tests for this feature would pass regardless of the bug.</p><p>How did this happen? The code wasn&#8217;t careless, but the tests weren&#8217;t validating the right things. To a naive observer or an agent, the presence of tests could have been enough, but the tests hadn&#8217;t captured an important decision: what should happen when a flag is misconfigured? Pairing gave us a chance to make that decision explicit and check that the tests enforced it.</p><h3>Using agents</h3><p>Coding agents will happily write tests. Over time the quality of test code generated by LLMs has improved, but a common mistake is creating structural tests - they assert the system is structured a certain way, not that it behaves a certain way. This can be helpful for sticking to system standards, spotting coding errors etc, but in this case it was the reason for a significant behaviour gap. </p><p>The key question to be asking in this scenario - <strong>is the right approach?</strong> - is a judgment call. Agentic coding systems aren&#8217;t necessarily going to answer that the same way as you. The correct judgement exists in your organization, and it needs to be shared.</p><h3>Why pairing?</h3><p>When an agent does the typing, most of what the human is doing is <strong>judgment</strong>. In the session I described, we spent a little time discussing <strong>what</strong>, and most of the time describing <strong>how</strong>. Here are some examples of our asks:</p><ul><li><p>Write tests before touching the code (clear acceptance criteria)</p></li><li><p>Ensure the tests fail before implementing a fix (high quality tests)</p></li><li><p>Use mutations to validate the quality of the tests (testing the right thing)</p></li><li><p>Code review the change against our standards. (a second set of &#8220;eyes&#8221;) </p></li><li><p>Update coding standards (ensure the next person doesn&#8217;t repeat mistakes)</p></li></ul><p>None of that is new. What&#8217;s new is that an agent will follow best practices that you ask for, or write down. You need to be clear about what good looks like.</p><p>Human code reviews are critical but don&#8217;t serve the same function. A reviewer sees the finished change, not the questions that shaped it. Pairing puts those questions in the room while the work is happening, and influences both the outcome, and future sessions.</p><h3>If you&#8217;re paying for AI tools</h3><p>If you&#8217;re using AI tools in your organization, ensure &#8220;what good looks like&#8221; has been defined. A weekly pairing session with an experienced, senior member of your team helps to solve this: it&#8217;s one of the most effective ways I know to disseminate best practices within a team.</p><p>This approach has worked for me for years, and I now do this with my clients: 90 minutes pairing on their own work, and a short note afterwards summarizing key points. If you&#8217;d like to try one, hit me up at ken@talltree.io.</p>]]></content:encoded></item><item><title><![CDATA[Context Decays Faster Than Code]]></title><description><![CDATA[Two open-source skills for fewer "haven't we already discussed this?" moments.]]></description><link>https://writing.talltree.io/p/context-decays-faster-than-code</link><guid isPermaLink="false">https://writing.talltree.io/p/context-decays-faster-than-code</guid><dc:creator><![CDATA[Tall Tree Technology]]></dc:creator><pubDate>Tue, 04 Aug 2026 17:48:17 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Az9O!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6831872-7845-41f3-a41a-aca9b6be4bc4_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>Over the past few months I&#8217;ve been using a coding agent - Claude - to build and maintain a few software projects. Working with the tool daily, I noticed that context - documentation, architectural decisions, even the agent&#8217;s internal memories - is critical, and decays very quickly. Mistakes repeated themselves; old decisions would magically resurface. Where a senior developer would notice a stale document and think &#8220;that&#8217;s probably out of date&#8221;, an agent would read the same content and act on it.</span></p><p><span>These are familiar culprits, now with bigger impact:</span></p><p><strong><span>Code drifts from declared architecture</span></strong><span> &#8212; codebases have guidelines, rules, and principles that are described in documentation. These can become obsolete if they&#8217;re not kept up to date. With the increased velocity of AI, this happens much more quickly.</span></p><p><strong><span>Context drifts from code</span></strong><span> &#8212; in order to guide agent behaviour, users define context files like CLAUDE.md, cursorrules, etc. Agents also store internal memory files with key information. Agents can and do read all of this, so if they&#8217;re not up to date, you get undesirable behaviour.</span></p><p><span>To slow the decay I built a couple of skills.</span></p><h2><span>architecture-drift-review</span></h2><p><span>I run this after major feature work, before a release, and as a weekly job. It audits the codebase against its described architecture and verifies claims against code.</span></p><p><span>Three rules make it work:</span></p><ul><li><p><strong><span>Deterministic evidence first</span></strong><span> &#8212; &#8220;Seventeen modules open the database directly; the doc says one&#8221; is a finding. &#8220;Coupling seems high&#8221; is not.</span></p></li><li><p><strong><span>No finding without an exit</span></strong><span> &#8212; every finding leaves with a fix, a new automated guard, or an explicit dated acceptance. A finding that ends as &#8220;should be looked at&#8221; will regress &#8212; that&#8217;s a failure of the review.</span></p></li><li><p><strong><span>The doc is a byproduct</span></strong><span> &#8212; keeping ARCHITECTURE.md accurate happens in passing. If a review produces only an updated document, it described the system instead of making it more robust.</span></p></li></ul><p><span>If the project has no architecture doc at all, the skill inverts: it scans the system and creates a baseline document, so the next run has something to audit.</span></p><h2><span>agent-context-audit</span></h2><p><span>I run this every time I&#8217;m getting unexpected behaviour from agents - the &#8220;</span>haven&#8217;t we already discussed this?<span>&#8221; moment. It&#8217;s tool-agnostic so Claude memories,  CLAUDE.md, AGENTS.md, Cursor rules, Copilot instructions, decision-record statuses, skill files, permission and MCP configs are all checked.</span></p><p><span>If you run more than one tool, it also diffs their instruction files against each other, because CLAUDE.md and .cursorrules can drift too.</span></p><h2><span>Two principles worth sharing:</span></h2><p><strong><span>The false-OK</span></strong><span> &#8212; when you verify a claim with a grep and get nothing back, that can be read as OK. But what if the file was moved? Empty is not necessarily OK, it can also mean unverified.</span></p><p><strong><span>The graduation pass</span></strong><span> &#8212; a number of findings from my audits have graduated into deterministic checks that I run locally. By doing that, they evolve from &#8220;instructions the agent must remember&#8221; to &#8220;checks that can&#8217;t be ignored.&#8221; Bonus: they&#8217;re cheap, run without a network connection, and support both agents and human teams.</span></p><h2><span>Give them a try</span></h2><p><span>Both skills are MIT-licensed and easy to install:</span></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;bc36f78e-39c4-4767-a81e-33a56e155a8f&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">npx skills add ken-talltree-io/agent-skills@architecture-drift-review
npx skills add ken-talltree-io/agent-skills@agent-context-audit</code></pre></div><p><span>The repo is here: </span><a href="https://github.com/ken-talltree-io/agent-skills"><span>github.com/ken-talltree-io/agent-skills</span></a><span>. The skills are extracted from real production use, so they&#8217;re likely biased to my work. Issues and PRs are welcome.</span></p>]]></content:encoded></item><item><title><![CDATA[Thinking Clearly When Moving Quickly]]></title><description><![CDATA[Systems matter with AI-augmented development]]></description><link>https://writing.talltree.io/p/thinking-clearly-when-moving-quickly</link><guid isPermaLink="false">https://writing.talltree.io/p/thinking-clearly-when-moving-quickly</guid><dc:creator><![CDATA[Tall Tree Technology]]></dc:creator><pubDate>Tue, 13 Jan 2026 16:37:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Az9O!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6831872-7845-41f3-a41a-aca9b6be4bc4_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In post <a href="https://open.substack.com/pub/kenbritton/p/ai-didnt-make-your-team-faster?r=713v3y&amp;utm_campaign=post&amp;utm_medium=web&amp;showWelcomeOnShare=true">1</a> and <a href="https://open.substack.com/pub/kenbritton/p/ai-moved-the-bottleneck-heres-where?r=713v3y&amp;utm_campaign=post&amp;utm_medium=web&amp;showWelcomeOnShare=true">2</a> of this series, I explored why AI-assisted development can increase output without improving outcomes, and how constraints shift once implementation is no longer the limiting factor. In this post, I&#8217;ll be discussing how teams can rethink how they work when facing these new constraints.</p><h3><strong>AI alone is not a capability upgrade</strong></h3><p>AI can significantly increase local throughput; however, if the system and organization can&#8217;t absorb that throughput, the result is pressure rather than progress. Review queues grow, decisions stall, and coordination costs rise.</p><p>This is where many &#8220;AI readiness&#8221; efforts quietly fail. The tools work as expected, but the organization lacks the structures needed to operate effectively once implementation is no longer the constraint.</p><p>When using AI code-generation, teams need to ask a more fundamental question: <em>how do we address these new constraints?</em></p><h3><strong>Decision infrastructure matters</strong></h3><p>High-performing teams respond by making decisions explicit. Ownership is clear. Trade-offs are written down. Decisions are made earlier, when change is cheap, rather than revisited later under pressure.</p><p>What matters here isn&#8217;t how quickly decisions are made, but how often they need to be revisited. Teams that struggle under AI-assisted development are rarely blocked by lack of options, they&#8217;re blocked by ambiguity. The goal isn&#8217;t faster decisions, it&#8217;s fewer reversals.</p><h3><strong>Architectural simplicity is a competitive advantage</strong></h3><p>AI-generated code makes it easy to add complexity unintentionally and unnecessarily. Strong teams counter this by being conservative about architecture. They limit abstractions, strengthen boundaries, and protect core systems from frequent churn.</p><p>These actions aren&#8217;t about resisting change. They&#8217;re about maintaining systems that can be understood, reasoned about, and safely modified as throughput increases. When architecture supports comprehension, teams retain their ability to adapt, even as code volume grows.</p><h3><strong>Review and comprehension are the work</strong></h3><p>In AI-augmented environments, review is no longer a secondary activity, it <em>is</em> the work. As more code moves through the system, understanding intent becomes more valuable than generating output. Effective teams optimize for this by keeping changes small, communicating intent clearly, and relying on shared conventions to reduce cognitive load.</p><p>When review breaks down, AI amplifies the failure. Superficial approvals, eroding confidence, and fragile systems are not tooling problems, they&#8217;re signals that the organization can&#8217;t yet absorb the speed it has created.</p><p>Speed without comprehension leads to fragility. This is true at all levels of the organization.</p><h3><strong>Seeing the system</strong></h3><p>AI is often framed as a shortcut to better software delivery. In practice, it&#8217;s a stress test of the overall system.</p><p>It reveals whether teams can make high-quality decisions, understand changes as they move through the system, and coordinate effectively under increased throughput. When those capabilities are weak, AI doesn&#8217;t compensate, it exposes the limits.</p><p>The opportunity in the age of AI isn&#8217;t to generate more code, it&#8217;s to build organizations that think clearly when moving quickly.</p>]]></content:encoded></item><item><title><![CDATA[AI Moved the Bottleneck]]></title><description><![CDATA[How constraints shift once implementation is no longer the limit]]></description><link>https://writing.talltree.io/p/ai-moved-the-bottleneck-heres-where</link><guid isPermaLink="false">https://writing.talltree.io/p/ai-moved-the-bottleneck-heres-where</guid><dc:creator><![CDATA[Tall Tree Technology]]></dc:creator><pubDate>Thu, 18 Dec 2025 18:15:17 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Az9O!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6831872-7845-41f3-a41a-aca9b6be4bc4_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In my <a href="https://open.substack.com/pub/kenbritton/p/ai-didnt-make-your-team-faster?r=713v3y&amp;utm_campaign=post&amp;utm_medium=web&amp;showWelcomeOnShare=true">previous post</a>, I described why AI often increases output without improving outcomes. The reason is simple: the bottleneck didn&#8217;t disappear, it moved. Once implementation accelerates, old constraints cease to limit delivery. What replaces them are familiar limits, showing up consistently in AI-augmented teams.</p><h3>From Implementation to Decision-Making</h3><p>AI produces plausible prototypes quickly. Ideally, it produces several. This shifts the limiting factor from how quickly code can be written to how effectively decisions can be made. Teams must now choose between approaches, trade off short-term speed against long-term maintainability, and decide what risks they are willing to accept.</p><p>When ownership is unclear or decisions remain implicit, progress slows, not because engineers can&#8217;t act, but because alignment becomes harder to achieve. As throughput increases, the cost of weak or delayed decisions rises quickly, and teams feel the impact sooner.</p><h3>From Writing Code to Understanding Code</h3><p>As AI increases output, engineers spend more time reading than writing.</p><p>Generated code expands overall volume and surface area, and context becomes harder to maintain. Understanding <em>why</em> something exists, not just <em>what it does</em>, takes longer. This creates pressure in review - approvals can become shallow, while confidence in changes and tools can erode.</p><p>Over time, the cost of misunderstanding catches up with and exceeds the cost of implementation, making recovery from mistakes becomes more expensive.</p><h3>From Execution to Coordination</h3><p>Faster individuals do not produce faster teams. As local throughput increases, coordination costs begin to dominate delivery speed. Dependencies matter more, and interfaces are exercised more frequently. Organizational boundaries become visible in ways they weren&#8217;t before.</p><p>At scale, delivery is governed less by individual capability and more by how effectively work moves across those boundaries. With less slack in the system, misalignment propagates faster and coordination failures surface sooner.</p><h3>What This Means for Leaders</h3><p>When these become the dominant constraints, improving outcomes requires a shift in focus. The limiting factors are no longer tools or implementation capacity, but how decisions are made, how changes are understood as they move through the system, and how work is coordinated under increased throughput.</p><p>In my next post, I&#8217;ll look at how high-performing teams redesign themselves around this shift, and what changes once decision-making, comprehension, and coordination become the primary work.</p>]]></content:encoded></item><item><title><![CDATA[AI Didn’t Make Your Team Faster]]></title><description><![CDATA[Why increased coding speed hasn&#8217;t translated into faster delivery]]></description><link>https://writing.talltree.io/p/ai-didnt-make-your-team-faster</link><guid isPermaLink="false">https://writing.talltree.io/p/ai-didnt-make-your-team-faster</guid><dc:creator><![CDATA[Tall Tree Technology]]></dc:creator><pubDate>Sat, 13 Dec 2025 22:40:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Az9O!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe6831872-7845-41f3-a41a-aca9b6be4bc4_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Over the past year, many engineering teams have adopted AI-assisted development tools and seen a clear increase in coding throughput. Engineers are writing more code, opening more pull requests, and completing individual tasks faster.</p><p>What&#8217;s been less consistent is an increase in actual delivery speed.</p><p>The gap between local productivity and system-level outcomes is becoming a common source of confusion for engineering leaders. It shouldn&#8217;t be surprising. Most software organizations were never constrained by typing speed in the first place.</p><h3>Speed Wasn&#8217;t the Bottleneck</h3><p>Before AI entered the picture, constraints in software delivery were well documented:</p><ul><li><p>Ambiguous or shifting requirements</p></li><li><p>Architectural coupling</p></li><li><p>Review and coordination overhead</p></li><li><p>Decision latency across teams</p></li></ul><p>AI accelerates the act of producing code, but it doesn&#8217;t resolve any of these constraints. In practice, it brings them to the forefront.</p><p>Teams now push higher volumes of change through systems that were never designed to absorb that rate of modification. Review queues lengthen. Context switching increases. Architectural boundaries are stressed more frequently.</p><p>The result isn&#8217;t faster delivery.</p><p>It&#8217;s more pressure on already constrained systems.</p><h3>Local Throughput vs. System Flow</h3><p>Improving the speed of one component doesn&#8217;t improve the throughput of the whole system unless that component was the constraint.</p><p>AI dramatically improves local throughput at the individual developer level. Software delivery, however, is a coordinated activity. As individual speed increases, constraints shift elsewhere, most often to decision-making, review, and coordination.</p><p>From the inside, this can feel like <em>&#8220;we&#8217;re moving faster but getting less done.&#8221;</em></p><p>From the outside, it looks like more activity without corresponding outcomes.</p><h3>The Wrong Conclusion</h3><p>Many teams interpret this mismatch as a tooling issue: better prompts, better models, or better integrations will solve the problem. Others assume it&#8217;s growing pains.</p><p>In reality, what AI is exposing is not a gap in capability but a structural constraint.</p><p>AI doesn&#8217;t remove bottlenecks.</p><p>It reveals them.</p><p>Understanding where those constraints move and how to design teams to operate effectively under them is now one of the central challenges of modern engineering leadership.</p><p><em>In the next post, I&#8217;ll look at where the bottleneck actually moves in AI-augmented teams and why decision-making, not implementation, becomes the limiting factor.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://writing.talltree.io/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 Tall Tree Technology! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>