<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Spencer Elkington</title>
    <description>The latest articles on DEV Community by Spencer Elkington (@spelkington).</description>
    <link>https://dev.to/spelkington</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3769547%2F854574de-3438-44d7-b74d-c2c436a7d672.png</url>
      <title>DEV Community: Spencer Elkington</title>
      <link>https://dev.to/spelkington</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/spelkington"/>
    <language>en</language>
    <item>
      <title>The Wild Web</title>
      <dc:creator>Spencer Elkington</dc:creator>
      <pubDate>Wed, 04 Nov 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/spelkington/the-wild-web-43np</link>
      <guid>https://dev.to/spelkington/the-wild-web-43np</guid>
      <description>&lt;p&gt;Alright, let’s get this out of the way:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You were born in 1998. You’ve always had the internet. What would &lt;em&gt;you&lt;/em&gt; know about the old-school web?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Have I only ever known an era of version control?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.chaoticgood.computer/content/annotations/programming-as-theory-building#^zvdtt8sxul" rel="noopener noreferrer"&gt;*Maybe.*&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Did I start my career just a couple years after robots absolutely swept the field, arguably before I got a stable footing in the industry?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.chaoticgood.computer/content/notes/hostage-negotiations" rel="noopener noreferrer"&gt;I suppose so.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Have I spent the last two years getting slapped around by technical stacks older than I am?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.chaoticgood.computer/content/notes/software-gardening" rel="noopener noreferrer"&gt;A bit more, perhaps, than I’d care to admit.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Three knocks against me, there, but I’ve got a trick up my sleeve. A badge of honor. A stamp of approval to talk about old-school web. An undeniable bona fide:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://web.archive.org/web/20090722011616/http://www.geocities.com:80/zipzapkidsplay/hiddenpage.html?" rel="noopener noreferrer"&gt;A slice of my personal Geocities page&lt;/a&gt;, plucked, by luck, as part of the Internet Archive’s &lt;a href="https://archive.org/web/geocities.php" rel="noopener noreferrer"&gt;2009 GeoCities Special Collection&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frh0qkll2ht467ol0q7ua.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frh0qkll2ht467ol0q7ua.webp" alt="Pasted image 20261104235923" width="800" height="718"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Unfortunately, it seems the images have been lost to time, and the actual index page of &lt;code&gt;geocities.com/zipzapkidsplay&lt;/code&gt;, our family’s shared GeoCities account,&lt;sup&gt;&lt;a id="user-content-fnref-1"&gt;1&lt;/a&gt;&lt;/sup&gt; didn’t seem to make it into the Special Collection.&lt;sup&gt;&lt;a id="user-content-fnref-2"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;The proof may be partial, but it’s proof nonetheless: I, for a brief and glorious moment, got to exist in the world of Web 1.0.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Eras of the Web
&lt;/h2&gt;

&lt;p&gt;If you’ve never heard the term Web 1.0 before, it’s important that you know where we’re coming from.&lt;/p&gt;

&lt;p&gt;There was a period of time when websites were &lt;em&gt;static&lt;/em&gt;: when you were on a website, there was not a whole lot that you, &lt;em&gt;the user&lt;/em&gt;, could do to change the contents of the page for other people.&lt;/p&gt;

&lt;p&gt;The quintessential archive example of this concept is the &lt;a href="https://www.spacejam.com/1996/" rel="noopener noreferrer"&gt;website for the 1996 &lt;em&gt;Space Jam&lt;/em&gt; movie&lt;/a&gt;. You, the user, aren’t a factor in the website: there’s no login, nowhere to &lt;em&gt;like and subscribe&lt;/em&gt;. You can click through to see Space Jam news, get coloring book printouts, and when you leave, there’s no trace you were ever there.&lt;sup&gt;&lt;a id="user-content-fnref-3"&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;That&lt;/em&gt; is Web 1.0.&lt;/p&gt;

&lt;p&gt;Web 2.0 is the era that came after that. Funnily enough, my old Geocities site is a natural bridge, with its hyperlink to my &lt;a href="https://web.archive.org/web/20090712000801/http://www.roblox.com/User.aspx?ID=119813" rel="noopener noreferrer"&gt;Roblox account&lt;/a&gt;&lt;sup&gt;&lt;a id="user-content-fnref-4"&gt;4&lt;/a&gt;&lt;/sup&gt;. In a strange way, &lt;a href="https://blog.chaoticgood.computer/tags/projects/games/roblox" rel="noopener noreferrer"&gt;Roblox&lt;/a&gt; was like Baby’s First Web 2.0 experience. In its original &lt;a href="https://blog.chaoticgood.computer/content/articles/robloxaville#2-monetization" rel="noopener noreferrer"&gt;pre-monetized form&lt;/a&gt;, the site was a textbook example of &lt;em&gt;user-generated content&lt;/em&gt;. Even though I was making games, Roblox wasn’t &lt;em&gt;my&lt;/em&gt; site. I didn’t own it. Instead, my &lt;em&gt;content&lt;/em&gt; was being uploaded and served out of their servers.&lt;/p&gt;

&lt;p&gt;That was the start of an era where websites were no longer just static information. They were places where you could comment and subscribe. You could place an order, or poke your friends – you know, back before Facebook’s business model was metaverse avatars and advertising eating disorders to teenagers.&lt;/p&gt;

&lt;p&gt;Web 2.0 is&lt;sup&gt;&lt;a id="user-content-fnref-5"&gt;5&lt;/a&gt;&lt;/sup&gt; the commercialization and consolidation of the internet into a core set of applications and platforms that everybody builds on top of.&lt;/p&gt;

&lt;h2&gt;
  
  
  Social Networks, not Social Media
&lt;/h2&gt;

&lt;p&gt;Like many older members of Gen Z, I spent my fair share of the 2010s with social media accounts. Facebook, for keeping up with older family members. Twitter&lt;sup&gt;&lt;a id="user-content-fnref-6"&gt;6&lt;/a&gt;&lt;/sup&gt;, for shitposting with friends. I’ll even admit to using Snapchat, back when we were all too dumb and naive to think that any of that content &lt;em&gt;actually&lt;/em&gt; self-destructed.&lt;/p&gt;

&lt;p&gt;Of course, between swinging elections, being bought out by billionaires, and generally developing into a thin facade for shilling either bad products or even worse ideas, I largely deleted all of my social media at the turn of the decade.&lt;/p&gt;

&lt;p&gt;The only two I have left are LinkedIn – which feels more like a professional courtesy, kept &lt;a href="https://bsky.app/profile/speen.us/post/3mz7l5i7f322l" rel="noopener noreferrer"&gt;strictly at arms length&lt;/a&gt; – and Bluesky.&lt;/p&gt;

&lt;p&gt;Bluesky was an interesting case. I can’t say that I even used Twitter all that much anymore before it was purchased, but I did stay up-to-date on Bluesky’s launch and initial growth because I was interested in the promise of &lt;a href="https://atproto.com/" rel="noopener noreferrer"&gt;ATProto&lt;/a&gt;, which creates a social network environment a bit more like old-school email.&lt;sup&gt;&lt;a id="user-content-fnref-7"&gt;7&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;I’ve certainly outgrown the 2010s dream of becoming Twitter Famous™, but I have thought more about the concept of social networks since picking up my &lt;a href="https://blog.chaoticgood.computer/content/season-of-stamps" rel="noopener noreferrer"&gt;Season of Stamps&lt;/a&gt;. Part of Stamps is to be more social, building new relationships after moving across the country. Admittedly, the last ~3 months since moving have been pretty lonely&lt;sup&gt;&lt;a id="user-content-fnref-8"&gt;8&lt;/a&gt;&lt;/sup&gt;, and social media is, if nothing else, &lt;em&gt;social&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;It’s in that state of mind that I noticed something interesting, recently. I read through &lt;a href="https://maggieappleton.com/planning-agents" rel="noopener noreferrer"&gt;an interesting presentation about Boundary Objects&lt;/a&gt; and caught a section at the very end of the post:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Mentions around the web&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It &lt;em&gt;looks&lt;/em&gt; like a comment section, but it isn’t a comment: it’s another blog that &lt;em&gt;mentions&lt;/em&gt; her blog post, presumably with a link. I pulled on that thread a bit, and that’s when I found something &lt;em&gt;wild&lt;/em&gt;: &lt;a href="https://indieweb.org" rel="noopener noreferrer"&gt;IndieWeb&lt;/a&gt;, &lt;a href="https://webmention.net/" rel="noopener noreferrer"&gt;WebMentions&lt;/a&gt;, and a social network that’s practically invisible unless you know what to look for.&lt;/p&gt;

&lt;h2&gt;
  
  
  IndieWeb, as described by an IndieNewb
&lt;/h2&gt;

&lt;p&gt;So, as I understand it, this is how WebMentions work:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I publish a blog post with a hyperlink&lt;sup&gt;&lt;a id="user-content-fnref-9"&gt;9&lt;/a&gt;&lt;/sup&gt;
&lt;/li&gt;
&lt;li&gt;I send a request via some service like &lt;a href="https://webmention.io/" rel="noopener noreferrer"&gt;&lt;code&gt;webmention.io&lt;/code&gt;&lt;/a&gt; to the site I linked to&lt;/li&gt;
&lt;li&gt;The owner of the site receives a notification that &lt;code&gt;blog.chaoticgood.computer&lt;/code&gt; mentioned them&lt;/li&gt;
&lt;li&gt;They can choose to include that mention on &lt;em&gt;their&lt;/em&gt; site, in whatever form factor they’d like.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is a sneaky little process, isn’t it? There’s not really a &lt;em&gt;platform&lt;/em&gt; to speak of: there’s not a single feed anywhere to see any of this. It’s just a casual “Hey, I mentioned you!”, and a choice to acknowledge the mention.&lt;/p&gt;

&lt;p&gt;The tricky part: it’s &lt;em&gt;elegant&lt;/em&gt;, but &lt;em&gt;invisible&lt;/em&gt;. I’m the type of person who gets into this kind of thing, and &lt;a href="https://blog.chaoticgood.computer/content/notes/digital-gardening-with-quartz" rel="noopener noreferrer"&gt;I’ve been reading Maggie Appleton’s blog for awhile now&lt;/a&gt; without ever noticing that there was some under-the-hood magic going on.&lt;/p&gt;

&lt;p&gt;In my mind, something that’s hard to see is also hard to understand, and something that’s hard to understand is hard to jump into.&lt;/p&gt;

&lt;p&gt;So, let’s try to see it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The webs of the Web
&lt;/h2&gt;

&lt;p&gt;Since learning about this, I’ve gone ahead and updated this site to support WebMentions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Outgoing mentions are handled by a &lt;a href="https://github.com/chaoticgoodcomputing/blog/actions/runs/41875712182/job/126735885721" rel="noopener noreferrer"&gt;GitHub Action&lt;/a&gt; that triggers after I push out new content&lt;/li&gt;
&lt;li&gt;Incoming mentions are handled through &lt;a href="https://webmention.io/" rel="noopener noreferrer"&gt;&lt;code&gt;webmentions.io&lt;/code&gt;&lt;/a&gt;&lt;sup&gt;&lt;a id="user-content-fnref-10"&gt;10&lt;/a&gt;&lt;/sup&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So: do I have any friends, yet?&lt;/p&gt;

&lt;p&gt;Let’s crawl through my mentions to check!&lt;sup&gt;&lt;a id="user-content-fnref-11"&gt;11&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This interactive content can only be viewed on the &lt;a href="https://blog.chaoticgood.computer/content/notes/the-wild-web" rel="noopener noreferrer"&gt;live site&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;Dammit!&lt;/em&gt; No friends, yet. However, it is cool to see that I’ve accidentally stumbled on this in the past. My mention to Bogard’s work was &lt;a href="https://blog.chaoticgood.computer/content/notes/over-under-engineering" rel="noopener noreferrer"&gt;March of 2024&lt;/a&gt;, so I’ve been orbiting around WebMentions for longer than I expected!&lt;/p&gt;

&lt;p&gt;So, I &lt;em&gt;know&lt;/em&gt; these three have WebMentions enabled, since my outgoing mentions were acknowledged by them. Despite being apparently easy to stumble into, I’m still not quite sure, at this point, how discoverability works for IndieWeb.&lt;/p&gt;

&lt;p&gt;One sure-fire way to know who is using WebMentions? Going through these three and finding out who they’ve got WebMentions with!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This interactive content can only be viewed on the &lt;a href="https://blog.chaoticgood.computer/content/notes/the-wild-web" rel="noopener noreferrer"&gt;live site&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The web! It’s &lt;em&gt;alive!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;While my scrapes of Jimmy or Birgitta’s sites didn’t yield much&lt;sup&gt;&lt;a id="user-content-fnref-12"&gt;12&lt;/a&gt;&lt;/sup&gt;, Maggie’s blog is a real hotspot of WebMention activity.&lt;/p&gt;

&lt;p&gt;Now that we’re scraping outside of our own domain, I’ve added a bit of extra sauce. First, we can now see incoming and outgoing mentions for those sites: not just who is mentioning them, but who &lt;em&gt;they&lt;/em&gt; are mentioning.&lt;/p&gt;

&lt;p&gt;Second: I’ve also stolen a bit of a Twitter-ism – the idea of the &lt;em&gt;mutual&lt;/em&gt;. On follow-based platforms, mutuals are somebody who you follow, and who follows you back. Here, I’ve highlighted mutuals specifically, with the hope to find not just chatter, but actual back-and-forth conversations happening on the IndieWeb within my immediate vicinity.&lt;/p&gt;

&lt;p&gt;Finally, I’ve highlighted an important finding: &lt;a href="https://news.indieweb.org/en" rel="noopener noreferrer"&gt;IndieWeb itself&lt;/a&gt;. You’re going to see this one come up a lot more as the graphs progress. IndieWeb allows folks to &lt;em&gt;mention&lt;/em&gt; IndieWeb in order to consolidate posts &lt;em&gt;about&lt;/em&gt; IndieWeb. It’s a real turducken of self-reference. Compliments to the chefs: it’s a beautiful thing to see.&lt;/p&gt;

&lt;p&gt;Now, at this point, I’m both on a roll and quickly noticing that other sites suspect my home internet of being a bot farm, so I only have the moral budget for one last scrape. I looked through many of Maggie’s mutuals and mentions, and went through some of my personal highlights:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://boffosocko.com/" rel="noopener noreferrer"&gt;Chris Aldrich&lt;/a&gt;, a.k.a. boffosocko, who seems to be a big figure in the IndieWeb/microblogging/digital gardening scene. They write about a real broad range of topics, and all of my exploring on their site has been real fun&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://swyx.io" rel="noopener noreferrer"&gt;Swyx&lt;/a&gt;, who has a real wacky blend of &lt;a href="https://maggieappleton.com/ambient-copresence" rel="noopener noreferrer"&gt;ambient co-presence&lt;/a&gt; strategies that I’m absolutely eating up. I’m also a massive fan of the post they made during &lt;a href="https://swyx.io/why-temporal" rel="noopener noreferrer"&gt;their tenure as Head of Developer Experience at Temporal&lt;/a&gt;. At my &lt;a href="https://blog.chaoticgood.computer/tags/projects/dayjob" rel="noopener noreferrer"&gt;dayjob&lt;/a&gt;, we developed and open-sourced a library called &lt;a href="https://traxsharp.net/" rel="noopener noreferrer"&gt;Trax&lt;/a&gt; with a very similar philosophy, so it’s cool to see some of the origins of the philosophy forming, there&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.zylstra.org/blog/" rel="noopener noreferrer"&gt;Ton Zĳlstra&lt;/a&gt;, who is another central node in IndieWeb and has a great post, “&lt;a href="https://www.zylstra.org/blog/2026/11/good-enough-jumps-the-model-gap-and-avoids-ai-lock-in/" rel="noopener noreferrer"&gt;Good Enough Jumps the Model Gap&lt;/a&gt;”, that I feel meshes super well with &lt;a href="https://blog.chaoticgood.computer/content/notes/software-gardening" rel="noopener noreferrer"&gt;the model selection portions of Software Gardening&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://adactio.com/" rel="noopener noreferrer"&gt;Jeremy Keith&lt;/a&gt;, whose music is fantastic and has inspired me to try my hand at putting some of my own music on this site&lt;sup&gt;&lt;a id="user-content-fnref-13"&gt;13&lt;/a&gt;&lt;/sup&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There is one other who is worthy of the most honorable mention. To understand why, here’s my final map:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This interactive content can only be viewed on the &lt;a href="https://blog.chaoticgood.computer/content/notes/the-wild-web" rel="noopener noreferrer"&gt;live site&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The award for the Monarch of the Mutuals goes to &lt;a href="https://ohhelloana.blog/" rel="noopener noreferrer"&gt;Ana Rodrigues&lt;/a&gt;! They can go ahead and pile this up next to the sweep for Best Doodles,&lt;sup&gt;&lt;a id="user-content-fnref-14"&gt;14&lt;/a&gt;&lt;/sup&gt; as well as Friendliest Feature: earned, properly, by their &lt;a href="https://ohhelloana.blog/guestbook/" rel="noopener noreferrer"&gt;Guestbook&lt;/a&gt; feature.&lt;/p&gt;

