<?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[Work Reorganized by Stijn Zanders]]></title><description><![CDATA[How AI is changing work, teams, management, and the systems companies run on.]]></description><link>https://www.zanders.dev</link><image><url>https://substackcdn.com/image/fetch/$s_!T1Y4!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb94f06e7-0b98-413c-a77c-5245679acf3c_1254x1254.png</url><title>Work Reorganized by Stijn Zanders</title><link>https://www.zanders.dev</link></image><generator>Substack</generator><lastBuildDate>Sun, 06 Sep 2026 11:41:42 GMT</lastBuildDate><atom:link href="https://www.zanders.dev/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Stijn]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[workreorganized@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[workreorganized@substack.com]]></itunes:email><itunes:name><![CDATA[Stijn Zanders]]></itunes:name></itunes:owner><itunes:author><![CDATA[Stijn Zanders]]></itunes:author><googleplay:owner><![CDATA[workreorganized@substack.com]]></googleplay:owner><googleplay:email><![CDATA[workreorganized@substack.com]]></googleplay:email><googleplay:author><![CDATA[Stijn Zanders]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[The agent is the easy part]]></title><description><![CDATA[What I learned cutting our data model complexity in half by building a harness]]></description><link>https://www.zanders.dev/p/the-agent-is-the-easy-part</link><guid isPermaLink="false">https://www.zanders.dev/p/the-agent-is-the-easy-part</guid><dc:creator><![CDATA[Stijn Zanders]]></dc:creator><pubDate>Tue, 11 Aug 2026 20:49:15 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Scv9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49fe18e3-b08f-4949-b909-e3262935225c_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Scv9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49fe18e3-b08f-4949-b909-e3262935225c_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Scv9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49fe18e3-b08f-4949-b909-e3262935225c_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Scv9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49fe18e3-b08f-4949-b909-e3262935225c_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Scv9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49fe18e3-b08f-4949-b909-e3262935225c_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Scv9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49fe18e3-b08f-4949-b909-e3262935225c_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Scv9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49fe18e3-b08f-4949-b909-e3262935225c_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/49fe18e3-b08f-4949-b909-e3262935225c_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3020346,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.zanders.dev/i/210806635?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49fe18e3-b08f-4949-b909-e3262935225c_1536x1024.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_!Scv9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49fe18e3-b08f-4949-b909-e3262935225c_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Scv9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49fe18e3-b08f-4949-b909-e3262935225c_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Scv9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49fe18e3-b08f-4949-b909-e3262935225c_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Scv9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49fe18e3-b08f-4949-b909-e3262935225c_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I used to spend a couple of days at a time refactoring the worst parts of our dbt project. With AI, the implementation got cheaper. And my own ability to scope, verify and review the changes became the bottleneck.</p><p>Refactoring was particularly bad for this. I tend to make quite large structural PRs, and the bigger they got, the harder they were to verify. So usually I opened these PRs and they didn&#8217;t go anywhere.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.zanders.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Work Reorganized by Stijn Zanders! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>When I learned we&#8217;ll have to onboard somebody new to our dbt project, I was reminded of the six years of accumulated tech debt we have, and decided now was the time to change that.</p><p>Around the same time, <a href="https://aiven.io">Aiven</a>, where I work, <a href="https://aiven.io/blog/aiven-acquires-flow-ai">acquired Flow AI</a>. They&#8217;d been building a harness for running analytical agents reliably on enterprise data. I&#8217;d heard plenty about agent harnesses by then and just wanted to understand the concept. The best way to do so was by building one. I didn&#8217;t use anything from Flow.</p><p>The only safe way to do this refactor was to make each change very easy to review. I didn&#8217;t want to put extra load on the team due to this refactor, and we shouldn&#8217;t have any incidents come up due to changes made by me. I&#8217;ve been using Claude Code for months and it can 100% make these changes. But the overhead for me to manage the agent sessions, worktrees, PRs and verification is too much to do manually.</p><p>So about two weeks ago I built a harness. I write the campaigns: the goals, the scope, the success criteria. Claude Code does the actual work. The harness orchestrates everything.</p><p>In nine days it opened 255 pull requests against our dbt project. I read all of them and merged 223. The median change was 25 lines across 2 files.</p><h2>What the loop actually does</h2><p>A harness sounds a bit mysterious, but it&#8217;s just a Python script that runs agents. I&#8217;d tried to build a harness a couple of times before and never got very far. It quickly became too complicated to understand. This time I focused on the most minimal setup: pick up one task, implement that, validate it, make a PR and log its work.</p><p>I call one run a tick. From there it was mostly trial and error: making sure each tick logged enough information for the next one to continue. The next tick starts from the log again rather than relying on whatever the previous Python process happened to have in memory. There&#8217;s no separate state to maintain. State is derived by replaying the log. Before doing something, the harness records what it&#8217;s about to do. If a run dies halfway through, the next run can see that and work out what happened. The harness is deterministic. Only the agent varies between runs. Same log, same pull request state, same decision, so when something goes wrong I can tell whether the harness made a bad decision or the agent did bad work.</p><p>The names I ended up with, since I use them throughout the article:</p><ul><li><p><strong>Campaign.</strong> One YAML file. One piece of related work, split into steps that run one at a time.</p></li><li><p><strong>Step.</strong> One change, with its own target and its own verification. The unit of work: one reviewable PR.</p></li><li><p><strong>Sweep.</strong> One pass across all campaigns, in priority order. Campaigns advance in parallel, up to twenty at a time, with at most one agent per campaign.</p></li><li><p><strong>Tick.</strong> One decision about one campaign: launch, wake, wait, terminate or escalate. Then it exits. A step usually takes several ticks: one to launch it, more to deal with what comes back.</p></li><li><p><strong>Agent.</strong> One Claude Code run doing a single step, in its own git worktree.</p></li><li><p><strong>Journal.</strong> The append-only log. State is rebuilt by replaying it rather than stored separately.</p></li></ul><p>The agents need to survive interruptions too, like me closing my laptop or my Google authentication expiring. Building models and comparing them against production is usually the slow part of a step. That also makes it the point where a run is most likely to die or hit its timeout. 60 runs have been interrupted so far. So, to solve that, each step is instructed to commit its work before validation. If a run dies halfway through a build with the change still sitting uncommitted in a worktree, that work is gone and the next attempt starts from nothing. If it&#8217;s committed first, the branch already holds the code and the next attempt only has to repeat the verification.</p><p>A tick has five things it can decide to do:</p><ul><li><p><strong>Launch.</strong> There&#8217;s work ready to go, so create a fresh git worktree, give the agent its brief, and let it work.</p></li><li><p><strong>Wake.</strong> There&#8217;s already an open pull request and something has changed. CI finished, an automated reviewer commented, a human asked something, or a data comparison came back. Send the agent back in to deal with that specific thing.</p></li><li><p><strong>Wait.</strong> Something is still running or waiting for an answer.</p></li><li><p><strong>Terminate.</strong> The change is ready for me to read, or the step is being given up on.</p></li><li><p><strong>Escalate.</strong> The agent found something real that isn&#8217;t this step&#8217;s job to fix.</p></li></ul><p>Most of these decisions are straightforward, except for the wake. Say Copilot reviews the PR and leaves a comment. The next tick sees it, wakes the agent, and the agent responds. Then another tick runs and sees the same comment again. The harness wakes the agent again, gets another answer, posts it again, and can keep doing that forever.</p><p>So these comments are logged against the commit they belong to. Once one has been answered at that commit, it stays answered until the commit changes.</p><h2>When it doesn&#8217;t go as expected</h2><p>Two things can go differently than planned, and they&#8217;re not the same. A punt is the agent saying the current step is unreachable. An escalation goes beyond a single step: it can address a campaign or the harness itself. It&#8217;s rarely a code change. A step can do both: punt its own work and still escalate something it found.</p><p>It&#8217;s important for the agent to be able to refuse to do its work. It can stop and say: This doesn&#8217;t make sense, so I&#8217;m not doing it. If the thing blocking the step changes later I can explicitly reopen it, but I don&#8217;t want the harness retrying the model until it eventually produces something. 38 steps have punted so far, some even multiple times.</p><p>Those refusals contain tons of information. If an agent can make the change but can&#8217;t prove that the result is equivalent, that tells me something about the model, the data around it, or the verification I gave it. A common example was array ordering. Two outputs were equivalent, but nondeterministic ordering made the parity check report a difference.</p><p>And if an agent can&#8217;t decline the work, eventually it will try to force an answer. I don&#8217;t want that.</p><p>Escalations I found through trial and error. An agent found a follow-up while working on a step. It correctly decided that fixing it would widen the scope of the PR, and wrote what it had found in a comment instead. The problem was that nothing actually reads every PR comment looking for future work, so the finding got lost. The agent had done exactly what I wanted and I still lost the information.</p><p>So agents write down what they found, why the current step shouldn&#8217;t own it, and what they think should happen next. The harness writes that to the journal and keeps surfacing unresolved escalations. Escalations became a way for the harness itself to evolve, not just the campaigns.</p><p>Over the course of the 255 PRs, there have been 138 escalations. Most of them don&#8217;t come to me. There&#8217;s an orchestrating agent above the individual step agents that picks them up. If it can resolve one confidently, it does and records why. If it can&#8217;t, it assembles the context and puts the decision in front of me. It could also use them as feedback about what functionality was missing.</p><p>One escalation last week came from an agent that couldn&#8217;t trust its own verification because a comparison had silently run against a stale table instead of production. The model it was migrating wasn&#8217;t the problem, so changing that model would have been the wrong fix. I added a pre-comparison check to the shared instructions instead. Every campaign gets it now, including campaigns I haven&#8217;t written yet.</p><h2>What broke</h2><p>The most difficult problems haven&#8217;t been agents making obviously bad changes. They&#8217;ve been cases where the system told me something completely reasonable that happened not to be true.</p><p>One involved punts. Agents run in fresh worktrees. Claude Code doesn&#8217;t trust a directory it hasn&#8217;t seen before, and at one point that meant the repo&#8217;s allow-list entries weren&#8217;t being applied. Those included the permissions needed for dbt, warehouse queries, commits and PR creation. Nothing crashed or obviously failed. The agent tried to do the work, got refused when it reached the tools it needed, and because the run was non-interactive there was nobody to ask. It concluded, quite reasonably, that it couldn&#8217;t verify the change and punted.</p><p>When you&#8217;re sitting in front of Claude Code, a missing permission is obvious. When nobody is there, the agent has to explain the failure to itself.</p><p>In the log, that looked exactly like a good punt: &#8220;Could not establish parity&#8221; looks the same whether the data actually disagrees or the tool needed to establish parity never ran. The reason an agent declined to act is useful information, and in this case that reason was simply false.</p><p>Preconditions caused a similar problem. Some campaign steps have gates that need to pass before the work starts. Originally, if a gate refused the step, that refusal was terminal, so from the harness&#8217;s point of view the work was finished. The first four times one of those gates fired for real, all four were the gate being wrong rather than the work being invalid. Nothing errored. The campaign just looked like it had nothing left to do. So now I treat a refusal as a reason to inspect the gate before assuming it tells me something true about the work.</p><p>I didn&#8217;t run into many problems like these while I was sitting in front of Claude Code using it interactively. They started appearing when I stopped being there.</p><h2>Human review</h2><p>I still read every pull request before it merges. I built around that assumption from the start. What&#8217;s important though is all the pre-work done before that: a pre-scoped task, an isolated worktree, explicit verification against production, every difference triaged and explained, feedback from Copilot, all comments addressed, and then me making the final decision.</p><p>None of that makes the agents safe. A 25-line mistake I can understand in a couple of minutes is a very different problem from a large AI-driven refactor across hundreds of lines and tens of files.</p><p>It also changes what I need from the model. A lot of the domain judgment has already happened when the campaign was created. The files were identified, the allowed patterns were specified, the verification bar is explicit, and the reasons to give up are written down.</p><p>The agent still has to work out how to implement the change. It doesn&#8217;t have to invent what a good migration means.</p><p>Because of that, these migrations can run on Sonnet rather than Opus. I did let Sonnet pull in Opus as an advisor when it needed help.</p><h2>Between runs</h2><p>A lot of the discussion around coding agents is still about what happens inside a run. Which model, which prompt, which skills, how much context, how much autonomy.</p><p>I care about those things too, but I spent very little time on them as I built this. Most of the engineering ended up happening between runs.</p><p>What work is allowed into the loop? How big can one unit of work get before I stop wanting to review it? What counts as success? What happens when the evidence is ambiguous? When should the agent retry, and when should it stop? When does something need to come back to me? And how do I know afterwards what actually happened?</p><p>Claude Code wrote the SQL, ran the checks, responded to reviewers and fixed what they found.</p><p>That turned out to be the easy part.</p><p>What I built was everything around it: deciding what work should enter the loop, keeping that work small, feeding the agent what came back from CI and review, giving it a way to refuse things it couldn&#8217;t verify, keeping track of what had already happened, and making the result cheap enough for me to review.</p><p>The better coding agents get, the less time I expect to spend wondering whether they can make the change. I&#8217;m much more interested now in what happens before they start, what we require before they stop, and what happens when nobody is sitting there watching.</p><h2>What I&#8217;m trying next</h2><p>So far this has only run on my laptop. We&#8217;re looking at open source solutions that could replace the whole harness and be centrally managed in the cloud, but honestly I&#8217;m not sure. For now, packaging it up and sharing it with the team seems to be the right way.</p><p>And we&#8217;ll be exploring other use cases than just refactoring. This is perfect for building out new models as well, and for cost optimisation.</p><p>The bottleneck is now figuring out campaigns and reviewing small changes. I know some companies judge the risk of PRs and approve the low-risk ones. Perhaps that&#8217;s what we&#8217;ll try as well. I strongly believe that in the long run it&#8217;s not feasible for humans to review every change anymore. What that looks like, I don&#8217;t know.</p><div><hr></div><p>A note on how I&#8217;ve written this: the harness has accumulated some ideas that have proper names in workflow and distributed systems: replay, leases, idempotency, durable execution. I didn&#8217;t start with any of those. I started with a Python file that launched agents, then kept fixing the ways it broke.</p><p>I&#8217;ve tried to explain it in that order here too. The concrete problem first, the mechanism I ended up with second, and the name for it only when the name is useful. This is not meant to be a general architecture for agent systems. It&#8217;s one harness, for one repo, run by one person, and it&#8217;s less than two weeks old.</p><p>The full spec for the harness is in a gist: <a href="https://gist.github.com/StijnZanders/f9cb894acde733b2fb839f04772245c4">https://gist.github.com/StijnZanders/f9cb894acde733b2fb839f04772245c4</a>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.zanders.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Work Reorganized by Stijn Zanders! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[When the floor rises, the boundaries move]]></title><description><![CDATA[What I look for in people now]]></description><link>https://www.zanders.dev/p/when-the-floor-rises-the-boundaries</link><guid isPermaLink="false">https://www.zanders.dev/p/when-the-floor-rises-the-boundaries</guid><dc:creator><![CDATA[Stijn Zanders]]></dc:creator><pubDate>Fri, 07 Aug 2026 08:30:04 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!L7i1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9587176f-2dbb-4b66-9a86-3a966a1bca48_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!L7i1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9587176f-2dbb-4b66-9a86-3a966a1bca48_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!L7i1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9587176f-2dbb-4b66-9a86-3a966a1bca48_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!L7i1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9587176f-2dbb-4b66-9a86-3a966a1bca48_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!L7i1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9587176f-2dbb-4b66-9a86-3a966a1bca48_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!L7i1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9587176f-2dbb-4b66-9a86-3a966a1bca48_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!L7i1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9587176f-2dbb-4b66-9a86-3a966a1bca48_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9587176f-2dbb-4b66-9a86-3a966a1bca48_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3366165,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.zanders.dev/i/210185046?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9587176f-2dbb-4b66-9a86-3a966a1bca48_1536x1024.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_!L7i1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9587176f-2dbb-4b66-9a86-3a966a1bca48_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!L7i1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9587176f-2dbb-4b66-9a86-3a966a1bca48_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!L7i1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9587176f-2dbb-4b66-9a86-3a966a1bca48_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!L7i1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9587176f-2dbb-4b66-9a86-3a966a1bca48_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><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>Our analytics engineers can extract their own data sources now. A year ago I wouldn&#8217;t have wanted them to.</p><p>Not because they couldn&#8217;t write the code. Doing extraction properly meant knowing too many things outside their normal area: authentication, pagination, memory, schema changes, retries, monitoring.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.zanders.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Work Reorganized by Stijn Zanders! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>So we built the framework instead. It runs on dlt, and most of that knowledge sits in the framework now instead of in a person.</p><p>We&#8217;ve been doing the same in analytics engineering. Our standards and methodologies increasingly live in skills the agents follow, so analysts and data engineers can contribute to the same codebase safely.</p><p>Same with our semantic layer. The approach we take is in a skill, and we even have one that walks you through whether you need a new topic or just some smaller changes.</p><p>None of it is airtight. &#8220;Safely&#8221; is carrying a lot of weight in those sentences. Someone still reads everything before it lands, and that part hasn&#8217;t got cheaper.</p><p>We originally built these frameworks to make our own work easier and more maintainable. But with AI, they started doing something more interesting: raising the floor for everyone else.</p><h2><strong>The boundary moved from both sides</strong></h2><p>We use Omni. Our stakeholders ask questions in natural language against our governed semantics, or build dashboards themselves on the same models our analysts use.</p><p>The quality varies, of course, and a lot of what they build is quite niche. But it changes the role of a data analyst.</p><p>Many analysts I&#8217;ve known have mostly been building dashboards. Not going deep into figuring out how to change the processes of their stakeholders. That work isn&#8217;t going away. It&#8217;s just not the scarce part anymore.</p><p>When your stakeholders can do all the basics themselves, you need to go further into their area to provide more value. Understand how the process actually works. Know which questions matter before anyone brings you one.</p><p>Which was arguably the job all along. Some analysts just got stuck building dashboards.</p><h2><strong>Execution alone is not enough</strong></h2><p>I don&#8217;t think this is specific to data. As AI makes more of the basic execution cheap, I see three directions for knowledge work. I see them most clearly in data, because that&#8217;s where I&#8217;ve been doing a lot of the thinking, and I can watch the bottlenecks move.</p><p><strong>Breadth.</strong> Do more of the adjacent work yourself. An analytics engineer setting up extractions. A data engineer building entity models. An analyst updating governed semantics. You&#8217;re still deep somewhere. You have to be. But the threshold for working in the areas around you gets lower.</p><p><strong>Depth.</strong> Understand the domain much more deeply. Waiting for stakeholders to bring you context isn&#8217;t enough. You need to understand their world well enough to form your opinion of what matters.</p><p><strong>Leverage.</strong> Raise the floor so other people can do more. Turn what you know into frameworks, skills, standards and systems that let other people do work that previously needed you.</p><p>This might sound like T-shaped people. I think it&#8217;s different.</p><p>The horizontal part of the T was mostly about knowing enough to work with other disciplines. Breadth here means actually doing some of that work. And depth here isn&#8217;t deeper expertise in your own discipline. It&#8217;s deeper understanding of the domain you&#8217;re applying it to.</p><p>The people I find most valuable increasingly combine these.</p><p><strong>Breadth and depth:</strong> understand the problem deeply and build most of what it takes to solve it.</p><p><strong>Breadth and leverage:</strong> work across the stack and build things that make everyone else better.</p><p><strong>Depth and leverage:</strong> understand a domain well enough to encode how it works into semantics, workflows and systems other people can use.</p><p>We&#8217;re looking for a process automation engineer this summer. Writing the role, it became obvious the person we really wanted needed all three: enough depth to understand how a finance process actually runs, enough breadth to work across the systems involved, and enough leverage to turn the solution into something reusable.</p><p>I don&#8217;t think everyone needs all three. Expertise still matters, and business users can&#8217;t suddenly extract data sources or build reliable data models because they installed Claude Code.</p><p>But the boundaries are getting blurrier.</p><p>The people I&#8217;d bet on are getting wider, going deeper, or raising the floor for everyone else.</p><p>Increasingly, two out of three.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.zanders.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Work Reorganized by Stijn Zanders! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The trap of being useful]]></title><description><![CDATA[You don&#8217;t stop being the bottleneck. You just move it]]></description><link>https://www.zanders.dev/p/the-trap-of-being-useful</link><guid isPermaLink="false">https://www.zanders.dev/p/the-trap-of-being-useful</guid><dc:creator><![CDATA[Stijn Zanders]]></dc:creator><pubDate>Sat, 27 Jun 2026 07:29:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!QLJz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e549303-3a1e-48b9-a34d-e9329e35e620_1448x1086.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_!QLJz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e549303-3a1e-48b9-a34d-e9329e35e620_1448x1086.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QLJz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e549303-3a1e-48b9-a34d-e9329e35e620_1448x1086.png 424w, https://substackcdn.com/image/fetch/$s_!QLJz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e549303-3a1e-48b9-a34d-e9329e35e620_1448x1086.png 848w, https://substackcdn.com/image/fetch/$s_!QLJz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e549303-3a1e-48b9-a34d-e9329e35e620_1448x1086.png 1272w, https://substackcdn.com/image/fetch/$s_!QLJz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e549303-3a1e-48b9-a34d-e9329e35e620_1448x1086.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QLJz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e549303-3a1e-48b9-a34d-e9329e35e620_1448x1086.png" width="1448" height="1086" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3e549303-3a1e-48b9-a34d-e9329e35e620_1448x1086.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1086,&quot;width&quot;:1448,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3310397,&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://workreorganized.substack.com/i/208024589?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e549303-3a1e-48b9-a34d-e9329e35e620_1448x1086.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_!QLJz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e549303-3a1e-48b9-a34d-e9329e35e620_1448x1086.png 424w, https://substackcdn.com/image/fetch/$s_!QLJz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e549303-3a1e-48b9-a34d-e9329e35e620_1448x1086.png 848w, https://substackcdn.com/image/fetch/$s_!QLJz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e549303-3a1e-48b9-a34d-e9329e35e620_1448x1086.png 1272w, https://substackcdn.com/image/fetch/$s_!QLJz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e549303-3a1e-48b9-a34d-e9329e35e620_1448x1086.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><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><span>A large ARR drop showed up in one of our dashboards. A data analyst in the FP&amp;A team caught it on a Saturday. I&#8217;d shown him our new triage skill three days earlier.</span></p><p><span>He ran </span><code>/triage</code><span> on the issue and posted a full root cause analysis. Evidence, root cause, category, the most likely explanations. It showed the source data had stopped extracting: hourly records normal, then a sharp drop, then near zero.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.zanders.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Work Reorganized! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p><span>I didn&#8217;t see any of it until Sunday morning. I was packing for the airport, a company offsite in Croatia starting that day. Nobody on my team was around. So instead of waiting, he took the first step himself.</span></p><p><span>At the airport, over lunch, fighting a dying laptop battery, I copied his root cause analysis into Claude Code. I asked it to investigate further and open a PR for the fix. I merged it that day.</span></p><p><span>I only learned afterwards that he&#8217;d had the same fix in mind. He&#8217;d asked Cursor to draft the PR. He just didn&#8217;t feel confident enough to ship it.</span></p><p><span>He had the knowledge. The skill gave him that. What he didn&#8217;t have was the authority to merge it, or the appetite to own it if it broke. The method had transferred. The mandate to act on it, and the responsibility for getting it wrong, had not. That&#8217;s the part I never thought to package, maybe because I&#8217;m not sure it packages at all.</span></p><p><span>My first reaction was: this works. My second, honestly, was disappointment that he didn&#8217;t just ship it.</span></p><p><span>What I want is to wake up to &#8220;I found the problem, here&#8217;s the fix,&#8221; review it, and have it done. I don&#8217;t need to own every fix. But handing someone the method is not the same as handing them the authority and the confidence to use it.</span></p><p><span>I could have written these skills earlier.</span></p><p><span>The reason I didn&#8217;t is uncomfortable. When a messy data issue shows up, people ask me, and I can usually figure it out.</span></p><p><span>I&#8217;ve been around long enough to know where the weirdness hides. Late sources. Models that oversimplify reality. Definitions that changed three times. Tables people trust too quickly. I move fast because I have the muscle memory: find the issue in aggregate, drill down to the lowest useful granularity, fix it there, repeat until the remaining movement is explained.</span></p><p><span>Not everybody has that, and that&#8217;s fine. Some people are stronger architecturally. Others are better at solving a problem once it&#8217;s scoped. What I&#8217;m good at is the scoping, the part where you haven&#8217;t yet figured out what kind of problem you&#8217;re looking at.</span></p><p><span>It feels useful because it is useful. The next issue comes in, it looks different enough that someone asks again, I answer again, and the work moves.</span></p><p><span>AI changed that. You can distribute a skill like this far more easily than before. The knowledge was never secret. The problem was that I was still the easiest way to get to it. I was the interface. Now there&#8217;s a realistic path to packaging what I do into something people can invoke without me in the room.</span></p><p><span>That&#8217;s a strange thing to do. You take something that lived in your head and make it usable without you. Your shortcuts, your checks, your feel for when something is probably fine versus when you need to keep digging.</span></p><p><span>Part of me wants to call that progress. Another part knows that when you&#8217;re the person everyone asks, your value is obvious. You know the weird edge cases, which source to distrust, what normal looks like. That&#8217;s expertise. It&#8217;s also status. Writing the skill means the next person gets further before you show up. In the best case, you&#8217;re not needed at all.</span></p><p><span>You built the road. People drive on it. Nobody thanks the road.</span></p><p><span>That&#8217;s the job, though. At least it should be.</span></p><p><span>But the skill didn&#8217;t remove the bottleneck. It moved it. The analyst got all the way to the fix and still didn&#8217;t ship. What stopped him wasn&#8217;t knowledge. It was that the fix wasn&#8217;t yet his to make.</span></p><p><span>The second story showed me the other half of it.</span></p><p><span>A billing issue came back, one we thought we&#8217;d fixed. It landed in the evening and I picked it up around ten the next morning. We were mid-migration between billing systems, and the complexity sat in the gap between them.</span></p><p><span>I had the triage skill, so I used it. I ran it, it didn&#8217;t find it, I told it to look harder. Go deeper. Continue. There were so many factors in play that it never figured it out.</span></p><p><span>It narrowed things down. I got a CSV of where the issue might be. I handed it to a colleague for a fresh pair of eyes and asked them to go deeper. They&#8217;re an AI skeptic, more of a data artisan. They took the manual route and found it.</span></p><p><span>The skill narrowed the search space. The last step still needed someone who distrusted the answer enough to keep looking.</span></p><p><span>Here&#8217;s the part I&#8217;m not proud of. My gut said it didn&#8217;t add up. The explanation we landed on would have implicated every monthly run, and the last few had been clean. I shipped the fix anyway because I was out of time. The skill scaled the diagnosis. It couldn&#8217;t make the judgment call, and under pressure my judgment lost to the calendar.</span></p><p><span>Two problems, two different gaps. The analyst had the diagnosis but not the authority to act on it. I had the authority and let a deadline overrule my own judgment.</span></p><p><span>Packaging what I knew didn&#8217;t make me unnecessary. It pulled apart what had always been bundled in one person: the knowledge, the judgment to know when an answer is wrong, the authority to act when it&#8217;s right, and the responsibility for what happens next. The skill could carry the knowledge. The rest defaulted to one person. To me. Again.</span></p><p><span>So the job isn&#8217;t answering more questions. It&#8217;s moving the judgment, the authority, and the responsibility toward the people who hit the problem first. That&#8217;s slower and less satisfying than writing a skill, and it&#8217;s the actual work.</span></p><p><span>You don&#8217;t stop being the bottleneck. You just move it. The work is making sure the same decisions don&#8217;t keep routing back through you behind a new interface.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.zanders.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Work Reorganized! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[“Use AI” is not a strategy]]></title><description><![CDATA[There are two finance books on my desk.]]></description><link>https://www.zanders.dev/p/use-ai-is-not-a-strategy</link><guid isPermaLink="false">https://www.zanders.dev/p/use-ai-is-not-a-strategy</guid><dc:creator><![CDATA[Stijn Zanders]]></dc:creator><pubDate>Mon, 04 May 2026 12:12:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!qwgt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94d1d182-76fc-4b9f-8a70-01af3a035530_1672x941.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_!qwgt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94d1d182-76fc-4b9f-8a70-01af3a035530_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qwgt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94d1d182-76fc-4b9f-8a70-01af3a035530_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!qwgt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94d1d182-76fc-4b9f-8a70-01af3a035530_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!qwgt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94d1d182-76fc-4b9f-8a70-01af3a035530_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!qwgt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94d1d182-76fc-4b9f-8a70-01af3a035530_1672x941.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qwgt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94d1d182-76fc-4b9f-8a70-01af3a035530_1672x941.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/94d1d182-76fc-4b9f-8a70-01af3a035530_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3386249,&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://workreorganized.substack.com/i/208049922?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94d1d182-76fc-4b9f-8a70-01af3a035530_1672x941.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_!qwgt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94d1d182-76fc-4b9f-8a70-01af3a035530_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!qwgt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94d1d182-76fc-4b9f-8a70-01af3a035530_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!qwgt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94d1d182-76fc-4b9f-8a70-01af3a035530_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!qwgt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94d1d182-76fc-4b9f-8a70-01af3a035530_1672x941.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 aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><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><span>There are two finance books on my desk. I bought them six weeks ago. Neither one is open.</span></p><p><span>We had to assess whether to replace one of our finance tools with an AI-native version. To judge that, I had to understand what we were replacing. That&#8217;s where I keep getting stuck.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.zanders.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Work Reorganized! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><span>The pressure moves faster than the thinking</span></h2><p><span>A colleague told me a few weeks ago how investors had put it at another company:</span></p><p><span>Use AI. Find use cases. Personal agents in production by September. Or&#8230;</span></p><p><span>That exact phrasing is not everywhere yet, but the pressure underneath it is. Boards want movement. Leadership wants proof the company is not falling behind. The urgency is real. It is not crazy to look at what AI can already do and conclude your company should be moving faster.</span></p><p><span>But &#8220;use AI&#8221; is not a strategy. It is urgency without direction. A strategy says what should change and what should stay human. &#8220;Use AI&#8221; doesn&#8217;t answer that. It moves the question to someone else. Every team is asked to find use cases and show progress.</span></p><h2><span>I knew the numbers, not the work</span></h2><p><span>I&#8217;ve sat close to Finance since I joined Aiven, mostly through the data around it. I knew enough gotchas in the revenue data to feel like I understood the work. That made me overconfident.</span></p><p><span>Looking back, I think I knew it wasn&#8217;t enough. I was hoping it wouldn&#8217;t matter.</span></p><p><span>The numbers are the surface. Underneath them is the work itself: what Finance needs to produce, and where the manual work still hides. Almost none of it sits in a dashboard. Most of it lives in handoffs and tribal knowledge.</span></p><p><span>Nobody has the whole picture. Every person you ask gives you a different version depending on which part of the process they touch. You assemble it person by person, exception by exception, and the full picture only exists in the overlap between conversations.</span></p><p><span>That&#8217;s why the books are still on my desk. I bought them thinking I could catch up. Then I realized a finance textbook isn&#8217;t going to teach me what our team actually needs to produce, or which parts of the current process should disappear.</span></p><p><span>The vendor came in for a day and asked how things work on our end. They showed us what the tool does. What none of us could answer was whether it actually fits the work we run, not in a few hours.</span></p><p><span>The gap didn&#8217;t show up during the demo. It showed up when we started scoping the POC and had to think about requirements and success criteria. That&#8217;s when we realized how much of the process we couldn&#8217;t clearly describe.</span></p><h2><span>The one that works</span></h2><p><span>We already have an agent triaging data issues from our observability tool. I wrote the skills for it myself. Issue comes up, triage runs, it queries BigQuery, reads our dbt codebase, pulls PRs from GitHub, and figures out whether it&#8217;s a platform issue or a data quality issue. Then it routes the issue to a data engineering agent or an analytics engineering agent. Before that, every issue sat in a queue until someone on my team had time to look.</span></p><p><span>I could describe that process in thirty seconds. I knew the routing logic because I have been doing it myself for years. Putting it in a skill was straightforward. The agent works because the process was already clear enough to teach.</span></p><p><span>Same company, different team. One process I could automate because my team owns it. The other I can&#8217;t even scope properly because the knowledge isn&#8217;t mine.</span></p><h2><span>The hard part comes before the tool</span></h2><p><span>When you understand what the work has to produce, you can stop treating the current process as the thing to automate. You know the output and where judgment still matters. You can see where an agent might fit and where a human still needs to stay.</span></p><p><span>The danger is that you can move forward without that understanding. Buy the tool, push the agent live, and you have automated a half-understood version of the work. That is worse than the old tool, because the old tool did not pretend.</span></p><p><span>&#8220;Use AI&#8221; sounds like a tools problem. Tools problems become vendor problems. By the time the vendor is in the room, the harder question has been skipped.</span></p><p><span>The pressure to use AI isn&#8217;t going away. It shouldn&#8217;t. But I&#8217;m starting to think the real work isn&#8217;t picking the tool. It&#8217;s becoming the person who understands the work well enough to know what should change.</span></p><p><span>For the triage agent, I was already that person.</span></p><p><span>For finance, I&#8217;m not there yet. The books on my desk aren&#8217;t going to change that.</span></p><p><span>The next conversation is not with the vendor. It is with the people who know where the clean process breaks. If I cannot describe the work without the tool, I&#8217;m not ready to decide what it should replace.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.zanders.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Work Reorganized! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The company we documented is not the company we run]]></title><description><![CDATA[The model told me how our billing system worked. The system it described wasn't fully live yet.]]></description><link>https://www.zanders.dev/p/the-company-we-documented-is-not-the-company-we-run</link><guid isPermaLink="false">https://www.zanders.dev/p/the-company-we-documented-is-not-the-company-we-run</guid><dc:creator><![CDATA[Stijn Zanders]]></dc:creator><pubDate>Tue, 28 Apr 2026 07:14:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!dnB-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf9a5a9f-c92c-4e87-912f-93221fc5e171_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dnB-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf9a5a9f-c92c-4e87-912f-93221fc5e171_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dnB-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf9a5a9f-c92c-4e87-912f-93221fc5e171_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!dnB-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf9a5a9f-c92c-4e87-912f-93221fc5e171_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!dnB-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf9a5a9f-c92c-4e87-912f-93221fc5e171_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!dnB-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf9a5a9f-c92c-4e87-912f-93221fc5e171_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dnB-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf9a5a9f-c92c-4e87-912f-93221fc5e171_1536x1024.png" width="728" height="485.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/af9a5a9f-c92c-4e87-912f-93221fc5e171_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:2544329,&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://workreorganized.substack.com/i/208023209?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf9a5a9f-c92c-4e87-912f-93221fc5e171_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dnB-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf9a5a9f-c92c-4e87-912f-93221fc5e171_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!dnB-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf9a5a9f-c92c-4e87-912f-93221fc5e171_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!dnB-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf9a5a9f-c92c-4e87-912f-93221fc5e171_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!dnB-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf9a5a9f-c92c-4e87-912f-93221fc5e171_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"></figcaption></figure></div><h2>The pile becomes the world</h2><p>We&#8217;re in the middle of a migration. A small subset of customers is on the new system, but most are still on the old one. Nothing in the billing topic made that parallel state obvious. The old systems were in the knowledge repo, but they didn&#8217;t show up as part of the answer to how billing works today. So the model resolved the pile into one clean truth: the version with the most documentation.</p><p>A couple of weeks ago, I had a few spare hours on my hands and Karpathy had just posted his viral GitHub gist about the LLM wiki: basically, a way to build a knowledge base readable by agents. This is something I&#8217;ve been tinkering with in my role at Aiven anyway: how much of the company can we make understandable by AI? So I did the obvious thing and tried to build one for our internal context. I pointed AI at everything I could reach: Slack channels I had access to, Coda pages, dbt models, Omni metric models, system data, ownership notes, whatever I could feed into a script during one sitting. The output was a neat Obsidian repo, deployed to GitHub Pages as a Quartz site, with an MCP server on top. I could query it through Cowork and it felt like magic.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.zanders.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Work Reorganized! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>It broke on billing</h2><p>The answer was confident. It explained the integrations, the ownership, the gotchas. It had a very good read on the new system. It even understood our new ARR model, which we had built ahead of go-live, even though that model wasn&#8217;t live yet. If a new hire had read that summary, they&#8217;d have come away with a clean mental model of how billing works at our company. That mental model would have been wrong about almost every customer we have today.</p><p>The model wasn&#8217;t hallucinating. It was reading the artifacts I&#8217;d given it and building the version of the company those artifacts most clearly described. And those artifacts were fresh. As fresh as they could be. Updated that day, backed by an active Slack channel, architecture docs, ticket trails, metric definitions. The problem was that most of them described the new billing system, because that&#8217;s the one people were actively building. The old one was just running. There were traces of it in the repo, but almost nothing that said: this is still the system most customers are on. That kind of information disappears in most companies. Not because anyone deletes it, but because nobody wakes up thinking: today I should document the system that has been running for years.</p><p>So it picked the version with the most signal and treated it as how things work today.</p><h2>The map had no edge</h2><p>This is how we write things down, anyway. Documents accumulate around the work that&#8217;s currently getting attention. Operations that just run don&#8217;t generate much of anything. And once you give that pile to a model, the pile becomes the world. It doesn&#8217;t know what is missing. It doesn&#8217;t know which parts live only in people&#8217;s heads. A human can catch one bad answer, sure. But that doesn&#8217;t fix the failure mode. The same thing happens everywhere, big and small: the model treats the documented version as complete, even when it&#8217;s only the part that happened to leave a trail.</p><p>The deeper failure isn&#8217;t that the answer was wrong. It&#8217;s that the model picked one version at all.</p><p>The honest answer to my billing question wasn&#8217;t the new system or the old one. It was that two systems are running in parallel. They don&#8217;t agree, and the right answer depends on which customer you&#8217;re asking about. The model had enough signal to hesitate. Instead it picked the cleaner story and presented it as how things work.</p><h2>The complete wiki will never stay complete</h2><p>A better wiki could have fixed this answer. In principle, sure. Someone could maintain a perfect billing page that captured everything: what is intended, what is running, the manual work filling the gaps, who handles the exceptions, and why they exist. The model would do better. This specific failure would probably go away.</p><p>But that is the point. The answer depends on someone maintaining the boring middle forever. The messy transition state. Which customers are where. Which model is live. Which process is designed, and which process people actually follow because the designed one doesn&#8217;t cover reality yet.</p><p>That page doesn&#8217;t exist for long unless someone keeps doing the invisible maintenance work. Not because people are careless, but because nobody wakes up thinking: today I should document the gap between the system and the business. Every company runs on that layer of human work. People know which exception still matters. They know who to ask. They know which dashboard is technically right but practically misleading. Most of that never becomes an artifact.</p><p>So the model read the pile and treated it as the complete picture. The failure is that it had no way to know where the map ended.</p><p>The next version has to assume the complete wiki will never stay complete. Whatever it is, it has to work with partial sources, conflicting sources, and suspiciously clean sources. When the company is in the middle of changing, it should not collapse that into one answer. It should say which layer it&#8217;s reading from, what seems live, what seems planned, and where it can&#8217;t see enough to be confident.</p><p>That is the next thing I want to figure out: not how to make the pile bigger, but how to show where it ends.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.zanders.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Work Reorganized! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The five-second gut check]]></title><description><![CDATA[Everyone's automating the work. Nobody's designing the five seconds where a human actually decides.]]></description><link>https://www.zanders.dev/p/the-five-second-gut-check</link><guid isPermaLink="false">https://www.zanders.dev/p/the-five-second-gut-check</guid><dc:creator><![CDATA[Stijn Zanders]]></dc:creator><pubDate>Sun, 26 Apr 2026 12:11:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!4KE4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce2305e9-7fd8-496b-81fb-b3641ab1c5bd_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4KE4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce2305e9-7fd8-496b-81fb-b3641ab1c5bd_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4KE4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce2305e9-7fd8-496b-81fb-b3641ab1c5bd_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!4KE4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce2305e9-7fd8-496b-81fb-b3641ab1c5bd_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!4KE4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce2305e9-7fd8-496b-81fb-b3641ab1c5bd_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!4KE4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce2305e9-7fd8-496b-81fb-b3641ab1c5bd_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4KE4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce2305e9-7fd8-496b-81fb-b3641ab1c5bd_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ce2305e9-7fd8-496b-81fb-b3641ab1c5bd_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3053168,&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://workreorganized.substack.com/i/208049192?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce2305e9-7fd8-496b-81fb-b3641ab1c5bd_1536x1024.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_!4KE4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce2305e9-7fd8-496b-81fb-b3641ab1c5bd_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!4KE4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce2305e9-7fd8-496b-81fb-b3641ab1c5bd_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!4KE4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce2305e9-7fd8-496b-81fb-b3641ab1c5bd_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!4KE4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce2305e9-7fd8-496b-81fb-b3641ab1c5bd_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p><span>Greenstep HQ in Espoo, halfway through a hackathon. We had a fraud triage tool working. Four AI agents scored each customer. A human swiped through the queue with arrow keys. Our CFO walked over and asked why we were only thinking about defending revenue. Why not grow it too?</span></p><p><span>Same customer signals, different question. A usage spike is either fraud risk or expansion intent depending on the lens. We added expansion signals in the last hour and placed second out of 70 teams.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.zanders.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Work Reorganized! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p><span>But we only applied the triage UI to the fraud side. The expansion signals sat in a dashboard.</span></p><p><span>Two weeks ago at an offsite dinner with people from our GTM team, we ended up talking about outreach. Cold calls, emails, all the usual pain. How hard it is to hit the right note. How AI-drafted messages are often close, but slightly off.</span></p><p><span>It clicked later. Same idea, but applied to leads.</span></p><p><span>It matters even more there than in fraud. Your average VP gets buried in outreach. AEs send dozens of emails a day and most of them go nowhere. If it&#8217;s not specific, it&#8217;s noise. AI can draft something decent. But a human can scan the draft, catch the wrong tone, and swap &#8220;your team&#8217;s usage is growing&#8221; for &#8220;you&#8217;re two weeks from hitting your API limit.&#8221; That&#8217;s what makes someone actually reply.</span></p><h2><span>Everyone picks the wrong extreme</span></h2><p><span>A company decides to &#8220;use AI&#8221; and usually picks one of two dead ends. Full automation and hope nothing breaks. Or give everyone a Claude subscription and some prompts and call it a day.</span></p><p><span>We keep asking AI to make the final call. It shouldn&#8217;t be making the call. It should be preparing the call for us.</span></p><p><span>People kept asking why we didn&#8217;t just fully automate the fraud tool. If the agents are right 85% of the time, what happens in the other 15%? In fraud, that&#8217;s suspending a legitimate account. In outreach, that&#8217;s sending a tone-deaf email to your biggest expansion opportunity.</span></p><h2><span>Five seconds instead of fifteen minutes</span></h2><p><span>So I built a demo. The version we should have built for the expansion opportunities at the hackathon.</span></p><p><span>Each card: company name, four signals, a draft email the AI wrote, and a send button. Press right to send, left to override, down if you want to see why the AI suggested this outreach. Most decisions take two seconds. Glance at the signals, read the subject line, press right. The ones where something feels off, you press down, read the evidence, maybe edit the draft inline.</span></p><p><span>I didn&#8217;t expect how little information you need when it&#8217;s laid out right. The fifteen minutes people spend digging through dashboards and CRM notes, that&#8217;s the AI&#8217;s job now. The human&#8217;s job is the five-second gut check.</span></p><p><span>The swipe flow: approve, override, or ask why.</span></p><h2><span>Overrides are the point</span></h2><p><span>This is the part most people miss. The override button matters more than the send button.</span></p><p><span>When someone presses left instead of right, that&#8217;s training data. You know which account, which signals, which human disagreed. Track enough of those and patterns show up. One agent gets overridden 40% of the time on borderline cases. Enterprise drafts get edited twice as often as mid-market ones. A specific AE overrides everything under a score of 70 because they know something the model doesn&#8217;t.</span></p><p><span>The override rate should drop over time. Not because people stop paying attention, but because the system starts to learn what they would have done anyway.</span></p><p><span>Right now it&#8217;s just a UI. I&#8217;ll update this post once we&#8217;ve put it to work and have real override data to look at.</span></p><h2><span>What I&#8217;m still working out</span></h2><p><span>Since the hackathon I notice the pattern everywhere. Support ticket routing, invoice approvals, screening resumes. Any queue where a human applies a gut check probably has some version of this hiding inside it.</span></p><p><span>Can overrides actually train the system over time? I think so, but I haven&#8217;t tested it yet.</span></p><p><span>But the thing I keep coming back to is that most of the time goes into the investigation, not the actual decision. Once you have a suggestion and the evidence sitting right there, the decision takes about five seconds.</span></p><div><hr></div><p><span>I wrote up the implementation notes for the pattern </span><a href="https://gist.github.com/StijnZanders/aceb0bb5c4453dd897558a214900f013"><span>here</span></a><span>.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.zanders.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Work Reorganized! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Letting go is how you keep up]]></title><description><![CDATA[When execution stops being the job, holding on makes you slower.]]></description><link>https://www.zanders.dev/p/letting-go-is-how-you-keep-up</link><guid isPermaLink="false">https://www.zanders.dev/p/letting-go-is-how-you-keep-up</guid><dc:creator><![CDATA[Stijn Zanders]]></dc:creator><pubDate>Fri, 24 Apr 2026 12:09:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!X_KV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b96acd-dff9-484b-b6f4-80f05678f6a0_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!X_KV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b96acd-dff9-484b-b6f4-80f05678f6a0_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!X_KV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b96acd-dff9-484b-b6f4-80f05678f6a0_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!X_KV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b96acd-dff9-484b-b6f4-80f05678f6a0_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!X_KV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b96acd-dff9-484b-b6f4-80f05678f6a0_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!X_KV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b96acd-dff9-484b-b6f4-80f05678f6a0_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!X_KV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b96acd-dff9-484b-b6f4-80f05678f6a0_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b7b96acd-dff9-484b-b6f4-80f05678f6a0_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2983428,&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://workreorganized.substack.com/i/208048849?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b96acd-dff9-484b-b6f4-80f05678f6a0_1536x1024.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_!X_KV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b96acd-dff9-484b-b6f4-80f05678f6a0_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!X_KV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b96acd-dff9-484b-b6f4-80f05678f6a0_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!X_KV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b96acd-dff9-484b-b6f4-80f05678f6a0_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!X_KV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7b96acd-dff9-484b-b6f4-80f05678f6a0_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><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><span>Crab Week, our company offsite in &#352;ibenik, Croatia. We were standing near the hotel lobby talking about AI. I showed them Paperclip, a tool I&#8217;ve been building with. One agent delegating work to a dozen others, creating PRs while we watched. Nobody said anything. I&#8217;d been expecting questions. How does it handle errors. How do you keep the agents focused. We moved on, talked about other things. But what I kept thinking was: how do I get them to see what this could do for them, not to them.</span></p><p><span>Most people think AI threatens jobs. More often, it threatens identities.</span></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.zanders.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Work Reorganized! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p><span>In the days after, I kept having similar conversations. A colleague told me they were thinking about leaving for an AI-native company before they miss the boat. I thought they might be right. We&#8217;re not moving fast enough. But they weren&#8217;t really chasing speed. They knew they had to reinvent, and didn&#8217;t think they could do it here. They wanted to be somewhere figuring out what work actually becomes.</span></p><h2><span>Managers know this feeling</span></h2><p><span>I&#8217;ve been struggling with this for years.</span></p><p><span>It reminds me of when I became a manager. You get promoted because you&#8217;re good at the work. Then you&#8217;re supposed to stop doing it. Except you&#8217;re also the one who knows why it works in the first place, and that doesn&#8217;t transfer in a handover doc.</span></p><p><span>Our data platform team is four people. I still fix things at odd hours that I should be delegating. It&#8217;s faster, I know the code, and I tell myself I&#8217;m just unblocking the team.</span></p><p><span>That&#8217;s the tension. Let go and you lose touch. Hold on and you become the bottleneck.</span></p><p><span>AI just did this to everyone at once. And now everyone&#8217;s asking the same question managers have been asking for years: if I&#8217;m not the one doing the work, what am I?</span></p><h2><span>So I made my team try it</span></h2><p><span>I was doubting all week whether I should have the team try it. But after all the hype during our offsite about practical use of AI, it felt right. They needed to see Paperclip for themselves.</span></p><p><span>Four data and analytics engineers, each managing their own agents. Within an hour they&#8217;d hired a dozen agents and couldn&#8217;t get them to work together. One person wanted more governance. Another wanted to move faster and hire more. They clashed. They ended up acting as a board of directors, arguing about the goals of their company.</span></p><p><span>Nobody was writing SQL. Everyone was managing. The agents kept going, PRs kept getting created, needing more guidance than anyone expected. My team was the bottleneck for direction and quality control. The agents didn&#8217;t have enough of our tribal knowledge, the same way a new hire doesn&#8217;t.</span></p><p><span>I let it sit for a while after that. Let them think about what they&#8217;d just experienced. We&#8217;re not going all in overnight. Though we already have an agent triaging data issues from our observability tool, freeing us up to focus on what actually needs us.</span></p><h2><span>The impossible balance</span></h2><p><span>I&#8217;ve always identified with getting things done fast. I still do. AI makes me even faster.</span></p><p><span>But that&#8217;s also the trap.</span></p><p><span>If I only use it to move faster myself, nothing really changes. I&#8217;m still the bottleneck. Just a faster one.</span></p><p><span>The harder part is getting the team there too.</span></p><p><span>That means letting go of the parts of the job that feel safest. Writing the query. Fixing the issue. Knowing the code path. Being the person who can always make it work.</span></p><p><span>Those things still matter. But they can&#8217;t be the whole job anymore.</span></p><p><span>In the Paperclip exercise, the team didn&#8217;t need to write more SQL. They needed to decide what the agents were trying to do, what good looked like, where to slow down, and when to stop.</span></p><p><span>That&#8217;s the part I&#8217;m still figuring out.</span></p><div><hr></div><p><span>You can find Paperclip </span><a href="https://github.com/paperclipai/paperclip"><span>on GitHub</span></a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.zanders.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Work Reorganized! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>