<?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[Accidental Architecture]]></title><description><![CDATA[Essays on engineering leadership when agents write the code.]]></description><link>https://trajlus.com</link><image><url>https://trajlus.com/img/substack.png</url><title>Accidental Architecture</title><link>https://trajlus.com</link></image><generator>Substack</generator><lastBuildDate>Thu, 09 Jul 2026 17:40:38 GMT</lastBuildDate><atom:link href="https://trajlus.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Adam Przywarty]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[trajlus@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[trajlus@substack.com]]></itunes:email><itunes:name><![CDATA[Adam Przywarty]]></itunes:name></itunes:owner><itunes:author><![CDATA[Adam Przywarty]]></itunes:author><googleplay:owner><![CDATA[trajlus@substack.com]]></googleplay:owner><googleplay:email><![CDATA[trajlus@substack.com]]></googleplay:email><googleplay:author><![CDATA[Adam Przywarty]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[RFCs in the Era of LLMs]]></title><description><![CDATA[This is the first of three posts.]]></description><link>https://trajlus.com/p/rfcs-in-the-era-of-llms</link><guid isPermaLink="false">https://trajlus.com/p/rfcs-in-the-era-of-llms</guid><dc:creator><![CDATA[Adam Przywarty]]></dc:creator><pubDate>Wed, 08 Jul 2026 19:28:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!SXia!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d320f2c-3060-43fe-a898-65c66509d211_1712x878.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_!SXia!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d320f2c-3060-43fe-a898-65c66509d211_1712x878.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SXia!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d320f2c-3060-43fe-a898-65c66509d211_1712x878.png 424w, https://substackcdn.com/image/fetch/$s_!SXia!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d320f2c-3060-43fe-a898-65c66509d211_1712x878.png 848w, https://substackcdn.com/image/fetch/$s_!SXia!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d320f2c-3060-43fe-a898-65c66509d211_1712x878.png 1272w, https://substackcdn.com/image/fetch/$s_!SXia!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d320f2c-3060-43fe-a898-65c66509d211_1712x878.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SXia!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d320f2c-3060-43fe-a898-65c66509d211_1712x878.png" width="1456" height="747" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5d320f2c-3060-43fe-a898-65c66509d211_1712x878.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:747,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:146616,&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://trajlus.com/i/206169841?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d320f2c-3060-43fe-a898-65c66509d211_1712x878.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_!SXia!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d320f2c-3060-43fe-a898-65c66509d211_1712x878.png 424w, https://substackcdn.com/image/fetch/$s_!SXia!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d320f2c-3060-43fe-a898-65c66509d211_1712x878.png 848w, https://substackcdn.com/image/fetch/$s_!SXia!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d320f2c-3060-43fe-a898-65c66509d211_1712x878.png 1272w, https://substackcdn.com/image/fetch/$s_!SXia!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d320f2c-3060-43fe-a898-65c66509d211_1712x878.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>This is the first of three posts. The follow-ups cover <a href="https://trajlus.com/p/rfcs-in-the-era-of-llms-takeaways">what changes for engineers writing RFCs, and for leaders running the process</a>.</em></p><p>In <em><a href="https://trajlus.com/p/software-is-not-magic">Software Is Not Magic</a></em> I wrote about an engineer I inherited early in my management career. By every account, the most brilliant person on the team. The best engineer I knew at the time, from my previous team, told me &#8220;he&#8217;s much better than me&#8221;. Let&#8217;s say my expectations were high. However, what I experienced was disappointing. Systems shipped to production that nobody else could explain. He held the tribal knowledge and wanted to share it, but couldn&#8217;t find the way. I coached, arranged pairing, tried every form of feedback I knew. Some of it helped; the gap never closed, and he moved on. The lesson went into that post: when software feels like magic, that&#8217;s not a property of the software. Someone is failing to explain it.</p><p>Last year, I accidentally hired a whole team of him.</p><p>They&#8217;re called agents. They are exactly what everyone told me that engineer was. Genuinely brilliant. Absurdly productive. Deeper into the details of the system than anyone else in the room. They also have exactly his problem, with three twists the original story never had to face.</p><p><strong>There is no parting ways.</strong> With a human, an exit was the last resort when coaching failed. With an agent it isn&#8217;t available at all - the agent is where your throughput now comes from. Coaching it, and extracting the communication yourself, is the whole job.</p><p><strong>It resigns every night.</strong> The context window ends, and the engineer who built your subsystem is gone by morning. This is the one twist tooling is actually solving. My team runs <a href="https://github.com/obra/superpowers">superpowers</a>. It has the agent write the brainstorming, specs, and implementation plans straight into your  repo. The handover notes are excellent. Which sharpens my third twist.</p><p><strong>It will explain anything, and it communicates nothing.</strong> My human genius couldn&#8217;t explain his work. The agent has the opposite problem. It will explain everything, at any depth. For as long as you keep asking. With the right workflow, the explanation even has somewhere to live now (our repo accumulates agent-written plans faster than any wiki I&#8217;ve ever maintained). But a file nobody on the team has read is storage, not communication. Docs become communication only when they impact the team&#8217;s shared consciousness.</p><p>Which brings me to RFCs.</p><p>If RFCs are new to you, the tldr is that it&#8217;s a short document written <em>before</em> building something non-trivial. What you&#8217;re proposing, why, and what else you considered. Circulated for a written review before anyone commits to an approach. The goal here is to achieve <em>the hive mind</em>. Writing forces the author to think. An asynchronous review builds a shared mental model across the team before the design hardens. Gergely Orosz wrote the canonical process posts (<a href="https://blog.pragmaticengineer.com/scaling-engineering-teams-via-writing-things-down-rfcs/">one</a>, <a href="https://blog.pragmaticengineer.com/rfcs-and-design-docs/">two</a>). Will Larson <a href="https://lethain.com/good-engineering-strategy-is-boring/">observed</a> that a good engineering strategy is five of these plus a synthesis on top.</p><p>I&#8217;ve taught many engineers how to write RFCs. For years my reading list is exactly those posts. Gergely and Will remain right about almost everything. But they were written when the sentence at the center of the practice was true: <em>writing is thinking</em>. I&#8217;m no longer sure what writing is - or whether talking to an agent counts as thinking, haha :)</p><h2><strong>The thinking moved</strong></h2><p>Nobody writes RFCs by hand anymore. A draft that used to cost a senior engineer two days now costs minutes, and it iterates at the speed of the argument.</p><p>Recently on my team, an architecture RFC went from v1 to v4 in about thirty hours. In between: a live spike on real infrastructure to kill the riskiest assumption, and two full team review rounds. Reviewers&#8217; objections landed in a comment file. I answered one half and my agent answered the other half. We both labeled each reply, so everyone knew who they were arguing with. At one point a debate stalled. I pasted the whole thread into the model. It told us we agreed on roughly ninety percent of the design - as humans, we didn&#8217;t notice.</p><p>The classic objection that RFCs are too slow for a startup is gone. The document now moves as fast as your discussion.</p><p><span>So where did the thinking go, if not into the writing? Into the back and forth. The model answers the questions; it has read your codebase more thoroughly than any of your engineers ever will. The operator owns the decision, the recommendation, and the shape of the proposal. That part didn&#8217;t get cheaper. If anything it got harder: steering a machine that produces confident, polished text toward your position, without letting it dilute you, is draining in a way writing never was. The first thing to understand about RFCs after LLMs is that the effort didn&#8217;t disappear, it just shifted slightly.</span></p><h2><strong><span>Solutions got cheap. Understanding didn&#8217;t.</span></strong></h2><p><span>Here is my prior for this era, the way &#8220;software is not magic&#8221; was my prior for the last one: </span><strong><span>agents made solutions cheap. They made understanding maybe a bit cheaper as well. Even if writing the doc is no longer how you think, I am confident that collaboratively reviewing the spec/doc is how your team keeps understanding the system it owns.</span></strong></p><p><span>Every session with an agent produces working code, an explanation you nodded along to, and (in our stack) a spec and a plan committed to the repo. The knowledge survives the session now. What doesn&#8217;t happen automatically: anyone else finding out it exists. The plans are written in the working loop, for the working loop; the rest of the team was never in the room. What remains is a system that runs, documentation that is technically complete, and a team that can&#8217;t say why - the why is sitting in a file nobody ever opened. We always had systems like that - every company runs something nobody fully understands. It hurts in exactly two moments: when you have to build on top of it, and when it breaks. Then you need the genius operator in the room, and the whole point of an efficient team is not needing a genius in the room.</span></p><p><span>Do this for six months at just-ship speed and you get what I found when I recently spent a few days perusing deep in our codebase. I wrote to the founder afterwards, in a message I didn&#8217;t soften: </span><em><span>this is a swamp that we&#8217;ve created, and the architecture we have is accidental. This is a process that needs to be reversed if you want to build something that lasts.</span></em></p><p><span>Agents don&#8217;t produce accidental architecture because they&#8217;re bad at design. They produce it because nobody chooses consistency. Each decision is made by the model, in the moment, for local reasons - and six months of decisions nobody discussed witch each other add up to an architecture nobody wants. An RFC is the cheapest mechanism I know for turning architecture from something that happens to you into something you chose.</span></p><p><span>This also settles what the RFC is </span><em><span>for</span></em><span> in a stack like ours. It&#8217;s not the persistence layer - </span><a href="https://claude.com/plugins/superpowers"><span>superpowers</span></a><span> already writes everything down. The RFC is the meta-spec: it sits on top of a set of those plans, compresses them into the decision that matters, and carries the one thing no tool provides - the team&#8217;s agreement to actually read and argue about it. You could object that an RFC is mechanically just a bundle of plans, and honestly, it often is. The content overlaps; the discussion doesn&#8217;t. The plans are for the working loop. The RFC is the document the humans commit to disputing.</span></p><h2><strong><span>The review signals stopped working</span></strong></h2><p><span>My review radar was never sophisticated. It hunted rabbit holes and unanswered questions like: </span><em><span>was this verified? Have we spiked it? Have we actually looked into this?</span></em><span> </span></p><p><span>A proposal too big for its problem always had a corner the author hadn&#8217;t thought through, and a thorough review found it.</span></p><p><span>That radar returns silence now. There are no rabbit holes and no unanswered questions in an agent-written proposal - the model closes them before you ever see the doc. Every detail verified. Every edge case handled. Every objection pre-answered, with citations. And the entire thing just makes you throw up. I call this </span><strong><span>rigorous over-engineering</span></strong><span>: the armor is real; the war is invented. I&#8217;ve watched a model produce a fully defensible design for a problem whose honest solution was a hundred lines and one table.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ySRN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc9c7aeb-6df5-410a-8dcb-7a05947c7bb6_891x881.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ySRN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc9c7aeb-6df5-410a-8dcb-7a05947c7bb6_891x881.png 424w, https://substackcdn.com/image/fetch/$s_!ySRN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc9c7aeb-6df5-410a-8dcb-7a05947c7bb6_891x881.png 848w, https://substackcdn.com/image/fetch/$s_!ySRN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc9c7aeb-6df5-410a-8dcb-7a05947c7bb6_891x881.png 1272w, https://substackcdn.com/image/fetch/$s_!ySRN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc9c7aeb-6df5-410a-8dcb-7a05947c7bb6_891x881.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ySRN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc9c7aeb-6df5-410a-8dcb-7a05947c7bb6_891x881.png" width="891" height="881" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fc9c7aeb-6df5-410a-8dcb-7a05947c7bb6_891x881.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:881,&quot;width&quot;:891,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Friends don't let friends play with the eslint rules.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Friends don't let friends play with the eslint rules." title="Friends don't let friends play with the eslint rules." srcset="https://substackcdn.com/image/fetch/$s_!ySRN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc9c7aeb-6df5-410a-8dcb-7a05947c7bb6_891x881.png 424w, https://substackcdn.com/image/fetch/$s_!ySRN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc9c7aeb-6df5-410a-8dcb-7a05947c7bb6_891x881.png 848w, https://substackcdn.com/image/fetch/$s_!ySRN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc9c7aeb-6df5-410a-8dcb-7a05947c7bb6_891x881.png 1272w, https://substackcdn.com/image/fetch/$s_!ySRN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc9c7aeb-6df5-410a-8dcb-7a05947c7bb6_891x881.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">An invented war reminds me of this classic.</figcaption></figure></div><p><span>Models do this because complexity is free for them. A mind with unbounded working memory and no pager scars pays nothing for a fourth cloud provider, a second queue, and </span><em><span>just one more</span></em><span> abstraction layer. Your team pays for those forever - in on-call, in onboarding, in every future review. Human over-engineering announced itself more prominently. Agent over-engineering has no announcement - every detail checks out perfectly, but you can&#8217;t keep up with the complexity. And your team pays, indefinitely, while the model pays nothing.</span></p><p><span>Two tells still work for me. The first is </span><strong><span>&#8220;why isn&#8217;t the simple version enough?&#8221;</span></strong><span> If the doc can&#8217;t show concretely where the simple version breaks, the complex version shouldn&#8217;t exist. The second is </span><strong><span>&#8220;I don&#8217;t understand this bit.&#8221;</span></strong><span> Which raises a fair objection: can anyone understand every bit of what we review now? No. Our minds are not made for the volume of detail agents produce. That&#8217;s not a reason to drop the tell. It&#8217;s a reason to keep designs small enough, but still functional.</span></p><p><span>There&#8217;s a second-order failure that worries me more than any single bad document. The old fix for an unreadable proposal was to send it back: </span><em><span>make this readable and ask for review again.</span></em><span> That worked because the human author learned, and the second version was genuinely better. Send a slop doc back to the model and you get the same slop with different words, revision after revision. For example, with an inexperienced engineer you could hand the problem to a stronger one. But, with a model, the only escalation path is back to a human you trust. Reviewers figure this out quickly, and after the third identical rewrite they quietly stop reading. The process still looks alive - documents get produced, comments get left - but no understanding is moving anywhere. When your reviewers stop reading, you are in trouble.</span></p><p><span>So the review question flips. &#8220;Is this correct?&#8221; is a game you now lose - the machine checked more details than you ever will. The question that still belongs to you: </span><strong><span>is this necessary?</span></strong><span> The model has no cost function for ownership. Only humans pay for complexity, so only humans can price it.</span></p><p><span>On my team this takes the form of standing constraints that no generated argument is allowed to out-argue. An agent recently kept pushing a new cloud provider&#8217;s queueing service into an otherwise good design - on paper, the optimal answer to the question it was asked. We already run on three clouds plus our own Mac hardware, and I declined to add a fourth one just for better queues. The veto went into the alternatives table with my name on it, the reason (&#8221;this is already our complexity budget&#8221;), and the condition for revisiting it (a planned migration retires one of the existing clouds first). Maybe evidence overturns it someday; that&#8217;s what the record is for. But a recommendation does not acquire authority just because it&#8217;s the most thoroughly argued &#8220;</span><em><span>engineer&#8221;</span></em><span> in the room.</span></p><h2><strong><span>An honest caveat</span></strong></h2><p><span>Everything above assumes humans remain the ones who must understand the system. As of July 2026, I can&#8217;t prove that assumption will pass the test of time. Agents operate our codebases almost autonomously. Maybe the comprehension gate is a transitional artifact, and in a year teams will run systems no human fully holds, the way nobody holds a compiler&#8217;s output today.</span></p><p><span>Maybe. But I&#8217;d rather run a team that spends somewhat more time and actually understands its own architecture (with their laptop closed) than a faster team that has to ask the model about its own system each time we want to discuss something. If reality proves me wrong, I&#8217;ll update. Until then, this is the bet.</span></p><h2><strong><span>The close</span></strong></h2><p>There's a movement forming around this idea, though not everyone frames it the same way. Charity Majors <a href="https://charity.wtf/p/ai-demands-more-engineering-discipline">recently laid out the view</a> - widely held among engineers, though she herself pushes against it - that a good team's real product has always been a shared understanding of the software it owns. Her own line is contrarian to this - code becomes precious exactly when it's the only place the knowledge lives and the only place we test is in production; I don't think it's either/or. A team's caliber shows in both the hive mind and the willingness to test code in prod. <span>Chad Fowler calls it </span><a href="https://aicoding.leaflet.pub/3mbrvhyye4k2e"><span>relocating rigor</span></a><span>: </span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Yuxp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3f91984-0523-416c-9251-da5a6bcd4bb9_1828x1032.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Yuxp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3f91984-0523-416c-9251-da5a6bcd4bb9_1828x1032.png 424w, https://substackcdn.com/image/fetch/$s_!Yuxp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3f91984-0523-416c-9251-da5a6bcd4bb9_1828x1032.png 848w, https://substackcdn.com/image/fetch/$s_!Yuxp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3f91984-0523-416c-9251-da5a6bcd4bb9_1828x1032.png 1272w, https://substackcdn.com/image/fetch/$s_!Yuxp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3f91984-0523-416c-9251-da5a6bcd4bb9_1828x1032.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Yuxp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3f91984-0523-416c-9251-da5a6bcd4bb9_1828x1032.png" width="1456" height="822" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a3f91984-0523-416c-9251-da5a6bcd4bb9_1828x1032.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:822,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:257215,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trajlus.com/i/206169841?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3f91984-0523-416c-9251-da5a6bcd4bb9_1828x1032.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_!Yuxp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3f91984-0523-416c-9251-da5a6bcd4bb9_1828x1032.png 424w, https://substackcdn.com/image/fetch/$s_!Yuxp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3f91984-0523-416c-9251-da5a6bcd4bb9_1828x1032.png 848w, https://substackcdn.com/image/fetch/$s_!Yuxp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3f91984-0523-416c-9251-da5a6bcd4bb9_1828x1032.png 1272w, https://substackcdn.com/image/fetch/$s_!Yuxp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3f91984-0523-416c-9251-da5a6bcd4bb9_1828x1032.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Screenshot from Chad Fowler - Relocating Rigor</figcaption></figure></div><p><strong><span>Nowadays agents write everything. An RFC is the best place where the team can properly build the right understanding.</span></strong></p><p><em><span>Related reading:</span></em></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;183dfe2b-dc4f-4445-9404-10bce5f43d24&quot;,&quot;caption&quot;:&quot;When I was a fresh engineering manager, I kept going to my boss with the same complaint: I don&#8217;t understand my team&#8217;s domain. I don&#8217;t understand the services. I don&#8217;t understand the flows. I don&#8217;t understand the reasons behind half the decisions. And every time, he gave me the same line back:&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Software Is Not Magic&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:76713714,&quot;name&quot;:&quot;Adam Przywarty&quot;,&quot;bio&quot;:&quot;Engineer &amp; engineering leader (ex-Maze, ex-Dreamdata). Writing Accidental Architecture - essays on engineering leadership in the age of coding agents. Gdynia, Poland.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/66ad54cc-e4c8-4083-8cfa-87b8d21d0218_400x400.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-07-08T13:49:08.557Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!8MPT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50769dc0-f06a-4fda-9a3d-3916f9a8db51_1360x660.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://trajlus.com/p/software-is-not-magic&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:206047115,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:9920274,&quot;publication_name&quot;:&quot;Accidental Architecture&quot;,&quot;publication_logo_url&quot;:&quot;&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p></p>]]></content:encoded></item><item><title><![CDATA[RFCs in the Era of LLMs: Takeaways for Engineers]]></title><description><![CDATA[In RFCs in the Era of LLMs I argued that agents flipped the RFC&#8217;s job: writing the document is no longer how you think, and collaboratively reviewing the document is how your team keeps understanding the system it owns.]]></description><link>https://trajlus.com/p/rfcs-in-the-era-of-llms-takeaways-a21</link><guid isPermaLink="false">https://trajlus.com/p/rfcs-in-the-era-of-llms-takeaways-a21</guid><dc:creator><![CDATA[Adam Przywarty]]></dc:creator><pubDate>Wed, 08 Jul 2026 19:23:30 GMT</pubDate><content:encoded><![CDATA[<p>In <a href="https://trajlus.com/p/rfcs-in-the-era-of-llms">RFCs in the Era of LLMs</a> I argued that agents flipped the RFC&#8217;s job: writing the document is no longer how you think, and collaboratively reviewing the document is how your team keeps understanding the system it owns. This post is the operator&#8217;s half - what changes when you&#8217;re the one producing the document with an agent. <a href="https://trajlus.com/p/rfcs-in-the-era-of-llms-takeaways">Takeaways for Leaders covers the other half.</a></p><p>If you take one rule, take this one: never make a human read what you didn&#8217;t. The document cost you minutes; you&#8217;re about to ask five people for an hour each. Reviewer attention is the scarcest resource in the entire process, and AI slop isn&#8217;t a style problem - it&#8217;s text nobody chose. Everything below is that one rule, operationalized.</p><ol><li><p><strong>Write the bullets with the laptop closed.</strong> The model answers questions; it doesn&#8217;t get to decide. The honest accounting is uncomfortable: after hours of back and forth, most of the words in the doc are the model&#8217;s, and your irreducible contribution is the decision - what we&#8217;re doing, why, what we rejected. So this is the test I run before circulating anything: close the laptop and write those bullets from memory. If you can&#8217;t, you didn&#8217;t haven&#8217;t made any decision yet.</p></li><li><p><strong>Route the argument through the file.</strong> The session dies; the file survives - so the file is where the argument has to live. On my last RFC, reviewers&#8217; objections went into a comment file, and every reply went back into the same file - mine labeled as mine, the agent&#8217;s as the agent&#8217;s. The next review round, and the next session, started from that artifact instead of anyone&#8217;s memory. The unsolved part is the dance: folding the answers back into the RFC itself without losing the session you need to act on them. Workflows like <a href="https://claude.com/plugins/superpowers">superpowers</a> close some of the gap; I haven&#8217;t seen anyone close it fully.</p></li><li><p><strong>Mark provenance in the margins.</strong> My comments on my own last RFC include &#8220;the agent&#8217;s proposal, not mine&#8221; and &#8220;I did not say that,&#8221; on a paragraph where the doc had quietly attributed the model&#8217;s position to me. Reviewers argue differently with a human conviction than with a generated one. They&#8217;re entitled to know which is which.</p></li><li><p><strong>Restore the confidence gradient.</strong> Human writing carries confidence levels - &#8220;definitely X,&#8221; &#8220;I think Y,&#8221; &#8220;no idea about Z, help me&#8221; - and reviewers use them to steer their attention. Generated text is smooth: every sentence sounds equally sure, so the reviewer has no map of where to attack. I tried fixing this with formal tags on every claim - verified-in-code, spiked, proposed, open question. Re-reading those docs now, the tagged text is its own kind of slop: technically precise, not human readable. What works is boring, plain sentences: &#8220;I haven&#8217;t verified this.&#8221; &#8220;I don&#8217;t understand this part, or how it ended up in my RFC.&#8221; I left that second comment on my last RFC. It could have been embarrassing; instead, it turned out to be the interesting rabbit hole of the whole design, which got a proper explanation only because I admitted I was lost. When an agent co-writes your document, your own confusion is the best review signal you have. Give your reviewers the map made out of your gut feeling :)</p></li></ol>]]></content:encoded></item><item><title><![CDATA[RFCs in the Era of LLMs: Takeaways for Leaders]]></title><description><![CDATA[In RFCs in the Era of LLMs I argued that agents flipped the RFC&#8217;s job.]]></description><link>https://trajlus.com/p/rfcs-in-the-era-of-llms-takeaways</link><guid isPermaLink="false">https://trajlus.com/p/rfcs-in-the-era-of-llms-takeaways</guid><dc:creator><![CDATA[Adam Przywarty]]></dc:creator><pubDate>Wed, 08 Jul 2026 19:22:45 GMT</pubDate><content:encoded><![CDATA[<p>In <a href="https://trajlus.com/p/rfcs-in-the-era-of-llms">RFCs in the Era of LLMs</a> I argued that agents flipped the RFC&#8217;s job. The document is no longer where thinking happens and the collaborative review is how a team keeps understanding the system it owns. One consequence lands on leaders. The old pitch - &#8220;we slow down to think&#8221; - is dead. With a v1-to-v4 loop measured in hours, the process no longer costs speed. It costs focus, and it buys shipping non-random things. Running it well is now the job. </p><ol><li><p><strong>Make someone choose.</strong> This is a classic tech-debt decision, made once, at company scale: do we move fast and take on the debt, or do we slow down where it matters and keep the future interest low? In practice it sounds like: are we building something that lasts, or a proof of concept to raise the next round? I asked a founder exactly that, in writing, and I meant it - both answers are legitimate, and only one of them needs RFCs. If the honest answer is the proof of concept, skip the process and ship the swamp; that&#8217;s a rational trade. But it has to be chosen, not drifted into. The same choice repeats at a smaller scale every week: if your stack already persists agent plans into the repo (we use <a href="https://claude.com/plugins/superpowers">superpowers</a>), someone has to call what graduates from plan to RFC - and the bar is the same one: strategic, hard to reverse decisions (i.e. not two-way doors).</p></li><li><p><strong>Read the drafts yourself.</strong> Reviewer attention is the scarcest resource in the process, and the leader is its buffer. My rule with direct reports: send me the ugly version early. I&#8217;d rather spend ten minutes on a half-formed draft and tell you whether the direction is right than receive a polished document that is confidently wrong. I can metabolize good slop; five reviewers shouldn&#8217;t have to. I&#8217;ve had both kinds of managers - one with a high bar who wouldn&#8217;t read anything unfinished, and one who read every draft I sent him. I learned more from the second one :) The agent era settles the argument, because polish used to be evidence of effort, so a &#8220;no-drafts&#8221; bar used to be a <em>good</em> filter. Now the model does polish for free. The only thing left to check early is the direction.</p></li><li><p><strong>Publish your standing constraints.</strong> Some decisions should not be re-arguable by any generated text. Write them down where the team writes RFCs: the constraint, your name, the reason, and the condition under which you&#8217;d revisit it. Ours reads, roughly: three clouds plus our own Mac hardware is already the complexity budget; adding a fourth cloud needs a migration that migrates legacy first. A model can out-argue any engineer in the room. It cannot out-argue a published veto. Your team stops burning review cycles on debates you&#8217;ve already settled.</p></li><li><p><strong>Hold the comprehension line.</strong> The hardest new question: what do you do when the agent&#8217;s design is genuinely better than anything your team currently understands? My rule, for now: the team&#8217;s ability to re-explain the architecture is the complexity budget. Not every line - nobody holds every line anymore - the architecture. I&#8217;d rather run a team that spends somewhat more time and actually understands its own system than a faster team operating something it has to ask the model about. Human-understandable forces simple and elegant - which, conveniently, is also what survives.</p></li><li><p><strong>Extract the strategy yourself.</strong> <a href="https://lethain.com/good-engineering-strategy-is-boring/">Will Larson&#8217;s observation predates all of this</a> and survives it: once your team has a handful of RFCs, read them side by side - the constraints and choices they share is your engineering strategy. Agents changed who writes the documents. They didn&#8217;t change whose job the synthesis is. That one is yours.</p></li></ol>]]></content:encoded></item><item><title><![CDATA[Software Is Not Magic]]></title><description><![CDATA[When I was a fresh EM, I kept going to my boss with the same complaint: I don&#8217;t understand my team&#8217;s domain. His reply always: "software is not magic".]]></description><link>https://trajlus.com/p/software-is-not-magic</link><guid isPermaLink="false">https://trajlus.com/p/software-is-not-magic</guid><dc:creator><![CDATA[Adam Przywarty]]></dc:creator><pubDate>Wed, 08 Jul 2026 13:49:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!8MPT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50769dc0-f06a-4fda-9a3d-3916f9a8db51_1360x660.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_!8MPT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50769dc0-f06a-4fda-9a3d-3916f9a8db51_1360x660.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8MPT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50769dc0-f06a-4fda-9a3d-3916f9a8db51_1360x660.png 424w, https://substackcdn.com/image/fetch/$s_!8MPT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50769dc0-f06a-4fda-9a3d-3916f9a8db51_1360x660.png 848w, https://substackcdn.com/image/fetch/$s_!8MPT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50769dc0-f06a-4fda-9a3d-3916f9a8db51_1360x660.png 1272w, https://substackcdn.com/image/fetch/$s_!8MPT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50769dc0-f06a-4fda-9a3d-3916f9a8db51_1360x660.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8MPT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50769dc0-f06a-4fda-9a3d-3916f9a8db51_1360x660.png" width="1360" height="660" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/50769dc0-f06a-4fda-9a3d-3916f9a8db51_1360x660.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:660,&quot;width&quot;:1360,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:30374,&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://trajlus.com/i/206047115?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50769dc0-f06a-4fda-9a3d-3916f9a8db51_1360x660.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_!8MPT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50769dc0-f06a-4fda-9a3d-3916f9a8db51_1360x660.png 424w, https://substackcdn.com/image/fetch/$s_!8MPT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50769dc0-f06a-4fda-9a3d-3916f9a8db51_1360x660.png 848w, https://substackcdn.com/image/fetch/$s_!8MPT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50769dc0-f06a-4fda-9a3d-3916f9a8db51_1360x660.png 1272w, https://substackcdn.com/image/fetch/$s_!8MPT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50769dc0-f06a-4fda-9a3d-3916f9a8db51_1360x660.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>When I was a fresh engineering manager, I kept going to my boss with the same complaint: <em>I don&#8217;t understand my team&#8217;s domain.</em> I don&#8217;t understand the services. I don&#8217;t understand the flows. I don&#8217;t understand the reasons behind half the decisions. And every time, he gave me the same line back:</p><p><strong>&#8220;Software is not magic.&#8221;</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://trajlus.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Accidental Architecture! 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>It took me a while to hear what he was actually saying. He wasn&#8217;t telling me to try harder. He was telling me that if a system feels like magic, if it can only be operated by its author, if every question about it requires an oracle - that&#8217;s not a property of the software. That&#8217;s a communication failure. Somebody built it, somebody made every single decision inside it, and every one of those decisions has a <em>why</em> that can be said out loud in simple words.</p><p>Six months later I had moved the wrong engineers off the team, and the domain became clear almost overnight. Not because the systems got simpler - they didn&#8217;t, not at first. Because the new hires could finally <em>explain</em> them. Everything I &#8220;couldn&#8217;t understand&#8221; for months turned out to be perfectly understandable. The communication turned out to be the missing piece.</p><h2><strong>The Thread</strong></h2><p>Here&#8217;s what this looks like in practice, lightly disguised.</p><p>An engineer on my team ships a large PR introducing a brand new subsystem. Two services, infrastructure scripts, a forked open-source library. The PR description is a bullet list of file changes. I ask the most basic question a reviewer can ask: <em>can you quickly summarize what&#8217;s in here?</em></p><p>What follows is a Slack thread with over a two hundred messages.</p><p>Every answer opens a new door I didn&#8217;t know existed. The library we forked? The upstream is dead - &#8220;it doesn&#8217;t update,&#8221; delivered as reassurance. One of the services pushes code directly onto the machines it manages, because that was &#8220;a solution to have a single versioned deploy.&#8221; There&#8217;s a cron job running every five minutes - why five? &#8220;Just copied it from another system, no particular reason.&#8221; The whole thing runs on its own VM outside our standard platform, and after twenty minutes of drilling, the honest answer surfaces: the standard platform&#8217;s dev experience is painful, so it was avoided. And the worst part was that this &#8220;plan&#8221; was never written down, it just happened.</p><p>None of these decisions were hidden on purpose. Every time I asked, I got an honest answer. But I had to ask. Every. Single. Time.</p><p>Ninety minutes in, I gave up extracting and wrote the summary myself:</p><blockquote><p>So let me rephrase this entire thread such that I understand it correctly. We took a library, changed a lot of it to fit our needs. Our version is responsible for X on each machine. We put a second service on top that manages the machines. Yes / no / almost there?</p></blockquote><p>The answer: <em>&#8220;Yeah, that&#8217;s the gist.&#8221;</em></p><p><strong>The gist was three bullets.</strong> Three bullets that existed in the engineer&#8217;s head the entire time, that could have been the first message in the thread, the first paragraph of the PR description. Instead, I had to spent two hours of archaeology to dig them out.</p><p>And here&#8217;s the part that makes this story interesting rather than just annoying: <strong>the design was mostly fine.</strong> When we finally got to the bottom of each choice, most of them held up. The engineer wasn&#8217;t defensive, wasn&#8217;t hiding anything, had reasons for nearly everything. Sometimes the software is genuinely good - it&#8217;s <em>only</em> the explanation that&#8217;s missing. That&#8217;s exactly the point. Nothing in that PR was magic. It just cost two hours of my time to prove it, and that bill gets paid again by every future engineer who touches that system.</p><h2><strong>The Darker Version</strong></h2><p>That thread is the recoverable version of the problem. There&#8217;s a worse one.</p><p>Earlier in my career as an EM, I inherited an engineer with a glowing reputation. Multiple great people, independently, told me he was the most brilliant engineer on the team - one said &#8220;much better than me,&#8221; which set the bar high. I had genuinely high hopes.</p><p>What I actually experienced: systems shipped to production that nobody else could explain or safely touch. Features that were &#8220;done&#8221; but that the rest of the team quietly cleaned up after. And in every conversation where I tried to understand his work, the same fog - not because he was hiding anything, but because translating his own decisions into words other humans could use was a skill he didn&#8217;t have and didn&#8217;t think he needed.</p><p>Managing him consumed more of my energy than the rest of the team combined (and multiplied). I tried coaching. I tried daily check-ins, written updates, feedback delivered every way I knew how. And eventually I had to be honest with myself: <strong>super smart, poor communication skills, and I could not coach him out of it.</strong> We parted ways.</p><p>The team&#8217;s domain didn&#8217;t get easier after he left. The <em>explanations</em> got better. That&#8217;s when my boss&#8217;s line stopped being a slogan and became an operating principle.</p><h2><strong>The Take for Leaders</strong></h2><p>When you don&#8217;t understand your team&#8217;s domain, your first hypothesis should not be &#8220;I&#8217;m not technical enough&#8221; or &#8220;this domain is just hard.&#8221; Your first hypothesis should be: <strong>someone on this team is failing to explain.</strong> Run the cheap test - ask for the three-bullet gist of any system. An engineer who understands their system can produce it in minutes. If a hundred-reply thread comes back instead, you&#8217;ve found your problem, and it isn&#8217;t the software.</p><p>Then comes the decision everyone frames wrong. The standard advice is that firing is the expensive option and coaching is the cheap one. After years of managing engineers, I believe it&#8217;s the other way around. <strong>Coaching a senior engineer to communicate is the expensive option:</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Wij1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c462aba-6ef3-4755-b787-8d826af9063e_1848x654.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Wij1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c462aba-6ef3-4755-b787-8d826af9063e_1848x654.png 424w, https://substackcdn.com/image/fetch/$s_!Wij1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c462aba-6ef3-4755-b787-8d826af9063e_1848x654.png 848w, https://substackcdn.com/image/fetch/$s_!Wij1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c462aba-6ef3-4755-b787-8d826af9063e_1848x654.png 1272w, https://substackcdn.com/image/fetch/$s_!Wij1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c462aba-6ef3-4755-b787-8d826af9063e_1848x654.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Wij1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c462aba-6ef3-4755-b787-8d826af9063e_1848x654.png" width="1456" height="515" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c462aba-6ef3-4755-b787-8d826af9063e_1848x654.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:515,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:158491,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trajlus.substack.com/i/206047115?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c462aba-6ef3-4755-b787-8d826af9063e_1848x654.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_!Wij1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c462aba-6ef3-4755-b787-8d826af9063e_1848x654.png 424w, https://substackcdn.com/image/fetch/$s_!Wij1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c462aba-6ef3-4755-b787-8d826af9063e_1848x654.png 848w, https://substackcdn.com/image/fetch/$s_!Wij1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c462aba-6ef3-4755-b787-8d826af9063e_1848x654.png 1272w, https://substackcdn.com/image/fetch/$s_!Wij1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c462aba-6ef3-4755-b787-8d826af9063e_1848x654.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>To be clear: coaching is a genuine service to that engineer. If it works, they walk into the rest of their career with a skill that will out-value most technical skills they have. If you can afford it - the time, the team&#8217;s patience, the odds - it&#8217;s the more ethical choice, and I respect leaders who make it (and I aspire to be one myself whenever applicable).</p><p>But notice what else you could buy with that time. Every hour you spend coaching a genius to communicate is an hour you could spend understanding the systems yourself. <strong>Your team is better off with a more knowledgeable leader than with a slightly-better-communicating genius.</strong> When I finally moved the wrong engineers off my team, it forced me to drill into the tech debt personally - and that helped team a lot overall.</p><p>So the honest version of the take: coach if you can afford it. If you can&#8217;t, exit and move on <em>(even though admitting this bit sucks for me now to be frank).</em></p><h2><strong>The Take for Engineers</strong></h2><p>If you&#8217;re the engineer in these stories, the fix is not a personality transplant, it takes deliberate practice to get better at communication. Maybe I will write a blog post about it one day.</p><p>The engineers I now hire and keep are not the ones who build the most impressive systems. They&#8217;re the ones who can make any system - including the messy, inherited, genuinely complicated ones - feel <em>obvious</em> after ten minutes of conversation. That skill is rarer than raw technical brilliance, and in a product team setting it&#8217;s worth more.</p><h2><strong>An Honest Caveat</strong></h2><p>Is there a carve-out for genuinely hard domains - distributed systems, parallelism, machine learning, the deep internals where maybe things really are irreducibly complex and there is no other way around it? Probably, somewhere. My years in this industry, both as IC and as an EM, and every single time something felt like magic,  the problem was in the communication and not in the inherent complexity.</p><p>So that&#8217;s my prior until reality corrects me. When software feels like magic, don&#8217;t be impressed. Ask for a tldr :)</p><p><strong>Software is not magic. We&#8217;re just not explaining it well enough.</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://trajlus.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Accidental Architecture! 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>