&lt;p&gt;This whole adventure has been fun on many fronts, but most of all because I have a whole lot of new places to read things. I like to write about what I read, and becoming part of a strange, wild, invisible social network is just very &lt;em&gt;neat&lt;/em&gt; to me! In the spirit of &lt;a href="https://blog.chaoticgood.computer/content/season-of-stamps#stamp-like-an-envelope" rel="noopener noreferrer"&gt;“stamp, like an envelope”&lt;/a&gt;, knowing that something as innocuous as linking to another page means sending out a message into this weird web has me excited to write even more.&lt;/p&gt;

&lt;h2 id="footnote-label"&gt;Footnotes&lt;/h2&gt;

&lt;ol&gt;
&lt;li id="user-content-fn-1"&gt;
&lt;p&gt;Another feather in my family’s established &lt;a href="https://blog.chaoticgood.computer/content/articles/robloxaville#being-a-dork-is-a-lifetime-commitment" rel="noopener noreferrer"&gt;nerd cap&lt;/a&gt;. &lt;a&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-2"&gt;
&lt;p&gt;There are a number of efforts to properly index Geocities archives. &lt;code&gt;oocities.org&lt;/code&gt; states that they have &lt;a href="https://www.oocities.org/zipzapkidsplay" rel="noopener noreferrer"&gt;200GB of archives just waiting to be indexed&lt;/a&gt;, which would be a &lt;em&gt;very&lt;/em&gt; fun project to work on. Fingers crossed that &lt;a href="https://bsky.app/profile/hobbybuilder.bsky.social/post/3mzk6dftqjw2k" rel="noopener noreferrer"&gt;Hobby Builder&lt;/a&gt; can point me in the right direction. &lt;a&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-3"&gt;
&lt;p&gt;The sole exception to this is the link to the &lt;a href="https://wbshop.com/collections/looney-tunes" rel="noopener noreferrer"&gt;Warner Brothers Store&lt;/a&gt;. It’s &lt;em&gt;pretty&lt;/em&gt; funny that the only maintenance of this site is the plug. It’s like if the janitor of a museum only swept the gift shop. &lt;a&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-4"&gt;
&lt;p&gt;I’m shocked to see such a progressive bio, considering I was 10 years old – and Mormon – at the time of that snapshot. What can I say? I’ve always been an ally. &lt;a&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-5"&gt;
&lt;p&gt;or “was”, depending on if you believe NFT photos of apes truly brought on Web 3.0 &lt;a&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-6"&gt;
&lt;p&gt;X? Over my dead body. &lt;a&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-7"&gt;
&lt;p&gt;I won’t get into the particulars of ATProto here, but seriously: give it a read. &lt;a&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-8"&gt;
&lt;p&gt;I’ll concede that this is certainly &lt;em&gt;correlated&lt;/em&gt; to the uptick of writing I’ve done here. &lt;a&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-9"&gt;
&lt;p&gt;Easy!. A friend told me recently that I use more hyperlinks in casual conversation than anybody he has ever met, and I’ve chosen to take this as the compliment it was &lt;em&gt;not&lt;/em&gt; intended to be. &lt;a&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-10"&gt;
&lt;p&gt;Check out the new “Around the Web” section at the bottom of my notes! &lt;a&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-11"&gt;
&lt;p&gt;You can find the scraper code I’m using at the &lt;a href="https://github.com/chaoticgoodcomputing/blog/blob/main/packages/indieweb-graph/" rel="noopener noreferrer"&gt;monorepo for this website&lt;/a&gt;. This also serves as a shameless plug for &lt;a href="https://blog.chaoticgood.computer/tags/projects/flowthru" rel="noopener noreferrer"&gt;Flowthru&lt;/a&gt; (☞ﾟヮﾟ)☞ &lt;a&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-12"&gt;
&lt;p&gt;I’m not sure if this is actual reality, or a problem with my scraper. If it ends up being obviously my fault, I’ll update the graph and post accordingly. &lt;a&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-13"&gt;
&lt;p&gt;Jeremy – if you’re reading this, &lt;em&gt;please&lt;/em&gt; put &lt;a href="https://saltercane.com/" rel="noopener noreferrer"&gt;&lt;em&gt;Deep Black Water&lt;/em&gt;&lt;/a&gt; on YouTube Music! &lt;a&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-14"&gt;
&lt;p&gt;conceding that Ana’s are in a different league compared to &lt;a href="https://blog.chaoticgood.computer/content/annotations/llm-starter" rel="noopener noreferrer"&gt;some of my own doodle crimes&lt;/a&gt; &lt;a&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;a href="https://blog.chaoticgood.computer/content/notes/the-wild-web" rel="noopener noreferrer"&gt;The Wild Web&lt;/a&gt; was first published on Chaotic Good Computing, where you can reply to it on Bluesky or from your own site.&lt;/p&gt;

</description>
      <category>site</category>
      <category>data</category>
      <category>stamps</category>
      <category>flowthru</category>
    </item>
    <item>
      <title>You can pry my dashes from my cold, dead hands</title>
      <dc:creator>Spencer Elkington</dc:creator>
      <pubDate>Mon, 02 Nov 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/spelkington/you-can-pry-my-dashes-from-my-cold-dead-hands-3jpp</link>
      <guid>https://dev.to/spelkington/you-can-pry-my-dashes-from-my-cold-dead-hands-3jpp</guid>
      <description>&lt;p&gt;&lt;em&gt;I get it&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The em-dash has been co-opted by LLMs. Survey ten people, and nine of them will say “if there’s an em-dash, there’s AI.”&lt;/p&gt;

&lt;p&gt;They’re &lt;em&gt;wrong&lt;/em&gt;, but I &lt;em&gt;get it&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;If there’s anybody to blame, it’s my mother. For years, she has worked as a &lt;a href="https://www.realtimecartcaptioning.com/" rel="noopener noreferrer"&gt;real-time captioner for deaf and hard-of-hearing students&lt;/a&gt;. Her specialty is PITA: &lt;a href="https://www.realtimecartcaptioning.com/past-work" rel="noopener noreferrer"&gt;pain-in-the-ass&lt;/a&gt; classes across a lot of really tricky disciplines. The em-dash is an important tool in writing human speech, because it represents a &lt;em&gt;pause&lt;/em&gt;. A pause to, perhaps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Qualify or clarify a piece of information&lt;/li&gt;
&lt;li&gt;Pause, think, and – if necessary – pivot.&lt;sup&gt;&lt;a id="user-content-fnref-1"&gt;1&lt;/a&gt;&lt;/sup&gt;
&lt;/li&gt;
&lt;li&gt;Take a deep breath; or&lt;/li&gt;
&lt;li&gt;Be interrupted – perhaps, while you were taking that deep breath.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Those PITA classes she captions are &lt;em&gt;full&lt;/em&gt; of those four cases, and so she has been writing more em-dashes than any other human being in the course of her decades of experience.&lt;/p&gt;

&lt;p&gt;So: when you see me use em-dashes, just know that– it’s is a genetic thing. I will never escape that original sin.&lt;/p&gt;

&lt;p&gt;I &lt;em&gt;would&lt;/em&gt; still contend that the em-dash is a &lt;em&gt;perfectly valid piece of punctuation&lt;/em&gt;, which is why it’s so aggravating that a) LLMs co-opted the emdash for a period of time; and b) even if they &lt;em&gt;all&lt;/em&gt; stopped using it, it’d still live in perpetual infamy with other artifacts of early AI, like multiple fingers or &lt;a href="https://bsky.app/profile/danlehner.bsky.social/post/3myhtqfytc22u" rel="noopener noreferrer"&gt;sneaky gay boomer Looney Tunes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I &lt;em&gt;am&lt;/em&gt; willing to entertain that &lt;em&gt;maybe&lt;/em&gt; – just &lt;em&gt;maybe&lt;/em&gt; – I’m wrong about this. Perhaps I’m down bad with a case of &lt;a href="https://blog.chaoticgood.computer/content/notes/hostage-negotiations" rel="noopener noreferrer"&gt;Claude-code Syndrome&lt;/a&gt; or have a need to embrace &lt;a href="https://blog.chaoticgood.computer/content/notes/software-gardening" rel="noopener noreferrer"&gt;apologisms on behalf of our robot overlords&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So: let’s check the tapes.&lt;/p&gt;

&lt;h2&gt;
  
  
  From The Archives
&lt;/h2&gt;

&lt;p&gt;Thankfully, I &lt;em&gt;do&lt;/em&gt; have a pretty solid baseline of writing on this site over the course of the last ~4 years. While it’d be interesting to, say, crack open my old undergraduate Canvas account to really populate the back-catalog, what we have on-hand will suffice.&lt;/p&gt;

&lt;p&gt;Even though it was written a couple years ago, I still hold true to this site’s &lt;a href="https://blog.chaoticgood.computer/ai-policy" rel="noopener noreferrer"&gt;AI policy&lt;/a&gt;: this is the space for &lt;em&gt;me&lt;/em&gt; to be bad at writing, so all of the writing in the public portions (and most of the private portions) of this blog are, in fact, my own bad writing.&lt;/p&gt;

&lt;p&gt;As of the date &lt;em&gt;you&lt;/em&gt; are reading this, my blog has this volume of my own writing:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This interactive content can only be viewed on the &lt;a href="https://blog.chaoticgood.computer/content/notes/dashes" rel="noopener noreferrer"&gt;live site&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For the purposes of this work, I’m considering anything with a publication date &lt;strong&gt;before&lt;/strong&gt; my post about &lt;a href="https://blog.chaoticgood.computer/content/articles/binglish" rel="noopener noreferrer"&gt;GPTinglish&lt;/a&gt; to be outside of LLM &lt;em&gt;influence&lt;/em&gt;. As best I can remember, I wrote about GPTinglish when Bing first released… &lt;em&gt;whatever&lt;/em&gt; their first agent was called, which was the first time that LLMs and chatbots really entered &lt;em&gt;the mainstream&lt;/em&gt;&lt;sup&gt;&lt;a id="user-content-fnref-2"&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;It’s my hope that we’ll have a solid before-and-after sample. My guarantee is that public notes are purely my own work, and that the vast majority (&amp;gt;95%) of &lt;em&gt;private&lt;/em&gt; notes are also my own work. There are occasional portions where I use the private portions of my vault for experimenting with LLM use&lt;sup&gt;&lt;a id="user-content-fnref-3"&gt;3&lt;/a&gt;&lt;/sup&gt;), but I’ve done my best to filter out any of those for this data.&lt;/p&gt;

&lt;p&gt;So, that’s the first part of this experiment: &lt;strong&gt;I am considering anything after GPTinglish to be culturally tainted by mainstream use of LLMs.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a dash, &lt;em&gt;really?&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;This is another question worth being clear about, since I haven’t been internally consistent throughout the last ~10 years of my writing, either. The general timeline is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pre-GPTinglish, I typically used a single dash without realizing there was an actual difference between &lt;code&gt;-&lt;/code&gt; and &lt;code&gt;—&lt;/code&gt;. I know, I &lt;em&gt;know&lt;/em&gt;: size &lt;em&gt;does&lt;/em&gt; matter.&lt;/li&gt;
&lt;li&gt;Post-GPTinglish, but before em-dashes became A Thing™&lt;sup&gt;&lt;a id="user-content-fnref-4"&gt;4&lt;/a&gt;&lt;/sup&gt;, I set up a keyboard shortcut on my computer (&lt;code&gt;Opt+-&lt;/code&gt;) as a shortcut for emdashes during my Keyboard Shortcut Guy phase of the &lt;a href="https://blog.chaoticgood.computer/tags/horticulture/seasons/systems" rel="noopener noreferrer"&gt;Season of Systems&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;In May of 2026, I got a new laptop. My Keyboard Shortcut Guy phase was over at that point (and em-dashes had gained their infamy), so I swapped &lt;code&gt;Opt+-&lt;/code&gt; to be &lt;code&gt;--&lt;/code&gt; instead of &lt;code&gt;—&lt;/code&gt;. I do fold to peer pressure pretty quickly.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Another one you might see in this analysis is the &lt;em&gt;en-dash&lt;/em&gt;, which is… smaller than an em-dash, but longer than a hyphen. The only time I’ve ever seen an en-dash in the wild is &lt;a href="https://maggieappleton.com/planning-agents" rel="noopener noreferrer"&gt;Maggie Appleton’s recent post about Boundary Objects&lt;/a&gt;&lt;sup&gt;&lt;a id="user-content-fnref-5"&gt;5&lt;/a&gt;&lt;/sup&gt;. Somehow, one or two have snuck their way into my own blog. I can assure you: I don’t know how they got there. Those responsible have been sacked.&lt;/p&gt;

&lt;p&gt;That aside: all that context is important to know, because “a dash” and “&lt;em&gt;which&lt;/em&gt; dash” are two different questions.&lt;/p&gt;

&lt;p&gt;As for when a dash &lt;em&gt;is&lt;/em&gt; a dash, these are the rules:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;it has a space before it, after it, or both; and&lt;/li&gt;
&lt;li&gt;it’s in my own prose: not in a quote, code, or math.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The four kinds, then, that we’re going to see here:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dash&lt;/th&gt;
&lt;th&gt;Character&lt;/th&gt;
&lt;th&gt;Counts&lt;/th&gt;
&lt;th&gt;Doesn’t count&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Single hyphen&lt;/td&gt;
&lt;td&gt;&lt;code&gt;-&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;I came - and then I went. well-known word; super- and sub-sets&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Double hyphen&lt;/td&gt;
&lt;td&gt;&lt;code&gt;--&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;I came – and then I went.&lt;/td&gt;
&lt;td&gt;An arrow, &lt;code&gt;--&amp;gt;&lt;/code&gt;; a rule, &lt;code&gt;---&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Em dash&lt;/td&gt;
&lt;td&gt;&lt;code&gt;—&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;I came — and then I went.&lt;/td&gt;
&lt;td&gt;A word—with no spaces (this does not come up in the data)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;En dash&lt;/td&gt;
&lt;td&gt;&lt;code&gt;–&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;I came – and then I went.&lt;/td&gt;
&lt;td&gt;A range: 2018–2024&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;As far as spaces go: it is a dash if there is a space &lt;em&gt;after&lt;/em&gt; the dash. I have recently gotten in the habit of trying to justify my sins by doing the more traditional form of dashes– where they occur immediately after the word they interrupt– but I do still have plenty of history giving them space (&lt;code&gt;--&lt;/code&gt;) on both sides.&lt;/p&gt;

&lt;p&gt;Let’s crack into the data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sins per unit time
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;This interactive content can only be viewed on the &lt;a href="https://blog.chaoticgood.computer/content/notes/dashes" rel="noopener noreferrer"&gt;live site&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In the graph above, you’ll be able to see all of my private notes, stripped down to my own writing where applicable, and only in cases where there is &amp;gt;100 words to analyze. While I have a policy of &lt;a href="https://blog.chaoticgood.computer/tags/private" rel="noopener noreferrer"&gt;not publishing *all* of my notes&lt;/a&gt;, I figured that aggregate statistics would still be fine.&lt;/p&gt;

&lt;p&gt;Remember: the goal, here, is to see if there are noticeable trends before and after GPTinglish. Admittedly, there is an uptick of dashes in the post-GPTinglish era! When I was originally compiling the data, there were some cases, like the &lt;a href="https://blog.chaoticgood.computer/content/notes/scratch/dice-widget" rel="noopener noreferrer"&gt;Dice Widget&lt;/a&gt;, that caused the data to look like it had extremely high outliars.&lt;/p&gt;

&lt;p&gt;Even after filtering out those, though, we can see that the emdashes are not only higher, but they increased over that period. Even going back and reading the note about APL’s &lt;a href="https://blog.chaoticgood.computer/content/annotations/a-pattern-language/04-agricultural-valleys" rel="noopener noreferrer"&gt;Agricultural Valleys&lt;/a&gt; pattern, I gotta say: that guy was being &lt;em&gt;pretty gratuitous&lt;/em&gt; with the dashes. I’d understand how somebody could say it has a slightly GPT-ish aftertaste.&lt;/p&gt;

&lt;p&gt;One interesting pattern, though, is that period of time after my laptop broke and I reverted back to &lt;code&gt;--&lt;/code&gt; over true em-dashes. I think that there was something about facing even &lt;em&gt;having&lt;/em&gt; a shortcut, with the hindsight of the bad reputation emdashes got, that did make me far more conscious of using them. While I would still contend that those four cases I state above &lt;em&gt;are&lt;/em&gt; absolutely valid use of the mark, there is such a thing as over-seasoning.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;em&gt;Am&lt;/em&gt; I the Baddie?
&lt;/h2&gt;

&lt;p&gt;Ultimately, this blog is still meant to be a practice ground to become better at writing and communication. Even &lt;em&gt;if&lt;/em&gt; the em dash is perfectly valid punctuation in a void, the cultural context does have some weight to it. From a recent post about LLM voice from Martin Fowler:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Sometimes when I read a post, I get the growing feeling that I’m reading the output of an LLM. I can’t necessarily define why, although there are the common tells (it’s not the em-dashes, it’s the load-bearing tapestries). As I do this my desire to read on atrophies, sometimes to the point of revulsion&lt;/p&gt;

&lt;p&gt;– Martin Fowler, &lt;a href="https://martinfowler.com/articles/practitioner-voice.html#TheCraftOfPractitionerVoice" rel="noopener noreferrer"&gt;&lt;em&gt;LLM Voice&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Another post on the other side of the coin by &lt;a href="https://martinfowler.com/articles/practitioner-voice.html#TheCraftOfPractitionerVoice" rel="noopener noreferrer"&gt;Jim Highsmith&lt;/a&gt; talks about cases where using an LLM to communicate may be necessary, so it feels dangerous to dismiss something that has hints of generative assistance. Regardless: if something about my writing takes somebody away from the point &lt;em&gt;of&lt;/em&gt; that writing, I probably should do it less.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sentences, paragraphs, and so on
&lt;/h2&gt;

