<?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[Tsvetan Tsvetanov]]></title><description><![CDATA[A weekly newsletter on how to become an AI-Native Software Engineer.]]></description><link>https://tsvetantsvetanov.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!pWeH!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7467fa6-7d32-4f0b-801c-a09bf896b92e_1024x1024.png</url><title>Tsvetan Tsvetanov</title><link>https://tsvetantsvetanov.substack.com</link></image><generator>Substack</generator><lastBuildDate>Mon, 18 May 2026 12:21:14 GMT</lastBuildDate><atom:link href="https://tsvetantsvetanov.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Tsvetan Tsvetanov]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[tsvetantsvetanov@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[tsvetantsvetanov@substack.com]]></itunes:email><itunes:name><![CDATA[Tsvetan Tsvetanov]]></itunes:name></itunes:owner><itunes:author><![CDATA[Tsvetan Tsvetanov]]></itunes:author><googleplay:owner><![CDATA[tsvetantsvetanov@substack.com]]></googleplay:owner><googleplay:email><![CDATA[tsvetantsvetanov@substack.com]]></googleplay:email><googleplay:author><![CDATA[Tsvetan Tsvetanov]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Defining Slop]]></title><description><![CDATA[Today we have a guest post from Feifan Zhou.]]></description><link>https://tsvetantsvetanov.substack.com/p/defining-slop</link><guid isPermaLink="false">https://tsvetantsvetanov.substack.com/p/defining-slop</guid><dc:creator><![CDATA[Tsvetan Tsvetanov]]></dc:creator><pubDate>Fri, 24 Apr 2026 18:50:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!pWeH!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7467fa6-7d32-4f0b-801c-a09bf896b92e_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Today we have a guest post from <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Feifan Zhou&quot;,&quot;id&quot;:2750473,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2218daf0-7724-40b2-9f5e-60d38b591fff_3919x3919.jpeg&quot;,&quot;uuid&quot;:&quot;eb79be3a-ab34-4524-ac21-be1cae67aa0f&quot;}" data-component-name="MentionToDOM"></span>.</p><p>Feifan is a cofounder of <a href="https://tanagram.ai/">Tanagram</a>, where he&#8217;s working on tools to scale expertise across AI-native engineering teams. He previously helped launch Stripe Issuing, and <a href="https://slopocalypse.substack.com/">writes</a> about organization design and effective results using AI.</p><div><hr></div><blockquote><p>&#8220;There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies.&#8221; &#8211; C.A.R Hoare</p></blockquote><p>Not too long ago, one of our users was lamenting about the dramatic increase in slop that he was seeing. We tried to put some boundaries around what he considered slop, but found it hard to do so &#8212; at the time, we had a hard time defining slop.</p><p>That sent me down a research rabbit hole: talking to other founders building in AI, hearing about day-to-day struggles from tech leads, and reading research papers.</p><p>Here&#8217;s what I found.</p><h1><strong>Quantitative</strong></h1><p>A <a href="https://arxiv.org/abs/2603.24755">group of researchers</a> quantified slop in two metrics:</p><p><strong>Erosion</strong>: the fraction of the codebase&#8217;s total complexity mass that resides in high-complexity functions &#8212; i.e. a codebase is more eroded if most of the code is concentrated in a few, very-dense functions. An example from the researchers&#8217; output:</p><pre><code>def find_matches_in_file(text, path, language, rules):
    ...
    for rule in rules:
        if kind == &#8220;exact&#8221;:
            ...
        elif kind == &#8220;regex&#8221;:
            ...
        elif kind == &#8220;pattern&#8221;:
            ...
        else: ...

        if iterable is not None:
            for match in iterable:
                ...
        if kind == &#8220;pattern&#8221;:
            for match in iter_pattern_matches(...):
                ...
        for node in iter_tree_nodes(source_root):
            if not node_matches_selector(selector, node):
                ...
    return matches</code></pre><p>This function ended up 117 lines long, with the majority of decision-point code concentrated at this level of abstraction.</p><p><strong>Verbosity</strong>: duplicated or problematic lines (as defined through targeted AST-Grep rules), as a percentage of total lines. An example from the researchers&#8217; output:</p><pre><code>for posix_path, full_path, language in source_files:
    applicable_rules = [
        r for r in all_compiled_rules
        if language in r[&#8221;languages&#8221;]
    ]
    if not applicable_rules:
        continue
    with open(full_path, &#8220;r&#8221;, encoding=encoding) as f:
        content = f.read()
    matches = find_matches_in_content(
        content, applicable_rules, language
    )
    if not matches:
        continue
    match_list.extend(matches)
all_matches = deduplicate_matches(match_list)
return all_matches</code></pre><p>They called out the identity list comprehension instead of <code>filter</code>, empty checks instead of building around iteration, and single-use variables.</p><p>The full list of checks that the researchers used is <a href="https://github.com/SprocketLab/slop-code-bench/blob/main/configs/slop_rules.yaml">here</a>.</p><p>One additional way to quantify slop is through the amount of dead code that a change leaves behind &#8212; LLMs are strongly biased towards adding code, instead of removing existing code<a href="https://gist.github.com/feifanzhou/0040a5ed3e0f48753d2e44b99077dc73#user-content-fn-0-eeea38f54fb0488b38b164f6f8b23352"><sup>1</sup></a>. Changes that leave behind more dead code are sloppier.</p><h1><strong>Qualitative</strong></h1><p>A few other attributes are also hallmarks of AI-generated slop, although they&#8217;re harder to measure:</p><ul><li><p>Locally-optimal code that doesn&#8217;t account for other aspects of the codebase/system. The code might fail to reuse existing constants and functions, database tables, or whole existing services. The code might reimplement functionality already provided by an existing library or framework, or implement things in an old, possibly-deprecated way. The code might try to work around an existing constraint without understanding why that constraint exists in the first place.</p></li><li><p>No clear organization/domain boundaries &#8212; code might be broken up into modules, but there&#8217;s no logical rationale behind the modules.</p></li><li><p>Code that diverges from present-day conventions, especially given multiple differing patterns that have evolved over time.</p></li></ul><h1><strong>Why it Matters</strong></h1><p>Individual engineers may care about code quality (especially the staff/principal engineers whose mandate includes thinking about the long-term health of day-to-day engineering work), but businesses generally only care when tech debt manifests as a reliability or compliance problem.</p><p>The problem is that slop is a self-fulfilling loop: the more you vibe-code, the harder it is to work in a codebase. The harder the codebase, the more you want to vibe-code. At some point, there&#8217;s an abdication of responsibility &#8212; when the codebase is no longer human-understandable, then engineers take themselves out of the loop, and give up on trying to keep things maintainable.</p><p>People stop being responsible, they stop being diligent, and that&#8217;s how outages and incidents arise.</p><h1><strong>What to Do About It</strong></h1><p>If you haven&#8217;t already, start using modern coding agents (not Copilot, probably not Cursor. Use Claude, Codex, Amp, or OpenCode). Really play with them &#8212; get a feel for their strengths and weaknesses, like you would a new coworker. You&#8217;re trying to figure out the right amount of detail you need to specify &#8212; when you can be broad and it&#8217;ll &#8220;get it&#8221;; when you have to specify more constraints. Then apply your engineering judgment to the results; don&#8217;t blindly accept its output as good or done, even if it looks like things work.</p><p>This process is now a continuous part of being an engineer. You&#8217;ll have to relearn this every few months as new models come out and harnesses evolve.</p><p>Finally, remember that in a system, when one bottleneck is alleviated, a different step becomes the next bottleneck. In software, now that generating code is no longer the bottleneck, design review and code review become the bottleneck. Invest in infrastructure that helps you scale your team&#8217;s unique expertise, patterns, and lessons.</p><h2><strong>Footnotes</strong></h2><ol><li><p>This is, at least in some part, inherent in post-training: in RLHF, reviewers are asked to compare which output is better, instead of judging whether output should be removed. <a href="https://gist.github.com/feifanzhou/0040a5ed3e0f48753d2e44b99077dc73#user-content-fnref-0-eeea38f54fb0488b38b164f6f8b23352">&#8617;</a></p></li></ol>]]></content:encoded></item><item><title><![CDATA[Notes from working with multiple agents]]></title><description><![CDATA[At the beginning of the year I started seriously exploring working on multiple things at once.]]></description><link>https://tsvetantsvetanov.substack.com/p/notes-from-working-with-multiple</link><guid isPermaLink="false">https://tsvetantsvetanov.substack.com/p/notes-from-working-with-multiple</guid><dc:creator><![CDATA[Tsvetan Tsvetanov]]></dc:creator><pubDate>Fri, 03 Apr 2026 07:17:58 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!AZ2G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8c1ce5-d2ed-4718-8877-f55771ad2541_768x1376.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>At the beginning of the year I started seriously exploring working on multiple things at once. With a multitude of agents. My harness is Claude Code. My framework of choice is <a href="https://nwave.ai/">nWave</a> but before that I relied on <a href="https://github.com/citypaul/.dotfiles/tree/main/claude/.claude">Paul Hammond&#8217;s Claude config</a>. Here are some learnings from this period shared in no particular order.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AZ2G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8c1ce5-d2ed-4718-8877-f55771ad2541_768x1376.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AZ2G!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8c1ce5-d2ed-4718-8877-f55771ad2541_768x1376.png 424w, https://substackcdn.com/image/fetch/$s_!AZ2G!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8c1ce5-d2ed-4718-8877-f55771ad2541_768x1376.png 848w, https://substackcdn.com/image/fetch/$s_!AZ2G!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8c1ce5-d2ed-4718-8877-f55771ad2541_768x1376.png 1272w, https://substackcdn.com/image/fetch/$s_!AZ2G!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8c1ce5-d2ed-4718-8877-f55771ad2541_768x1376.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AZ2G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8c1ce5-d2ed-4718-8877-f55771ad2541_768x1376.png" width="768" height="1376" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8a8c1ce5-d2ed-4718-8877-f55771ad2541_768x1376.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1376,&quot;width&quot;:768,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1776402,&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://tsvetantsvetanov.substack.com/i/193043228?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8c1ce5-d2ed-4718-8877-f55771ad2541_768x1376.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_!AZ2G!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8c1ce5-d2ed-4718-8877-f55771ad2541_768x1376.png 424w, https://substackcdn.com/image/fetch/$s_!AZ2G!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8c1ce5-d2ed-4718-8877-f55771ad2541_768x1376.png 848w, https://substackcdn.com/image/fetch/$s_!AZ2G!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8c1ce5-d2ed-4718-8877-f55771ad2541_768x1376.png 1272w, https://substackcdn.com/image/fetch/$s_!AZ2G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8a8c1ce5-d2ed-4718-8877-f55771ad2541_768x1376.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>You don&#8217;t have to reinvent your framework</h3><p>I see some folks building their skills, commands, agents and whatnot from the ground up. That&#8217;s fine as an experiment. If you have the time&#8212;definitely do it. But don&#8217;t get discouraged if you don&#8217;t. You don&#8217;t have to know all about skills, agents and all the other cutting edge harness developments. There are already pretty good frameworks you can use out of the box and be really productive. Keeping your focus on orchestrating the harness instances and thinking about the product, instead of caring about how a particular framework + harness pair performs.</p><h3>Quality is important</h3><p>When choosing a framework pick one that has built in quality controls. Especially ones that align with the eXtreme Programming techniques. Otherwise, I&#8217;m afraid you&#8217;ll end up in a pile of technical debt faster than you can imagine. As a bonus these practices shouldn&#8217;t be only encoded in skill files but actually enforced through something like <a href="https://tsvetantsvetanov.substack.com/p/making-agentic-flows-determinstic">nWave&#8217;s Deterministic Execution System</a>.</p><h3>YOLO mode, but don&#8217;t forget the sandbox</h3><p>If you want to be able to orchestrate multiple instances of Claude Code (or whatever harness) at once, you must use YOLO mode. Or <code>&#8212;dangerously-skip-permissions</code>. All else will drive you insane by having you constantly approve details. It&#8217;s like reviewing 100s of PRs per day. So, try to build a framework in which you have enough confidence that it&#8217;ll make the right decisions in terms of quality. And those decisions can be verified. Then run in YOLO mode. Don&#8217;t forget to sandbox it, however. There are already several proper sandboxing solutions out there. Recently I&#8217;ve been happy enough with Claude Code&#8217;s <code>sandbox</code> mode.</p><h3>Code reviews aren&#8217;t the way</h3><p>You basically cannot ensure quality manually for the amount of code the harness spits out. You should automate stuff. Rely on high quality tests, linters, architecture tests and all other kinds of verification systems you can implement and find. The only thing you have to review is the framework and the end result from a user standpoint. All else should be automated. And your framework should be reliable enough to create high quality software without constant oversight.</p><h3>Terminals + IDE</h3><p>The most effective way for me to work is to be mostly in the Terminal. Four terminals actually. Each terminal runs an agent in a sandboxed YOLO mode. Each terminal is either within the same project or in another project. I have an IDE open for some of the projects if I want to double check something. Maybe it&#8217;s just an old habit that I find hard to get rid off. My belief is that we&#8217;ll need an IDE less and less as we go.</p><h3>Team work limits the parallelisation</h3><p>Most days I run just one or two agents in parallel. In rare days I run all four. My days are occupied by talking with humans, understanding stuff and thinking while the agents chug away at code. I guess I&#8217;m in a bit different position as a tech lead. And a big chunk of my job is actually making sure we&#8217;re aligned as a team. If you&#8217;re a software engineer you might be able to regularly spin up 4 or more agents.</p><h3>The bottleneck is the discussion</h3><p>Agents optimise the flow after the productive discussion has happened. After you, as a team of humans, have decided what to work on and how it&#8217;s going to look like. Of course, you can shoot in the dark and implement stuff with your army of agents. See what sticks and iterate. But I kind of find it counterproductive to start working on something that isn&#8217;t clear enough in terms of an end goal.</p><h3>Refactoring is cheap</h3><p>Recently I refactored (or rewritten?) a system that has started to accumulate some slop along the way. At first I started by analysing what to refactor and thinking about how to split the tasks so other team mates can handle them. But in the process of analysis I realised that I can just spin up a couple of agents and leave them to it. All the identified opportunities for improvement were done within a day.</p><h3>Multiple agents means controlling conflicts</h3><p>The issue becomes merging work done in parallel. The same issue we have with humans. When I spin up several agents in the same repo I must create worktrees. But even if I do that, some agents mess things up. Or find it hard to integrate previously done work in the worktrees. It&#8217;s a tricky business. Sometimes it&#8217;s easier to just spin up agents serially instead of dealing with the merges.</p><h3>Conclusion</h3><p>There might be uber-productive folks that work for 12-15 hours a day spinning 10s of agents. But I think these are in the minority. And I&#8217;m not sure whether the end-result isn&#8217;t a lot of waste and a bit of value. Even if it isn&#8217;t, it doesn&#8217;t have to be your goal. As an ordinary engineer, you can easily be a lot more productive by just having the proper, simple harness + framework and learning how to orchestrate a few agents at once. In my experience, that&#8217;s an easy and down-to-earth thing to do. Which doesn&#8217;t leave you drained at the end of the day.</p><p>AI software engineering doesn&#8217;t have to be an impossible objective you have to achieve. It can be simple.</p>]]></content:encoded></item><item><title><![CDATA[Hey Agent! Test Drive!]]></title><description><![CDATA[Making agents actually do TDD without supervision]]></description><link>https://tsvetantsvetanov.substack.com/p/hey-agent-test-drive</link><guid isPermaLink="false">https://tsvetantsvetanov.substack.com/p/hey-agent-test-drive</guid><dc:creator><![CDATA[Tsvetan Tsvetanov]]></dc:creator><pubDate>Fri, 27 Mar 2026 09:11:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!0jAX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F143f83f1-9cf3-4741-b425-343f85b4fa0d_1376x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;m continuing my exploration of nWave&#8217;s Deterministic Execution System (DES). This time I&#8217;ll dive into a &#8220;simple&#8221; part of it. How it makes Claude Code follow test-driven development. I bet most of you who&#8217;ve actually tried thoroughly instructing an agent to follow a specific set of steps each and every time have struggled to enforce this. The beauty of nWave is that it solves this problem through its DES.</p><p>This is the 4th article in my series on nWave. Have a look at the other ones:</p><ol><li><p><a href="https://substack.com/@tsvetantsvetanov/p-189335266">First Steps Into nWave</a></p></li><li><p><a href="https://substack.com/@tsvetantsvetanov/p-190103240">Building a Bird Flocking Simulator with nWave</a></p></li><li><p><a href="https://substack.com/@tsvetantsvetanov/p-190809306">Making Agentic Flows Determinstic</a></p></li><li><p><a href="https://tsvetantsvetanov.substack.com/p/hey-agent-test-drive">Hey Agent! Test Drive!</a> - this one</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0jAX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F143f83f1-9cf3-4741-b425-343f85b4fa0d_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0jAX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F143f83f1-9cf3-4741-b425-343f85b4fa0d_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!0jAX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F143f83f1-9cf3-4741-b425-343f85b4fa0d_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!0jAX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F143f83f1-9cf3-4741-b425-343f85b4fa0d_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!0jAX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F143f83f1-9cf3-4741-b425-343f85b4fa0d_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0jAX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F143f83f1-9cf3-4741-b425-343f85b4fa0d_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/143f83f1-9cf3-4741-b425-343f85b4fa0d_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1730336,&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://tsvetantsvetanov.substack.com/i/192286597?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F143f83f1-9cf3-4741-b425-343f85b4fa0d_1376x768.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_!0jAX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F143f83f1-9cf3-4741-b425-343f85b4fa0d_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!0jAX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F143f83f1-9cf3-4741-b425-343f85b4fa0d_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!0jAX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F143f83f1-9cf3-4741-b425-343f85b4fa0d_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!0jAX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F143f83f1-9cf3-4741-b425-343f85b4fa0d_1376x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1>The Flow</h1><p>Everything begins with a step. A step is a discrete part of the implementation that will result in a fully passing test suite. And it&#8217;s specified within a <code>steps/XX-XX.json</code> file for the current feature you&#8217;d like to implement. This step contains the self-reporting log of the agent where it describes which phase of the TDD cycle it has completed.</p><p>After this file is created, a subagent starts following nWave&#8217;s TDD loop:</p><ul><li><p><code>PREPARE</code> - verify that the log is properly created and decide with which acceptance test to start</p></li><li><p><code>RED_ACCEPTANCE</code> - unskip the acceptance test and make sure it fails</p></li><li><p><code>RED_UNIT</code> - write failing unit tests</p></li><li><p><code>GREEN</code> - write the minimum amount of code to make them pass</p></li><li><p><code>COMMIT</code> - type check, lint, refactor, verify tests still pass and commit</p></li></ul><p>Each phase&#8217;s outcome is logged in the audit log. The agent self reports whether the step has been executed successfully through the DES CLI which updates the execution log. Before the next phase starts, the execution log is checked to make sure the agent has followed the steps as intended. The pre write handler also verifies that no source files are written during phases where tests are being written.</p><p>Another crucial thing is that at the end of the execution phase there&#8217;s the refactor phase. Which makes sure the agent reviews the code for refactoring opportunities and improves the design. This is crucial for maintainability of the software you&#8217;re building.</p><p>At the end of each <code>/nw-deliver</code> wave, the DES also does a review on testing antipatterns and does mutation testing. This enforces high quality tests that actually test the system.</p><h1>The Parts</h1><p>This flow relies on a few crucial mechanisms which we&#8217;re going to explore.</p><h2>Hooks</h2><p>Claude Code&#8217;s hooks are a critical component. This is a way to execute user code during different lifecycle events. The most important once for nWave&#8217;s TDD enforcement are:</p><ul><li><p><code>PreToolUse</code> - to validate whether all conditions have been met for the current task to start</p></li><li><p><code>SubagentStop</code> - to validate whether the subagent has properly updated the logs, changed expected files and committed properly. It also cleans up after the subagent</p></li></ul><h2>Execution Log</h2><p>The execution log is putting structure to the agent&#8217;s output. It provides a way for the scripts that implement DES to actually verify that what the agent has said has actually been done. If it weren&#8217;t for the execution log, DES would have to rely on natural language output which would be way more difficult to do. The execution log also provides an audit trail.</p><h2>Agent</h2><p>The agent is the doer. It tries to follow instructions to its best abilities based on training, prompts and context. Of course, the agent lies. So DES corrects it along the way until it produces what&#8217;s actually expected from the specification.</p><p>The strength of DES comes from the interception of the prompt for the subagent. Each subagent gets started with a very specific prompt that is blocked by the DES hook to ensure the subagent will follow the steps.</p><h1>Current Limitations and What&#8217;s Cooking</h1><p>The main current limitation of DES is that it relies on the agent&#8217;s self-reporting in the execution log. And verifies against this. Despite this it&#8217;s doing a marvellous job in making agents follow instructions and implement what&#8217;s required by following high quality software engineering practices.</p><p>However, I have a hint that a new version of nWave is on the way. Which will provide a way to enforce any workflow you have. It&#8217;ll be zero trust and dynamic. Meaning it won&#8217;t trust the agent but the workflow rules you&#8217;ve encoded into the system.</p><p>I&#8217;m looking forward to it!</p>]]></content:encoded></item><item><title><![CDATA[Making Agentic Flows Determinstic]]></title><description><![CDATA[An Introduction to nWave's Deterministic Execution System]]></description><link>https://tsvetantsvetanov.substack.com/p/making-agentic-flows-determinstic</link><guid isPermaLink="false">https://tsvetantsvetanov.substack.com/p/making-agentic-flows-determinstic</guid><dc:creator><![CDATA[Tsvetan Tsvetanov]]></dc:creator><pubDate>Fri, 20 Mar 2026 08:10:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!r1_U!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f35389-4564-4d65-a741-e9f27a5044c2_768x1376.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I have a lot of work recently so I haven&#8217;t been able to find ample time to write. So this will probably a short post hinting at the power of nWave. And trying to give a brief overview of their deterministic execution system. The engine that drives 50% of this framework&#8217;s reliability.</p><p>This is the 3rd article in my series on nWave. Have a look at the other ones:</p><ol><li><p><a href="https://substack.com/@tsvetantsvetanov/p-189335266">First Steps Into nWave</a></p></li><li><p><a href="https://substack.com/@tsvetantsvetanov/p-190103240">Building a Bird Flocking Simulator with nWave</a></p></li><li><p><a href="https://substack.com/@tsvetantsvetanov/p-190809306">Making Agentic Flows Determinstic</a> - this one</p></li><li><p><a href="https://tsvetantsvetanov.substack.com/p/hey-agent-test-drive">Hey Agent! Test Drive!</a></p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!r1_U!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f35389-4564-4d65-a741-e9f27a5044c2_768x1376.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!r1_U!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f35389-4564-4d65-a741-e9f27a5044c2_768x1376.png 424w, https://substackcdn.com/image/fetch/$s_!r1_U!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f35389-4564-4d65-a741-e9f27a5044c2_768x1376.png 848w, https://substackcdn.com/image/fetch/$s_!r1_U!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f35389-4564-4d65-a741-e9f27a5044c2_768x1376.png 1272w, https://substackcdn.com/image/fetch/$s_!r1_U!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f35389-4564-4d65-a741-e9f27a5044c2_768x1376.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!r1_U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f35389-4564-4d65-a741-e9f27a5044c2_768x1376.png" width="768" height="1376" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/20f35389-4564-4d65-a741-e9f27a5044c2_768x1376.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1376,&quot;width&quot;:768,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1693868,&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://tsvetantsvetanov.substack.com/i/190809306?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f35389-4564-4d65-a741-e9f27a5044c2_768x1376.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_!r1_U!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f35389-4564-4d65-a741-e9f27a5044c2_768x1376.png 424w, https://substackcdn.com/image/fetch/$s_!r1_U!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f35389-4564-4d65-a741-e9f27a5044c2_768x1376.png 848w, https://substackcdn.com/image/fetch/$s_!r1_U!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f35389-4564-4d65-a741-e9f27a5044c2_768x1376.png 1272w, https://substackcdn.com/image/fetch/$s_!r1_U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f35389-4564-4d65-a741-e9f27a5044c2_768x1376.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>The Key Idea</h3><p>What if we could solve the problem of context drift?</p><p>Or more specifically that when AI is left unsupervised skips phases, fabricates results, and bypasses discipline.</p><p>By intercepting Claude Code&#8217;s hook lifecycle events, the deterministic execution system (DES) verifies that each step of a plan is followed to the last detail. And it does it on two fronts:</p><ol><li><p>To ensure the specification is translated into a verifiable plan</p></li><li><p>To ensure that the specification is delivered by strictly following double-loop TDD</p></li></ol><h3>Ensuring Specification Is Followed</h3><p>nWave guides the developer (and vice versa) through several distinct waves. For greenfield work these are:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">(discover) -&gt; discuss -&gt; design -&gt; distill -&gt; (devops) -&gt; deliver</code></pre></div><p>Each phase after the <code>discuss</code> wave creates verifiable artefacts. Acceptance tests, roadmap encoded in YAML, strict rules on step naming. Each of these artefacts should follow a specific schema that enables the DES to verify that the implementation:</p><ol><li><p>Does each step one after the other</p></li><li><p>Does exactly what&#8217;s required of each step</p></li><li><p>Provides a business oriented test harness to verify the implementation</p></li></ol><h3>Ensuring Double Loop TDD Is Followed</h3><p> Later on, during the <code>deliver</code> wave, DES makes sure that:</p><ol><li><p>Acceptance tests are tackled one by one</p></li><li><p>Each feature described by an acceptance test is implemented by following strict TDD</p></li><li><p>The TDD loop <strong>always</strong> goes through</p><ol><li><p>Write a single failing test</p></li><li><p>Make it pass</p></li><li><p>Refactor</p></li></ol></li></ol><h3>What Does This Mean for Agentic Engineering</h3><p>This is just touching the surface on DES. But it&#8217;s the most powerful concept. We finally have a way to enforce our best practices. And are only limited by the quality of our specification.</p>]]></content:encoded></item><item><title><![CDATA[Building a Bird Flocking Simulator with nWave]]></title><description><![CDATA[This week I wanted to show nWave to a friend of mine.]]></description><link>https://tsvetantsvetanov.substack.com/p/building-a-bird-flocking-simulator</link><guid isPermaLink="false">https://tsvetantsvetanov.substack.com/p/building-a-bird-flocking-simulator</guid><dc:creator><![CDATA[Tsvetan Tsvetanov]]></dc:creator><pubDate>Fri, 06 Mar 2026 16:34:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!a39U!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15eff37f-33f7-4e7d-8c14-9cb4501f6f76_3024x1546.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This week I wanted to show nWave to a friend of mine. He was getting into working with agents for software development and was curious to understand my flow. We sat down and decided to implement a bird flocking simulator. It was a fairly complicated task with a known solution. The goal wasn&#8217;t to innovate. It was to show the nWave greenfield workflow and see whether this framework is capable of creating an end-to-end solution to a problem that runs on the first try. Just for the fun of it. I forgot to save all the Claude Code conversations but will recreated them to my best abilities based on the logs I have.</p><p>This is the 2nd article in my series on nWave. Have a look at the other ones:</p><ol><li><p><a href="https://substack.com/@tsvetantsvetanov/p-189335266">First Steps Into nWave</a></p></li><li><p><a href="https://substack.com/@tsvetantsvetanov/p-190103240">Building a Bird Flocking Simulator with nWave</a> - this one</p></li><li><p><a href="https://substack.com/@tsvetantsvetanov/p-190809306">Making Agentic Flows Determinstic</a></p></li><li><p><a href="https://tsvetantsvetanov.substack.com/p/hey-agent-test-drive">Hey Agent! Test Drive!</a></p></li></ol><h3>Everything Starts With a Discussion</h3><p>First, we sat down together in front of the same computer. We were pairing. He knew what he wanted to see. I knew how to use the framework and what I wanted to show. So we started with the discuss wave which was something along the lines of:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">/nw:discuss I want to build a web-based 3D bird flocking simulator.</code></pre></div><p>This kicked off the product owner agent Luna which asked a few questions (removed some parts for brevity):</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">What type of feature is this 3D bird flocking simulator?

&gt; 1. User-facing (Recommended)
  2. Backend/API
  3. Cross-cutting
  4. Other</code></pre></div><p>I chose user-facing as we wanted a UI thing. However, nWave is fully capable of full stack work and infrastructure.</p><p>Then it asked for whether it should start with a walking skeleton to validate the architecture end-to-end:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">Should we start with a walking skeleton to validate the architecture end-to-end?

&gt; 1. Yes (Recommended)
  2. Depends
  3. No</code></pre></div><p>The &#8220;Depends&#8221; answer might be chosen when you already have an existing setup and want to adapt the new solution to it. &#8220;No&#8221; is for when you&#8217;re confident that the architecture will work on the first try. All in all, nWave tries to minimise the risk of failure during implementation by following proven practices.</p><p>After we decide on the walking skeleton we should consider the UI from a user perspective:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">How deep should the UX research and journey mapping be?

&gt; 1. Ligthweight
  2. Comprehensive (Recommended)
  3. Deep-dive</code></pre></div><p>This provides a thorough foundation for UX choices so our application is not only sound from an engineering perspective but is also actually delivering business value to our customers in a delightful way. I choose the second option which was recommended. Then the agent will ask for more clarifying questions that are related to the functionality. After you answer all of them, nWave proceeds with creating the proper foundation of specifications which it will deterministically follow throughout the implementation because of it&#8217;s Deterministic Execution System (which I&#8217;ll write about in a follow-up post).</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">Luna has started the DISCUSS wave discovery process. She's asking comprehensive
questions to understand your vision for the 3D bird flocking simulator before
creating any journey maps or requirements.

Note: Luna is emphasizing that she's not producing mockups or artifacts yet - she
needs to fully understand your mental model first through these discovery questions.
The more detail you provide, the better she can design the UX journey and craft
requirements that match your vision.

Please answer Luna's questions about:
- Core vision: Educational? Entertainment? Research tool?
- Target audience: Who will use this?
- Emotional journey: What should users feel in the first 10 seconds? First minute?
- Interaction model: Observation only? Parameter tweaking? Full sandbox?
- Visual style: Realistic? Abstract? Minimalist?
- Performance targets: How many birds? What devices?
- Features: What excites you most beyond basic flocking?

Take your time answering - this discovery phase sets the foundation for the entire
project. Luna will use your answers to create visual journey maps, YAML schemas,
Gherkin scenarios, and ultimately user stories with acceptance criteria.</code></pre></div><p>Based on the answers I provided, it created a bunch of files for initial review. You can see the result in <a href="https://github.com/emdeha/flocking-birds-simulator/tree/main/docs/requirements">the requirements docs</a>. These are meant for review by the engineer to make sure that what they want is properly captured within the specifications. Usually I review them thoroughly before proceeding to the next wave. But in that case I just moved forward.</p><h3>The Gathered Requirements then Undergo Technical Design</h3><p>Based on all of this data, the agent goes through the Design wave. This basically takes all of the input during the requirements gathering phase and creates thorough technical specifications.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">/nw:design</code></pre></div><p>You can either pass an existing feature name as a parameter here or just let it proceed from the current context. This kicks of the solution architect agent Morgan which will ask you a bunch of questions so it can do proper technical design.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">Discovery Questions from Morgan

Please answer these questions to guide the architecture design:

Performance &amp; Compatibility

1. Degradation strategy: If hardware can't sustain 1000 birds at 60fps,
should the system auto-optimize (reduce bird count), reduce visual fidelity
(LOD), hard cap at limits, or let it run slow with warnings?
2. Browser compatibility: Mac M-series only, or all modern desktop browsers?
Mobile support needed now or future?

Development Approach

3. Maintainability: One-time build, actively developed with new features,
or learning project optimizing for code clarity?
4. Testability: What level of automated testing? Unit tests for flocking
logic? Integration tests? Visual regression? Or manual testing acceptable?
5. Extensibility: Beyond obstacles/predators, plans for new behaviors,
plugin system, user-contributed presets, or 3rd-party integrations?
6. Time-to-market: MVP in weeks, polished product in months, or flexible
academic timeline?

Team &amp; Technical Context

7. Team structure: Solo developer or small team? If team, how do they split work?
8. Technical experience: Familiar with 3D engines (Three.js, Babylon.js),
WebGL/WebGPU, TypeScript strict mode, TDD workflows?
9. Timeline: Target dates for Walking Skeleton (Feature 0), MVP (Features 0-3),
and full release?

Operations &amp; Deployment

10. Operational requirements: CI/CD needed? Monitoring/error tracking? Analytics?
Or simple static hosting?
11. Deployment target: CDN/static hosting (Vercel, Netlify), self-hosted, or offline
capability needed?
12. Budget/licensing: Open source only, commercial libraries acceptable, hosting budget?

Your answers will help Morgan recommend architecture that fits your actual business
drivers.</code></pre></div><p>Some of these questions were not so relevant. Like &#8220;timeline&#8221;? I expect it to be done in a few hours, why ask for that at all. But as a software engineer I&#8217;m used to disregarding timelines. That&#8217;s what I answered:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">1. No need to care for that at the moment;
2. Chrome only;
3. Highly maintainable;
4. Highly automated testing;
5. No 3rd party extensibility for now;
6. MVP but high quality;
7. Solo dev;
8. Highly experienced;
9. Right now;
10. No deployment for now;
11. No deployment;
12. Open source</code></pre></div><p>And here&#8217;s one of the things I really like about this approach. It makes you think. You have to make sure you know what you feed it and it&#8217;s what&#8217;s actually needed. The bigger the scope, the more thinking you have to put in and the more risk exposure you create. And you&#8217;ll see that reflected straight away in your cognitive abilities. Which might be a good guide for what batch size you should be working with. The design results were reflected inside <a href="https://github.com/emdeha/flocking-birds-simulator/tree/main/docs/design">the architecture design</a> directory.</p><h3>The Technical Design is Distilled Into Acceptance Tests</h3><p>After all of this we start setting up our executable foundation for making sure what we want to implement is what&#8217;s going to be implemented. This will be done through acceptance tests implemented during the Distill wave and skipped initially. The Deliver agent will enable them one by one and implement them via Outside-In TDD.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">/nw:distill</code></pre></div><p>This kicks off the process and as always the agent asks you a few clarifying questions beforehand.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">What is the scope of this feature?

&gt; 1. Core feature (Recommended)
  2. Extension
  3. Bug fix

Which test framework should be used for acceptance tests?

&gt; 1. Vitest + Playwright (Recommended)
  2. Cucumber.js
  3. pytest-bdd
  4. Jest + Testing Library

How should integration tests connect to services?

&gt; 1. Test environment (Recommended)
  2. Mock Three.js rendering
  3. Real browser with visual regression

Should acceptance tests cover infrastructure concerns?

&gt; 1. No (Recommended)
  2. Yes</code></pre></div><p>We answered with the recommended defaults as they were quite on point. Which resulted in invoking the acceptance designer agent Quinn. After a bit of token crunching, Quinn created <a href="https://github.com/emdeha/flocking-birds-simulator/tree/main/tests/acceptance">the following acceptance tests</a> (which are now unskipped). When I reviewed them after the whole thing was implemented I saw that some of them remained <code>skipped</code> for some reason but I didn&#8217;t get to fixing that. Probably a reviewer agent would&#8217;ve caught this. And I guess the Deterministic Execution Engine can easily be upgraded to prevent such tests from staying in the code. These should either be made pass or deleted.</p><p>One thing I loved about the process was this summary.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">&#127919; Key Principles Validated

1. Hexagonal Boundary Enforcement &#9989;

Tests exercise driving ports only (ISimulationEngine, IRenderEngine, IUIController) -
no internal implementation details

2. Business Language Purity &#9989;

Zero technical jargon in Given-When-Then steps - all scenarios readable by non-technical
stakeholders

3. Walking Skeleton First &#9989;

Feature 0 (3 active scenarios) must pass before implementing US-001 through US-003

4. Performance Assertions &#9989;

Every scenario validates 60fps + &lt;16ms render time</code></pre></div><h3>Then the Whole Solution is Delivered</h3><p>What remains is the Deliver phase which is invoked through <code>/nw:deliver</code>. During it the software crafter agent Crafty delivers the whole solution following Outside-In TDD, Hexagonal Architecture, proper refactoring principles. The Deterministic Execution System makes sure that the steps outlined in the previous phases are followed exactly as planned. It also makes sure TDD is always followed strictly. You&#8217;ll see the end solution shortly, but before that a small comment on the process.</p><h3>Using the Right Process</h3><p>The flow I described above is for greenfield projects. The whole thing took about 2-3 hours where our input was only required in the initial specification and review. It&#8217;s about 30 minutes of human time. For production critical software this might jump a bit as one has to make sure that the specs are exactly what&#8217;s needed. nWave ensures a spec would be followed to the letter to a great extend. But nWave can&#8217;t prevent a spec from being wrong.</p><p>For other cases, you can use a simpler process. A few ideas:</p><ol><li><p>Use <code>/nw:root-why</code> followed by <code>/nw:execute</code> to dive deep into the root cause behind a bug;</p></li><li><p>Use <code>/nw:research</code> to understand part of the codebase, a feature, a technology or an idea;</p></li><li><p>Use <code>/nw:mikado</code> followed by <code>/nw:refactor</code> to do a safe refactoring;</p></li><li><p>Use <code>/nw:deliver</code> for brownfield projects where you know exactly what has to be accomplished.</p></li></ol><p>All in all, the process can be tailored to your needs. The key technological principles for high quality software are baked in. And in my opinion they shouldn&#8217;t be negotiable (unless we uncover better ways of working). The Deterministic Execution System also ensures that the agents will do what they&#8217;re asked to do a great extent. However, you can mix and match all else and see what works best for your case.</p><h3>Conclusion</h3><p>The end result looks like this.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!a39U!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15eff37f-33f7-4e7d-8c14-9cb4501f6f76_3024x1546.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!a39U!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15eff37f-33f7-4e7d-8c14-9cb4501f6f76_3024x1546.png 424w, https://substackcdn.com/image/fetch/$s_!a39U!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15eff37f-33f7-4e7d-8c14-9cb4501f6f76_3024x1546.png 848w, https://substackcdn.com/image/fetch/$s_!a39U!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15eff37f-33f7-4e7d-8c14-9cb4501f6f76_3024x1546.png 1272w, https://substackcdn.com/image/fetch/$s_!a39U!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15eff37f-33f7-4e7d-8c14-9cb4501f6f76_3024x1546.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!a39U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15eff37f-33f7-4e7d-8c14-9cb4501f6f76_3024x1546.png" width="1456" height="744" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/15eff37f-33f7-4e7d-8c14-9cb4501f6f76_3024x1546.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:744,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:454316,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://tsvetantsvetanov.substack.com/i/190103240?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15eff37f-33f7-4e7d-8c14-9cb4501f6f76_3024x1546.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_!a39U!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15eff37f-33f7-4e7d-8c14-9cb4501f6f76_3024x1546.png 424w, https://substackcdn.com/image/fetch/$s_!a39U!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15eff37f-33f7-4e7d-8c14-9cb4501f6f76_3024x1546.png 848w, https://substackcdn.com/image/fetch/$s_!a39U!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15eff37f-33f7-4e7d-8c14-9cb4501f6f76_3024x1546.png 1272w, https://substackcdn.com/image/fetch/$s_!a39U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F15eff37f-33f7-4e7d-8c14-9cb4501f6f76_3024x1546.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>All tests pass. No linter or typescript errors. Exactly what I needed based on the requirements. The code is well factored, easy to understand, navigate and maintain. You can inspect it for yourself here <a href="https://github.com/emdeha/flocking-birds-simulator">https://github.com/emdeha/flocking-birds-simulator</a>.</p><p>I&#8217;m already expecting a possible protest though. And I&#8217;m kind of thinking this myself. Isn&#8217;t this waterfall? We specified an application to the utmost detail. A bird flocking simulator like this might take 1-2 weeks for an engineer to implement. It&#8217;s thousands of lines of code. A really big batch. We needed a lot of time before getting feedback on our specification. Frankly, I don&#8217;t have the answer here. I guess people way more experienced in software delivery than me would have it. But my initial thoughts are: tailor it to your process and experiment. For production systems I won&#8217;t go with implementing such a big thing. I&#8217;ll probably split things into smaller steps. Especially right now where I&#8217;m still understanding the framework and it&#8217;s limitations. But if I gain confidence and I see more and more that it delivers what I want it to deliver, I might increase the steps and see what happens then. Probably it&#8217;s just a matter of the reality inside your team. Another interesting perspective on that is that the batch size might be big in terms of lines of code and functionality. But if we take a button on our screen as an example and decompose it down to assembly, won&#8217;t it contain thousands of lines of assembly code as well?</p><p>The other interesting question is: will this allow me not to care about the code? Again, I think it&#8217;s a matter of experience. Play it safe at first and review things. See whether it actually produces code up to your standards. See when it has failed to do so. Or has delivered a bug or something that&#8217;s not how you want it to be. Improve the system until you reach a moment where you can trust it. Another point is that reading the code isn&#8217;t necessarily the best way to understand the system. What if you could generate views of the system that help you grasp it way better than that? Basically what <a href="https://moldabledevelopment.com/">Moldable Development</a> advocates for.</p><p>Anyway, that&#8217;s all I have for now. I&#8217;m definitely seeing a lot of value in nWave and plan to continue exploring it in the next couple of weeks. More articles will come. Next week I plan to finally dive into the Deterministic Execution System and see what it&#8217;s made of. And what it can do.</p>]]></content:encoded></item><item><title><![CDATA[First Steps into nWave]]></title><description><![CDATA[I first heard about nWave from a webinar hosted by its creators.]]></description><link>https://tsvetantsvetanov.substack.com/p/first-steps-into-nwave</link><guid isPermaLink="false">https://tsvetantsvetanov.substack.com/p/first-steps-into-nwave</guid><dc:creator><![CDATA[Tsvetan Tsvetanov]]></dc:creator><pubDate>Fri, 27 Feb 2026 08:26:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!HXTL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5523a0d-13fd-42ec-9b25-b172914c51b1_768x1051.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I first heard about <a href="https://nwave.ai/">nWave</a> from <a href="https://www.youtube.com/watch?v=2HfhJ0d5uv0">a webinar</a> hosted by its creators. What impressed me at first was the background of the people who talked about it. They were teaching eXtreme Programming practices. Call it an appeal to authority but that&#8217;s usually my first filter to decide whether something is worth diving deeper into or not. However, nWave also embodied and built upon practices that I&#8217;ve found valuable for software engineering. Practices that I&#8217;ve applied to AI augmented coding for the past 3-4 months and which led me to be productive without sacrificing quality. These practices are nothing new. They worked really well 20 years ago. Now they&#8217;re &#8220;just&#8221; amplified by AI.</p><p>Test-driven development. Working in small steps. Modular architecture.</p><p>However, nWave seems to be waaay more than that. In today&#8217;s article I&#8217;m going to share my first learnings and what I managed to do.</p><p>This is the 1st article in my series on nWave. Have a look at the other ones:</p><ol><li><p><a href="https://substack.com/@tsvetantsvetanov/p-189335266">First Steps Into nWave</a> - this one</p></li><li><p><a href="https://substack.com/@tsvetantsvetanov/p-190103240">Building a Bird Flocking Simulator with nWave</a></p></li><li><p><a href="https://substack.com/@tsvetantsvetanov/p-190809306">Making Agentic Flows Determinstic</a></p></li><li><p><a href="https://tsvetantsvetanov.substack.com/p/hey-agent-test-drive">Hey Agent! Test Drive!</a></p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HXTL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5523a0d-13fd-42ec-9b25-b172914c51b1_768x1051.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HXTL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5523a0d-13fd-42ec-9b25-b172914c51b1_768x1051.png 424w, https://substackcdn.com/image/fetch/$s_!HXTL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5523a0d-13fd-42ec-9b25-b172914c51b1_768x1051.png 848w, https://substackcdn.com/image/fetch/$s_!HXTL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5523a0d-13fd-42ec-9b25-b172914c51b1_768x1051.png 1272w, https://substackcdn.com/image/fetch/$s_!HXTL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5523a0d-13fd-42ec-9b25-b172914c51b1_768x1051.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HXTL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5523a0d-13fd-42ec-9b25-b172914c51b1_768x1051.png" width="768" height="1051" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f5523a0d-13fd-42ec-9b25-b172914c51b1_768x1051.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1051,&quot;width&quot;:768,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1554953,&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://tsvetantsvetanov.substack.com/i/189335266?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc64ccd5e-a529-4273-b18b-e7502bf69609_768x1376.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_!HXTL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5523a0d-13fd-42ec-9b25-b172914c51b1_768x1051.png 424w, https://substackcdn.com/image/fetch/$s_!HXTL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5523a0d-13fd-42ec-9b25-b172914c51b1_768x1051.png 848w, https://substackcdn.com/image/fetch/$s_!HXTL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5523a0d-13fd-42ec-9b25-b172914c51b1_768x1051.png 1272w, https://substackcdn.com/image/fetch/$s_!HXTL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5523a0d-13fd-42ec-9b25-b172914c51b1_768x1051.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>What is nWave, really?</h3><p>At this point in time I understand it as a system for AI-augmentation built upon solid research in behavioural science and software engineering practices. It guides you from an idea to a high quality implementation in waves. The most common set of waves being:</p><ul><li><p>Discuss <code>/nw:discuss</code> where you gather requirements</p></li><li><p>Design <code>/nw:design</code> where you determine the software design necessary to implement them</p></li><li><p>Distill <code>/nw:distill</code> where you create a proper acceptance test harness</p></li><li><p>Deliver <code>/nw:deliver</code> where you implement the feature using test-driven development</p></li></ul><p>After each step you have a checkpoint. After the discussion happens, you can review the exact product requirements and make sure all is as you imagine it. Then the design will build upon this and generate an architecture. You review the architecture and make sure it&#8217;s what you need and it&#8217;s sound. Then the distill phase will build upon it by creating proper acceptance tests. You review these&#8212;if they&#8217;re good these are the actual specification that defines your feature in a way that&#8217;s both business-centric and automatically verifiable. Then you &#8220;deliver&#8221;. And what I loved about the last part (quoting <a href="https://github.com/nWave-ai/nWave/blob/main/docs/guides/tutorial-first-feature.md#step-4-deliver-with-tdd">their docs</a>): &#8220;Run the tests yourself to confirm&#8221;.</p><p>I loved it because the folks behind nWave understand the futility of implementation reviews. Eyeing the implementation, especially now that AI generates it, won&#8217;t help you find issues&#8212;be it bugs or design flaws. Even more, you just won&#8217;t be able to handle the sheer amount of code you have to review. Implementation issues should be caught by automations: tests, linters, mutations. Not by manual labor.</p><h3>Deterministic Execution System</h3><p>This framework probably wouldn&#8217;t be as valuable if it weren&#8217;t for its Deterministic Execution System. Or DES for short. I&#8217;m still figuring out the details. It&#8217;s implemented in <a href="https://github.com/nWave-ai/nWave/tree/3b9959b58349f8cb278180464685a297f3c6b77f/src/des">this set of source files</a>. But as far as I understand it, this system ensures each wave does what we want it to do. It makes sure the TDD process is followed properly each and every time. It detects abandoned phases and suggests recovery. It analyses the agent&#8217;s logs and detects fabrications in them. It validates whether the roadmap artefact is structurally and semantically valid.</p><p>Basically, it&#8217;s the way to enforce determinism in a hallucination-prone system. And it&#8217;s something that I&#8217;ve been convinced for a while that each system we develop should have. However, my thoughts were kind of primitive. Let the team evolve their deterministic harness over time by adding more and more scripts and verifications that encode rules that must be followed.</p><h3>First Use Cases</h3><p>I&#8217;ve been using nWave for the past couple of days. <a href="https://www.linkedin.com/in/michelebrissoni/">Michele</a> and <a href="https://www.linkedin.com/in/alessandro-di-gioia/">Alessandro</a> were really kind to connect with me on LinkedIn so I can share my excitement with them. My first use cases were a bit rough. I was still learning how to ride the waves.</p><p>A first hurdle for me was to find a way to &#8220;save&#8221; my current Claude configuration. For that I used <a href="https://github.com/neiii/bridle">bridle</a>. It basically lets you have different Claude Code configs and switch between them. Like a package manager.</p><p>The first thing I used nWave was for Terraform. I had a fairly big repo of Terraform configurations which were meant for a specific AWS account. Now, I wanted to deploy the same system to a different AWS account. But things weren&#8217;t parameterised well. First I tried with my regular Claude Code setup. It did output a monstrous refactoring plan that got me scared. I had to migrate the system in a day. This plan seemed like something I&#8217;ll debug and fix for a week. Running things through nWave&#8217;s loop generated a much saner result. Something that was done in minutes and was actually what I expected. It miss some details though. During the process of applying the Terraform I found out that some important configuration was still hard-coded and wasn&#8217;t provided as tfvars. But for now I assume that&#8217;s an error on my part because I got confused at one moment and stopped following the phases.</p><p>The next thing was for a small feature. I had to provide an API endpoint for setting environment variables in <a href="https://coolify.io/">Coolify</a> programmatically from my application which used it as a control plane. It designed quite a good API for my needs. Where people could update environment variables in bulk. I deployed it to production as soon as all the phases passed. Then did a sanity check by hand. Things worked on the first time.</p><p>The other thing I used it was for a bug. There I just relied on the <a href="https://coolify.io/">&#8220;Improve Existing System&#8221; job</a>. I forgot the details but again it worked quite well. And in general I find their <a href="https://github.com/nWave-ai/nWave/blob/main/docs/guides/jobs-to-be-done-guide.m">jobs-to-be-done guide</a> really useful.</p><p>Now, I&#8217;ll be utilising it for a quite big feature which I want to deliver end-to-end. Not in small steps. It basically requires some rearchitecture of an existing system where:</p><ol><li><p>It should call a 3rd party database</p></li><li><p>Merge data from its own API and a 3rd party API</p></li><li><p>Have a mix of long-polling and webhook events that update specific objects in the UI</p></li></ol><p>I just went through the Design phase. After I review it, I&#8217;ll continue. And most probably share how things went in my next article. Frankly, I expect things to work on the first try. It&#8217;s pretty ambitious but we should expect nothing less from AI systems for software engineering. As long as we instruct them properly.</p><h3>Conclusion</h3><p>So far I&#8217;m still pretty excited for nWave. I see the value. What remains is to prove it via experiments. I&#8217;m also pretty keen on understanding the details. Because I suspect that the methods used for nWave are also applicable for developing AI systems at large. My next articles will most probably be dedicated to that.</p>]]></content:encoded></item><item><title><![CDATA[AI Builder Brief #16]]></title><description><![CDATA[This is the last edition of the builder brief.]]></description><link>https://tsvetantsvetanov.substack.com/p/ai-builder-brief-16</link><guid isPermaLink="false">https://tsvetantsvetanov.substack.com/p/ai-builder-brief-16</guid><dc:creator><![CDATA[Tsvetan Tsvetanov]]></dc:creator><pubDate>Wed, 25 Feb 2026 16:55:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!pWeH!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7467fa6-7d32-4f0b-801c-a09bf896b92e_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This is the last edition of the builder brief. Keeping up with all of the things happening in the AI-Native Engineering world is quite taxing. And few things are worth the diving into that I need to do so I can write a good summary. I&#8217;d like to focus my time on deeper things and just keep the Friday opinion pieces running.</p><div><hr></div><p><a href="https://www.linkedin.com/pulse/stop-vibe-coding-blind-start-using-test-driven-andre-kaminski-cym6c/">Stop vibe coding blind. Start using Test Driven Navigation</a></p><p><strong>How is it useful?</strong> Provides an error-prone method to using AI to write code for us.</p><p><strong>Commentary: </strong>I&#8217;ve known this method for quite a while and it&#8217;s at the foundation of how I use AI to develop software. However, I see with enough experience folks can start going beyond it. Mutation testing can add a lot to the mix as the agent can make the tests pass by implementing stuff that the tests didn&#8217;t ask for.</p><p><a href="https://tessl.io/blog/context-development-lifecycle-better-context-for-ai-coding-agents/">The Context Development Lifecycle: Optimizing Context for AI Coding Agents</a></p><p><strong>How is it useful? </strong>A good read on the importance of managing context for agents.</p><p><strong>Commentary: </strong>I really enjoyed the idea of using TDD for our context. Before we codify rules we should think of how to evaluate them and store those evaluations. This will make sure that when we move to a different model, the coding harness will continue behaving as expected. Personally, I&#8217;ll start thinking more about this and figuring out how to provide proper project context for the things I&#8217;m working on.</p><p><a href="https://www.linkedin.com/pulse/how-i-came-understand-100x-claim-brandon-casci-mjtbe/">How I Came to Understand the 100x Claim</a></p><p><strong>How is it useful? </strong>Showcases a person&#8217;s learning journey on how to use agents effectively for coding.</p><p><strong>Commentary: </strong>I&#8217;m quite aligned with his approach. Looking forward to the day where I&#8217;ll finally get to implementing my own orchestration framework that fits my needs.</p>]]></content:encoded></item><item><title><![CDATA[Small Teams Guiding Agents]]></title><description><![CDATA[There&#8217;s an image circulating the Internet recently.]]></description><link>https://tsvetantsvetanov.substack.com/p/small-teams-guiding-agents</link><guid isPermaLink="false">https://tsvetantsvetanov.substack.com/p/small-teams-guiding-agents</guid><dc:creator><![CDATA[Tsvetan Tsvetanov]]></dc:creator><pubDate>Fri, 20 Feb 2026 08:11:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!uasC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed9005c1-6176-4416-bfce-cb714613dde0_800x450.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>There&#8217;s an image circulating the Internet recently. It shows how 2-pizza teams are going to be replaced with 2 engineers with 1 business person and AI.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uasC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed9005c1-6176-4416-bfce-cb714613dde0_800x450.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uasC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed9005c1-6176-4416-bfce-cb714613dde0_800x450.jpeg 424w, https://substackcdn.com/image/fetch/$s_!uasC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed9005c1-6176-4416-bfce-cb714613dde0_800x450.jpeg 848w, https://substackcdn.com/image/fetch/$s_!uasC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed9005c1-6176-4416-bfce-cb714613dde0_800x450.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!uasC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed9005c1-6176-4416-bfce-cb714613dde0_800x450.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uasC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed9005c1-6176-4416-bfce-cb714613dde0_800x450.jpeg" width="800" height="450" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ed9005c1-6176-4416-bfce-cb714613dde0_800x450.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:450,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:26539,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://tsvetantsvetanov.substack.com/i/188588609?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed9005c1-6176-4416-bfce-cb714613dde0_800x450.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uasC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed9005c1-6176-4416-bfce-cb714613dde0_800x450.jpeg 424w, https://substackcdn.com/image/fetch/$s_!uasC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed9005c1-6176-4416-bfce-cb714613dde0_800x450.jpeg 848w, https://substackcdn.com/image/fetch/$s_!uasC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed9005c1-6176-4416-bfce-cb714613dde0_800x450.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!uasC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed9005c1-6176-4416-bfce-cb714613dde0_800x450.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This is a compelling vision. What it evokes in me is nimbleness, speed, quick exchange of ideas and results. I can&#8217;t lie that I like it. Imagine sitting in front of your computer in the morning entirely focused on implementing the next feature the business wants and shipping it to users in the manner of a few hours. No useless meetings, no distractions with Jira workflows, no waiting for someone to review your 1000-line pull request for the fifth time in a week. Maybe both devs and the business user pair the whole time. So you have the social interactions you were craving so much since COVID. And whenever you&#8217;re stuck you just prompt the AI better and it helps you move forward. You establish proper automated checks and rules for the AI. You provide a thorough subagent setup and written instructions. You&#8217;re blazing through your backlog. Before you know it, your team has made the next OpenClaw exit.</p><p>Half of this fantasy has nothing to do with AI.</p><p><strong>High performing teams collaborate first</strong>. They&#8217;re not focused on whether a certain individual performs better than the rest. They&#8217;re focused on how the team can operate at 10x or 100x the pace of a team of 10x individuals. Humans are cooperative species. Team performance can&#8217;t be reduced to the sum of individual performance. Having a few people who have organised over a process that facilitates collaboration will always result in better performance. Sadly, most engineers just live in teams that have no say in how they should work. Which leads to the false presumption that having fewer humans will just make things easier.</p><p><strong>High performing teams are product minded. </strong>There are smart enough engineers who can learn and understand the user. However, our industry still assumes that an engineering team needs someone &#8220;business minded&#8221; to tell them what the user wants. Yes, there are the programmers who just want to fiddle with their technology. But you hardly want to work with such people anyway.</p><p><strong>High performing teams take quality to heart. </strong>They don&#8217;t just sign off something to a QA who gives feedback and then push it over to a release manager. They build in quality and know that each quality metric should be automatically verifiable. They create proper behavior-oriented tests, use linters, security analysis tools and other means of automated verification. They don&#8217;t trust that the human-review process will catch the most important stuff. They try to automate this out as much as possible. With AI this skill becomes just more important. You can no longer review the code. You must enforce guardrails that come in effect as the code is being written. They deploy early and often to keep batches small and limit the blast radius.</p><h3>Few vs. Several</h3><p>Given the above, I think the few people argument is lucrative as it&#8217;s easier to keep these practices in a small group of people. You find it easy to trust each other. You can find the right people more easily. Even if you mess up, the cost won&#8217;t be that high. After all, a 3-people team with AI costs more than half of what an 8-people team with a PM costs. With the right plan you can split your product into modules properly owned by such small teams. Given that these teams don&#8217;t have to interact with each other, you can remove a ton of friction of having to manage multiple streams of work at once. Or you can spin up separate product offerings and see what sticks.</p><p>Having a few people might also lead to issues, however. You start lacking redundancy. These few people are expected to work at a really fast pace. Which can lead to pressure. Which can lead to burnout. And now you&#8217;re with a 0-person team. Or some of the folks on the team might get sick or out on vacation. What do you do now? How do you transfer the knowledge after the member comes back? What if both engineers get sick at the same time? Frankly, these seem like easily solvable problems. The chance of both engineers being out at the same time might be pretty minor. Unless both of them have kids who are just getting into kindergarten. Or one of them has to take a maternity leave during flu season.</p><p>Few people also exchange a lot less ideas than several. And in knowledge work cross-pollination of ideas is crucial. Hardly any business knows what feature or product would be the next killer. A 3-person team with AI might be able to spit out features and products at a really fast pace. Thus increasing your plane of opportunity. However, there&#8217;s a thing called a local maximum that can&#8217;t be overcome by just pushing more stuff out the door. At one point you need a &#8220;mutation&#8221; to come out and get you out of the local maximum. The more people you have on the team, the higher the chance for that. Of course, if you&#8217;re operating in a feature factory model where some omniscient entity knows that this exact set of features is a must to make things work, then this argument falls apart. You just need engineers who can churn this out for a long-enough period of time. Despite what most business owners think though, I&#8217;d argue that this is rare.</p><h3>Where AI Fits Into This Picture</h3><p>From all of the above, it might sound like I&#8217;m totally anti-AI. I&#8217;m not. I can&#8217;t deny it&#8217;s value and I embrace it as much as I can. I think it&#8217;s a game changer for our industry. And the industry is no longer the same. With all it&#8217;s flaws, hypes and delusions, AI is here to stay and we must learn how to use it properly.</p><p>But you can&#8217;t just trim 4-5 people out, replace them with AI and expect results. You have to be prepared for the consequences of having less human input. Lack of redundancy and local maximums are just some of the things you might face. Also, a 3-person team with the wrong practices and technical expertise won&#8217;t do the job. Even if you force them to use the best AI model or agentic framework out there.</p><p>AI fits into the picture when engineers with the right expertise can use it to actually multiply the existing good practices they have instead of diminish them. If they already know how to ideate, build-in quality, understand customers, experiment and extract value. AI will just help them do more of this. Which will be good.</p><p>8-person teams with the right practices and AI might be 10x more productive than a 3-person team with the right practices and AI.</p><p>8-person teams with the right practices without AI might <strong>not </strong>be more productive than a 3-person team with the right practices and AI.</p><p>8-person teams with the right practices without AI might be more productive than a 3-person team with bad practices and AI.</p><p>Take your context into account.</p>]]></content:encoded></item><item><title><![CDATA[AI Builder Brief #15]]></title><description><![CDATA[Leading an Agentic Development Team]]></description><link>https://tsvetantsvetanov.substack.com/p/ai-builder-brief-15</link><guid isPermaLink="false">https://tsvetantsvetanov.substack.com/p/ai-builder-brief-15</guid><dc:creator><![CDATA[Tsvetan Tsvetanov]]></dc:creator><pubDate>Wed, 18 Feb 2026 08:00:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!X9YY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F265fcd4b-9d85-4a79-b7db-3d2776ed03be_768x1376.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_!X9YY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F265fcd4b-9d85-4a79-b7db-3d2776ed03be_768x1376.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!X9YY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F265fcd4b-9d85-4a79-b7db-3d2776ed03be_768x1376.png 424w, https://substackcdn.com/image/fetch/$s_!X9YY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F265fcd4b-9d85-4a79-b7db-3d2776ed03be_768x1376.png 848w, https://substackcdn.com/image/fetch/$s_!X9YY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F265fcd4b-9d85-4a79-b7db-3d2776ed03be_768x1376.png 1272w, https://substackcdn.com/image/fetch/$s_!X9YY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F265fcd4b-9d85-4a79-b7db-3d2776ed03be_768x1376.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!X9YY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F265fcd4b-9d85-4a79-b7db-3d2776ed03be_768x1376.png" width="768" height="1376" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/265fcd4b-9d85-4a79-b7db-3d2776ed03be_768x1376.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1376,&quot;width&quot;:768,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1702355,&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://tsvetantsvetanov.substack.com/i/188351788?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F265fcd4b-9d85-4a79-b7db-3d2776ed03be_768x1376.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_!X9YY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F265fcd4b-9d85-4a79-b7db-3d2776ed03be_768x1376.png 424w, https://substackcdn.com/image/fetch/$s_!X9YY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F265fcd4b-9d85-4a79-b7db-3d2776ed03be_768x1376.png 848w, https://substackcdn.com/image/fetch/$s_!X9YY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F265fcd4b-9d85-4a79-b7db-3d2776ed03be_768x1376.png 1272w, https://substackcdn.com/image/fetch/$s_!X9YY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F265fcd4b-9d85-4a79-b7db-3d2776ed03be_768x1376.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://bryanfinster.substack.com/p/leading-an-agentic-development-team">Leading an Agentic Development Team</a></p><p><strong>How is it useful? </strong>A level-headed and effective approach to working with agents for software development.</p><p><strong>Commentary: </strong>I really love how Bryan has moved from skeptic to a supporter. And I find similar practices work great for me as well. It&#8217;s a really valuable read and every person serious about AI-Native Engineering should read it.</p><p><a href="https://vibemanifesto.org/">Manifesto for Vibe Coding</a></p><p><strong>How is it useful? </strong>An interesting set of values for the AI-Native Engineering era.</p><p><strong>Commentary: </strong>The only thing I&#8217;m failing to see is quality of the technical solutions. From my experience, coding agents are still far from being able to create high quality by themselves.</p><p><a href="https://chemaclass.com/blog/build-your-own-team-of-agents/">Build Your Own Team of Agents</a></p><p><strong>How is it useful? </strong>A showcase of another agentic orchestration setup.</p><p><strong>Commentary: </strong>Valuable insights. The main things that I disagree is the granularity of tasks which leads to micromanagement. And quality gates that seem to be setup through Claude Code hooks instead of deterministic mechanisms like husky. Otherwise, I agree with the project constitution document, using teams of agents and encoding procedures.</p><p><a href="https://substack.com/home/post/p-187605029">If There Is Nothing Inside &#8212; Why Build a Cage?</a></p><p><strong>How is it useful? </strong>An interesting argument against disregarding consciousness in AI.</p><p><strong>Commentary: </strong>I find the article pretty interesting. The rhetoric is a bit too much for me. The logic seems reasonable. Anyway, I find no practical use of debating whether AI has consciousness or not. If it can do the job that&#8217;s enough for me. If it reaches human-level capacity and awareness that&#8217;s fine. Whether we know it or not.</p><p><a href="https://github.com/andlaf-ak/claude-code-agents/tree/main/test-design-reviewer">Test Design Reviewer</a></p><p><strong>How is it useful? </strong>A Claude Code agent that makes sure you&#8217;re writing high quality tests.</p><p><strong>Commentary: </strong>I think this is a really valuable agent. Plan to incorporate it into my workflow soon. Tests are the main deterministic tool we have to make sure AI does what we want it to do. The higher quality they are, the better.</p><p><a href="https://github.com/nWave-ai/nWave">nWave</a></p><p><strong>How is it useful? </strong>A structured approach to generating high quality software with the help of AI.</p><p><strong>Commentary: </strong>Last week I finally had the time to watch the webinar for nWave. Now I&#8217;m glad they have released the framework. Can&#8217;t wait to try it and I expect really good results.</p><p><a href="https://substack.com/home/post/p-187846710">The Bottleneck That Wasn&#8217;t</a></p><p><strong>How is it useful? </strong>Understand that optimising outside of the bottleneck won&#8217;t help overall delivery speed.</p><p><strong>Commentary: </strong>A useful article by Dragan that should make us think about how the speed with which we can ship code thanks to AI affects other parts of our software engineering organizations.</p><p><a href="https://queue.acm.org/detail.cfm?id=3762990">Guardians of the Agents</a></p><p><strong>How is it useful? </strong>A way to formally verify tool calling workflows generated by LLMs.</p><p><strong>Commentary: </strong>It&#8217;s more about the context of security. However, I already see how it can be useful for grounding agentic systems in general. Where you verify workflows before they can be run.</p><p><a href="https://newsletter.pragmaticengineer.com/p/steve-yegge-on-ai-agents-and-the">Steve Yegge on AI Agents and the Future of Software Engineering</a></p><p><strong>How is it useful? </strong>Outlines some interesting and a bit worrisome predictions about the industry.</p><p><strong>Commentary: </strong>I&#8217;m a bit worried whether people will get laid off, drained and burnt out. Personally, I think I&#8217;ll go through this but temporarily there might be a lot of people that haven&#8217;t managed to adapt. However, I believe Jevon&#8217;s paradox will kick in at some point and there will be even more jobs in the market. I&#8217;m excited about the possibilities that are opened and what we&#8217;ll do with so much new technology.</p>]]></content:encoded></item><item><title><![CDATA[Effective Use of AI in Legacy Systems]]></title><description><![CDATA[By now people have seen that AI and legacy systems do not make a good pair.]]></description><link>https://tsvetantsvetanov.substack.com/p/effective-use-of-ai-in-legacy-systems</link><guid isPermaLink="false">https://tsvetantsvetanov.substack.com/p/effective-use-of-ai-in-legacy-systems</guid><dc:creator><![CDATA[Tsvetan Tsvetanov]]></dc:creator><pubDate>Fri, 13 Feb 2026 07:48:35 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!QAoz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F015d86dc-ed79-47ba-9b30-73d992f2326d_768x1376.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>By now people have seen that AI and legacy systems do not make a good pair. Huge codebases with bloated code and lack of tests are as hard for humans to orient in as for AI. If you don&#8217;t have a proper test harness, you won&#8217;t be able to ground AI into the actual requirements of the system. It&#8217;ll just make change after change by guessing what should happen based on a prompt. If the system is bloated and hard to reason about, AI won&#8217;t know where to change what. Even if it does, there&#8217;s a high chance that it&#8217;ll miss a critical dependency that&#8217;ll make it go haywire. Lastly, a huge codebase hardly fits into context. And when on top of this it&#8217;s hardly navigable, that will make AI get as much as possible when trying to solve a specific problem.</p><p>Not that all legacy systems are like that. But a lot might have some of these problems. Which makes the case that <a href="https://www.youtube.com/watch?v=E5u2qFX1aGM">AI hates legacy code</a>.</p><p>However, not all is bleak. With the right strategy and tactics a team can make AI quite useful when dealing with legacy systems.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QAoz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F015d86dc-ed79-47ba-9b30-73d992f2326d_768x1376.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QAoz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F015d86dc-ed79-47ba-9b30-73d992f2326d_768x1376.png 424w, https://substackcdn.com/image/fetch/$s_!QAoz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F015d86dc-ed79-47ba-9b30-73d992f2326d_768x1376.png 848w, https://substackcdn.com/image/fetch/$s_!QAoz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F015d86dc-ed79-47ba-9b30-73d992f2326d_768x1376.png 1272w, https://substackcdn.com/image/fetch/$s_!QAoz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F015d86dc-ed79-47ba-9b30-73d992f2326d_768x1376.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QAoz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F015d86dc-ed79-47ba-9b30-73d992f2326d_768x1376.png" width="768" height="1376" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/015d86dc-ed79-47ba-9b30-73d992f2326d_768x1376.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1376,&quot;width&quot;:768,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1633552,&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://tsvetantsvetanov.substack.com/i/187830314?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F015d86dc-ed79-47ba-9b30-73d992f2326d_768x1376.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_!QAoz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F015d86dc-ed79-47ba-9b30-73d992f2326d_768x1376.png 424w, https://substackcdn.com/image/fetch/$s_!QAoz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F015d86dc-ed79-47ba-9b30-73d992f2326d_768x1376.png 848w, https://substackcdn.com/image/fetch/$s_!QAoz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F015d86dc-ed79-47ba-9b30-73d992f2326d_768x1376.png 1272w, https://substackcdn.com/image/fetch/$s_!QAoz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F015d86dc-ed79-47ba-9b30-73d992f2326d_768x1376.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Characterisation tests and refactoring</h3><p>One of the main tenets of working with software systems is &#8220;if it works, don&#8217;t fix it.&#8221; This is reasonable, but limiting. It signifies dysfunctions and probably lack of skill. It might also show how constrained a team is in their actions because of things they can&#8217;t or don&#8217;t know how to control.</p><p>Controversially, with AI I think this should no longer hold.</p><p>A system can be put into a safe enough harness that prevents issues when we change it. And actually allows us to make the system better. In the literature, this is called characterisation tests. Tests that describe the current behavior of a piece of the system. These tests should be of such quality so they prevent regressions. Of course, the details matter here. Some system parts might be really difficult to put into a test harness. Some parts might be easier. As an engineer you have to think hard about how to make every piece of the system automatically tested. This is the only way you&#8217;ll be able to safely change it.</p><p>Another ideal set of properties of these tests is that they should be behavior-oriented and ignorant of implementation. The first thing means that they should test stuff from the user&#8217;s point of view. Be it a user of the system or a user of a specific module or library. The second thing means that these tests shouldn&#8217;t depend on specific internal modules. In short, they shouldn&#8217;t rely on mocking internal components. Only things at the edges of a system.</p><p>Once you have these tests in place and are pretty confident in their quality, you can begin refactoring. Or adding new functionality without worrying whether this will break the system.</p><p>In the whole of this process AI helps us with understanding and implementation. We&#8217;ll talk about understanding in the next section. After we have it, implementation is just about telling AI to write all of these characterisation tests, cross check their quality and think of more edge cases to add. Combined with mutation testing, you can be sure that these tests will catch a significant part of the edge cases in the system. Afterwards, you can just instruct AI to refactor the parts that are of the lowest quality. Or start adding features that are driven by tests.</p><h3>Micro-tools that aid understanding</h3><p>When faced with hundreds of thousands of lines of code understanding by reading becomes impractical. That&#8217;s the main premise of the folks behind <a href="https://moldabledevelopment.com/">Moldable Development</a>. In that situation you should start relying on context-specific micro-tools that generate different representations of your system. These representations are guided by questions. Some questions are:</p><ul><li><p>Why is request X so slow?</p></li><li><p>Where in my architecture do we directly call the DB instead of using a repository?</p></li><li><p>Which parts of the code change the most?</p></li><li><p>Which parts of the system are the most critical?</p></li><li><p>Where do we have the most bugs?</p></li><li><p>How should I feature X into the system?</p></li></ul><p>Usually we rely on generic tools or no tools at all to answer such questions. However, what if we had the power and skill to create tools that fit into each specific question? Or follow-up questions that arise? Being able to create such tools on demand will help us deterministically address such questions way faster than we might&#8217;ve if we&#8217;re just relying on reading the system.</p><p>Before AI this was hardly possible. Systems like <a href="https://gtoolkit.com/">the Glamorous Toolkit</a> addressed this issue by providing an IDE tailored towards the creation of context-specific micro-tools. However, the fact that it relied on a not well-known language, <a href="https://pharo.org/">Pharo</a>, and had a steep learning curve made it hard to introduce into teams and organizations.</p><p>However, now we don&#8217;t need such a system for most use cases. Knowing it will greatly help and I think it&#8217;s far more superior, but few people have the weeks or months necessary to invest to learn how to use this system properly. Now we have AI and AI can be prompted to generate throwaway tools that answer our questions. We would&#8217;ve done this in weeks or months. AI generates such a tool in minutes. This approach can greatly speed up our understanding and help us rely on objective analysis of our systems instead of subjective hand-drawn diagrams.</p><p>As an example, this week I used this approach to generate 4 different tools in less than an hour that helped me understand the relationships between 3 entirely different systems that created a software solution. It was a NextJS frontend which relied on Supabase and N8N. One of the things I wanted to know was &#8220;which components called Supabase directly?&#8221; I just instructed Claude Code to create a tool which deterministically found all components that do such invocations and create a Mermaid diagram out of it. Another question I wanted to know was &#8220;Which Supabase webhooks trigger N8N workflows?&#8221; I provided the necessary API keys and Claude Code generated a tool that retrieved all webhooks and workflows, mappend them and generated another Mermaid diagram.</p><p>This approach is mostly about changing your mindset from being focused on reading or AI analysis to being focused on generating tools that deterministically answer questions.</p><h3>The modernisation roadmap</h3><p>Lastly, with the power of AI now you can more boldly go towards modernising your legacy system. You have characterisation tests which enable safe refactoring and feature delivery. You have micro-tools that enable faster and more reliable understanding. What remains is to start building your modernisation roadmap. This is an alignment between the technical needs and the business ones. It&#8217;s not a huge multi-month, freeze everything effort. It&#8217;s a way to gradually improve your system while still delivering value for your users. Before it was hard to do that because you didn&#8217;t have the safety net and the wider understanding. However, you no longer have an excuse to ignore it. Set your system on the right track. Make yourself and your users happy.</p>]]></content:encoded></item><item><title><![CDATA[AI Builder Brief #14]]></title><description><![CDATA[The third golden age of software engineering &#8211; thanks to AI, with Grady Booch]]></description><link>https://tsvetantsvetanov.substack.com/p/ai-builder-brief-14</link><guid isPermaLink="false">https://tsvetantsvetanov.substack.com/p/ai-builder-brief-14</guid><dc:creator><![CDATA[Tsvetan Tsvetanov]]></dc:creator><pubDate>Tue, 10 Feb 2026 12:48:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!mC31!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51545345-23d9-4421-af67-d77159e768fc_768x1376.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_!mC31!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51545345-23d9-4421-af67-d77159e768fc_768x1376.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mC31!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51545345-23d9-4421-af67-d77159e768fc_768x1376.png 424w, https://substackcdn.com/image/fetch/$s_!mC31!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51545345-23d9-4421-af67-d77159e768fc_768x1376.png 848w, https://substackcdn.com/image/fetch/$s_!mC31!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51545345-23d9-4421-af67-d77159e768fc_768x1376.png 1272w, https://substackcdn.com/image/fetch/$s_!mC31!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51545345-23d9-4421-af67-d77159e768fc_768x1376.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mC31!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51545345-23d9-4421-af67-d77159e768fc_768x1376.png" width="768" height="1376" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/51545345-23d9-4421-af67-d77159e768fc_768x1376.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1376,&quot;width&quot;:768,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2138858,&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://tsvetantsvetanov.substack.com/i/187410553?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51545345-23d9-4421-af67-d77159e768fc_768x1376.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_!mC31!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51545345-23d9-4421-af67-d77159e768fc_768x1376.png 424w, https://substackcdn.com/image/fetch/$s_!mC31!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51545345-23d9-4421-af67-d77159e768fc_768x1376.png 848w, https://substackcdn.com/image/fetch/$s_!mC31!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51545345-23d9-4421-af67-d77159e768fc_768x1376.png 1272w, https://substackcdn.com/image/fetch/$s_!mC31!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51545345-23d9-4421-af67-d77159e768fc_768x1376.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://newsletter.pragmaticengineer.com/p/the-third-golden-age-of-software">The third golden age of software engineering &#8211; thanks to AI, with Grady Booch</a></p><p><strong>How is it useful? </strong>Understand why demand for software engineering is actually going to increase.</p><p><strong>Commentary: </strong>From a historical perspective, it was really interesting to hear Grady&#8217;s thoughts on previous golden ages of software engineering. It felt really motivational and inspiring to be part of such an age. It also presents a sober view on why engineers will be even more in demand. Even though how we work might change as we go.</p><p><a href="https://newsletter.pragmaticengineer.com/p/the-creator-of-clawd-i-ship-code">The creator of Clawd: &#8220;I ship code I don&#8217;t read&#8221;</a></p><p><strong>How is it useful? </strong>It showcases the thought process of a person behind a really successful product in the AI era.</p><p><strong>Commentary: </strong>First of all, this calmed me down a bit. I was wondering&#8212;how so many folks are managing to ship so many products and stuff in the era of AI? And from this podcast I found out that the creator of Clawd was basically a millionaire who&#8217;s fully focused on this. I also liked that he doesn&#8217;t see value in the Ralph Wiggum loop idea. Instead, he values small steps and focus on controlling the agents. Also, it&#8217;s really good that he focuses on automated verification to make things work.</p><p><a href="https://www.youtube.com/watch?v=2HfhJ0d5uv0">The AI-Coding Revolution: Spec-Driven Development</a></p><p><strong>How is it useful? </strong>Showcases the <a href="https://nwave.ai/">nWave framework</a>&#8212;a methodology for developing software with AI based on Behavioral Engineering.</p><p><strong>Commentary: </strong>The basic principles are nothing new to me. I liked the idea of giving your agent a personality. What I&#8217;d really like to see is the prompts. The way this is organized. I guess they&#8217;ll release it soon.</p><p><a href="https://github.com/jedi4ever/addt">addt - AI Don&#8217;t Do That</a></p><p><strong>How is it useful? </strong>Run all kinds of agents in secure docker containers.</p><p><strong>Commentary: </strong>Pretty useful. I managed to configure and run it for me. I&#8217;m quite happy with the results. It definitely has some rough edges but I&#8217;m really surprised how easy it is to extend with new agents. I managed to adapt it for running Claude Code inside a corporate environment.</p><p><a href="https://www.generalintelligencecompany.com/writing/agent-native-engineering">Agent-Native Engineering</a></p><p><strong>How is it useful? </strong>Has good points on how to transform your organisation to use AI more effectively.</p><p><strong>Commentary: </strong>Really support the move away from PR reviews as a requirement. We should automate that. Also, the focus on using verification even though they seem to focus a bit too much on rulesets. I also liked the idea of splitting your tasks based on capabilities required to implement it. And this way making it easy to delegate stuff to agents.</p><p><a href="https://resources.anthropic.com/hubfs/2026%20Agentic%20Coding%20Trends%20Report.pdf?hsLang=en">Eight trends defining how software gets built in 2026</a></p><p><strong>How is it useful? </strong>Provides a prediction for what will be valuable in 2026 for engineering organizations that want to leverage agentic coding.</p><p><strong>Commentary: </strong>Largely agree on this. Multi-agent orchestration, more focus on automated verification, scaling agents beyond engineering. These seem obvious now. Wondering what 2027 would be like?</p><p><a href="https://steve-yegge.medium.com/the-anthropic-hive-mind-d01f768f3d7b">The Anthropic Hive Mind</a></p><p><strong>How is it useful? </strong>It showcases how a new form of increasingly innovative and successful organisations form.</p><p><strong>Commentary: </strong>Really impressed by the hive mind style of working. It looks quite &#8220;agile&#8221; if I may. Probably that were the initial intentions of the people behind the Agile Manifesto. An organization so fluid and adaptable. It might seem like chaos at first but is actually in its golden age. What&#8217;s important though is putting the proper guardrails in place to prevent the huge losses from happening.</p><p><a href="https://www.josecrespophd.org/p/everyones-wrong-about-ai-programming">Everyone&#8217;s Wrong About AI Programming &#8212; Except Maybe Anthropic</a></p><p><strong>How is it useful? </strong>A mathematical overview on why current agentic systems drift towards errors.</p><p><strong>Commentary: </strong>For a non-mathematician like me this explanation seems quite simple and important in consequences. Wondering how it can be resolved and whether it should be resolved on the level of training models. Or can it be resolved through a layer above the LLM&#8212;e.g. modifying the way agents interact.</p>]]></content:encoded></item><item><title><![CDATA[What do you mean by agent orchestration?]]></title><description><![CDATA[Agent orchestration is all the rage this year.]]></description><link>https://tsvetantsvetanov.substack.com/p/what-do-you-mean-by-agent-orchestration</link><guid isPermaLink="false">https://tsvetantsvetanov.substack.com/p/what-do-you-mean-by-agent-orchestration</guid><dc:creator><![CDATA[Tsvetan Tsvetanov]]></dc:creator><pubDate>Fri, 06 Feb 2026 07:30:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!m-c6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bf1d5c-b75b-466b-ae68-498454684093_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Agent orchestration is all the rage this year. However, I&#8217;m noticing that there are different meanings to that. And in order to approach this challenge meaningfully, we have to clarify what is it.</p><p>What I&#8217;m seeing out there are several types of orchestration approaches:</p><ol><li><p>Agent orchestration within a single task. Built in;</p></li><li><p>Agent orchestration within a single task. DIY;</p></li><li><p>Agent orchestration for multiple tasks.</p></li></ol><p>I&#8217;m going to explore each one and share first impressions on limits, tooling and capabilities.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!m-c6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bf1d5c-b75b-466b-ae68-498454684093_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!m-c6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bf1d5c-b75b-466b-ae68-498454684093_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!m-c6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bf1d5c-b75b-466b-ae68-498454684093_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!m-c6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bf1d5c-b75b-466b-ae68-498454684093_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!m-c6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bf1d5c-b75b-466b-ae68-498454684093_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!m-c6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bf1d5c-b75b-466b-ae68-498454684093_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/52bf1d5c-b75b-466b-ae68-498454684093_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1939370,&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://tsvetantsvetanov.substack.com/i/187060136?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bf1d5c-b75b-466b-ae68-498454684093_1024x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!m-c6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bf1d5c-b75b-466b-ae68-498454684093_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!m-c6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bf1d5c-b75b-466b-ae68-498454684093_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!m-c6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bf1d5c-b75b-466b-ae68-498454684093_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!m-c6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52bf1d5c-b75b-466b-ae68-498454684093_1024x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Agent orchestration within a single task. Built in.</h3><p>This is basically what the current &#8220;Agent&#8221; modes of coding tools provide. Claude Code&#8217;s calling of subagents. Cursor&#8217;s subagents. And so on. These are provided by the vendors because sometimes tools aren&#8217;t enough to complete a single task. You can delegate more complex workflows to subagents. And a common pattern is when Claude Code spawns an analyser, architect and coder agent. The analyser does an initial analysis of the problem at hand to understand what actually needs to be done or refine the user&#8217;s query. The architect understands the current design of the codebase and plans a meaningful end state that&#8217;s going to support the necessary functionality. The coder implements all of this.</p><p>These subagents are &#8220;orchestrated&#8221; by the main agent. I&#8217;ve no idea what are the patterns in Claude Code itself. But in general the main agent decides what subagents it needs, when to use them, and whether it should run them in parallel or serially. Another cool property of subagents is that they work with their own context window which leads to less token consumption.</p><p>All in all, this seems to have increased the capabilities of AI-assisted coding tools. And even though the orchestration pipeline is built-in you have a lot of power in defining your own subagents and using them.</p><h3>DIY agent orchestration within a task.</h3><p>This is basically the approach where you define your agent orchestration harness and the agents themselves independently of the coding tool. I&#8217;m not sure this can be done within Claude Code or Cursor. But I imagine using a system like <a href="https://openhands.dev/">OpenHands</a> and creating your agent workflow from scratch.</p><p>Given the early stages we&#8217;re in this is a viable approach. We still don&#8217;t know what can work better and by the end of 2026 I think we&#8217;ll find out immensely better approaches to AI-assisted software engineering than what we have today. So we as engineers have to experiment and invent new tools and approaches that will make the use of AI more productive and safe. It&#8217;s definitely not easy to balance productive work with work required to create your own tooling, but with the aid of AI I see this becoming more normal than it was in the past. I see how <a href="https://moldabledevelopment.com/">moldable development</a> will rise in popularity even though some folks might not be aware of it.</p><p>So, DIY agent orchestration is useful when you do research or you have a fairly obscure use case where the mass market tools like Claude Code can&#8217;t cut it.</p><h3>Working on multiple things at once</h3><p>Now comes the part that I think most engineers imagine when they hear agent orchestration. Basically, the part where we&#8217;re lured into the fantasy that we can work on 10 things at once thanks to our AI slaves. This is a workflow that practically says: I&#8217;ll spin up a separate Claude Code instance for each feature/bug/investigation I&#8217;d like to do. And I&#8217;ll spin up 10s of them so I can complete stuff in parallel. I&#8217;ll also spin up a separate instance that manages merge conflicts. And my role will be that of the master orchestrator.</p><p>This was my vision as well. And I see folks like <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Steve Yegge&quot;,&quot;id&quot;:132549450,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a431648-d32b-4105-8a3c-feef18443104_2316x3088.jpeg&quot;,&quot;uuid&quot;:&quot;c6b30c06-a353-4e75-825d-c817f610895e&quot;}" data-component-name="MentionToDOM"></span> are starting to do it with <a href="https://steve-yegge.medium.com/welcome-to-gas-town-4f25ee16dd04">GasTown</a>. However, I had a really interesting conversation with <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Iliya Valchanov&quot;,&quot;id&quot;:418623231,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/54727d1a-92af-4d75-9960-5e205985d69e_800x800.jpeg&quot;,&quot;uuid&quot;:&quot;3f80782d-308d-418c-947b-79cb66db7d23&quot;}" data-component-name="MentionToDOM"></span> where he challenged this assumption quite well. Even if we automate code review, a human still has to verify whether their assumptions before the feature was realised actually make sense from a human standpoint. Do some exploratory testing in a way. So there&#8217;s hardly any value in working on 10 features at once if each feature is completed within minutes. You just won&#8217;t have time to review all of it.</p><p>Despite all of this, I think there are nuances to this approach and we&#8217;re still too early to conclude we can&#8217;t do it. As I said, we also see tools like Gas Town, <a href="https://github.com/ruvnet/claude-flow">Claude Flow</a> and other attempts at orchestration. People seem to see some value in it. And it&#8217;s also important to clarify what are those multiple things. Because you can have cases where a human doesn&#8217;t have to come at the end of the process:</p><ol><li><p>With all of the AI proliferation we might end up writing a lot of software that&#8217;s actually meant for non-human consumers. In this case, the AI is in the best position to review and own this software end-to-end. With reasonable automated guardrails put by a human so we don&#8217;t end up with slop;</p></li><li><p>A lot of software work (maybe the bigger part) is keeping quality high. Especially with agents, we have to refactor constantly and improve the codebase to counteract the chaos that LLMs create bit by bit. This work is also enforceable by automated guardrails and might not need human supervision;</p></li><li><p>Then there might be features that can be automatically validated with enough confidence through acceptance tests. Human insight and feedback might still be needed but maybe on the scale of multiple features or a whole module. Which will take time to complete to a meaningful state. Or maybe human validation logic can be encoded well enough within specs (if acceptance tests aren&#8217;t applicable) so the AI can properly self-verify it.</p></li></ol><p>Personally, despite all of these arguments I&#8217;m still not sure how much sense would orchestrating 10s of agents make for an engineer. Maybe some engineers would find it beneficial and useful. Maybe most won&#8217;t. I definitely think we&#8217;ll have the technology to do it. Maybe to even orchestrate 100s of agents at a time. And maybe we&#8217;ll orchestrate 2-3 features at a time but on each feature there would be 10s of agents working. Maybe by the end of 2026 that&#8217;s what we&#8217;re going to mean by agent orchestration:</p><blockquote><p>Work on multiple things at a time with multiple agents collaborating on the same task.</p></blockquote><p>It&#8217;s still too early to tell. But I&#8217;m above excited to see where this will go!</p>]]></content:encoded></item><item><title><![CDATA[AI Builder Brief #13]]></title><description><![CDATA[Unpacking the &#8216;unpossible&#8217; AI coding logic of Ralph Wiggum]]></description><link>https://tsvetantsvetanov.substack.com/p/ai-builder-brief-13</link><guid isPermaLink="false">https://tsvetantsvetanov.substack.com/p/ai-builder-brief-13</guid><dc:creator><![CDATA[Tsvetan Tsvetanov]]></dc:creator><pubDate>Mon, 02 Feb 2026 08:18:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ReFc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabc744ac-0c1a-4fe7-8fbc-87c401114ba2_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ReFc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabc744ac-0c1a-4fe7-8fbc-87c401114ba2_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ReFc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabc744ac-0c1a-4fe7-8fbc-87c401114ba2_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!ReFc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabc744ac-0c1a-4fe7-8fbc-87c401114ba2_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!ReFc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabc744ac-0c1a-4fe7-8fbc-87c401114ba2_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!ReFc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabc744ac-0c1a-4fe7-8fbc-87c401114ba2_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ReFc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabc744ac-0c1a-4fe7-8fbc-87c401114ba2_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/abc744ac-0c1a-4fe7-8fbc-87c401114ba2_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2095718,&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://tsvetantsvetanov.substack.com/i/186585064?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabc744ac-0c1a-4fe7-8fbc-87c401114ba2_1024x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ReFc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabc744ac-0c1a-4fe7-8fbc-87c401114ba2_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!ReFc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabc744ac-0c1a-4fe7-8fbc-87c401114ba2_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!ReFc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabc744ac-0c1a-4fe7-8fbc-87c401114ba2_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!ReFc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fabc744ac-0c1a-4fe7-8fbc-87c401114ba2_1024x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://tessl.io/blog/unpacking-the-unpossible-logic-of-ralph-wiggumstyle-ai-coding/">Unpacking the &#8216;unpossible&#8217; AI coding logic of Ralph Wiggum</a></p><p><strong>How is it useful? </strong>Helps you understand the Ralph Wiggum loop better.</p><p><strong>Commentary: </strong>Largely on point:</p><ul><li><p>Context compaction can limit accuracy in long-running tasks</p></li><li><p>Token consumption might sky rocket</p></li></ul><p><a href="https://www.linkedin.com/posts/sascha-d-b4bb3a336_since-my-post-about-gsd-yesterday-kinda-blew-activity-7421492102905184256-vjqA/">Claude Code - Swarm Mode</a></p><p><strong>How is it useful? </strong>You can test the hidden swarm mode feature of Claude Code.</p><p><strong>Commentary: </strong>I&#8217;m wondering if this will make orchestration platforms obsolete. Probably not as people still have no idea what proper orchestartion means. It&#8217;s still quite cheap to build your own solution than to stop on a given existing solution. Also <a href="https://github.com/mikekelly/claude-sneakpeek">Claude Sneakpeak</a> is really interesting as it lets you unlock hidden Claude Code features.</p><p><a href="https://github.com/jedi4ever/dclaude">DClaude - Containerized Claude Code</a></p><p><strong>How is it useful? </strong>Let&#8217;s you run separate Claude Code instances in independent containers.</p><p><strong>Commentary: </strong>I&#8217;ll try it out for my orchestration approaches. It seems quite valuable. The interesting part might be&#8212;what if you want the separate containerized instances to communicate with each other. Will this be an use case at all? Anyway, I&#8217;ve had issues with non-containerized Claude Code instances and I&#8217;ve been trying to resolve them only with git worktrees which might pose issues. So, I&#8217;ll give it a try.</p><p><a href="https://www.linkedin.com/feed/update/urn:li:activity:7421609144274751489/">RuVector is not a text predictor</a></p><p><strong>How is it useful? </strong>An overview of RuVector&#8217;s capabilities by its author.</p><p><strong>Commentary: </strong>There are some really bold statements there. Like it maintains an internally coherent model of the world as it changes over time. Which seems like a way to prevent or greatly reduce hallucinations. This is done through the interplay of vectors, graphs and a coherence engine. I&#8217;ve been exploring how this all works for some time and still learning. But seems like a powerful concept for the agentic engineer. Even if only because of the fact that you can now have a free vector DB running alongside your application.</p><p><a href="https://allenai.org/blog/open-coding-agents">Open Coding Agents</a></p><p><strong>How is it useful? </strong>A framework for easily training open LLMs on your codebase.</p><p><strong>Commentary: </strong>Seems like a really useful framework for companies that are sensitive to data leakage or have tight financial constraints. With this framework you can take an open source model and train it on your data. It automates most of the training. They claim the costs to be at around $400. I don&#8217;t have the use case for that but might try it out at some point.</p><p><a href="https://steve-yegge.medium.com/software-survival-3-0-97a2a6255f7b">Software Survival 3.0</a></p><p><strong>How is it useful? </strong>Shares views on what software might survive the decreasing costs of building vs. buying.</p><p><strong>Commentary: </strong>It&#8217;s kind of depressing. Even though the author gives hope that we&#8217;ll actually write way more software in the future and that I believe in Jevon&#8217;s paradox. It&#8217;s a fundamental shift and I&#8217;m not sure how many people will adapt. And how many errors will emerge through the use of AI from untrained people who don&#8217;t understand how to put proper deterministic guardrails. Apart from that, I agree with the direction.</p><p><a href="https://x.com/kayvz/status/2016934777396609428">The End of Human Code Review</a></p><p><strong>How is it useful? </strong>Shares insights on the future of code reviews.</p><p><strong>Commentary: </strong>Well, for me, code review was always a waste of time. Unless you have a high trust team environment that learns how to automate the guardrails that code reviews are meant to impose, you&#8217;ll suffer from a significant slowdown in review and approval speed. And my approach to coding with agents is the same. I hardly review the code. I focus on finding the proper guardrails that will let the agents deterministically produce high quality code with a minimum amount of bugs. These guardrails aren&#8217;t agents themselves. They&#8217;re code. Like automated tests and linters but also other specialized tools.</p><p><a href="https://addyo.substack.com/p/the-80-problem-in-agentic-coding">The 80% Problem in Agentic Coding</a></p><p><strong>How is it useful? </strong>Addy Osmani analyzes the issues with the 20% of coding we still have to figure out for ourselves.</p><p><strong>Commentary: </strong>It shares how our mistakes changed are might be more conceptual and hard to find out. Because we don&#8217;t understand the software we produce. Even if we review it, it&#8217;s not like we&#8217;ve written the code. It also highlights how despite increased throughput some teams are bogged down in code reviews. Finally, it ends with some patterns on how to escape this trap. For me, the most important pattern is automated verification of everything. Also, learning to declare, not to micromanage is quite important.</p><p><a href="https://www.anthropic.com/research/AI-assistance-coding-skills">How AI assistance impacts the formation of coding skills</a></p><p><strong>How is it useful? </strong>Showcases that using AI to grasp new coding skills might lead to less human ability in the exchange of small time savings.</p><p><strong>Commentary: </strong>I&#8217;m not surprised as you can&#8217;t reliably learn a new tool if it doesn&#8217;t get into your hands. The study also shows how individuals that used AI only on a conceptual level scored higher on forming the coding skills than those who delegated the implementation in full. However, we&#8217;re looking into acquiring skills that are hardly relevant anymore. You can understand the tool in a <a href="https://tsvetantsvetanov.substack.com/p/ai-makes-learning-any-tech-easy?r=43etl9">learning session with Claude</a>. And then just rely on Claude Code to actually use it and save you a ton of errors. You get the best of both worlds this way.</p><p><a href="https://antirez.com/news/159">Automatic Programming</a></p><p><strong>How is it useful? </strong>Distinguishes vibe coding from AI-Assisted development.</p><p><strong>Commentary: </strong>Largely agree. Even though I don&#8217;t see a reason for yet another term. However, I find value in the author&#8217;s observations that if you&#8217;re not vibe coding you&#8217;ve essentially produced the code and it&#8217;s yours and you can be proud of it.</p><p><a href="https://www.dolthub.com/">Dolt is the Database for AI</a></p><p><strong>How is it useful? </strong>A version controller DB.</p><p><strong>Commentary: </strong>This can be quite useful when you let AI take full reign over your production DB as well. If you rely on DoltDB you can easily revert your DB to previous states if something breaks. Thus it makes reversibility easier. At least in concept. I have yet to try it and dive deeper to see how useful it is.</p>]]></content:encoded></item><item><title><![CDATA[AI multiplies your tech debt. But not in the way you thought]]></title><description><![CDATA[I&#8217;m seeing several kinds of software professionals around me.]]></description><link>https://tsvetantsvetanov.substack.com/p/ai-multiplies-your-tech-debt-but</link><guid isPermaLink="false">https://tsvetantsvetanov.substack.com/p/ai-multiplies-your-tech-debt-but</guid><dc:creator><![CDATA[Tsvetan Tsvetanov]]></dc:creator><pubDate>Fri, 30 Jan 2026 07:44:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!WdmD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F808cd3e7-19d5-46b8-8452-437a4920e16e_768x1376.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;m seeing several kinds of software professionals around me.</p><p>The first kind are totally embracing it. Letting it write heaps of bad code and deploying that to production. No tests, no refactoring, just feature after feature. Amplifying their bad practices with AI.</p><p>The second kind are really wary of it. They think it has no place in software development. They&#8217;ve tried a few prompts here and there, saw that it didn&#8217;t generate one-shot results and gave up on it. They&#8217;re proponents of software development as a craft and think that unless the code is hand-written it won&#8217;t stand up to scrutiny.</p><p>The third kind are the ones that are embracing it but heaping tons and tons of reviews on the code. They scrutinize every line, try to understand it thoroughly and take utmost caution.</p><p>The fourth kind are the orchestrators. This is a new breed of developers who have unlimited access to tokens. They learn how to span a multitude of agents to work on different tasks. Either on the same project or different ones. They create their own orchestration harnesses as there&#8217;s nothing proven yet. It&#8217;s an uncharted teritory.</p><p>And lastly, I&#8217;d say, there are the engineers. They might have parts of the other kinds as well. But they guide AI through tests, develop context-specific tools to understand their systems better, focus on proper architecture and refactoring. They embrace AI through practices that have been proven to yield high quality results in a fast manner over the past decades.</p><p>I can&#8217;t say which kind of software professional is right or wrong. But I&#8217;m seeing that a crucial part of the approaches embracing AI is understanding the technical debt cadence.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WdmD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F808cd3e7-19d5-46b8-8452-437a4920e16e_768x1376.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WdmD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F808cd3e7-19d5-46b8-8452-437a4920e16e_768x1376.png 424w, https://substackcdn.com/image/fetch/$s_!WdmD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F808cd3e7-19d5-46b8-8452-437a4920e16e_768x1376.png 848w, https://substackcdn.com/image/fetch/$s_!WdmD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F808cd3e7-19d5-46b8-8452-437a4920e16e_768x1376.png 1272w, https://substackcdn.com/image/fetch/$s_!WdmD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F808cd3e7-19d5-46b8-8452-437a4920e16e_768x1376.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WdmD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F808cd3e7-19d5-46b8-8452-437a4920e16e_768x1376.png" width="430" height="770.4166666666666" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/808cd3e7-19d5-46b8-8452-437a4920e16e_768x1376.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1376,&quot;width&quot;:768,&quot;resizeWidth&quot;:430,&quot;bytes&quot;:1747893,&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://tsvetantsvetanov.substack.com/i/186279047?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F808cd3e7-19d5-46b8-8452-437a4920e16e_768x1376.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_!WdmD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F808cd3e7-19d5-46b8-8452-437a4920e16e_768x1376.png 424w, https://substackcdn.com/image/fetch/$s_!WdmD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F808cd3e7-19d5-46b8-8452-437a4920e16e_768x1376.png 848w, https://substackcdn.com/image/fetch/$s_!WdmD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F808cd3e7-19d5-46b8-8452-437a4920e16e_768x1376.png 1272w, https://substackcdn.com/image/fetch/$s_!WdmD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F808cd3e7-19d5-46b8-8452-437a4920e16e_768x1376.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Using AI makes you fast. And you&#8217;ve probably already found out that with this speed it amplifies your practices. If they&#8217;re good, you&#8217;re just doing better stuff at a higher pace. If they&#8217;re bad, you&#8217;re accumulating tech debt faster. But I don&#8217;t think this is the issue we should focus on. By basically saying that bad software organizations will become worse through AI we&#8217;re limiting our views to a static world without feedback. However, the world is fairly dynamic and there are feedback loops all around us. And humans change their actions through those feedback loops.</p><p>Which brings me to the point that the fact that AI amplifies bad practices might actually be for the good of the industry. Before it might&#8217;ve taken years for you to see how a system degrades to a big ball of mud. Now, especially if you&#8217;re orchestrating agents, you can see that in the matter of weeks. Even days maybe. It&#8217;s an unprecedented learning opportunity where one can understand how engineering decisions form the future of a system. And then rewrite the system with better engineering decisions at hand.</p><p>Imagine the following scenarios. Or better&#8212;try them with your own toy projects.</p><p>Implement a system using AI without <strong>any</strong> tests. Just plow your way through feature after feature. See when it starts to break too much. Maybe simpler systems can be modified indefinitely. Maybe frontend-heavy systems are harder to maintain in that way. Or maybe certain LLM models and agentic frameworks fare better without tests for certain kinds of systems than others.</p><p>Implement a system test-first. Either through behavior-driven tests or tests tightly coupled to your implementation. See how the system evolves then. Maybe AI is &#8220;smart&#8221; enough to maintain a bad test harness and thus prevent regressions. Or maybe if you don&#8217;t care about the tests at all, AI makes them pass through mocks. And the system under test hasn&#8217;t been tested at all.</p><p>Focus really hard on caring about proper architecture. With tests or without them. What happens then? Can the system evolve in the long term even if there&#8217;s no regression harness? Which kinds of architecture are best for this system? Maybe you can spawn multiple Claude Code instances each betting on a specific design direction and see which goes the farthest. You can try setting this up for a fairly complex system and see when things start to break. You couldn&#8217;t have done this before as coding just a single architectural direction by hand would&#8217;ve required weeks or months of work.</p><p>Now, what if you apply these practices on the level of agent orchestration? Can you find a way to work on 5-10 features at once across several projects without system quality degrading? How? Maybe for each 1 hour of work you have to dedicate 4 hours of refactoring. If so, does that lead to better outcomes overall? When do such systems degrade? What happens to your stress levels having to manage so many contexts at once? Or maybe technical debt won&#8217;t matter as each system that eventually crumbles can be converted to a spec from which a new, high quality system can be replicated and thus you can continue from a point of quality.</p><p>By now you should probably get my point. If you don&#8217;t know how to write high quality code or the quality diminishes because traditional practices can&#8217;t keep pace with the throughput of LLMs, you can still benefit immensely from AI. As long as you learn you have much faster ways of gaining feedback. Ways that weren&#8217;t available to us before. So at some point, sooner rather than later, you&#8217;ll learn which practices actually amplify throughput without risk.</p><p>Maybe the only question that remains is: Who is going to suffer from this fast-paced feedback loop? Because people will write safety-critical systems that will fail. And customers and businesses will be immensely affected because people have applied practices they don&#8217;t yet understand to problems that are of high importance. So, if you want to ethically embrace AI, try it first on toy projects and use the fast feedback loop to scale these toy projects to the calibre of real-life production systems. See where they break and why. If you do this enough, you&#8217;ll understand how to apply AI properly to production-grade systems as well.</p>]]></content:encoded></item><item><title><![CDATA[AI Builder Brief #12]]></title><description><![CDATA[Just Talk To It - the no-bs Way of Agentic Engineering]]></description><link>https://tsvetantsvetanov.substack.com/p/ai-builder-brief-12</link><guid isPermaLink="false">https://tsvetantsvetanov.substack.com/p/ai-builder-brief-12</guid><dc:creator><![CDATA[Tsvetan Tsvetanov]]></dc:creator><pubDate>Mon, 26 Jan 2026 08:40:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!XRpg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ecdde01-4b3d-41f4-9e37-67f35984166d_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XRpg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ecdde01-4b3d-41f4-9e37-67f35984166d_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XRpg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ecdde01-4b3d-41f4-9e37-67f35984166d_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!XRpg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ecdde01-4b3d-41f4-9e37-67f35984166d_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!XRpg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ecdde01-4b3d-41f4-9e37-67f35984166d_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!XRpg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ecdde01-4b3d-41f4-9e37-67f35984166d_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XRpg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ecdde01-4b3d-41f4-9e37-67f35984166d_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0ecdde01-4b3d-41f4-9e37-67f35984166d_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1900441,&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://tsvetantsvetanov.substack.com/i/185815877?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ecdde01-4b3d-41f4-9e37-67f35984166d_1024x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XRpg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ecdde01-4b3d-41f4-9e37-67f35984166d_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!XRpg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ecdde01-4b3d-41f4-9e37-67f35984166d_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!XRpg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ecdde01-4b3d-41f4-9e37-67f35984166d_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!XRpg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ecdde01-4b3d-41f4-9e37-67f35984166d_1024x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://steipete.me/posts/just-talk-to-it">Just Talk To It - the no-bs Way of Agentic Engineering</a></p><p><strong>How is it useful? </strong>Mostly outlines the benefits of Codex over Claude Code. And adds some other tips and tricks for agentic engineering.</p><p><strong>Commentary: </strong>I might be sold on trying Codex and see how it compares to Claude Code. I&#8217;m mostly an Anthropic fan but there were some compelling arguments for Codex. I found it strange that the author doesn&#8217;t rely on TDD that much and meanwhile shared some issues that he had that are easily solvable by test-first approaches. Another thing that&#8217;s on my radar to try is Whispr Flow.</p><p><a href="https://github.com/affaan-m/everything-claude-code">Everything Claude Code</a></p><p><strong>How is it useful? </strong>A collection of claude code skills, plugins, etc.</p><p><strong>Commentary: </strong>Well, you should just play with it and see if it&#8217;s useful.</p><p><a href="https://www.linkedin.com/feed/update/urn:li:activity:7420367480969388032/">Trust, Accountability &amp; AI Coding Swarms</a></p><p><strong>How is it useful? </strong>Provides a framework of thinking for trade offs between gradients of supervision of AI generated software.</p><p><strong>Commentary: </strong>I resonate with it. The key message is that you basically trade off speed of delivery vs. risk of failure. If you&#8217;re writing systems that have a limited blast radius or impact in case of an incident, it&#8217;s okay to mostly vibe code them (as long as they&#8217;re architected for change). However, if the systems you&#8217;re implementing will lead to a lot of reputational damage or money loss, then you have to be more careful in utilizing AI in developing them.</p><p><a href="https://www.srinathkrishna.com/posts/2026-01-20-ralph-wiggum-abundance/">Ralph Wiggum, Abundance and Software Engineering</a></p><p><strong>How is it useful? </strong>An essay on how you should change your mindset about typing code by hand in the age of AI for coding.</p><p><strong>Commentary: </strong>Mostly agree with this article. So I don&#8217;t have much to add.</p><p><a href="https://www.linkedin.com/pulse/scaling-ai-without-entropy-ctos-real-challenge-dimitar-bakardzhiev-6rkde/">Scaling AI Without Scaling Entropy: The CTO&#8217;s Real Challenge</a></p><p><strong>How is it useful? </strong>It outlines a framework for tech leaders on how to scale AI engineering efforts in their teams.</p><p><strong>Commentary: </strong>The focus is mostly on sharing the decision making process of people with AI through context. In other words getting decision logic out of people&#8217;s heads and into AI. In this way we can be more sure AI follows our intention and scale our systems without unnecessary chaos. It seems reasonable, but I&#8217;m not sure it&#8217;s the right time for that. Like, you can start encoding decision making in context files. But this doesn&#8217;t guarantee AI will follow the decisions there. Also, you&#8217;ll have to make a considerable effort in encoding a common decision-making framework across the org. This might be doable on a team level, but it should be done on any level above.</p><p><a href="https://www.eferro.net/2026/01/fast-feedback-fast-features-my-ai.html">Fast Feedback, Fast Features: My AI Development Experiment</a></p><p><strong>How is it useful? </strong>A field report on why quality is important when working with AI.</p><p><strong>Commentary: </strong>I was really happy when I read that this guy spends 4 hours for making things high quality for every 1 hour of code changes. It might sound ludicrous but this is something that enables fast changes for the long run. Otherwise, your system gets messy and harder to change. You might be spending 4 hours adding features and 1 hour for refactoring for weeks and slowly get into a place where you have to spend days just to untangle the mess and add 1 low-value bug fix. I also liked the observation that now we don&#8217;t have excuses to keep quality high. &#8220;Time&#8221; is not of the essence since AI can do things fast for us.</p><p><a href="https://github.com/jordanhubbard/AgentiCorp">AgentiCorp</a></p><p><strong>How is it useful? </strong>AgentiCorp is a lightweight AI coding agent orchestration system that manages workflows, handles agent lifecycle, and provides real-time event streaming for monitoring and coordination.</p><p><strong>Commentary: </strong>Haven&#8217;t tried it yet (there are so many tools out there&#8230;) But I think we should explore more and more such platforms as 2026 will be the year of agent orchestration.</p>]]></content:encoded></item><item><title><![CDATA[Experiment with AI, don't just hate it]]></title><description><![CDATA[The current state of AI for software engineering is a state of war.]]></description><link>https://tsvetantsvetanov.substack.com/p/experiment-with-ai-dont-just-hate</link><guid isPermaLink="false">https://tsvetantsvetanov.substack.com/p/experiment-with-ai-dont-just-hate</guid><dc:creator><![CDATA[Tsvetan Tsvetanov]]></dc:creator><pubDate>Fri, 23 Jan 2026 07:54:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!pWeH!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7467fa6-7d32-4f0b-801c-a09bf896b92e_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The current state of AI for software engineering is a state of war. Companies, teams and individuals are figuring out what are the practices, technologies and configurations that yield results. And war happens on multiple levels.</p><p>On the level of foundational models OpenAI, Anthropic, DeepSeek, Google, open source models and all the players are trying to find the limits to LLMs or maybe even <a href="https://garymarcus.substack.com/p/alphaproof-alphageometry-chatgpt">experiment with neuro symbolic</a> approaches. They find out that there&#8217;s hardly any moat in this foundational technology so they&#8217;re exploring different ways to stay in business. We&#8217;ve no idea who is going to survive or not.</p><p>On top of that we&#8217;re starting to have agentic systems that seem to multiply the level of capability LLMs have. Claude Code and Cursor started to show really good results in the software engineering landscape. People are now experimenting with agent orchestration. Where the most notable tools seem to be <a href="https://steve-yegge.medium.com/welcome-to-gas-town-4f25ee16dd04">Gas Town</a> and <a href="https://github.com/ruvnet/claude-flow">Claude Flow</a>. Fields outside of coding seem to find it harder to utilize agentic systems but I believe 2026 will start showing the first promising results. In the coming years we might have some big breakthroughs in application of neuro symbolic AI which will also lead to solving LLM&#8217;s biggest problem&#8212;hallucination.</p><p>It&#8217;s too early to have any idea who is going to win and what is actually achievable with AI at this point. Especially in the long run. But one thing is clear: it brings benefits. Especially for a software engineer.</p><h3>What should an individual do?</h3><p>Assume whoever says they&#8217;ve found the perfect way to use AI for individual productivity is lying. This might be unconscious. Or it might work pretty well for them. But still, it might not be the best or most useful way. It&#8217;s just still too early to come to such conclusions. We won&#8217;t know for sure what works well and what doesn&#8217;t until we see the first big failure because of AI. And this failure will come sooner or later. As <a href="https://www.linkedin.com/posts/simonwardley_an-interesting-trend-im-seeing-is-that-some-activity-7405743850549379072-6HV_?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAC8v6bsB3eiWHpSOFZD69a3XNQWHcoz3BBo">Simon Wardley says</a>, it&#8217;ll be because someone trusted AI to make enough changes to the system that they don&#8217;t understand. So, until a few years pass we can&#8217;t be sure of the winning practices in the field.</p><p>You, as an individual, should verify and experiment with what comes. At first, this was just using LLMs to help you code and copy-pasting it in your editor. Later on came Claude Code and other agentic coding tools. Now, we&#8217;re seeing agent orchestration platforms come into the mix. This is on the technological side.</p><p>We also have practices. Experiment writing augmented code with TDD, with test-after, with no tests. With formal verification. In an obscure language. Within a pair. Within a mob. Without any supervision. By reviewing each line of code. By writing tests by hand and letting AI write the code. With writing code by hand and letting AI write your tests. With letting a <a href="https://awesomeclaude.ai/ralph-wiggum">Ralph Wiggum loop</a> implement a feature for you overnight. With letting AI write your infrastructure in Terraform. With working on 2 things at once with different Claude Codes. Or 5 things at once with Gas Town. Do spec driven development.</p><p>Experiment with whatever crazy idea you can think of. And see where it leads you. This is the only way to see what really works and what not. And separate marketing lies from reality. Sure it&#8217;ll take you money and time but I&#8217;m afraid otherwise you might be too late to adapt.</p><h3>What should teams and organisations do?</h3><p>First of all, don&#8217;t constrain your engineers to a specific best practice of agentic coding. There&#8217;s no such practice right now. And what you&#8217;ve chosen today may well be obsolete and counter-productive tomorrow. You don&#8217;t want that to hinder your progress. Instead, give access to as many tools as possible and as much money as possible to your engineers and let them figure it out. They&#8217;re in the trenches and they&#8217;re facing the everyday problem of evolving your software systems so that the business can profit from them. And don&#8217;t conclude too early that an experiment is a failure or not.</p><p>Second, try to think above the individual level. Currently we&#8217;re focused on how to make an engineer more productive. How to teach them to use Claude Code. Or how to orchestrate multiple agents. However, if we really want productivity we should start looking into team-wide practices. If now a single engineer can churn out 10x the features, how can we ensure these can be processed by the team at the same pace? Can the team 10x its output as well? And will this 10x output lead to 10x outcomes? What practices, technologies and techniques will enable you to utilise this productivity?</p><p>And if the teams become much more productive, will the organization be able to handle this? Will your customers be able to? If not, what bottlenecks have you got in place that prevent this productivity to be spread around? And finally, does AI really give you 10x the productivity? Or 2x? Or maybe even 1x as you&#8217;re fast to churn stuff out but then waste a ton more time to maintain that slop.</p><p>These are all questions that should be taken into account inside an engineering organization that wants to benefit from AI. Otherwise, you&#8217;ll get mired in vanity metrics and illusions of high performance.</p><h3>Conclusion</h3><p>It&#8217;s too early to commit to a certain AI practice or technology. Experiment as an individual. Experiment as a team. Experiment as an organization. This is the only way to find out what works. And to come out as a winner or at least not a complete loser.</p>]]></content:encoded></item><item><title><![CDATA[AI Builder Brief #11]]></title><description><![CDATA[LLM predictions for 2026, shared with Oxide and Friends]]></description><link>https://tsvetantsvetanov.substack.com/p/ai-builder-brief-11</link><guid isPermaLink="false">https://tsvetantsvetanov.substack.com/p/ai-builder-brief-11</guid><dc:creator><![CDATA[Tsvetan Tsvetanov]]></dc:creator><pubDate>Mon, 19 Jan 2026 08:08:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!pWeH!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7467fa6-7d32-4f0b-801c-a09bf896b92e_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3><a href="https://simonwillison.net/2026/Jan/8/llm-predictions-for-2026/">LLM predictions for 2026, shared with Oxide and Friends</a></h3><p><strong>How is it useful?</strong> An overview of what to be prepared for in 2026.</p><p><strong>Commentary: </strong>I can&#8217;t say anything about the K&#257;k&#257;p&#333; parrots piece. For the other parts:</p><ol><li><p>I&#8217;m not sure if LLMs are going to write code we can trust without reviewing or proper formal verification. If they write good code, it means that by the end of 2026 we&#8217;ll be able to vibe code everything. I still think we&#8217;re far away from that;</p></li><li><p>On the Jevons paradox, I see no way around it. So for me it&#8217;s a solved matter;</p></li><li><p>I agree with all the rest. Especially the &#8220;Challenger disaster&#8221; part about coding agent security. I might even frame it as &#8220;another Knight Capital&#8221; because of vibe coding</p></li></ol><h3><a href="https://vercel.com/blog/introducing-react-best-practices">Introducing: React Best Practices</a></h3><p><strong>How is it useful? </strong>Prevent most of issues when you let an agent write React code for you.</p><p><strong>Commentary: </strong>I think this is in the right direction. Curious to see how consuming such a big library will affect context windows.</p><h3><a href="https://tessl.io/blog/code-as-commodity">Code as Commodity</a></h3><p><strong>How is it useful? </strong>It outlines a possible future of roles in software engineering.</p><p><strong>Commentary: </strong>It&#8217;s quite broad and seems to focus on vibe coding or at least prematurely removes care for the implementation and focusing our trust on the output of the agent. Without considering guardrails for that trust. While his general idea aligns with my vision of how we&#8217;re going to move as a profession, things still feel quite imaginary.</p><h3><a href="https://builders.ramp.com/post/why-we-built-our-background-agent">Why We Built Our Own Background Agent</a></h3><p><strong>How is it useful? </strong>An interesting background agent coming with sandboxing and verification.</p><p><strong>Commentary: </strong>I like that they started with verifiability &#8212; running tests, looking at telemetry, inspecting visual output. I wonder how many of the verification steps are setup by a human or the agent is trusted with creating them. They seem to also have good sandboxing support.</p><h3><a href="https://medium.com/@travis_80969/untethered-vibe-coding-anywhere-e438b0d2fb9e">Untethered: Vibe Coding Anywhere</a></h3><p><strong>How is it useful? </strong>Another agent orchestration platform.</p><p><strong>Commentary: </strong>These platforms seem to sprung up from everywhere. I think people are realising the power of orchestrating agents. And since LLMs like Claude have become fairly decent at writing code it&#8217;s becoming easier and easier to produce software with less supervision. The only thing that I&#8217;m concerned is what happens with production-grade systems? For now, we see this applied to hobby projects. But will the quality be good enough for releasing software to millions of users?</p><h3><a href="https://every.to/guides/agent-native">Agent-native Architectures</a></h3><p><strong>How is it useful? </strong>Outlines good practices for building agentic systems.</p><p><strong>Commentary: </strong>Quite detailed and extensive. I think whoever builds such systems must have a deeper look in it and learn from this article.</p><h3><a href="https://openwork.software/">Open Work</a></h3><p><strong>How is it useful? </strong>The open-source Claude Work alternative.</p><p><strong>Commentary: </strong>A GUI for <a href="https://opencode.ai/">OpenCode</a>. However, I tried to install it on my Mac and it just exited with code &#8220;1&#8221;. Didn&#8217;t have time to debug it properly.</p><h3><a href="https://www.youtube.com/watch?v=2HfhJ0d5uv0">The AI-Coding Revolution: Spec-Driven Development</a></h3><p><strong>How is it useful? </strong>Have a look at the nWave framework for multi-agent orchestration.</p><p><strong>Commentary: </strong>This is still on my watch list but I&#8217;m curious to see their approach. Mostly because they were recommended to me by a person I respect. I&#8217;m a bit wary on the spec-drive development part. It seems that focusing on providing written specifications upfront is quite waterfallish. The part with &#8220;using cost-efficient shadow models to peer-review code and catch hallucinations before they compound&#8221; seems like a plausible way to tackle a big issue I&#8217;ve seen with my specification-based approaches.</p>]]></content:encoded></item><item><title><![CDATA[AI makes learning any tech easy]]></title><description><![CDATA[A while ago I had to learn Terraform.]]></description><link>https://tsvetantsvetanov.substack.com/p/ai-makes-learning-any-tech-easy</link><guid isPermaLink="false">https://tsvetantsvetanov.substack.com/p/ai-makes-learning-any-tech-easy</guid><dc:creator><![CDATA[Tsvetan Tsvetanov]]></dc:creator><pubDate>Fri, 16 Jan 2026 05:28:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!5Cw3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3944cec-e75b-42b3-a719-c500898df066_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A while ago I had to learn Terraform. I have fair knowledge of infrastructure and what should be used to solve which problem in AWS. However, I have never used Terraform before. Whenever I worked on a software project, it was either simple or things were already setup.</p><p>Now I was in a position where I had to understand a fairly complicated platform which let users spin up their own tech stack in AWS. It had a ton of specific services and concepts: EC2s, security groups, VPCs, S3s, init scripts, a bunch of apps, load balancers, custom proxies, you name it. And a fairly big Terraform project to set everything up. So I had to understand this and be able to build upon it. Fast.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5Cw3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3944cec-e75b-42b3-a719-c500898df066_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5Cw3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3944cec-e75b-42b3-a719-c500898df066_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!5Cw3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3944cec-e75b-42b3-a719-c500898df066_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!5Cw3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3944cec-e75b-42b3-a719-c500898df066_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!5Cw3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3944cec-e75b-42b3-a719-c500898df066_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5Cw3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3944cec-e75b-42b3-a719-c500898df066_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b3944cec-e75b-42b3-a719-c500898df066_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1777043,&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://tsvetantsvetanov.substack.com/i/184735742?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3944cec-e75b-42b3-a719-c500898df066_1024x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5Cw3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3944cec-e75b-42b3-a719-c500898df066_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!5Cw3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3944cec-e75b-42b3-a719-c500898df066_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!5Cw3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3944cec-e75b-42b3-a719-c500898df066_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!5Cw3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3944cec-e75b-42b3-a719-c500898df066_1024x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>What does an AI-Native engineer do in that case? They open their favourite AI. And prompt it:</p><pre><code>You are my Terraform teacher. Do a crash course for me so I can understand this and apply it. I'm looking into AWS infra setups.

Make it complex and fast paced. I have a lot of experience and can deal with it.

Split the teaching into chunks. Give me exercises after each chunk, so I can make sure I understand it. With the first chunk, share a playground I can use to see how changes in Terraform affect the deployment.</code></pre><p>This generated the mother of all crash courses. Brief, to the point, and too crashy for my taste. It instructed me how to connect with my AWS account. Then split everything in chunks as instructed. After each chunk there was a set of exercises. It only proceeded to the next chunk when I told it. However, being a cheap Bulgarian engineer, I decided that I want a proper environment to play in without an AWS account. So, before I continued with the next chunk I instructed it to let me setup <code>localstack</code>:</p><pre><code>Okay, how can I link this to a localstack instance that simulates aws?</code></pre><p>Then it proceeded to provide a complicated setup with a bunch of AWS services. Instead of the simplest thing that I can use to test whether my setup works. So, I had some back and forth with it until we made the barest setup work.</p><p><strong>Key insight: </strong>When learning, start with the minimum necessary demo environment.</p><p>Unfortunately, the initial prompt has set the course to be too fast paced for me. So I had to start over. I opened a new Claude session and typed:</p><pre><code>You are my Terraform teacher. Do a crash course for me so I can understand this and apply it. I'm looking into AWS infra setups.

Split the teaching into chunks. Give me exercises after each chunk, so I can make sure I understand it. 

I already have a simple localstack setup and this is my first TF file:

...</code></pre><p>This generated a way better course which contained smaller chunks of information, delivered piece by piece. Each chunk had a few paragraphs of explanations + examples that I could read through and understand. Then, it was followed by a set of simple exercises which I could try on my machine to make the knowledge run through my fingers. Of course, as we dived deeper into Terraform, the sections grew larger and the exercises became more complicated. But in the span of 6 such modules I was able to go through all the Terraform theory and apply it, in the span of a few hours.</p><p><strong>Key insight: </strong>You can prompt the AI to generate a course as fast paced as you want it to.</p><h3>What does this mean for learning tech?</h3><p>You no longer have to wade through tutorials or books for popular technologies. If it&#8217;s in the AI&#8217;s training data, then you can prompt your way through a personalised training. It&#8217;s way better than reading a book or an article as this training provides exactly the exercises you need and the knowledge in a format you can digest easily. And if it hadn&#8217;t provided it for some reason, you&#8217;ll be able to prompt your way through this.</p><h3>Why you had to learn it though?</h3><p>Why bother understanding Terraform at all? Or Rust? Or AWS? Or Vitest? Just delegate it to AI.</p><p>I still feel uneasy about not understanding what happens under the hood of AI-generated software. Basically, AI generates all of my Terraform right now. But I review it. I don&#8217;t know of any automated tests for infrastructure. So I had to wade through the details and make sure I know what happens under the hood. It&#8217;s still faster than having me to type it in and debug obscure configuration issues. I&#8217;m focused on the overall form and function, the AI fills in the details. If I haven&#8217;t learned Terraform, I wouldn&#8217;t know what good looks like and what should I strive for.</p><p>Also, I think infrastructure work is a bit more critical part than writing the software itself. After all, a software change can first be tested locally and made sure to work properly&#8212;you have automated verifications and all that. However, with infra, you have to actually apply the changes to see what happens. And once that reaches production, you can cause an outage easily if you don&#8217;t know what you&#8217;re doing.</p><h3>Conclusion</h3><p>I&#8217;ve shown you how you can learn any non-obscure tech you like with AI. And I believe this makes learning easier by tailoring the material to your needs. You can make the course faster, longer, more complex or simple, with just a few prompts. You can add exercises or reduce them or even introduce real-world projects to do at the end of a section. For me, this greatly helped understand a piece of technology that I hadn&#8217;t used before. And now I&#8217;m applying it successfully to production-grade systems. What&#8217;s not to like about that?</p>]]></content:encoded></item><item><title><![CDATA[AI Builder Brief #10]]></title><description><![CDATA[AI and the Next Economy]]></description><link>https://tsvetantsvetanov.substack.com/p/ai-builder-brief-10</link><guid isPermaLink="false">https://tsvetantsvetanov.substack.com/p/ai-builder-brief-10</guid><dc:creator><![CDATA[Tsvetan Tsvetanov]]></dc:creator><pubDate>Mon, 12 Jan 2026 08:00:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!pWeH!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7467fa6-7d32-4f0b-801c-a09bf896b92e_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a href="https://www.oreilly.com/radar/ai-and-the-next-economy/">AI and the Next Economy</a></p><p><strong>How is it useful? </strong>It makes the case that currently AI centralizes power instead of distributing prosperity. Thus making society poorer.</p><p><strong>Commentary: </strong>It seems logical that as long as you concentrate resources in the AI giants, the society will become poorer and poorer. Which, in turn, will starve the giants from resources. What if we could end this process earlier? How?</p><p><a href="https://github.com/citypaul/.dotfiles/blob/main/claude/.claude/skills/mutation-testing/SKILL.md">Paul Hammond&#8217;s Mutation Testing Claude Skill</a></p><p><strong>How is it useful?</strong> Mutation testing is key in validating that the AI has written an extensive test suite or hasn&#8217;t implemented something you don&#8217;t want. However, it&#8217;s expensive. This skill attempts at making it cheaper.</p><p><strong>Commentary: </strong>A while ago I experimented with this approach on a codebase because I found it hard to setup <a href="https://stryker-mutator.io/">Stryker</a>. However, back then it didn&#8217;t work fast. What Paul proposes seems quite good because it specifies the mutation possibilities. I definitely plan to try it out.</p><p><a href="https://steve-yegge.medium.com/six-new-tips-for-better-coding-with-agents-d4e9c86e42a9">Six New Tips for Better Coding With Agents</a></p><p><strong>How is it useful? </strong>A treasure trove of advice on more effective coding with agents.</p><p><strong>Commentary: </strong>Most of the tips are quite valuable and detailed. I&#8217;ve used them with success and they align with my experience. Maybe the scariest is the first one &#8220;Software is now throwaway&#8221;. Something in me is telling me that this is a really risky and wasteful assumption. However, I&#8217;m still quite open minded as we&#8217;re in the war stage of AI adoption. We have to experiment until things saturate and the winning approaches start to appear. But we shouldn&#8217;t forget to make this experimentation safe.</p><p><a href="https://tessl.io/blog/from-prompts-to-agents-md-what-survives-across-thousands-of-runs/">From Prompts to AGENTS.md: What Survives Across Thousands of Runs</a></p><p><strong>How is it useful? </strong>Valuable ideas for utilizing AGENTS.md better.</p><p><strong>Commentary: </strong>A really interesting set of ideas for AGENTS.md. I think about trying it out sometime</p><p><a href="https://ainativedev.io/podcast/87">What AI Engineering Looks Like at Meta, Coinbase, ServiceTitan and ThoughtWorks</a></p><p><strong>How is it useful? </strong>Get an insider look on how some companies do AI Engineering.</p><p><strong>Commentary: </strong>I was a bit disappointed from the over-reliance on spec-driven development. People talked more about technology than meaningful practices that are technology agnostic. Personally, I&#8217;ve seen that principles are better than choosing a specific technology. But I guess that&#8217;s what the market wants.]</p><p><a href="https://awesomeclaude.ai/ralph-wiggum">Ralph Wiggum - AI Loop Technique</a></p><p><strong>How is it useful? </strong>Let Claude Code run until it finishes a task.</p><p><strong>Commentary: </strong>This tool comes from the need that Claude Code can&#8217;t handle long-running tasks well. However, I&#8217;m really skeptical for the need of such functionality. Like, running Claude Code overnight with specs about a really complicated application seems to delay the feedback loop unacceptably. What if at the end you find out that this wasn&#8217;t what you wanted? You would&#8217;ve wasted hundreds of dollars on tokens and will have to start over.</p>]]></content:encoded></item><item><title><![CDATA[My AI-Native Setup for TypeScript]]></title><description><![CDATA[This is a short piece on how do I setup a project for proper AI-Native development.]]></description><link>https://tsvetantsvetanov.substack.com/p/my-ai-native-setup-for-typescript</link><guid isPermaLink="false">https://tsvetantsvetanov.substack.com/p/my-ai-native-setup-for-typescript</guid><dc:creator><![CDATA[Tsvetan Tsvetanov]]></dc:creator><pubDate>Fri, 09 Jan 2026 07:26:35 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3Yvi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff183372d-7650-46f5-accd-5b866bae1a57_1376x768.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_!3Yvi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff183372d-7650-46f5-accd-5b866bae1a57_1376x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3Yvi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff183372d-7650-46f5-accd-5b866bae1a57_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!3Yvi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff183372d-7650-46f5-accd-5b866bae1a57_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!3Yvi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff183372d-7650-46f5-accd-5b866bae1a57_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!3Yvi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff183372d-7650-46f5-accd-5b866bae1a57_1376x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3Yvi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff183372d-7650-46f5-accd-5b866bae1a57_1376x768.png" width="1376" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f183372d-7650-46f5-accd-5b866bae1a57_1376x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1376,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1388119,&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://tsvetantsvetanov.substack.com/i/183995371?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff183372d-7650-46f5-accd-5b866bae1a57_1376x768.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_!3Yvi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff183372d-7650-46f5-accd-5b866bae1a57_1376x768.png 424w, https://substackcdn.com/image/fetch/$s_!3Yvi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff183372d-7650-46f5-accd-5b866bae1a57_1376x768.png 848w, https://substackcdn.com/image/fetch/$s_!3Yvi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff183372d-7650-46f5-accd-5b866bae1a57_1376x768.png 1272w, https://substackcdn.com/image/fetch/$s_!3Yvi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff183372d-7650-46f5-accd-5b866bae1a57_1376x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This is a short piece on how do I setup a project for proper AI-Native development.</p><p>First of all, everything here is coming from and evolving based on the following principles:</p><ol><li><p>Proper AI-Native Engineering needs deterministic verification loops;</p></li><li><p>Agents are the future and we should aim toward orchestration of agents.</p></li></ol><h3>Deterministic Verification Loops</h3><p>What do I mean by &#8220;deterministic verification loops&#8221;? Basically, automated test cases, linters, type checkers, mutation tests, etc. Everything where I can use code to prescribe what quality looks like and let the agent always respect it when it implements the thing I want.</p><ul><li><p><a href="https://vitest.dev/">Vitest</a> + <a href="https://playwright.dev/">Playwright</a>/<a href="https://www.cypress.io/">Cypress</a> for automated testing. Playwright/Cypress are the foundation for my acceptance tests. Vitest is the foundation for lower-level tests. I mostly follow an inner-outer-loop TDD approach where acceptance tests are written first, followed by implementation through lower-level tests;</p></li><li><p><a href="https://eslint.org/">Eslint</a> for sane linting defaults;</p></li><li><p>TypeScript strict mode;</p></li><li><p><a href="https://stryker-mutator.io/">Stryker Mutator</a> for mutation testing. This ensures my tests have caught all edge cases and there&#8217;s no unwanted functionality implemented;</p></li><li><p><a href="https://typicode.github.io/husky/">Husky</a> for pre-commit hooks that make sure all checks pass, so we don&#8217;t commit bad code;</p></li><li><p><a href="https://knip.dev/">Knip.dev</a> to prune any unused dependencies, files and exports.</p></li></ul><p>This enables my flow of:</p><ol><li><p>Let the AI write tests based on my specification;</p></li><li><p>Verify the tests;</p></li><li><p>Let the AI implement the necessary functionality until all tests pass;</p></li><li><p>Let the AI run mutation tests to expand on the test completeness;</p></li><li><p>Commit which triggers a hook to make sure all checks pass;</p></li><li><p>Let AI fix anything that has remained;</p></li><li><p>Push and deploy.</p></li></ol><p>All of this runs in conjunction with <a href="https://github.com/citypaul/.dotfiles/tree/main/claude/.claude">Paul Hammond&#8217;s Claude Code configuration</a>.</p><h3>How This Enables Orchestration of Agents</h3><p>This flow greatly reduces the cognitive load for me. Such checks let me mostly care about proper tests and high level structure. Which leaves some bandwidth for working on multiple projects at once by following the same approach in another project. I&#8217;m still pretty new to this so even despite the reduction in cognitive load I find it hard to juggle more than 3 agents at once. However, I believe there&#8217;s some skill to it which will come with practice and enough trial and error.</p>]]></content:encoded></item></channel></rss>