&lt;p&gt;This post is also groundwork for some other pieces I’m working on at the moment around writing structure and mechanical improvements. For the sake of exploration, I also have some of the some analysis by sentences and paragraph length:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This interactive content can only be viewed on the &lt;a href="https://blog.chaoticgood.computer/content/notes/dashes" rel="noopener noreferrer"&gt;live site&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This interactive content can only be viewed on the &lt;a href="https://blog.chaoticgood.computer/content/notes/dashes" rel="noopener noreferrer"&gt;live site&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Interestingly enough, I don’t actually see much of the same trend in these lengths. This is doubly surprising to me: first, because I’d have thought there would be &lt;em&gt;some&lt;/em&gt; cultural artifact once LLMs became mainstream. Secondly, though, I’m surprised because I’ve actually been actively trying &lt;em&gt;not&lt;/em&gt; to let my sentences and paragraphs run on as long.&lt;/p&gt;

&lt;p&gt;Perhaps a more…&lt;/p&gt;

&lt;p&gt;aggressive…&lt;/p&gt;

&lt;p&gt;approach is in…&lt;/p&gt;

&lt;p&gt;order?&lt;/p&gt;




&lt;p&gt;The way these graphs are set up, they’ll continue to track along with future notes. I’d be interested in reviewing these in a year and seeing if any of the metrics have shifted around a bit in the “Future” era.&lt;/p&gt;

&lt;h2 id="footnote-label"&gt;Footnotes&lt;/h2&gt;

&lt;ol&gt;
&lt;li id="user-content-fn-1"&gt;
&lt;p&gt;See what I did, there? &lt;a&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-2"&gt;
&lt;p&gt;I am loosely classifying “the mainstream” as “my parents could’ve accidentally used it without realizing” &lt;a&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-3"&gt;
&lt;p&gt;This isn’t a secret, either: I have notes about my experience with Obsidian Copilot in &lt;a href="https://blog.chaoticgood.computer/content/annotations/programming-as-theory-building" rel="noopener noreferrer"&gt;Programming as Theory Building&lt;/a&gt;’s annotations &lt;a&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-4"&gt;
&lt;p&gt;I think my first time acknowledging em dashes getting aped by LLMs was in the &lt;a href="https://blog.chaoticgood.computer/content/notes/hostage-negotiations" rel="noopener noreferrer"&gt;Hostage Negotiations&lt;/a&gt; post, which was 8 months &lt;em&gt;after&lt;/em&gt; GPTinglish &lt;a&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-5"&gt;
&lt;p&gt;Perhaps I &lt;em&gt;should&lt;/em&gt; start using en-dashes. it’d continue a long and fruitful journey of &lt;a href="https://blog.chaoticgood.computer/content/notes/digital-gardening-with-quartz" rel="noopener noreferrer"&gt;following along Maggie’s work from afar&lt;/a&gt;. &lt;a&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;a href="https://blog.chaoticgood.computer/content/notes/dashes" rel="noopener noreferrer"&gt;You can pry my dashes from my cold, dead hands&lt;/a&gt; was first published on Chaotic Good Computing, where you can reply to it on Bluesky or from your own site.&lt;/p&gt;

</description>
      <category>data</category>
      <category>notes</category>
      <category>engineering</category>
    </item>
    <item>
      <title>Math is Dead, and Pickles are Small</title>
      <dc:creator>Spencer Elkington</dc:creator>
      <pubDate>Mon, 26 Oct 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/spelkington/math-is-dead-and-pickles-are-small-5gcp</link>
      <guid>https://dev.to/spelkington/math-is-dead-and-pickles-are-small-5gcp</guid>
      <description>&lt;p&gt;On September 8th, 2026, OpenAI &lt;a href="https://openai.com/index/navier-stokes-solution/" rel="noopener noreferrer"&gt;announced&lt;/a&gt; that a fleet of 10,000 AI agents, running GPT-6 Astra and an (as of now) unreleased model at a cost of millions of dollars, discovered &lt;a href="https://cdn.openai.com/pdf/32d9f210-8b73-45e0-91bc-82a30aef8a9a/navier-stokes.pdf" rel="noopener noreferrer"&gt;an analytical solution&lt;/a&gt; to a very specific question about the &lt;a href="https://en.wikipedia.org/wiki/Navier%E2%80%93Stokes_equations" rel="noopener noreferrer"&gt;Navier-Stokes equations&lt;/a&gt;. In the most advanced terms I can understand, this is the question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“To model how fluid moves in a system, we use a &lt;a href="https://en.wikipedia.org/wiki/Navier%E2%80%93Stokes_equations" rel="noopener noreferrer"&gt;set of equations&lt;/a&gt; to approximate its behavior. The models are pretty good, but it’s possible that our approximation could give us funky results.&lt;/p&gt;

&lt;p&gt;Will it give us funky results?”&lt;/p&gt;

&lt;p&gt;– The Clay Mathematics Institute, &lt;a href="https://www.claymath.org/millennium-problems/" rel="noopener noreferrer"&gt;&lt;em&gt;The Millenium Prize Problems&lt;/em&gt;&lt;/a&gt; (2000)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;OpenAI’s answer to this question– &lt;em&gt;also&lt;/em&gt; in the most advanced terms I can understand, was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Yes. It will give us funky results in very funky situations.”&lt;/p&gt;

&lt;p&gt;– OpenAI, &lt;a href="https://cdn.openai.com/pdf/32d9f210-8b73-45e0-91bc-82a30aef8a9a/navier-stokes.pdf" rel="noopener noreferrer"&gt;&lt;em&gt;Finite Time Blowup for Navier-Stokes&lt;/em&gt;&lt;/a&gt; (2026)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Some friends of mine– both engineers who specialize in fluids, and who are Very Into™ this type of thing– have told me that this answer doesn’t really mean a whole lot. The world on the morning of September 9th was, &lt;em&gt;physically&lt;/em&gt;, pretty much the same. They all woke up, went to their jobs (typically in aviation or defense), and continued using the same fluid dynamics simulations that they did the day before.&lt;/p&gt;

&lt;p&gt;Planes did not fall from the sky. Missiles, presumably, still exploded. My shower turned on! Fluids seemed to behave as they always have.&lt;/p&gt;

&lt;p&gt;Some &lt;em&gt;other&lt;/em&gt; friends of mine– mathematicians who specialize in proofs and are also Very Into™ thi type of thing– their reaction was (paraphrasing again):&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“What the &lt;em&gt;fuck?&lt;/em&gt;”&lt;/p&gt;

&lt;p&gt;– Mathematicians, &lt;em&gt;in general&lt;/em&gt; (2026)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;On the morning of September 9th, &lt;em&gt;everything&lt;/em&gt; felt different. To many of them, it was like a seismic force had shaken the very foundations of the universe.&lt;/p&gt;

&lt;p&gt;Were humans necessary for the pursuit of knowledge anymore?&lt;/p&gt;

&lt;p&gt;Did they invest their youth in a dead art?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Why would OpenAI do this?&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;On the morning of September 9th, my coworkers and I discussed, at an &lt;em&gt;ironic&lt;/em&gt; length, the nature of very small pickles.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned About Pickles On September 9th, 2026
&lt;/h2&gt;

&lt;p&gt;On &lt;a href="https://en.wikipedia.org/w/index.php?title=Pickled_cucumber&amp;amp;action=history&amp;amp;dir=prev&amp;amp;offset=20110105185946%7C406128872&amp;amp;limit=500#:~:text=15%3A18%2C%202%20December%202024" rel="noopener noreferrer"&gt;December 2nd, 2024&lt;/a&gt;, Wikipedia contributor &lt;a href="https://en.wikipedia.org/wiki/User:TrulyShruti" rel="noopener noreferrer"&gt;TrulyShruti&lt;/a&gt; made the following modification to the Wikipedia page for &lt;a href="https://en.wikipedia.org/wiki/Pickled_cucumber" rel="noopener noreferrer"&gt;“Pickled cucumber”&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gd"&gt;- Gherkins, or baby pickles, are small cucumbers, typically those 3 to
- 13 cm (1 to 5 in) in length, often with bumpy skin, which are typical-
- ly used for pickling.
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="gi"&gt;+ Gherkins are small cucumbers, typically those 3 to 13 cm (1 to 5 in) in
+ length, often with bumpy skin, which are typically used for pickling.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(Most of the Wikipedia edits on gherkins tend to be focus on whether they are, or are not, “baby pickles”. For the sake of this essay, I will use &lt;a href="https://en.wikipedia.org/w/index.php?title=Pickled_cucumber&amp;amp;oldid=1371939008" rel="noopener noreferrer"&gt;the definition as of September 9th, 2026&lt;/a&gt; and assume that they are not &lt;em&gt;baby&lt;/em&gt; pickles– just &lt;em&gt;very small&lt;/em&gt; ones.)&lt;/p&gt;

&lt;p&gt;Gherkin is also a term used by the Behavior-Driven Development software testing library &lt;a href="https://cucumber.io/" rel="noopener noreferrer"&gt;Cucumber&lt;/a&gt;&lt;sup&gt;&lt;a id="user-content-fnref-1"&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;Anybody who has worked as a professional software developer knows, intimately, that nobody actually knows what they want. As discussed in Peter Naur’s 1985 essay &lt;a href="https://blog.chaoticgood.computer/content/annotations/programming-as-theory-building" rel="noopener noreferrer"&gt;Programming as Theory Building&lt;/a&gt;, a large part of building software is the process of taking an idea that exists in somebody’s head– perhaps yours, perhaps someone else’s– and then translating it into instructions for a computer to understand.&lt;/p&gt;

&lt;p&gt;Unlike deciding whether or not Navier-Stokes has only smooth outputs in three-dimensional space, consistently describing an idea you have in your head &lt;em&gt;is&lt;/em&gt; a truly unsolved problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pickle-Driven Development
&lt;/h2&gt;

&lt;p&gt;In (good) software, a fair bit of effort is spent in writing &lt;em&gt;tests&lt;/em&gt;. Tests are small, extra pieces of code that run &lt;em&gt;your&lt;/em&gt; code and verify that it does what you want it to do. It’s a way to make sure that you don’t accidentally make bugs or change important things about what you’re building.&lt;/p&gt;

&lt;p&gt;For example: if you wanted to make sure that the calendar app you’re building doesn’t try to give weird numbers for months, you might write something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;is_month_a_valid_number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
  &lt;span class="sh"&gt;'''&lt;/span&gt;&lt;span class="s"&gt;
  Asserts that the number for a month is between 1 (January)
  and 12 (December)
  &lt;/span&gt;&lt;span class="sh"&gt;'''&lt;/span&gt;
  &lt;span class="nf"&gt;assert&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;month&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;month&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cucumber is a philosophy, and code library, for writing better tests. Let’s take a look at the kind of notes that a very well-organized project manager or product engineer might write during a meeting about what a product should be able to do&lt;sup&gt;&lt;a id="user-content-fnref-2"&gt;2&lt;/a&gt;&lt;/sup&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight gherkin"&gt;&lt;code&gt;&lt;span class="kd"&gt;Feature&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; Guess the word  

  &lt;span class="kn"&gt;Scenario&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; Maker starts a game  
    &lt;span class="nf"&gt;When &lt;/span&gt;the Maker starts a game  
    &lt;span class="nf"&gt;Then &lt;/span&gt;the Maker waits for a Breaker to join  

  &lt;span class="kn"&gt;Scenario&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; Breaker joins a game  
    &lt;span class="nf"&gt;Given &lt;/span&gt;the Maker has started a game with the word &lt;span class="s"&gt;"silky"&lt;/span&gt;  
    &lt;span class="nf"&gt;When &lt;/span&gt;the Breaker joins the Maker's game  
    &lt;span class="nf"&gt;Then &lt;/span&gt;the Breaker must guess a word with 5 characters
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Those are some good, organized notes! They’ve got a solid use of indentation to group concepts that belong together, with each line clearly labelled. There’s a pattern to the structure, yet it’s simple enough that you could easily write this out while product owners hash out their visions for what the thing you’ll be building for the next six months should look like.&lt;/p&gt;

&lt;p&gt;But alas; you’ve been tricked! These &lt;em&gt;aren’t&lt;/em&gt; just notes! They’re &lt;em&gt;code!&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight gherkin"&gt;&lt;code&gt;&lt;span class="kd"&gt;Feature&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; Guess the word  

  &lt;span class="c"&gt;# The first example has two steps  &lt;/span&gt;
  &lt;span class="kn"&gt;Scenario&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; Maker starts a game  
    &lt;span class="nf"&gt;When &lt;/span&gt;the Maker starts a game  
    &lt;span class="nf"&gt;Then &lt;/span&gt;the Maker waits for a Breaker to join  

  &lt;span class="c"&gt;# The second example has three steps  &lt;/span&gt;
  &lt;span class="kn"&gt;Scenario&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; Breaker joins a game  
    &lt;span class="nf"&gt;Given &lt;/span&gt;the Maker has started a game with the word &lt;span class="s"&gt;"silky"&lt;/span&gt;  
    &lt;span class="nf"&gt;When &lt;/span&gt;the Breaker joins the Maker's game  
    &lt;span class="nf"&gt;Then &lt;/span&gt;the Breaker must guess a word with 5 characters
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;That&lt;/em&gt; is Cucumber’s &lt;a href="https://cucumber.io/docs/gherkin/reference" rel="noopener noreferrer"&gt;Gherkin&lt;/a&gt; language. It’s a structured, yet &lt;em&gt;very&lt;/em&gt; natural, way to write out tests. The hope with using something like Gherkin is that writing tests for software isn’t locked behind the ability to code. If you’re willing to follow a few &lt;a href="https://cucumber.io/docs/gherkin/reference#keywords" rel="noopener noreferrer"&gt;rules&lt;/a&gt;, just about anybody could read &lt;em&gt;or&lt;/em&gt; write tests for your software.&lt;/p&gt;

&lt;p&gt;Want to see just how easy it can be? Check out the &lt;a href="https://www.gov.uk/" rel="noopener noreferrer"&gt;&lt;code&gt;gov.uk&lt;/code&gt;&lt;/a&gt; website: it’s easily the best working example I found while researching Gherkin. Even if you’ve never read a lick of code before, you could probably pop into &lt;a href="https://github.com/alphagov/whitehall/tree/main/features" rel="noopener noreferrer"&gt;their tests&lt;/a&gt; and understand &lt;em&gt;exactly&lt;/em&gt; what their software does:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight gherkin"&gt;&lt;code&gt;&lt;span class="kd"&gt;Feature&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; Administering Roles
  This feature allows the administration of the various different roles
  in the system

  &lt;span class="kn"&gt;Scenario&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; Adding a traffic commissioner role
    &lt;span class="nf"&gt;Given &lt;/span&gt;the organisation &lt;span class="s"&gt;"Department for Transport"&lt;/span&gt; exists
    &lt;span class="nf"&gt;And &lt;/span&gt;a person called &lt;span class="s"&gt;"Terence Traffic"&lt;/span&gt;
    &lt;span class="nf"&gt;When &lt;/span&gt;I add a new &lt;span class="s"&gt;"Traffic commissioner"&lt;/span&gt; role named "Traffic
    &lt;span class="err"&gt;Commissioner&lt;/span&gt; &lt;span class="err"&gt;for&lt;/span&gt; &lt;span class="err"&gt;Scotland"&lt;/span&gt; &lt;span class="err"&gt;to&lt;/span&gt; &lt;span class="err"&gt;the&lt;/span&gt; &lt;span class="err"&gt;"Department&lt;/span&gt; &lt;span class="err"&gt;for&lt;/span&gt; &lt;span class="err"&gt;Transport"&lt;/span&gt;
    &lt;span class="nf"&gt;Then &lt;/span&gt;I should be able to appoint &lt;span class="s"&gt;"Terence Traffic"&lt;/span&gt; to the new role
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Terence Traffic&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;God, they do it right at Whitehall.&lt;/p&gt;




&lt;p&gt;Mastering the art of hearing an idea, writing it down, then showing it &lt;em&gt;back&lt;/em&gt; to the person who had the idea to ask “Does this look right?” is pretty much a cheat code for software engineering. It makes &lt;em&gt;every&lt;/em&gt; part of the job easier.&lt;/p&gt;

&lt;p&gt;Once you get good at it, you’ll eventually be able to crank out a list of tests about the behavior of the thing you’re building, and describe a &lt;em&gt;very&lt;/em&gt; clear picture of everything that’ll be needed to build it.&lt;/p&gt;

&lt;p&gt;A collection of well-defined requirements, in many other fields, is called a &lt;em&gt;spec&lt;/em&gt;, or &lt;em&gt;specification&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Wouldn’t it be neat if we–&lt;/p&gt;

&lt;h2&gt;
  
  
  Spec-Driven Development
&lt;/h2&gt;

&lt;p&gt;Ope! Turns out that a set of Extreme Programming folks came up with this one in &lt;a href="https://www.eecs.yorku.ca/~jonathan/publications/2004/xp2004.pdf" rel="noopener noreferrer"&gt;&lt;em&gt;Agile Specification-Driven Development&lt;/em&gt;&lt;/a&gt; (Ostroff, Makalsky, Paige) back in 2004! Damn you, University of York! They must’ve been the ones to tip off Whitehall!&lt;/p&gt;

&lt;p&gt;If you’ve heard spec-driven development (SDD) thrown around a lot recently, you may be shocked to know that it’s not a recent development. But why might a school of thought around defining software in strong-yet-readable natural language have had a comeback 22 years later?&lt;/p&gt;

&lt;p&gt;Oh.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Right.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdbtrnhinkesqs2dxvnuz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdbtrnhinkesqs2dxvnuz.png" alt="panic-02-llm"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It doesn’t take too long to recognize how Gherkin may have a newfound value in the new era of &lt;a href="https://blog.chaoticgood.computer/content/notes/software-gardening" rel="noopener noreferrer"&gt;agentic software development&lt;/a&gt;. It has become common knowledge that agents work best in situations where their output is &lt;a href="https://blog.chaoticgood.computer/content/notes/hostage-negotiations" rel="noopener noreferrer"&gt;deterministic and verifiable&lt;/a&gt;, so there is something very elegant in the solution: what if the &lt;em&gt;prompt&lt;/em&gt; and the &lt;em&gt;test&lt;/em&gt; were the &lt;em&gt;exact same thing?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;However, a specification does not &lt;em&gt;have&lt;/em&gt; to be easy to read or write: the only requirement is that it defines the shape of the thing being built. While &lt;em&gt;many&lt;/em&gt; teams across the industry would benefit massively from something like Gherkin and Cucumber, if you shed the requirement of “broad readability”, you could go absolutely &lt;em&gt;bananas&lt;/em&gt; with your specification.&lt;/p&gt;

&lt;p&gt;“Bananas” would be a very good way to describe Anthropic’s Frontier Red Team’s recent blog post, &lt;a href="https://www.anthropic.com/research/formal-verification" rel="noopener noreferrer"&gt;&lt;em&gt;LLMs are making formal software verification feasible at a much larger scale&lt;/em&gt;&lt;/a&gt;, where they write software specifications as mathematical conjectures– and then prove them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Proofs?
&lt;/h2&gt;

&lt;p&gt;I highly recommend reading through the Frontier Red Team’s full blog post. If I were to distill it into the two most important visualizations, though, it’d be these:&lt;/p&gt;

&lt;p&gt;First, their description of “fuzzing”:&lt;/p&gt;

/assets/anthropic_fuzz.mp4

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Fuzzing" rel="noopener noreferrer"&gt;Fuzzing&lt;/a&gt; is a very specific &lt;em&gt;type&lt;/em&gt; of software test, where you bombard a piece of an application with a bunch of random inputs in the hope of crashing it. This visualization generalizes further than just fuzzing, though. &lt;em&gt;Any&lt;/em&gt; type of declarative testing (where you are defining specific inputs and outputs, then checking for a pass or fail) can be visualized, mentally, with this model. You’re just testing specific branches of the application to see if it &lt;em&gt;generally&lt;/em&gt; does what you’ve specified, but that’s not a &lt;em&gt;complete&lt;/em&gt; description of the program.&lt;/p&gt;

&lt;p&gt;You want a &lt;em&gt;full&lt;/em&gt; test? There is no fuller test than a proof:&lt;/p&gt;

/assets/anthropic_proof.mp4

&lt;p&gt;The Frontier Red Team’s post was specifically about proofs for security: taking common pieces of software and generating proofs about vulnerabilities. It’s hard to appreciate the implications of what that means: a &lt;em&gt;proof&lt;/em&gt; that a piece of software has &lt;em&gt;no&lt;/em&gt; exploits.&lt;/p&gt;

&lt;p&gt;I’ve seen a lot of discourse around a cybersecurity arms race: can defenders patch flaws faster than attackers can find them? The premise relies on a fuzz-description style of what software &lt;em&gt;is&lt;/em&gt;: that it’s teams of people (or agents!) stabbing around in the dark.&lt;/p&gt;

&lt;p&gt;That post, though, provides an alternative: a piece of software that is &lt;em&gt;provably&lt;/em&gt; secure in certain conditions.&lt;/p&gt;

&lt;p&gt;But &lt;em&gt;ope!&lt;/em&gt; This &lt;em&gt;also&lt;/em&gt; isn’t a new concept! This gem is a small part of the introduction, but absolutely rocked my world:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“However, formal verification isn’t easy. Proofs can be many times larger than the original code, and writing them requires significant effort and a niche, highly specialized skill set. For instance, it took two person-years to implement the seL4 operating system kernel, but &lt;em&gt;20&lt;/em&gt; person-years &lt;a href="https://sel4.systems/Research/pdfs/comprehensive-formal-verification-os-microkernel.pdf" rel="noopener noreferrer"&gt;to formally verify it&lt;/a&gt;. Accordingly, formal verification has been practical only in truly mission-critical applications, &lt;strong&gt;such as &lt;a href="https://www.astree.ens.fr/papers/astree_airbus_sas2007.pdf" rel="noopener noreferrer"&gt;Airbus’s avionics code&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But LLMs are making it far easier.”&lt;/p&gt;

&lt;p&gt;– Anthropic Frontier Red Team, &lt;a href="https://www.anthropic.com/research/formal-verification" rel="noopener noreferrer"&gt;&lt;em&gt;LLMs are making formal software verification feasible at a much larger scale&lt;/em&gt;&lt;/a&gt; (2026)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I was already floored at the possibility that proofs of the properties of software was even &lt;em&gt;possible&lt;/em&gt;, but to find out that it has been successfully done &lt;em&gt;for decades&lt;/em&gt; absolutely floored me.&lt;/p&gt;

&lt;p&gt;If we &lt;em&gt;can&lt;/em&gt; do it, especially for things as important as cybersecurity or _keeping a plane’s autopilot from &lt;strong&gt;crashing&lt;/strong&gt; _, why don’t we?&lt;/p&gt;

&lt;p&gt;From the Airbus paper:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Some theorem proving techniques have been successfully introduced to verify limited software subsets. However, to prove properties of complete real-size programs with these techniques does not seem to be within the reach of software engineers yet.”&lt;/p&gt;

&lt;p&gt;– Delmas &amp;amp; Souyris, &lt;a href="https://www.astree.ens.fr/papers/astree_airbus_sas2007.pdf" rel="noopener noreferrer"&gt;&lt;em&gt;Astrée: from Research to Industry&lt;/em&gt;&lt;/a&gt; (2007)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Small Pickles &amp;amp; Autopilot
&lt;/h2&gt;

&lt;p&gt;I am still a part of the world that has shifted most in the past 18 months, and finding my footing during this shift is still a daily effort. I sympathize with mathematicians, being in a space that is &lt;em&gt;very&lt;/em&gt; sensitive to the seemingly endless wave of news that, even three years ago, would’ve been considered once-a-decade events.&lt;/p&gt;

&lt;p&gt;Past the immediate anxiety for my own well-being, though, I am excited to see what new capabilities can be done if we, as human beings, broaden our horizons and find new ways to solve problems with new tools and a willingness to keep learning.&lt;/p&gt;

&lt;h2 id="footnote-label"&gt;Footnotes&lt;/h2&gt;

&lt;ol&gt;
&lt;li id="user-content-fn-1"&gt;
&lt;p&gt;For the life of me, I do not understand why software developers name things like this, or where they get it from. I will never forgive the Kubernetes team, either for the name itself, or for k8s as the abbreviation. &lt;a&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-2"&gt;
&lt;p&gt;These examples are taken directly from the Cucumber docs, which are among some of the most helpful docs I have ever read. &lt;a&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;a href="https://blog.chaoticgood.computer/content/dead-math" rel="noopener noreferrer"&gt;Math is Dead, and Pickles are Small&lt;/a&gt; was first published on Chaotic Good Computing, where you can reply to it on Bluesky or from your own site.&lt;/p&gt;

</description>
      <category>engineering</category>
      <category>ai</category>
      <category>management</category>
      <category>essays</category>
    </item>
    <item>
      <title>Chipotleware</title>
      <dc:creator>Spencer Elkington</dc:creator>
      <pubDate>Wed, 30 Sep 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/spelkington/chipotleware-44cj</link>
      <guid>https://dev.to/spelkington/chipotleware-44cj</guid>
      <description>&lt;p&gt;This is a side note that I carved out of &lt;a href="https://blog.chaoticgood.computer/content/notes/software-gardening" rel="noopener noreferrer"&gt;Agronomic Software Development&lt;/a&gt;. I’m a stream-of-consciousness writer, and this… ended up being a slightly longer stream. It was cut from the portion about software factories.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a software engineer, anyway?
&lt;/h2&gt;

&lt;p&gt;I’ve been trying to remember where exactly I read this sentiment about how ridiculous software engineering hiring is&lt;sup&gt;&lt;a id="user-content-fnref-1"&gt;1&lt;/a&gt;&lt;/sup&gt;, but it has stuck in my head for years:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The technical interview for a junior software engineering position is like being asked to prepare a Michelin star meal for your interview at Chipotle&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;At a large company, a junior engineering position truly is line-worker style. The general process is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You get a ticket to fix a bug&lt;/li&gt;
&lt;li&gt;You investigate the bug; you write a fix&lt;/li&gt;
&lt;li&gt;You submit a &lt;a href="https://blog.chaoticgood.computer/content/notes/natural-language-cve" rel="noopener noreferrer"&gt;pull request&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;You get a ticket to fix a bug…&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Don’t get me wrong: I’m not trying to understate how much intellectual work can go into charting a path between the problem and the solution. I’m also not here to claim that it’s easy, especially when you don’t have an effective manager to simplify that “get a ticket” bit. Being a junior engineer without an effective manager is like being expected to roll a burrito for a customer while the kitchen is burning behind you, none of the kitchenware is clean, the card reader isn’t working, and the customer is telling you that they never would’ve had to deal with this mediocrity when they were VP of Vice Presidents at Metabook in the 2010s.&lt;/p&gt;

&lt;p&gt;What I &lt;em&gt;am&lt;/em&gt; claiming, though, is that the factory-style ticket assembly line is hardly an act of intellectual or creative expression. It isn’t the brooding dorm-room hacking of The Social Network or the rag-tag star coder faux-prestige of Silicon Valley. It’s not a work of art or a stroke of genius; it’s a ping at 4:45pm on a Thursday:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Hey, could you take another look at my PR? I changed those variable names, so I need a new review.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That burrito analog isn’t necessarily the case, though. I’ve only worked at a couple of those factory line-style positions in my life; the rest of them have been at companies that are just a &lt;em&gt;little bit&lt;/em&gt; too small that are &lt;em&gt;a little bit&lt;/em&gt; on fire all of the time. Those are the types of jobs where everything that comes at you down the pipeline is the highest possible priority, so you get to &lt;em&gt;choose&lt;/em&gt; which dumpster fire looks like the most fun that day, and nobody above you will look too closely at how you did it because they’re focused on the other dumpsters on fire in front of them.&lt;/p&gt;

&lt;p&gt;They come with a tradeoff – at the burrito job, there’s clean metrics that show how much work you’ve done, and whether you’ve earned your lot that month. At the dumpster fire job, after awhile, you can either stretch yourself too thin trying to put out too many fires &lt;em&gt;or&lt;/em&gt; let the fires burn; either way, that little bit of freedom comes at a cost to either your job security or satisfaction.&lt;/p&gt;

&lt;p&gt;Either way, as a junior engineer, you’re in a position where you’d like security, satisfaction, and sanity, and all three seem out of reach.&lt;/p&gt;

&lt;h2 id="footnote-label"&gt;Footnotes&lt;/h2&gt;

&lt;ol&gt;
&lt;li id="user-content-fn-1"&gt;
&lt;p&gt;The implosion of Arc Browser has really put a dent in my bookmark-and-recall game. &lt;a&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;a href="https://blog.chaoticgood.computer/content/notes/agronomic-software-side-note" rel="noopener noreferrer"&gt;Chipotleware&lt;/a&gt; was first published on Chaotic Good Computing, where you can reply to it on Bluesky or from your own site.&lt;/p&gt;

</description>
      <category>engineering</category>
      <category>notes</category>
    </item>
    <item>
      <title>Software Gardening</title>
      <dc:creator>Spencer Elkington</dc:creator>
      <pubDate>Wed, 30 Sep 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/spelkington/software-gardening-2jfh</link>
      <guid>https://dev.to/spelkington/software-gardening-2jfh</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fppumk8kuhtlok6vxa1ec.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fppumk8kuhtlok6vxa1ec.png" alt="panic-07-vines" width="800" height="746"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The start of every year is a magical time. So many possibilities, so much excitement about what the new year might hold. At my day job, my team was coming off the success of rolling out a large product release in 2024, so our slates really were clean heading into 2025. That’s when a question came my way: a question that started with an ominous phrase:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How would you feel about…&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A little intonation on the word “&lt;em&gt;feel&lt;/em&gt;” is always a canary out of the coal mine. It’s the confession that, even though this is the first time &lt;em&gt;you&lt;/em&gt; have heard the question, it’s certainly not the first time the question’s been asked. The only difference is that, this time, it’s yours to answer. In this case, it was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You’ve played around with using LLMs for software development. We have this product that &lt;em&gt;really&lt;/em&gt; needs an update, but we don’t have the time or expertise to work on it.&lt;/p&gt;

&lt;p&gt;How would you feel about picking it up and using LLMs to speed up development?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The stack was entirely out of my wheelhouse. It was a mission-critical piece of &lt;a href="https://www.dbase.com/Knowledgebase/beg/db2ktutorial/01start.htm" rel="noopener noreferrer"&gt;Visual DB2K&lt;/a&gt; software that we had &lt;em&gt;some&lt;/em&gt; of the source code for, but not enough to build from. The only complete copy we had was an &lt;code&gt;.exe&lt;/code&gt; file that we couldn’t get running on any computer or VM except the one it was initially installed on, delicately transferred from one version of Windows to the next, over the course of the last 25 years. The source code we had on-hand was a series of progressive patches made over that period to keep the thing afloat until the only maintainer – a long-term contractor – could do… &lt;em&gt;something&lt;/em&gt; to upgrade it to a modern stack.&lt;/p&gt;

&lt;p&gt;That contractor had died a few years prior, so &lt;em&gt;somebody&lt;/em&gt; became &lt;em&gt;me&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hostage No Longer
&lt;/h2&gt;

&lt;p&gt;In March of 2018, “agent” wasn’t &lt;em&gt;quite&lt;/em&gt; a thing yet. It’s easy to forget just how fast agentic development has moved. Claude Code was still a &lt;a href="https://www.anthropic.com/news/claude-3-7-sonnet" rel="noopener noreferrer"&gt;closed research preview&lt;/a&gt; using 3.7 Sonnet – hell, Anthropic wasn’t even a major player. To the extent that developers were using AI, it was largely:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Enhanced autocomplete;&lt;/li&gt;
&lt;li&gt;Copy-and-pasting snippets back and forth out of ChatGPT; or&lt;/li&gt;
&lt;li&gt;if you were on the cutting edge, using a harness like Cline directly in your IDE.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That said, given the timeline I was given, how little I had to work from, and how out-of-water I was on the stack (db2k was released when I was about 19 months old, and superseded by dBase PLUS when I was 3), the name of the game was to leverage whatever I could to dig out of the hole we were in. I saw the role of LLMs go from content indexing and vectorization, into light “summarize these files” Markdown generation, into full-fledged code writing over the course of &lt;em&gt;maybe&lt;/em&gt; 6 months. An important inflection point happened about 8 months after I got the question: most of the code on the project had been written by LLMs.&lt;/p&gt;

&lt;p&gt;By the time true agent-based development approached many of my peers’ radars, I’d been trying to keep ahead on how development might look at this point we’re at today. The first wave was the purely technical approach: &lt;a href="https://blog.chaoticgood.computer/content/annotations/llm-starter" rel="noopener noreferrer"&gt;my LLM primer presentation&lt;/a&gt; was built out of understanding Anthropic’s first wave of agentic documentation. &lt;a href="https://blog.chaoticgood.computer/content/notes/hostage-negotiations" rel="noopener noreferrer"&gt;“How to Run Your Own Hostage Negotiation”&lt;/a&gt; came once agents got up to the skill that you might see from, say, a very green software development intern and the vibe shifted from “how do these work?” to “will they replace us?”.&lt;/p&gt;

&lt;p&gt;When I wrote the primer, I &lt;a href="https://blog.chaoticgood.computer/content/annotations/llm-starter#zwt3txy8fko" rel="noopener noreferrer"&gt;intentionally&lt;/a&gt; didn’t fill in the last section. It posed a question that, at that point, would’ve been sheer conjecture to try and answer at the time. However, I think it is time to give it a good, college try:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq5m13g18njr073ztvsh4.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq5m13g18njr073ztvsh4.webp" alt="Pasted image 20260930060305" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Software as a Factory
&lt;/h2&gt;

&lt;p&gt;What I’m about to say will be brutally obvious to many, but easily forgotten by my generation of software engineers: there was a time when computers were a far cry from general-purpose or universally accessible. The &lt;a href="https://www.engineering.upenn.edu/about/history-heritage/eniac/" rel="noopener noreferrer"&gt;ENIAC&lt;/a&gt;’s invention in 1945 was the first time any computer could run program &lt;strong&gt;s&lt;/strong&gt; (plural), but swapping the program meant rewiring the thing, and it was hardly anything you could fit in your garage, nevermind your desktop. The landscape stayed that way until home computers became a conceivable idea in the 70s. At that point, I’d say that software was an &lt;strong&gt;artisan good&lt;/strong&gt; : developed in-house, for specific use cases. Hell, the earliest reference to &lt;em&gt;any&lt;/em&gt; general operating system I could find was with IBM’s &lt;a href="https://www.ibm.com/history/system-360" rel="noopener noreferrer"&gt;OS/360&lt;/a&gt;, released in 1964.&lt;/p&gt;

&lt;p&gt;When I say artisan, I mean it in the most literal sense. Imagine digital homesteading: if you needed a program, you’d better be ready to write it yourself. This was a period of time when people were sharing BASIC games in the back of magazine distributions. If you wanted to play the game, you had to type the physical printed text into your terminal and run it yourself.&lt;/p&gt;

&lt;p&gt;Once high demand for computer hardware came, high demand for computer software came hand-in-hand. Like any other market, increased supply must follow, and artisan production of &lt;em&gt;anything&lt;/em&gt; is fundamentally incompatible with high supply of it. Artisan production of physical goods was superseded by the factories of the Industrial Revolution, so you might imagine some kind of software factory as the replacement to artisan development. Software isn’t car axles or pinheads, though – so what would a software factory even &lt;em&gt;look&lt;/em&gt; like?&lt;/p&gt;

&lt;p&gt;This is about the time that papers like &lt;a href="https://blog.chaoticgood.computer/content/annotations/programming-as-theory-building" rel="noopener noreferrer"&gt;Programming as Theory Building&lt;/a&gt; start coming into play: engineers that aren’t thinking about software in terms of data structures and algorithms, but in terms of how ideas progressively &lt;em&gt;become&lt;/em&gt; runnable software. We do also get the traditional management structure that you might see at a factory floor: line workers, managers, and executives:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa8y64py20ir8kpm74d2m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fa8y64py20ir8kpm74d2m.png" alt="panic-01-engineering-loop" width="800" height="634"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is 3-layer structure would put a company around &lt;a href="https://blog.chaoticgood.computer/content/annotations/evolutions-revolutions#iupe1lo6a8" rel="noopener noreferrer"&gt;Phase 2&lt;/a&gt; in their growth – it’s no longer a handful of executives directly doing work, and there are enough disparate pieces or initiatives to warrant multiple teams. It is no longer &lt;strong&gt;artisan&lt;/strong&gt; ; it’s now the start of a factory layout:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Executives, who have ideas about their product, its position in the market, and how it could sell better to users&lt;/li&gt;
&lt;li&gt;Managers, who are responsible for coordinating work in their specific domain; for example, frontend applications or backend infrastructure.&lt;/li&gt;
&lt;li&gt;Engineers, whose work is coordinated by the managers and move towards implementing the ideas.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;At this point, the concerns of software engineering and production engineering start to collide. Schools of thought like Waterfall and Lean/Agile start to come into play, and project boards like GitHub Projects, Jira, etc. become staples across the company. The goal is simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Executives express their ideas&lt;/li&gt;
&lt;li&gt;Managers plan out how to express those ideas as tickets, and plan out how to delegate them out&lt;/li&gt;
&lt;li&gt;Engineers pull tickets, complete them, and merge them into the product.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Rinse, repeat. Even at &lt;a href="https://blog.chaoticgood.computer/content/annotations/valve-handbook" rel="noopener noreferrer"&gt;companies that claim to not have hierarchies like this&lt;/a&gt;, you’ll still find this operating structure somewhere in the core of every modern software factory.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;And then…&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdbtrnhinkesqs2dxvnuz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdbtrnhinkesqs2dxvnuz.png" alt="panic-02-llm" width="613" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Claude Cometh
&lt;/h2&gt;

&lt;p&gt;I’m going to try my best to correctly express this opinion:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LLMs are better than humans at writing code.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I expressed this same sentiment nearly a year ago in &lt;a href="https://blog.chaoticgood.computer/content/notes/hostage-negotiations" rel="noopener noreferrer"&gt;Hostage Negotiations&lt;/a&gt;, and they certainly haven’t gotten &lt;em&gt;worse&lt;/em&gt; in that time. I’m drawing the boundary, here, at &lt;strong&gt;writing code&lt;/strong&gt; , and writing code ≠ software engineering. I won’t re-hash that in this post: if you are interested, my thoughts on &lt;a href="https://blog.chaoticgood.computer/content/annotations/programming-as-theory-building" rel="noopener noreferrer"&gt;Programming as Theory Building&lt;/a&gt; cover that ground already.&lt;/p&gt;

&lt;p&gt;The fact that even other engineers seem to miss that distinction, though, means that the actual jobs are at some risk: even if the act of software engineering isn’t automated (and probably not going to be anytime soon), what the job actually &lt;em&gt;looks&lt;/em&gt; like is dramatically different than it was even a year ago.&lt;/p&gt;

&lt;p&gt;The technology has moved &lt;em&gt;incredibly&lt;/em&gt; fast, and I feel that many at the executive and management layers are uncertain of how to react. The discourse around the whole ordeal is confusing and polarized; LinkedIn is a perpetual, inhospitable hellscape of horrible takes.&lt;/p&gt;

&lt;p&gt;To try and get a feel for the situation, let’s game out some org chart options.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do Nothing
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj2d212ui90u3w9r74q5t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj2d212ui90u3w9r74q5t.png" alt="panic-03-do-nothing" width="800" height="712"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When faced with a complicated problem, it’s always best to take a deep breathe and ask if the best reaction is no reaction. It’s a fair pause to take; the tech space is famously hyperreactive to The Next Big Thing. Let us not forget; just five years ago, Mark Zuckerberg rebranded Facebook into “Meta” in the hopes of pivoting humanity into the Matrix, only to divert billions into a VR fad that lasted all of two years – billions that could’ve been spent refining their core business model of advertising eating disorders to teenagers.&lt;/p&gt;

&lt;p&gt;However, LLMs have proven their worth (certainly more worth than VR ever did).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This interactive content can only be viewed on the &lt;a href="https://blog.chaoticgood.computer/content/notes/software-gardening" rel="noopener noreferrer"&gt;live site&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The genie’s out of the bottle, then. I use the term “genie” deliberately: they’re infamous for giving you what you wish for, and wreaking absolute havoc if you’re not careful. Doing nothing, in this case, is a good way to let your capacity to do more work completely outpace your ability to organize and maintain that work.&lt;/p&gt;

&lt;p&gt;The proliferation of the technology has hardly been a quiet revolution. I’m sure that, if you were to think about it, or go online anywhere, “do nothing” is a difficult option to justify. I’d recommend ruling it out. So, what else can be done?&lt;/p&gt;

&lt;h3&gt;
  
  
  Fire the Eggheads
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4lb1avrs44kz1sja3pd0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4lb1avrs44kz1sja3pd0.png" alt="A system where LLMs absorb the engineering layer, and managers take on some responsibilities around QA on code quality" width="800" height="628"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It’s an option, isn’t it? I’ll try to put my personal bias aside, here, and entertain the option in good faith (despite my desire to continue earning an income).&lt;/p&gt;

&lt;p&gt;Laying off engineers seems like a reasonable solution. After all, LLMs are extraordinarily good at doing almost the same thing as them. They write code pretty damn well, and have far less reservations about writing something hacky if it’s needed ASAP. I wouldn’t say that their quality is that of a senior engineer, but LLMs have inarguably passed the point point where they could beat out an intern.&lt;/p&gt;

&lt;p&gt;If LLMs can do the engineering, can your managers simply manage LLMs instead, and pick up whatever engineering slack is left over?&lt;/p&gt;

&lt;p&gt;I’d caution against this, though, because of a concept that’ll come up a lot in the rest of this post: &lt;strong&gt;judgement.&lt;/strong&gt; Not a Christmas Carol-style judgement of three ghosts and a Dickensian street urchin, but judgement about whether or not the internal mechanisms of a project are going in a good direction or a bad one. Anybody who has ever done a full rewrite of a project knows just how much time a series of bad decisions can cost you in time and resources.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;While software development is immune from almost all physical laws, the inexorable increase in &lt;em&gt;entropy&lt;/em&gt; hits us hard. &lt;em&gt;Entropy&lt;/em&gt; is a term from physics that refers to the amount of “disorder” in a system. Unfortunately, the laws of thermodynamics guarantee that the entropy in the universe tends toward a maximum. When disorder increases in software, we call it “software rot.” Some folks might call it by the more optimistic term, “technical debt,” with the implied notion that they’ll pay it back someday. They probably won’t.&lt;/p&gt;

&lt;p&gt;– &lt;em&gt;The Pragmatic Programmer, 2nd Edition (2019)&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;An important thing to remember about these LLMs is that they don’t live for very long. As of writing, frontier LLMs like Claude Opus 5.5 have a context window of 1 million tokens. However, it’s generally accepted that the first ~150k tokens are where they work at their highest quality. Once you get past that point, quality drops off until you start a new session.&lt;/p&gt;

&lt;p&gt;Without diving into the technicals of what “a new session” entails, the lifecycle of an LLM session is effectively:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;0 tokens:&lt;/strong&gt; You have hired a reasonably smart intern who knows literally nothing about your product.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;100k tokens&lt;/strong&gt; : The intern has learned the basics about what your product does and its general structure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;150k tokens&lt;/strong&gt; : The intern has done a reasonably good job at writing the code you asked for.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;250k tokens:&lt;/strong&gt; The intern is still working pretty well, but has been awake for awhile and is having trouble focusing on a good solution or remembering small details about what you asked them to do.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;500k tokens:&lt;/strong&gt; The intern is starting to trail off and get distracted. They probably need to sleep.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/clear&lt;/code&gt;: The intern got too sleepy on the job, so you shot them. This is now their replacement.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;Life is beautiful, isn’t it?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Ultimately, what you gain in efficiency with an LLM, you also get a bit of entropy – it’s not one long-lived engineer made of flesh and bone and whatever they had for breakfast that morning: it’s a constant stream of very talented new hires who don’t &lt;em&gt;quite&lt;/em&gt; get the bigger picture. You lose the long-term technical thread that is required to keep a product that doesn’t become an unmaintainable nightmare after the first month.&lt;/p&gt;

&lt;p&gt;You can write down, in ridiculous detail, everything about your product, its internals, your business motivations, etc., but there’s a level of un-capturable human understanding of the bigger technical picture that a rotating cast of repeatedly-slain interns can’t quite capture.&lt;/p&gt;

&lt;p&gt;But hey – we’ve got bloodlust on our minds, so what else could we do?&lt;/p&gt;

&lt;h3&gt;
  
  
  Fire the Suits
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fughcfc4r0fmq4m8o3j8v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fughcfc4r0fmq4m8o3j8v.png" alt="A system where management layers are laid off, and engineers must step in to take over some management responsibilities" width="656" height="602"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This one seems to be a recent favorite of the largest tech companies: taking an audit of middle managers and asking “…so, what &lt;em&gt;do&lt;/em&gt; you do, anyway?” Project managers certainly got some bad PR after a TikTok was deluged with management influencers taking stand-up calls from the sides of resort pools. Shareholders may rejoice at the announcement of those types of layoffs, but what good does it do for the product?&lt;/p&gt;

&lt;p&gt;The engineers are basically managers to a bunch of bots, anyway. Couldn’t they – or the LLMs – pick up the management tasks instead?&lt;/p&gt;

&lt;p&gt;I’ve seen sentiments swirling around engineering circles, especially on the release of zero-shot classifiers like &lt;a href="https://jevai.net/" rel="noopener noreferrer"&gt;Jev&lt;/a&gt;, that the judgement calls made by PMs for prioritization might be something automatable. I’d, again, lean towards “how can the new tools improve this job” rather than “can this job be replaced.”&lt;/p&gt;

&lt;p&gt;For one: those managers are your bridge between executive idealism and vision and the rubber-hits-the-road engineering challenges and limitations. As an engineer, I’ve been in calls with fantastic project managers, where both executives and engineers leave feeling understood, and been in calls with poor (or, god forbid, &lt;em&gt;no&lt;/em&gt; project managers) where engineers and executives seem to talk past each other in different languages.&lt;/p&gt;

&lt;p&gt;I have also been in environments where no project manager is present, and where engineers are individually harangued by folks all over the company who believe that their specific need is &lt;em&gt;the absolute highest priority&lt;/em&gt;, with no cross-channel communication. When everything is the highest priority, &lt;em&gt;nothing&lt;/em&gt; is the highest priority, and the actual direction of development is aimless.&lt;/p&gt;

&lt;p&gt;Lastly, the project manager is likely the one with the most experience in the products being sold. They’re closest to sales, to marketing, to the actual &lt;em&gt;users&lt;/em&gt; who use the thing. When you’re in the code, it is &lt;em&gt;very&lt;/em&gt; easy to forget what something looks like from outside the window. It’s grounding to have a human being say “don’t worry about that – it’s not the thing that people will notice”.&lt;/p&gt;

&lt;p&gt;We’re quickly running out of bloodlust solutions. The last tier of people to lay off would be the executives, but that seems highly unlikely. We may need to reach for a more peaceful solution. Something old, all-natural, and proven at scale in the modern economy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Software Gardening
&lt;/h2&gt;

&lt;p&gt;After spending a lot of time trying to find better ways of coexisting with agents, the approach I’ve bumbled my way towards for the past two years has been something akin to gardening. It came up in the &lt;a href="https://blog.chaoticgood.computer/content/notes/hostage-negotiations" rel="noopener noreferrer"&gt;Hostage Negotiations&lt;/a&gt; post:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The tomato plant/trellis is the analogy I’ve settled on the most — it reminds me of &lt;a href="https://blog.chaoticgood.computer/content/notes/digital-gardening-with-quartz" rel="noopener noreferrer"&gt;digital gardening&lt;/a&gt;. Human beings have figured out how to wrangle things we don’t fully understand for thousands of years, and reading LLM research and model cards can start to feel more like a natural science like biology than something like an applied math paper. We can prod a taught model to check its behavior, but for folks outside of the research side, it falls on us to accept that something we don’t fully understand can still be useful.&lt;/p&gt;

&lt;p&gt;What we are responsible for, though, is making sure that this new addition to our lives is handled with care. It’s on us to build systems for handling its use — there’s a long history of intentionally, and irresponsibly, introducing &lt;a href="https://www.invasivespeciesinfo.gov/subject/pathways" rel="noopener noreferrer"&gt;invasive species&lt;/a&gt; into our environments to solve one problem only to create a hundred more in its place. This is the distinction I make between engineering and the act of (*&lt;em&gt;vomit&lt;/em&gt;*) &lt;em&gt;vibecoding&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A massive amount of humanity’s advances in technology, process, and economics comes from farming and agriculture. In the modern era, farming and food processing is done at an unimaginable scale. There’s millennia of case studies to work from: how can we take something unpredictable, and harness its benefits&lt;sup&gt;&lt;a id="user-content-fnref-1"&gt;1&lt;/a&gt;&lt;/sup&gt;?&lt;/p&gt;

&lt;p&gt;Picture, in your mind, a &lt;strong&gt;trellis&lt;/strong&gt; : the wooden scaffolding on which plants can grow vertically.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2rmg2ks8f8iml1upw6kj.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2rmg2ks8f8iml1upw6kj.webp" alt="Pasted Image 20260930021710_086" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Across the industry, we all build our apps on stable, thoroughly-vetted libraries that make up the &lt;strong&gt;stack&lt;/strong&gt; we work in. These are sliced into layers: data, business logic, API, and client are all examples of &lt;strong&gt;layers&lt;/strong&gt; on the stack.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fngy3j9usvw53prirk5nf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fngy3j9usvw53prirk5nf.png" alt="panic-06-scaffolding" width="800" height="538"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A program, in the end, can only be reliable as the weakest link on the stack. It doesn’t matter if you write a Windows program that will never crash, because Windows itself may crash eventually. The most beautiful, stable frontend in the world is still limited if the framework it’s built on is flaky, or if the API it’s hitting goes down. In this model, the stack acts as the trellis: your software can only be as stable as these critical backing pieces.&lt;/p&gt;

&lt;p&gt;Your software, though, isn’t just your stack. It’s also how you develop a feature &lt;em&gt;through&lt;/em&gt; your stack. Thinking about software as gardening, then, this is the most organic piece: it’s the part that differentiates what you’re creating against what everybody else using the same stack is creating as well.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fppumk8kuhtlok6vxa1ec.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fppumk8kuhtlok6vxa1ec.png" alt="panic-07-vines" width="800" height="746"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here, we illustrate that these features are not always clean shots through the layers. Perhaps they start from similar places, or they intersect along the way. This is one misconception I had early on when learning about &lt;a href="https://www.jimmybogard.com/vertical-slice-architecture/" rel="noopener noreferrer"&gt;vertical slice architecture&lt;/a&gt; (VSA): I assumed that layers and slices were a pure a 2D matrix, where two columns (features) could never touch. In the the real world, and in the programs most useful &lt;em&gt;in&lt;/em&gt; the real world, are simply more complicated than that.&lt;/p&gt;

&lt;p&gt;This is where the scaffolding and the features intersect: they both inform each others’ design. The scaffolding must enforce certain patterns for a feature to properly fit on it and latch on, but should be a good fit for the features being created. The features should do their best to fit the needs of the application, but must utilize the scaffolding to avoid becoming a spaghetti, tangled mess rotting on the ground.&lt;/p&gt;

&lt;h3&gt;
  
  
  Garden Teams
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0z7f1zw3p0pvk4148mwb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0z7f1zw3p0pvk4148mwb.png" alt="panic-08-gardening-teams" width="800" height="659"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The agricultural metaphor fits well: as software development teams, we cannot get the benefits of LLMs without knowing how we’ll manage their drawbacks. The biggest drawback is that their quality is hard to guarantee, and that trying to micromanage them into doing exactly what we would do means spending more time watching over their shoulder and dictating to them than we’d otherwise spend doing the task ourselves. If we can learn to manage unpredictability, rather than fight tooth and nail to force conformity, then we can start to get actual benefits to both quality &lt;em&gt;and&lt;/em&gt; velocity.&lt;/p&gt;

&lt;p&gt;In software gardening, I’d define two primary roles:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Stack Engineering:&lt;/strong&gt; Reinforcing the layers of the stack so that each is stable in its own right, flexible to the demands of the requested features, and procedurally well-documented.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feature Engineering:&lt;/strong&gt; High-level design and specification of the required features, framed in terms of how they must pass through the stack in order to accomplish their goals.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Splitting up the stack this way means that neither engineers nor managers are left out in the cold. Instead, both take on a role that blends management with engineering, but with a focus on specific strengths:&lt;/p&gt;

&lt;p&gt;Engineers primarily take on stack engineering. Stack engineering is inherently built on hyper-specialized knowledge into each layer of the stack, and how features of that stack’s technology can be utilized to enforce good behavior from the features that are growing on it. Engineers begin thinking less in terms of “pull a ticket, complete a ticket, make a PR for the ticket” and more on the frameworks used by the product. It’s a reinforcement task: making sure that, for upcoming planned features, each layer of the stack has a clearly and singularly defined path to completion.&lt;/p&gt;

&lt;p&gt;Feature engineering, then, caters to both engineers and managers coordinating how LLMs grow features through the stack. The knowledge is broad, rather than deep: they trade deep expertise on how each layer operates under-the-hood for a broad understanding of each layer’s API surface. Their deep understanding is in the product specifications, coordinating work done on features, and maintaining a rapid agile feedback loop for both product and stack improvements.&lt;/p&gt;

&lt;p&gt;Both sides take on management responsibilities in the way that they work with each other. The stack engineers must keep up-to-date on the rolling quality of features being developed and triage points of friction: areas where features get cluttered, conflicted, or generally confused. In turn, feature engineering must triage their work based on new capabilities created by the stack engineers, occasionally managing refactors of previous work based on new capabilities of the stack.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv58sbj17rvd3dikuk8uu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv58sbj17rvd3dikuk8uu.png" alt="panic-09-gardening-axes" width="800" height="611"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Feedforward &amp;amp; Feedback
&lt;/h3&gt;

&lt;p&gt;All of the work managed by humans is ultimately done to make sure that the conditions in which features are “grown” by agents is high-quality. Part of this is rapid iteration of the system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmya859ff5fi3ur4fa89t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmya859ff5fi3ur4fa89t.png" alt="panic-10-feed-loops" width="800" height="560"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Think about a houseplant, and understanding what conditions it’d thrive best in: what direction of window should it be facing? What kind of soil is the best for it? What temperature or humidity should the room be at? It will always be a case of monitoring the growth, checking for issues, and reacting accordingly.&lt;/p&gt;

&lt;p&gt;When introducing something vaguely organic, like code “grown” by an LLM, the principle is the same. The goal of a software development team is to make sure that what we’re creating is of good quality and completed in a timely manner. This takes the rapid feedback cycle promoted by management frameworks like Agile and applies them one layer up the development abstraction: not just to the code we’re writing, but to the environment that code is being written in.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxjd4frgbcglg9f09xt3v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxjd4frgbcglg9f09xt3v.png" alt="panic-11-agent-loops" width="800" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This requires strong systems for both &lt;strong&gt;feedforward&lt;/strong&gt; and &lt;strong&gt;feedback&lt;/strong&gt; to accomplish&lt;sup&gt;&lt;a id="user-content-fnref-2"&gt;2&lt;/a&gt;&lt;/sup&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Feedforward&lt;/strong&gt; contains all of the environmental tools available when an agent starts with zero context. It’s the tools available to them, as well as what they can get through those tools. This will change depending on your harness, but think in terms of the scaffolding that’s been built, the quality of previous code, the documentation available, and the quality of the prompts they’re given.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feedback&lt;/strong&gt; contains all of the tooling, both deterministic and non-deterministic, that are used to evaluate the quality of an agent contribution. The faster, the better: anything that can be done to rapidly confirm quality gates and evaluate the work done in a timely and inexpensive manner has critical value.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once quality can be accounted for, the feedforward and feedback loops can, themselves, be iteratively improved on. The miracle of modern agriculture is not the amount of food we grow: it’s the technology we’ve built around something unpredictable to make sure we harness the most benefit, and least harm, from a chaotic process.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgstxgwawzxeo77cd8dum.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgstxgwawzxeo77cd8dum.png" alt="panic-12-assignments" width="800" height="1014"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The major shift in this framework is that human beings aren’t as involved in the nitty-gritty, line-by-line details of the product code. The product code &lt;em&gt;is&lt;/em&gt; what’s being grown, derived from:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The quality of the stack&lt;/li&gt;
&lt;li&gt;The accuracy of the specifications; and&lt;/li&gt;
&lt;li&gt;The feedforward and feedback loops of development&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In my own experience adopting this approach, you get more than just a high-quality product out of the other side. Out of this, your team can generate strong frameworks on which to build future work &lt;em&gt;and&lt;/em&gt; a well-defined &lt;em&gt;system&lt;/em&gt; for creating other products.&lt;/p&gt;

&lt;p&gt;The system isn’t without its drawbacks, though. Because its byproducts are stable framework libraries and a system for developing more products, it doesn’t work well in isolation. If your team is responsible for just a single product or service, I wouldn’t recommend this; the shift in mindset and responsibilities likely isn’t worth the benefit you’d get out of the byproducts. However, if your team is responsible for many products, where libraries can be re-used elsewhere and the garden loop can be repurposed for other initiatives, I highly recommend giving this approach a try.&lt;/p&gt;

&lt;p&gt;If you want to give this a try, I’d recommend seeding the process on a backlog project; something that your team has wanted, or needed, to do for awhile but never had the prior time, resources, or direct working knowledge to pull. Once you start to develop a feedback loop and stack libraries, those are perfect candidates to cross-pollinate the process upwards to other products you’re working on.&lt;/p&gt;

&lt;p&gt;In the end, you’ll get what many other engineering teams are scrambling for at the moment: a system where LLMs have a clearly defined and managed role in your development process, and the people on your team can focus in on the judgements and vision that actually move you towards a better output.&lt;/p&gt;

&lt;h2 id="footnote-label"&gt;Footnotes&lt;/h2&gt;

&lt;ol&gt;
&lt;li id="user-content-fn-1"&gt;
&lt;p&gt;The irony is not lost on me that both require massive amounts of water and land, although a square mile of farmland is probably of more intrinsic value than a square mile of data center. &lt;a&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id="user-content-fn-2"&gt;
&lt;p&gt;I cannot take credit for the concepts of “feedforward” and “feedback” – all credit goes to &lt;a href="https://birgitta.info/" rel="noopener noreferrer"&gt;Birgitta Böckeler&lt;/a&gt;, from her post &lt;a href="https://martinfowler.com/articles/harness-engineering.html" rel="noopener noreferrer"&gt;“Harness engineering for coding agent users”&lt;/a&gt; &lt;a&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;a href="https://blog.chaoticgood.computer/content/notes/software-gardening" rel="noopener noreferrer"&gt;Software Gardening&lt;/a&gt; was first published on Chaotic Good Computing, where you can reply to it on Bluesky or from your own site.&lt;/p&gt;

</description>
      <category>horticulture</category>
      <category>management</category>
      <category>ai</category>
      <category>systems</category>
    </item>
    <item>
      <title>Working with Valves: Understanding the Structure of "Flat" Organizations</title>
      <dc:creator>Spencer Elkington</dc:creator>
      <pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/spelkington/working-with-valves-understanding-the-structure-of-flat-organizations-24k3</link>
      <guid>https://dev.to/spelkington/working-with-valves-understanding-the-structure-of-flat-organizations-24k3</guid>
      <description>&lt;p&gt;It’s seems a bit out of left field to annotate a random company’s employee handbook. I’m not an employee at Valve — never have been, likely never will be — but among engineers, Valve has a somewhat mythic status as a company with an unorthodox approach to management: just… &lt;em&gt;don’t manage.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This annotation relates specifically to &lt;a href="https://blog.chaoticgood.computer/content/annotations/evolutions-revolutions" rel="noopener noreferrer"&gt;Evolutions and Revolutions as Organizations Grow&lt;/a&gt;, which pertains to general management structures across companies. The entire field of management research is an investigation into how best to coordinate human efforts and enterprise, and there are many solutions across that spectrum that work well. Take a look at two successful companies, and you’d certainly find differences in the structure of their org charts — sometimes subtle, sometimes not, but differences nonetheless.&lt;/p&gt;

&lt;p&gt;However, it’s obvious that Valve’s solution to management (“manage yourselves!”) is novel on the surface, to say the least. I’ve seen it hailed in a few places, now, of the potential for decentralized teams. It’s no secret that &lt;a href="https://www.businessinsider.com/microsoft-amazon-google-embrace-flatter-structure-fewer-managers-boost-efficiency-2025-5?op=1" rel="noopener noreferrer"&gt;tech companies have spent the last few years “flattening” their hierarchies&lt;/a&gt;, usually by &lt;a href="https://blog.chaoticgood.computer/content/notes/software-gardening" rel="noopener noreferrer"&gt;gutting management roles&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Reading through the handbook, though, you see that Valve’s solution is &lt;em&gt;not&lt;/em&gt; the colloquial “no managers!”&lt;/p&gt;

&lt;p&gt;Are you hoping you can flatten your organizational hierarchy for efficiency by shitcanning the entire middle management of your company, close your laptop, and come back tomorrow to an efficient paradise?&lt;/p&gt;

&lt;p&gt;You’ve got another thing coming.&lt;/p&gt;

&lt;p&gt;Source document: &lt;a href="https://media.steampowered.com/apps/valve/Valve_Handbook_LowRes.pdf" rel="noopener noreferrer"&gt;media.steampowered.com&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This interactive content can only be viewed on the &lt;a href="https://blog.chaoticgood.computer/content/annotations/valve-handbook" rel="noopener noreferrer"&gt;live site&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;a href="https://blog.chaoticgood.computer/content/annotations/valve-handbook" rel="noopener noreferrer"&gt;Working with Valves: Understanding the Structure of "Flat" Organizations&lt;/a&gt; was first published on Chaotic Good Computing, where you can reply to it on Bluesky or from your own site.&lt;/p&gt;

</description>
      <category>management</category>
      <category>strategy</category>
      <category>engineering</category>
      <category>ai</category>
    </item>
    <item>
      <title>Agentic Programming as Theory Building</title>
      <dc:creator>Spencer Elkington</dc:creator>
      <pubDate>Thu, 12 Feb 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/spelkington/agentic-programming-as-theory-building-3a5e</link>
      <guid>https://dev.to/spelkington/agentic-programming-as-theory-building-3a5e</guid>
      <description>&lt;p&gt;If you ever need an endorsement of trying to chase citations all the way back to their sources, look no further! I recently read a post by &lt;a href="https://bsky.app/profile/stevekrouse.com" rel="noopener noreferrer"&gt;Steve Krouse,&lt;/a&gt; &lt;a href="https://blog.val.town/vibe-code" rel="noopener noreferrer"&gt;&lt;em&gt;Vibe code is legacy code&lt;/em&gt;&lt;/a&gt;, where it mentions the refrain:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Programming is fundamentally theory building,&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That one has been rattling around my brain for weeks, now. My industry is still in a massive shake-up brought on by &lt;a href="https://blog.chaoticgood.computer/content/notes/hostage-negotiations" rel="noopener noreferrer"&gt;how good LLM agents have gotten at producing code&lt;/a&gt;. Needless to say, there are a &lt;em&gt;lot&lt;/em&gt; of opinions on LLM usage. Trying to negotiate out my own relationship with the technology and overcome a growing pit in my stomach that represents the question "Am I cooked?" is something I'm actively working on.&lt;/p&gt;

&lt;p&gt;Steve Krouse's quote digs into this citation — a paper by &lt;a href="https://en.wikipedia.org/wiki/Peter_Naur" rel="noopener noreferrer"&gt;Peter Naur&lt;/a&gt;, who was influential in the earliest years of computer science as a forming discipline, and was married to &lt;a href="https://en.wikipedia.org/wiki/Christiane_Floyd" rel="noopener noreferrer"&gt;Christiane Floyd&lt;/a&gt;, who was heavily involved in the production of the first coding IDEs.&lt;/p&gt;

&lt;p&gt;(I did just attach his name to the term "computer science", but it &lt;em&gt;is&lt;/em&gt; worth noting that he didn't like that term. He preferred — and coined — the term "datalogy", which &lt;a href="https://www.researchgate.net/publication/220657031_Datalogy_-_The_Copenhagen_Tradition_of_Computer_Science" rel="noopener noreferrer"&gt;still sticks as the term for the discipline&lt;/a&gt; in his native Denmark.)&lt;/p&gt;

&lt;p&gt;Lemme level with ya — this is going to get real heady, real fast. As background, Naur rejected the idea that computer science was itself a direct descendant from raw mathematics. This paper builds on that idea, and talks about the interface between actual programmatic processes/development and the human beings who create them. Many of the citations on this paper are philosophical essays and excerpts — one of them seeks to distinguish human thought from hydrogen atoms.&lt;/p&gt;

&lt;p&gt;Stick around, though! If you share my anxiety about the role of humans in a world where LLMs have pretty much beaten us out in the act of writing code, this paper may be as cathartic for you as it has been for myself.&lt;/p&gt;




&lt;p&gt;This is an inline annotated PDF. You can see the annotations at &lt;a href="https://blog.chaoticgood.computer/content/annotations/programming-as-theory-building" rel="noopener noreferrer"&gt;the live site&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>engineering</category>
      <category>teaching</category>
    </item>
    <item>
      <title>A Pattern Language, and a Beautiful Day in the Neighborhood</title>
      <dc:creator>Spencer Elkington</dc:creator>
      <pubDate>Sun, 01 Feb 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/spelkington/a-pattern-language-and-a-beautiful-day-in-the-neighborhood-bic</link>
      <guid>https://dev.to/spelkington/a-pattern-language-and-a-beautiful-day-in-the-neighborhood-bic</guid>
      <description>&lt;p&gt;The world is too complicated a place to be understood, wholly, exactly how it is. With each passing day, it becomes &lt;em&gt;more&lt;/em&gt; complicated. Not even a century ago, the general term “scientist” could be somebody’s wholesale job title; a person who &lt;em&gt;in general, does science.&lt;/em&gt; The amount that we know has grown exponentially since then. In any given field, even among broad categories of science — biology, computing, chemistry, economics — nobody could ever hope to fully understand even a &lt;em&gt;subsection&lt;/em&gt; of how the world works. Broad strokes, rules-of-thumb, and statements with many, &lt;em&gt;many&lt;/em&gt; asterisks are required to even &lt;em&gt;begin&lt;/em&gt; to understand the many forces that govern our lives.&lt;/p&gt;

&lt;p&gt;These are &lt;em&gt;patterns&lt;/em&gt;, and they’re our greatest tool in comprehending the basics of the incomprehensible.&lt;/p&gt;

&lt;p&gt;Patterns are prevalent in my main interest and occupation of &lt;a href="https://blog.chaoticgood.computer/tags/engineering" rel="noopener noreferrer"&gt;software engineering&lt;/a&gt;. Software is made up of lines of code in the same way that a building is made up of bricks and beams. They are the basic building materials, but random scatterings of code make as successful a piece of software as a random scattering of bricks would make a home. To make anything of use, you need to step back and see the bricks for what they build, or code for what process it defines; we use the phrase &lt;a href="https://refactoring.guru/design-patterns" rel="noopener noreferrer"&gt;design patterns&lt;/a&gt; to describe the larger structures we build.&lt;/p&gt;

&lt;p&gt;For a long time, I had assumed that “design patterns” was a term &lt;em&gt;coined&lt;/em&gt; by software engineers, most famously in the 1990 book &lt;a href="https://cs.gonzaga.edu/faculty/crandall/misc/GoF.pdf" rel="noopener noreferrer"&gt;Design Patterns: Elements of Reusable Object-Oriented Software&lt;/a&gt; — even if they did leverage terms from other fields. Especially in object-oriented programming, many &lt;a href="https://refactoring.guru/design-patterns/creational-patterns" rel="noopener noreferrer"&gt;creational&lt;/a&gt; and &lt;a href="https://refactoring.guru/design-patterns/structural-patterns" rel="noopener noreferrer"&gt;structural&lt;/a&gt; patterns actually &lt;em&gt;do&lt;/em&gt; borrow, directly from physical spaces&lt;sup&gt;&lt;a id="user-content-fnref-1"&gt;1&lt;/a&gt;&lt;/sup&gt;. Factories, builders, bridges, facades — they may deal with data and information instead of physical structures, but the patterns’ purposes do match fairly well to their real-world analogs. Thinking in design patterns is, I think, what differentiates the role of software &lt;em&gt;development&lt;/em&gt; — laying down the bricks of code — from software &lt;em&gt;architecture&lt;/em&gt; — using patterns and theory to lay out the superstructures of the software.&lt;/p&gt;

&lt;p&gt;Patterns are such an important cornerstone of computing that it had never even crossed my mind that we &lt;em&gt;yoinked&lt;/em&gt; it from somebody else.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;em&gt;A Pattern Language&lt;/em&gt; — of another field
&lt;/h2&gt;

&lt;p&gt;A few years ago, I stumbled on the 1977 urban planning and architecture reference manual &lt;em&gt;&lt;a href="https://arl.human.cornell.edu/linked%20docs/Alexander_A_Pattern_Language.pdf" rel="noopener noreferrer"&gt;A Pattern Language&lt;/a&gt;&lt;/em&gt; while researching more about design patterns for software. What I stumbled into, though, was a bit of hubris: software engineers didn’t invent design patterns! We could hardly be credited for coming up with the &lt;em&gt;term&lt;/em&gt;, never mind the &lt;em&gt;concept&lt;/em&gt;. Other fields had been using design patterns decades before the phrase ever got close to computing.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;February 2nd, 2026 — while editing this note, I (re?)discovered that &lt;em&gt;A Pattern Language&lt;/em&gt; isn’t just &lt;em&gt;an earlier&lt;/em&gt; use of the term “design patterns” — it’s apparently the &lt;a href="https://en.wikipedia.org/wiki/Design_pattern" rel="noopener noreferrer"&gt;original source&lt;/a&gt;. I’ve had the book floating around my life for three years now, so I can’t recall if going back to the root was the result of an intentional investigation, or just dumb luck.&lt;/p&gt;

&lt;p&gt;(It was probably dumb luck.)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;A Pattern Language&lt;/em&gt; is, specifically, a series of patterns related to the physical development of structures and communities — homes, neighborhoods, towns, cities — using design patterns that can begin to describe the organic way we, human beings, have decided to organize ourselves over the course of the last few thousand years.&lt;/p&gt;

&lt;p&gt;The text is broken into a few volumes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Volume 1:&lt;/strong&gt; &lt;em&gt;The Timeless Way of Building&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Volume 2:&lt;/strong&gt; &lt;em&gt;A Pattern Language&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Volume 3:&lt;/strong&gt; &lt;em&gt;The Oregon Experiment&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Volumes 1 and 2 are &lt;em&gt;very&lt;/em&gt; closely related. &lt;em&gt;A Pattern Language&lt;/em&gt; even states — in the first sentence, of the first paragraph, of the first &lt;em&gt;page&lt;/em&gt; — that itself and &lt;em&gt;The Timeless Way of Building&lt;/em&gt; “… are two halves of a single work.” I would describe the system as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This interactive content can only be viewed on the &lt;a href="https://blog.chaoticgood.computer/content/notes/pattern-languages-of-the-neighborhood" rel="noopener noreferrer"&gt;live site&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This separation between the language and the instructions is not far off, conceptually, from how much software development is divvied up. We have the &lt;strong&gt;language&lt;/strong&gt; — the way we express what we’re creating; the &lt;strong&gt;instructions&lt;/strong&gt; — how those expressions are mechanically laid out; and the &lt;strong&gt;application&lt;/strong&gt; — the way the language and instructions interact to create the final product:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This interactive content can only be viewed on the &lt;a href="https://blog.chaoticgood.computer/content/notes/pattern-languages-of-the-neighborhood" rel="noopener noreferrer"&gt;live site&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Once again, software engineering co-opting concepts that existed long before we did. &lt;em&gt;Classic!&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Superstructures and substructures
&lt;/h3&gt;

&lt;p&gt;Obviously, where &lt;em&gt;A Pattern Language&lt;/em&gt; differs is that the patterns here, while varied in how abstract they are, never stray too far from the physical world. Some are very direct, neighboring literal construction practices, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pattern 191:&lt;/strong&gt; The Shape of Indoor Space;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pattern 200:&lt;/strong&gt; Open Shelves; or&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pattern 251:&lt;/strong&gt; Different Chairs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I will call these &lt;strong&gt;sub&lt;/strong&gt; structure patterns — patterns dealing with details &lt;em&gt;smaller than&lt;/em&gt; a single home, shop, or other structure.&lt;/p&gt;

&lt;p&gt;As we move forward in the pattern listing, concepts begin to abstract away and describe &lt;strong&gt;super&lt;/strong&gt; structures — full streets, towns, neighborhoods, or cities. They rise above the purely physical and describe less tactile details, such as:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pattern 12:&lt;/strong&gt; Communities of 7,000;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pattern 10:&lt;/strong&gt; Magic of the City; and&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pattern 8:&lt;/strong&gt; Mosaic of Subcultures&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The most abstract — &lt;strong&gt;Pattern 1&lt;/strong&gt; , fittingly — is Independent Regions: a case that independent regions should be… well, independent.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft4pbezefhv7rza1mf1hm.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft4pbezefhv7rza1mf1hm.webp" alt="Pasted image 20260201161641" width="800" height="683"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That is all to say: &lt;em&gt;A Pattern Language&lt;/em&gt; seeks to cover a wide-ranging set of patterns to encapsulate all levels of structure that human beings could possibly dwell in. There are some patterns I agree with more than others. The amount of effort, however, that the authors have put into 253 separate rules seeking to cover the entirety of human habitat while being generalizable enough to cover many cultures? It’s herculean.&lt;/p&gt;

&lt;h3&gt;
  
  
  Earth: The World’s Biggest Graph
&lt;/h3&gt;

&lt;p&gt;Although my initial interest in &lt;em&gt;A Pattern Language&lt;/em&gt; started with software design pattern research, reading the patterns has bubbled up a different interest: the representation of our world, and the many communities that make it up, as graphs.&lt;/p&gt;

&lt;p&gt;When I say graphs, I don’t mean a line graph on an X-Y plot — I mean it in the most abstract sense — dots that represent &lt;em&gt;things&lt;/em&gt;, and lines that &lt;em&gt;connect&lt;/em&gt; those things. This is the foundation of &lt;a href="https://en.wikipedia.org/wiki/Graph_theory" rel="noopener noreferrer"&gt;graph theory&lt;/a&gt;. Maps as graphs feels like an apt return to form — the study of graph theory itself formed in 1736 when Leonhard Euler (of the number _ &lt;strong&gt;e&lt;/strong&gt; _), solved a puzzle about &lt;a href="https://en.wikipedia.org/wiki/Seven_Bridges_of_K%C3%B6nigsberg" rel="noopener noreferrer"&gt;seven bridges in the city of Königsberg&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyc5q0hryhxppw8gmf6sj.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyc5q0hryhxppw8gmf6sj.webp" alt="Pasted image 20260201163320" width="302" height="238"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F23xim69zf2a7vwnxwnxh.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F23xim69zf2a7vwnxwnxh.webp" alt="Pasted image 20260201163331" width="800" height="652"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Maps are simply graphs of the real world. In fact, whenever a device shows you a map, gives you directions, it’s not &lt;em&gt;seeing&lt;/em&gt; left turns and right turns, streets and buildings — it’s seeing nodes on a graph, and the edges that connect them.&lt;/p&gt;

&lt;p&gt;My hope with &lt;em&gt;A Pattern Language&lt;/em&gt; is to learn more about the relationship &lt;em&gt;between&lt;/em&gt; nodes on the graph — a language not just to better understand how our towns, cities, and communities are set up, but to more richly analyze the relationships between super- and sub-structures on the graphs we use to describe them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Understanding The Neighborhood
&lt;/h3&gt;

&lt;p&gt;This ultimately lends itself to another project that I’ve been hoping to work on for a very long time — &lt;a href="https://blog.chaoticgood.computer/tags/projects/games/the-neighborhood" rel="noopener noreferrer"&gt;The Neighborhood&lt;/a&gt;. What form this project will take is, to put it mildly, a bit up-in-the-air; it will really depend on how well I can analyze maps as graphs. The goal, though, is simple:&lt;/p&gt;

&lt;p&gt;We have so much data about the world around us. We’ve learned that it’s, all things considered, fairly straightforward to simply collect everything, always, all the time:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8v2omo62s6lbsfrdmfnm.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8v2omo62s6lbsfrdmfnm.webp" alt="Pasted image 20260201164026" width="800" height="748"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, you and I don’t see our communities as nodes and edges. We see them as alive — they’re the places we rest, where we work, the friends in our lives, our connection to others. The literal places and the ways they’re connected are all in the raw data, but their &lt;em&gt;meaning&lt;/em&gt; — the &lt;em&gt;semantics&lt;/em&gt; of data, to each of us — is a superstructure. The deeper connections are not the lines on the graph — they’re somewhere hidden between them.&lt;/p&gt;

&lt;p&gt;My hope is to understand and apply the language to create a system that can process the raw data and boil it down to something smaller, but representative. Given an area of data, The Neighborhood’s first goal is to understand the abstract, conceptual relationships and generate a toy model of the area — a simpler graph that maintains complex structures and relationships, but is simple enough that it could be printed on one of those old-school Playskool Village rugs for kids.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frswx33334p8emy7lqqja.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frswx33334p8emy7lqqja.webp" alt="Pasted image 20260201164502" width="691" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have many amorphous thoughts on what form of a game The Neighborhood will take — thoughts that I’ll spare you from, until they take some more concrete, actionable and &lt;em&gt;playable&lt;/em&gt; form — but I consider the graphical analysis of real map data to be at the core of the concept.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the &lt;code&gt;#annotations/a-pattern-language&lt;/code&gt; project will work.
&lt;/h2&gt;

&lt;p&gt;Unfortunately, I won’t be able to truly annotate the work in the same way I made the public annotations for &lt;em&gt;&lt;a href="https://blog.chaoticgood.computer/content/annotations/college-admissions-and-the-stability-of-marriage" rel="noopener noreferrer"&gt;College Admissions and the Stability of Marriage&lt;/a&gt;&lt;/em&gt; or &lt;em&gt;&lt;a href="https://blog.chaoticgood.computer/content/annotations/llm-starter" rel="noopener noreferrer"&gt;The LLMs Starter&lt;/a&gt;&lt;/em&gt;. I lack, at the current time, a good way to automatically trim PDF or EPUB texts into preselected chapters. Additionally, the &lt;a href="https://arl.human.cornell.edu/linked%20docs/Alexander_A_Pattern_Language.pdf" rel="noopener noreferrer"&gt;online source from Cornell&lt;/a&gt; is, unfortunately, missing quite a bit of the text (only 313 of the full 1169-page text —  a bit over 25%).&lt;/p&gt;

&lt;p&gt;Nonetheless, I’ll be annotating my physical copy of the book and moving those annotations, piecemeal, into this blog under the &lt;a href="https://blog.chaoticgood.computer/tags/projects/a-pattern-language" rel="noopener noreferrer"&gt;pattern-language&lt;/a&gt; tag. I’ve already pre-generated 255 notes, one for each pattern (as well as an intro and conclusion note). The reason for pre-generating them is simple: the patterns form a graph, themselves. Each pattern references other patterns. This is most clear in the first portions of each pattern entry. For example, the introduction to &lt;a href="https://blog.chaoticgood.computer/content/annotations/a-pattern-language/62-high-places" rel="noopener noreferrer"&gt;Pattern 62: High Places&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;… according to &lt;a href="https://blog.chaoticgood.computer/content/annotations/a-pattern-language/21-four-story-limit" rel="noopener noreferrer"&gt;Four Story Limit (21)&lt;/a&gt;, most roofs in the community are no higher than four stories, about 40 or 50 feet. However, it is very important that this height limit be punctuated, just occasionally, by higher buildings which have special functions. They can help the character of the &lt;a href="https://blog.chaoticgood.computer/content/annotations/a-pattern-language/61-small-public-squares" rel="noopener noreferrer"&gt;Small Public Squares (61)&lt;/a&gt; and &lt;a href="https://blog.chaoticgood.computer/content/annotations/a-pattern-language/66-holy-ground" rel="noopener noreferrer"&gt;Holy Ground (66)&lt;/a&gt;; they can give particular identity to their communities, provided that they do not occur more frequently than one in each &lt;a href="https://blog.chaoticgood.computer/content/annotations/a-pattern-language/12-community-of-7000" rel="noopener noreferrer"&gt;Community of 7,000 (12)&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The amount of explicit links between patterns is practically &lt;em&gt;begging&lt;/em&gt; to be graphed out like the other pages on this site. To better learn this information for understanding the graphs formed by maps of the world, I also want to understand the graph of these patterns’ connections to one another.&lt;/p&gt;

&lt;h3&gt;
  
  
  Process
&lt;/h3&gt;

&lt;p&gt;As I complete annotations for patterns within &lt;em&gt;A Pattern Language&lt;/em&gt;, I’ll do two things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I will update the date of the post to reflect the day I wrote the annotation; and&lt;/li&gt;
&lt;li&gt;I will move the note from my private vault to my public one.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is a very solid piece of work, and I don’t anticipate that anything from the completed annotations would spoil any additional work on The Neighborhood. The book itself is fantastic — if any note inspires anybody to pick up a paper copy of the text, it’d have been well worth my time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pacing
&lt;/h3&gt;

&lt;p&gt;With 253 patterns to annotate, this will doubtless be a long-running project (the scope has already annihilated the organization of my site graph). Even at a &lt;em&gt;very generous&lt;/em&gt; estimated pace averaging one pattern a day, that’d make for an completion date eight months in the future — October of this year. While I have every intention, as of writing this, to read back through the text and have at least &lt;em&gt;some&lt;/em&gt; annotation for each section (if only just to complete the link connections between a pattern and its neighbors), I will need to triage the pacing a bit.&lt;/p&gt;

&lt;p&gt;Above, I define the terms &lt;em&gt;substructure&lt;/em&gt; to mean “structures smaller than a whole building” and &lt;em&gt;superstructure&lt;/em&gt; to mean “structures larger than a whole building”. I’ve created two subtags — &lt;a href="https://blog.chaoticgood.computer/tags/projects/a-pattern-language" rel="noopener noreferrer"&gt;pattern-language/sub&lt;/a&gt; and &lt;a href="https://blog.chaoticgood.computer/tags/projects/a-pattern-language" rel="noopener noreferrer"&gt;pattern-language/super&lt;/a&gt; — to sort patterns into these two categories. I’ll be prioritizing the &lt;code&gt;#super&lt;/code&gt; patterns first, as they relate more to what I’d like to get out of this reading. The book does a preliminary grouping into &lt;em&gt;Towns, Buildings, and Construction&lt;/em&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Towns:&lt;/strong&gt; &lt;a href="https://blog.chaoticgood.computer/content/annotations/a-pattern-language/01-independent-regions" rel="noopener noreferrer"&gt;Independent Regions (01)&lt;/a&gt; to &lt;a href="https://blog.chaoticgood.computer/content/annotations/a-pattern-language/94-sleeping-in-public" rel="noopener noreferrer"&gt;Sleeping in Public (94)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Buildings:&lt;/strong&gt; &lt;a href="https://blog.chaoticgood.computer/content/annotations/a-pattern-language/95-building-complex" rel="noopener noreferrer"&gt;Building Complexes (95)&lt;/a&gt; to &lt;a href="https://blog.chaoticgood.computer/content/annotations/a-pattern-language/204-secret-place" rel="noopener noreferrer"&gt;Secret Places (204)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Construction:&lt;/strong&gt; &lt;a href="https://blog.chaoticgood.computer/content/annotations/a-pattern-language/205-structure-follows-social-spaces" rel="noopener noreferrer"&gt;Structure Follows Social Spaces (205)&lt;/a&gt; to &lt;a href="https://blog.chaoticgood.computer/content/annotations/a-pattern-language/253-things-from-your-life" rel="noopener noreferrer"&gt;Things From Your Life (253)&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For now, I’ve designated anything in &lt;em&gt;Towns&lt;/em&gt; to superstructure patterns, and anything from &lt;em&gt;Buildings&lt;/em&gt; and &lt;em&gt;Construction&lt;/em&gt; to substructure patterns. However, I can already see that these categories will be fluid, with some current superstructure patterns being better suited to substructures (e.g. &lt;a href="https://blog.chaoticgood.computer/content/annotations/a-pattern-language/92-bus-stop" rel="noopener noreferrer"&gt;Bus Stops (92)&lt;/a&gt;) or some current substructures being better suited as superstructures (e.g. &lt;a href="https://blog.chaoticgood.computer/content/annotations/a-pattern-language/120-paths-and-goals" rel="noopener noreferrer"&gt;Paths and Goals (120)&lt;/a&gt;). Those re-categorizations will track here with time, but don’t expect my distribution or classification to be as clean-cut as the book itself makes them out to be.&lt;/p&gt;

&lt;p&gt;Finally: the text itself groups patterns into broader categories — for example, a transit category composed of the rules between &lt;a href="https://blog.chaoticgood.computer/content/annotations/a-pattern-language/49-looped-local-roads" rel="noopener noreferrer"&gt;Looped Local Roads (49)&lt;/a&gt; and &lt;a href="https://blog.chaoticgood.computer/content/annotations/a-pattern-language/57-children-in-the-city" rel="noopener noreferrer"&gt;Children in the City (57)&lt;/a&gt;. I may do larger composite notes for these groups, especially as they relate to the graph introspection goals of The Neighborhood.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This will certainly be the largest notes collection on this site thus far. &lt;em&gt;A Pattern Language&lt;/em&gt; is certainly a worthy candidate of it. If you are interested in urban design, civil engineering, or public policy, I would highly recommend purchasing a copy of the text yourself and giving it a read. Its authors — Christopher Alexander, Sara Ishikawa, Murray Silverstein, with Max Jacobson, Ingrid Fiksdahl-King, and Shlomo Angel — deserve credit for the work they put into researching, organizing, and publishing these thoughts.&lt;/p&gt;

&lt;h2 id="footnote-label"&gt;Footnotes&lt;/h2&gt;

&lt;ol&gt;
&lt;li id="user-content-fn-1"&gt;
&lt;p&gt;This melts down a bit more when you get into &lt;a href="https://en.wikipedia.org/wiki/Functional_programming" rel="noopener noreferrer"&gt;functional programming&lt;/a&gt;. If I had to give a TL;DR: software exists in a space between pure information and the real world. Object-oriented programming takes the angle of going from &lt;em&gt;physical concepts&lt;/em&gt; into information space, and functional programming takes the angle of going from &lt;em&gt;pure math&lt;/em&gt; into the information space. Functional programming does &lt;em&gt;also&lt;/em&gt; have design patterns, but they are far more derived from mathematical concepts than object-oriented programming’s physical analogs. &lt;a&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;a href="https://blog.chaoticgood.computer/content/notes/pattern-languages-of-the-neighborhood" rel="noopener noreferrer"&gt;A Pattern Language, and a Beautiful Day in the Neighborhood&lt;/a&gt; was first published on Chaotic Good Computing, where you can reply to it on Bluesky or from your own site.&lt;/p&gt;

</description>
      <category>theneighborhood</category>
      <category>data</category>
      <category>policy</category>
      <category>apatternlanguage</category>
    </item>
    <item>
      <title>The Advantages of Advantage: Intro to Probability Convolutions</title>
      <dc:creator>Spencer Elkington</dc:creator>
      <pubDate>Mon, 19 Jan 2026 00:00:00 +0000</pubDate>
      <link>https://dev.to/spelkington/the-advantages-of-advantage-intro-to-probability-convolutions-2mgg</link>
      <guid>https://dev.to/spelkington/the-advantages-of-advantage-intro-to-probability-convolutions-2mgg</guid>
      <description>&lt;p&gt;Statistics is a hell of a drug — like a higher-than-healthy dose of Benadryl, it may cause hallucinations, delirium, sleep. It becomes a bit more palatable, though, when it sneaks its way into the rules of a game. It can give a bit of zest and unpredictability to board games, card games, and the narrative ups and downs of tabletop RPGs.&lt;/p&gt;

&lt;p&gt;Players and gamemasters of Dungeons and Dragons knows that it can be tricky, but rewarding, to tune the odds of skill checks and random encounters — either to provide a satisfying outcome for the players you DM for, or to rig the odds minmaxing characters for successful outcomes. Things get real fun when you start mixing dice together. Advantage, _dis_advantage, or the thrill of rolling out eight or nine dice on a damage roll — it raises the unpredictability, but can also get tricky to calculate out the odds.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you’d like to mess around with the dice roll widget, you can find a copy and how-to at its &lt;a href="https://blog.chaoticgood.computer/content/notes/scratch/dice-widget" rel="noopener noreferrer"&gt;dedicated page&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Single Dice: No Convolution
&lt;/h2&gt;

&lt;p&gt;It’s not too bad to roll a single dice. In a fair die, where each side has equal odds of coming up on top, the probabilities don’t get too complicated. Take, for example, a simple six-sided die (a &lt;code&gt;d6&lt;/code&gt;):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Roll&lt;/th&gt;
&lt;th&gt;1&lt;/th&gt;
&lt;th&gt;2&lt;/th&gt;
&lt;th&gt;3&lt;/th&gt;
&lt;th&gt;4&lt;/th&gt;
&lt;th&gt;5&lt;/th&gt;
&lt;th&gt;6&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Chance&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1 in 6&lt;/td&gt;
&lt;td&gt;1 in 6&lt;/td&gt;
&lt;td&gt;1 in 6&lt;/td&gt;
&lt;td&gt;1 in 6&lt;/td&gt;
&lt;td&gt;1 in 6&lt;/td&gt;
&lt;td&gt;1 in 6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Percent&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;16%&lt;/td&gt;
&lt;td&gt;16%&lt;/td&gt;
&lt;td&gt;16%&lt;/td&gt;
&lt;td&gt;16%&lt;/td&gt;
&lt;td&gt;16%&lt;/td&gt;
&lt;td&gt;16%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Not too bad, right? It’s simple enough to do all of the math in your head. It can be subdivided easily — 3 or less and 4 or more each cover half the possible outcomes, so each has a 50/50 shot. If you wanted to, you could go as far as to graph out the odds, however boring and flat the graph would be:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This interactive content can only be viewed on the &lt;a href="https://blog.chaoticgood.computer/content/notes/roll-advantage" rel="noopener noreferrer"&gt;live site&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What happens, though, when you need to roll two six-sided dice and add the results? Calculating the odds becomes a bit trickier, but it’s not anything that can’t be drawn out. By placing the outcomes on a grid and adding them together, a pattern emerges:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;1st &lt;code&gt;d6&lt;/code&gt;&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;6&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;2nd &lt;code&gt;d6&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+ 1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;2&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;3&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;4&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;5&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;6&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;7&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+ 2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;3&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;4&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;5&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;6&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;7&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;8&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+ 3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;4&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;5&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;6&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;7&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;8&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;9&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+ 4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;5&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;6&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;7&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;8&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;9&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;10&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+ 5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;6&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;7&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;8&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;9&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;10&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;11&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;+ 6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;7&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;8&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;9&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;10&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;11&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;12&lt;/em&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Outcome&lt;/th&gt;
&lt;th&gt;Odds&lt;/th&gt;
&lt;th&gt;~Chance&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;2, 12&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;1 in 36&lt;/td&gt;
&lt;td&gt;3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;3, 11&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;2 in 36&lt;/td&gt;
&lt;td&gt;6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;4, 10&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;3 in 36&lt;/td&gt;
&lt;td&gt;8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;5, 9&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;4 in 36&lt;/td&gt;
&lt;td&gt;11%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;6, 8&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;5 in 36&lt;/td&gt;
&lt;td&gt;14%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;em&gt;7&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;6 in 36&lt;/td&gt;
&lt;td&gt;17%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;We can see, here, that the sums stay the same through the diagonals of the grid. With seven sitting on the longest diagonal, it means that rolling two six-sided dice (&lt;code&gt;2d6&lt;/code&gt;) has the highest odds at roughly 17%. Adding that with the odds of rolling a 6 or an 8, getting 7-&lt;em&gt;ish&lt;/em&gt; comes in ~45% odds. That’s the reason why, in standard versions of Monopoly, the general advice is to buy the orange set of properties if you have the chance. With folks rolling their way out of jail, there’s a hotspot of probability 6-8 spaces away — smack dab in that neighborhood, with the Community Chest as an island of socialist reprieve.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fupisfhv1zg2ep44lcjw5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fupisfhv1zg2ep44lcjw5.jpg" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I think that’s where statistics can get weird in people’s heads. The inclination is that adding two flat things together should give you another flat thing, but the way it spits out a curve feels off. That’s why taking the problem and putting it out on a grid can help — it helps work out &lt;em&gt;why&lt;/em&gt; the numbers come out that way.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This interactive content can only be viewed on the &lt;a href="https://blog.chaoticgood.computer/content/notes/roll-advantage" rel="noopener noreferrer"&gt;live site&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In probability and statistics, that idea of combining the two random outputs is called a &lt;strong&gt;convolution.&lt;/strong&gt; There are certainly &lt;a href="https://en.wikipedia.org/wiki/Convolution_of_probability_distributions" rel="noopener noreferrer"&gt;more intense definitions for the term&lt;/a&gt;, but at its root, it all comes back to that idea of taking a few possibilities and doing the same bit of math, again and again.&lt;/p&gt;

&lt;h2&gt;
  
  
  Working Out Advantage
&lt;/h2&gt;

&lt;p&gt;In playing D&amp;amp;D, it’s not uncommon to roll a dice at &lt;strong&gt;advantage&lt;/strong&gt; : you roll two dice, and have the good luck of getting to take the higher number and ignoring the lower one. It’s a nice boon — outweighed by the occasional &lt;strong&gt;dis&lt;/strong&gt; advantage, where you roll the same two dice but keep only the lower one — and can feel like a massive improvement wherever you can get it.&lt;/p&gt;

&lt;p&gt;I’ve heard, in the past, that getting to roll a twenty-sided die (&lt;code&gt;d20&lt;/code&gt;) at advantage is roughly equal to getting +5 on a roll. When you have to think quickly about it, that’s not a bad rule-of-thumb to go with. However, it can’t be &lt;em&gt;exactly&lt;/em&gt; like that. After all, no matter how many pure &lt;code&gt;d20&lt;/code&gt; you roll, you’ll never come out with a natural 25.&lt;/p&gt;

&lt;p&gt;Looking at the actual odds, though, this ends up being another weird curve. Twenty sides is a bit much — but what does rolling a &lt;code&gt;d6&lt;/code&gt; at advantage (&lt;code&gt;adv(d6)&lt;/code&gt;) look like?&lt;/p&gt;

&lt;p&gt;Performing the convolution, we can just take the higher of the two dice rolls:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;A/B&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;2&lt;/th&gt;
&lt;th&gt;3&lt;/th&gt;
&lt;th&gt;4&lt;/th&gt;
&lt;th&gt;5&lt;/th&gt;
&lt;th&gt;6&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Outcome&lt;/th&gt;
&lt;th&gt;Odds&lt;/th&gt;
&lt;th&gt;Chance&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1 in 36&lt;/td&gt;
&lt;td&gt;3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;3 in 36&lt;/td&gt;
&lt;td&gt;8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;5 in 36&lt;/td&gt;
&lt;td&gt;14%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;7 in 36&lt;/td&gt;
&lt;td&gt;19%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;9 in 36&lt;/td&gt;
&lt;td&gt;25%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;11 in 36&lt;/td&gt;
&lt;td&gt;31%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;This interactive content can only be viewed on the &lt;a href="https://blog.chaoticgood.computer/content/notes/roll-advantage" rel="noopener noreferrer"&gt;live site&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This shows us the clear benefits to advantage. On the high end, we’ve doubled the odds of getting a six out of our single &lt;code&gt;d6&lt;/code&gt;, and see that there’s a general upward curve to the odds of numbers on the higher end of the scale.&lt;/p&gt;

&lt;p&gt;Bringing it back, then, to the &lt;code&gt;d20&lt;/code&gt; — what is the difference between &lt;code&gt;d20 + 5&lt;/code&gt; and &lt;code&gt;adv(d20)&lt;/code&gt;?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This interactive content can only be viewed on the &lt;a href="https://blog.chaoticgood.computer/content/notes/roll-advantage" rel="noopener noreferrer"&gt;live site&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This interactive content can only be viewed on the &lt;a href="https://blog.chaoticgood.computer/content/notes/roll-advantage" rel="noopener noreferrer"&gt;live site&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It’s that slight curve towards the upper end at the spectrum that makes the difference. It makes sense that &lt;code&gt;+5&lt;/code&gt; became the shorthand, since that’s roughly the difference in the median roll (although &lt;code&gt;+4&lt;/code&gt; would be a bit more accurate, lining up the medians almost-perfectly). If you’re worried about rolling a 20 or above, &lt;code&gt;+5&lt;/code&gt; is &lt;em&gt;very&lt;/em&gt; generous, giving you almost three times the probability. In the D&amp;amp;D sense, then, mechanics like &lt;a href="https://roll20.net/compendium/dnd5e/Rules:Proficiency" rel="noopener noreferrer"&gt;proficiency or mastery&lt;/a&gt; may give you more bang for your buck (or XP) than, say, the chance to roll advantage more often.&lt;/p&gt;

&lt;h2&gt;
  
  
  Odds at Odds
&lt;/h2&gt;

&lt;p&gt;These calculations can be incredibly helpful when randomness stacks on randomness, and especially when the choices you make in a game depend on the distributions of outcomes. In the last year, I’ve gotten into the game Magic: The Gathering to an extent that… I wouldn’t call it fiscally &lt;em&gt;irresponsible&lt;/em&gt;, but I certainly won’t call myself a titan of finance, either.&lt;/p&gt;

&lt;p&gt;The deckbuilding aspect of the game is one of the greatest parts. Recently, to really shake things up, I’ve been building a wildly fun deck with &lt;code&gt;Mr. House, President and CEO&lt;/code&gt; as the commander.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F359euk3nj3ni0kv8qng0.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F359euk3nj3ni0kv8qng0.jpg" width="672" height="936"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The card is phrased in a way that assumes you’re rolling six-sided die, but in a real “the house always wins” mentality, these odds can also apply to other dice — including our beloved &lt;code&gt;d20&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;There’s plenty of cards in Magic that &lt;a href="https://scryfall.com/search?q=oracle:%22roll+%22+(game:paper)+legal:commander+prefer:best&amp;amp;as=grid&amp;amp;order=name" rel="noopener noreferrer"&gt;allow you to roll dice to determine the outcome&lt;/a&gt;, but I can only fit 100 cards in a Commander deck. The hard part becomes: which to put in? Which to take out? If my goal is to roll higher than 6 as often as possible, is it better to keep &lt;a href="https://scryfall.com/card/clb/12/contraband-livestock" rel="noopener noreferrer"&gt;a card that rolls &lt;code&gt;1d20&lt;/code&gt;&lt;/a&gt;, or &lt;a href="https://scryfall.com/card/afc/33/reckless-endeavor" rel="noopener noreferrer"&gt;a card that rolls &lt;code&gt;2d12&lt;/code&gt;&lt;/a&gt;? How many cards that &lt;a href="https://scryfall.com/search?q=oracle:%22roll+that+many%22+(game:paper)+legal:commander+prefer:best&amp;amp;as=grid&amp;amp;order=name" rel="noopener noreferrer"&gt;grant advantage&lt;/a&gt; would it take to make a &lt;code&gt;d6&lt;/code&gt; as valuable as a &lt;code&gt;d20&lt;/code&gt;?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The &lt;code&gt;2d12&lt;/code&gt; is a bit more complicated than these widgets handle, since we have to take into account the chance of getting to roll higher than 6 with a single card, but it ends up being:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;P(no rolls ≥ 6)&lt;/strong&gt;: 25%&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;P(1 roll ≥ 6)&lt;/strong&gt;: 50%&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;P(2 rolls ≥ 6):&lt;/strong&gt; 25%&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Some of the questions require different computation, but we can at least compare values. These types of visualizations can show the world of difference between the chance to roll a &lt;code&gt;d6&lt;/code&gt; and a &lt;code&gt;d20&lt;/code&gt;. Aiming for a 6 or higher, the &lt;code&gt;d20&lt;/code&gt; is 4.5x as likely to net the result than a &lt;code&gt;d6&lt;/code&gt; (75% vs 16%).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This interactive content can only be viewed on the &lt;a href="https://blog.chaoticgood.computer/content/notes/roll-advantage" rel="noopener noreferrer"&gt;live site&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This interactive content can only be viewed on the &lt;a href="https://blog.chaoticgood.computer/content/notes/roll-advantage" rel="noopener noreferrer"&gt;live site&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Funnily enough, the target number does matter here — while the &lt;code&gt;adv_8(d6)&lt;/code&gt; has roughly the same odds for rolling a 6, it actually has &lt;em&gt;higher&lt;/em&gt; odds of rolling a 4 than the d20. If my goal was to maximize robots, it wouldn’t be as bad — it’s the goal of “roll as high as possible, as often as possible” that changes the game. Not that it matters — there’s only three Commander-legal cards that allow you to roll advantage, and only two fit with Mr. House, so the most I could ever get out of a d6 would be triple advantage — 42% (zeep zorp), not even a 50/50.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This interactive content can only be viewed on the &lt;a href="https://blog.chaoticgood.computer/content/notes/roll-advantage" rel="noopener noreferrer"&gt;live site&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;None of that, though, takes into account the additional effects of the card, or the occasionally insane amount of dice some cards let you roll at once. It also doesn’t take into account the psychological game. Even if the odds aren’t optimal, wouldn’t it still be satisfying to play &lt;code&gt;Clown Car&lt;/code&gt; at &lt;code&gt;15d6&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8dzr1rtj16ikmqyrszbc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8dzr1rtj16ikmqyrszbc.jpg" width="672" height="936"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This interactive content can only be viewed on the &lt;a href="https://blog.chaoticgood.computer/content/notes/roll-advantage" rel="noopener noreferrer"&gt;live site&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;a href="https://blog.chaoticgood.computer/content/notes/roll-advantage" rel="noopener noreferrer"&gt;The Advantages of Advantage: Intro to Probability Convolutions&lt;/a&gt; was first published on Chaotic Good Computing, where you can reply to it on Bluesky or from your own site.&lt;/p&gt;

</description>
      <category>games</category>
      <category>data</category>
      <category>essays</category>
      <category>projects</category>
    </item>
  </channel>
</rss>
