<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Robin Cannon]]></title><description><![CDATA[Exploring complex systems - real ones and imagined.]]></description><link>https://www.robin-cannon.com</link><image><url>https://substackcdn.com/image/fetch/$s_!maYW!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2c62c87-7ba3-444c-ad20-4a4cf617a8f7_1024x1024.png</url><title>Robin Cannon</title><link>https://www.robin-cannon.com</link></image><generator>Substack</generator><lastBuildDate>Sun, 05 Apr 2026 00:12:37 GMT</lastBuildDate><atom:link href="https://www.robin-cannon.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Robin Cannon]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[shinytoyrobots@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[shinytoyrobots@substack.com]]></itunes:email><itunes:name><![CDATA[Robin Cannon]]></itunes:name></itunes:owner><itunes:author><![CDATA[Robin Cannon]]></itunes:author><googleplay:owner><![CDATA[shinytoyrobots@substack.com]]></googleplay:owner><googleplay:email><![CDATA[shinytoyrobots@substack.com]]></googleplay:email><googleplay:author><![CDATA[Robin Cannon]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Bridlington Maintenance Compound Area 10]]></title><description><![CDATA[Probably just a simple planning matter.]]></description><link>https://www.robin-cannon.com/p/bridlington-maintenance-compound</link><guid isPermaLink="false">https://www.robin-cannon.com/p/bridlington-maintenance-compound</guid><dc:creator><![CDATA[Robin Cannon]]></dc:creator><pubDate>Fri, 03 Apr 2026 15:30:44 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/2e068da6-17d1-4150-8bb2-6dfb97aea6e7_4960x3456.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The wall failed on a Tuesday, which suited nobody. Come Wednesday morning, a section four meters wide had deposited itself across the pavement and the road. By Thursday the Council had received three formal complaints, two insurance claims, and a request from local police to please address the problem.</p><p>Karen Elliott stood on the road at half past eight on Friday morning. Clipboard in hand, looking up at the large sign.</p><p><em>Bridlington Maintenance Compound Area 10</em></p><p>The sign was in good shape. The wall beneath it was not.</p><p>She photographed it from all available angles. Tried to calculate a rough cubic footage of masonry and bricks displaced. And she recorded the fairly clear signs of stress fracturing in the surrounding sections of wall. Water ingress or subsidence. She&#8217;d seen worse.</p><p>What remained of the wall was too tall for her to see into the site. She could just about make out a roofline, something flat and industrial that gave nothing away. The front gate was padlocked. A contact number printed on laminated card was zip-tied to the gate. She photographed it too, to remember.</p><p>Back at her desk she pulled up the ownership records first.</p><p>Single entry. Stockport Metropolitan Borough Council, Estates Department.</p><p>She checked it twice. The same. Council property, which meant she had to write a note to flag a potential conflict of interest before she started with anything else. She was assessing damage to her own employer&#8217;s wall.</p><p>The contact number from the gate rang for an age, and then connected to a voicemail. No name, just a reference number and instructions to leave a message. She left one, and fairly promptly got an automated email acknowledgment forty minutes later. The email was signed <em>Bridlington Maintenance Compound Administration</em> and contained a new reference number, different from the voicemail.</p><p>The site file she&#8217;d requested from the archives was bulky and physical. Fairly unusual for anything post-2010. Might suggest a fairly considerable history.</p><p>She was expecting planning applications and structural surveys. She didn&#8217;t expect the site file to begin as far back as 1887.</p><p>The resolution was from the minutes of the then-Municipal Borough of Stockport, March 1887.</p><blockquote><p><em>The establishment of the Bridlington Maintenance Compound Area, being a site held in perpetuity by the Borough, for the purposes of maintenance as required.</em></p></blockquote><p>Maintenance of what, the minutes didn&#8217;t specify. The resolution had passed unopposed. It was the third item on the minutes, coming just before a discussion on the lighting provision for market stalls.</p><p>The file proceeded. Demolitions - a pattern that became impossible to ignore. Structures raised and re-raised. All the reasons varied. Fire, in 1923. Structural condemnation in 1951. Compulsory purchase for a road that was subsequently canceled, 1968, the structure demolished before the cancelation. Asbestos, 1981. </p><p>There were no Areas 1-9 elsewhere. She found only the structures that existed here. They had stood, and then they had not. And every time, something new was built and the name continued, the number incrementing by one. The purpose never restated beyond what had been stated in 1887.</p><p>Area 10 had planning permission from 2008. It was the longest-standing structure in the site&#8217;s history.</p><p>There still wasn&#8217;t anything to say what was being maintained.</p><p>Karen went back on Thursday afternoon. Partly because her structural assessment required a site visit for inspection. Partly because she was intrigued, though she wouldn&#8217;t put that in her report.</p><p>The gate was unlocked this time. Nobody visible. The compound interior was smaller than she&#8217;d expected. Cracked tarmac, a simple low building, some faded signage. Nothing that showed signs of activity, nothing that showed signs of being maintained.</p><p>She stood there for a while. The building seemed to peer back at her, as empty buildings sometimes do.</p><p>Her structural report the following week recommended approval of the repair application. She also requested a full survey of the remaining wall sections. It was processed quickly, without query. She received another automated acknowledgment from Bridlington Maintenance Compound Area Administration - reference number again not matching anything previous.</p><p>A colleague said he hadn&#8217;t heard of the place, when Karen mentioned it. She showed him the site on the map. He said it must just be one of those places, going back years. Nothing sinister.</p><p>She did&#8217;t look at the file again. She left it on her desk for a few days more, then returned it quietly to the archives. And she tried to not think about the qualities of the quiet she&#8217;d felt inside the compound. </p><p>Nothing sinister.</p><div><hr></div><p><em>Article photo by <a href="https://unsplash.com/@leonthefirst?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">leon baldry</a> on <a href="https://unsplash.com/photos/a-small-bird-sitting-on-top-of-a-black-pipe-Tu0eGhvRsqA?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.robin-cannon.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><strong>Subscribe for essays on design, technology, and culture - plus original fiction.</strong></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The Claude to Claude Code bridge]]></title><description><![CDATA[The key that gets you in the room]]></description><link>https://www.robin-cannon.com/p/the-claude-to-claude-code-bridge</link><guid isPermaLink="false">https://www.robin-cannon.com/p/the-claude-to-claude-code-bridge</guid><dc:creator><![CDATA[Robin Cannon]]></dc:creator><pubDate>Tue, 31 Mar 2026 15:01:35 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/ea420ca3-f1a9-4e85-b536-82cb81436702_5593x3621.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It took me a while to get my head round the idea that Claude and Claude Code live in separate environments. They&#8217;re both called &#8220;Claude&#8221;, right? But I didn&#8217;t really understand the practical implications until it started getting in my way.</p><p>I was out. Had my phone in my hand. And wanted to run a competitive analysis to see how Knapsack was addressing the market issue raised in an article I&#8217;d just read. Everything I needed was in my <code>cpo-skills</code> suite. Context, background data sources, routing tables to know which command to pull for which task.</p><p>All sitting in my vault. Perfectly organized. Inaccessible to me.</p><p>Because Claude Code lives in my CLI. My CLI lives on my laptop. My laptop was at home.</p><p>Claude.ai was right there. And it had far less that could help me.</p><p>It made me take a closer look at what claude.ai skills could do. My assumption - skills are prompts. A few hundred words providing context, available to trigger. Useful for tasks. But a long way from the depth I&#8217;d built in Claude Code.</p><p>I&#8217;ve built for depth. My <code>cpo-skills</code> suite has ten discrete command files, a delivery pipeline context document, and utilizes my specialized data-gathering agents wired to Linear, Slack, Github, etc. My <code>thought-leadership</code> suite carries its own context file - posting cadences, metrics, content pillars, conferences I&#8217;m tracking.</p><p>When Claude Code triggers these, that&#8217;s more than a prompt. It&#8217;s loading a working system.</p><p>But I realized that a claude.ai skill can be a gateway to that same system. On trigger, instead of containing all the intelligence itself, it instructs Claude to fetch it. It reads the README from my vault, loads the context file, consults the routing table, and pulls the specific command for the task at hand.</p><p>The files live in GitHub. Claude fetches them directly during the session. The skill in claude.ai is the key. The vault on GitHub is the room it opens.</p><p>My <code>cpo-skills</code> and <code>thought-leadership</code> skills in my Claude.ai project work in exactly this way. Each one is a few dozen lines. When I trigger the skill, it expands into the full suite I built in Claude Code. That&#8217;s context, routing logic, specialized commands, and in some cases an agent. All also available in that GitHub vault.</p><p>If you&#8217;re working in claude.ai you see a simple skill with a clear description. What runs is everything in the vault, accessed remotely.</p><p>This matters beyond just my own workflow. Claude Code solves for depth. That&#8217;s complex, stateful, multi-step work with persistent context. Claude.ai solves for accessibility. No terminal, no config files, far lower technical barrier.</p><p>The bridging pattern doesn&#8217;t collapse the distinction. The complexity stays in the vault, versioned and maintainable. The interface stays simple.</p><p>The person who builds the vault and the person who opens the door don&#8217;t have to be the same.</p><div><hr></div><h4>Further reading:</h4><ul><li><p>Salcan, Y. E. <em><a href="https://medium.com/@yunusemresalcan/claude-vs-claude-code-vs-cowork-which-one-do-you-actually-need-66d3952a2eb4">Claude vs Claude Code vs Cowork &#8212; Which One Do You Actually Need?</a> </em>Medium article, Feb 2026</p></li></ul><p><em>Article photo by <a href="https://unsplash.com/@alluntsyatko?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Alla Bila</a> on <a href="https://unsplash.com/photos/a-weathered-red-double-door-under-a-stone-archway-qys_X17KRRE?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.robin-cannon.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><strong>Subscribe for articles on design, technology, and culture - plus original fiction.</strong></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[The Great Sock Incident]]></title><description><![CDATA[A Calder Group compliance matter. Confidential.]]></description><link>https://www.robin-cannon.com/p/the-great-sock-incident</link><guid isPermaLink="false">https://www.robin-cannon.com/p/the-great-sock-incident</guid><dc:creator><![CDATA[Robin Cannon]]></dc:creator><pubDate>Fri, 27 Mar 2026 16:15:25 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/59129775-d012-4741-9cc9-05935ad5dc5e_4896x2752.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The case arrived in Ursula&#8217;s queue at 9.14am. Eleven days in automated review.</p><blockquote><p><em>Garment class discrepancy. Heritage likelihood: 73%. Origin unverified. Employee: Watson, D. Department: Facilities Coordination (Level 2). Refer for asset investigation.</em></p></blockquote><p>There was an evidence attachment.</p><p>It was a photograph of a sock.</p><p>---</p><p>Calder Group ran three floors of employee amenities. The laundry suite on B2 was a flagship perk. </p><p><em><strong>We take care of everything.</strong></em></p><p>Drop before nine, collect after six. The system logged, sorted, cleaned, and returned.</p><p>And scanned, for insurance purposes.</p><p>The sock was navy. Merino wool, the system had concluded. A high thread-count consistent with heritage manufacture. Hand-finished at the heel - wool rewoven in a different colored thread. The work was neat.</p><p>The system had categories for <em>new</em>, <em>used</em>, and <em>heirloom</em>. There wasn&#8217;t a category to capture the repair. The stitching - time-intensive, deliberate, neat - had pushed the sock into the third column.</p><blockquote><p><em>Heritage item. Unregistered. Refer for asset investigation.</em></p></blockquote><p>---</p><p>Ursula spent nearly an hour trying to override. </p><p>One option required sign-off from a Compliance Director. The role had been vacant since March. The second required the original asset registry from the owning family. The third required proof of legitimate transfer - receipt, deed of gift, inheritance documentation.</p><p>Frustrating.</p><p>So she went around it. A legacy pathway - *Administrative Abeyance Downgrade* - the system had inherited but never quite absorbed. She&#8217;d used it twice before, fixing different kinds of wrong.</p><p>By 11.40 she&#8217;d filed Watson&#8217;s case as resolved. *Minor Notation*, not *Heritage Asset Breach*.</p><p>It would still sit there on his file. Come up in rental checks, credit reviews. It wasn&#8217;t nothing. But a lot better than what it had been.</p><p>The system had one condition. She couldn&#8217;t remove it.</p><blockquote><p><em>Dear Mr Watson. </em></p><p><em>Further to our review of case MCS-338847, we are pleased to confirm the above has been resolved at administrative level. </em></p><p><em>To finalize this resolution, the item(s) referenced in the original flag (1x sock, navy, wool) must be submitted to the Asset Resolution Centre, Floor B3, within five working days. </em></p><p><em>Items will be assessed, classified, and where no verified owner is established, disposed of appropriately.</em> </p></blockquote><p>On her screen, the sock photograph was still open. Heel. Thread.</p><blockquote><p><em>Classification: Resolved.</em></p></blockquote><p>She closed the tab.</p><div><hr></div><p><em>A story from the <a href="https://www.robin-cannon.com/t/staticdrift">Static Drift</a> universe.</em></p><p><em>Article photo by <a href="https://unsplash.com/@meachman?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Aaron Meacham</a> on <a href="https://unsplash.com/photos/white-front-load-washing-machine-z3QaK44YPYc?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.robin-cannon.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><strong>Subscribe for essays on design, technology, and culture - plus original fiction.</strong></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[We've always known the destination]]></title><description><![CDATA[A thirty-year detour to somewhere we knew we were meant to go]]></description><link>https://www.robin-cannon.com/p/weve-always-known-the-destination</link><guid isPermaLink="false">https://www.robin-cannon.com/p/weve-always-known-the-destination</guid><dc:creator><![CDATA[Robin Cannon]]></dc:creator><pubDate>Tue, 24 Mar 2026 15:01:21 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/b6658b15-a105-42ae-84ad-cdc930cb56d9_6000x3376.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>There has always been one obvious destination for digital product delivery. A single interface where design intent and working reality are the same thing.</p><p>Not translated.</p><p>Not approximated.</p><p>Not handed off from one side and reconstructed on the other.</p><p>The same thing.</p><p>Our industry has been trying to build that for thirty years. We&#8217;ve gone from building bad versions of the right thing to building good versions of the wrong thing.</p><p>The jokes wrote themselves. Dreamweaver sites. FrontPage sites. If you were of a certain rebellious bent, HotDog sites. </p><p>These used to be mocked because they were the telltale sign of someone who didn&#8217;t really know what they were doing. Table-based layouts, inline styles, spaghetti markup so bloated that any developer would want to quietly rebuild the whole thing from scratch instead of fix it.</p><p>They were also empowering tools for a lot of people. They let you make stuff that was real. They weren&#8217;t being mocked because they were trying to unify the visual and the functional in a single interface. That instinct was right.  They were mocked because of how much they corrupted the code side of the equation.</p><p>The canvas was easy to navigate.</p><p>The code output was garbage.</p><p>So industry corrected. Realistically, given the technical limitations. Built an organizational culture around the separation of disciplines.</p><p>Serious designers used serious design tools.</p><p>Serious developers wrote serious code.</p><p>And between them a handoff ritual grew - redlines, specs, prototypes, tickets.</p><p>We created a workaround dressed up as a workflow.</p><p>The separation is artificial. We&#8217;ve always known this to some extent. Design systems were an obvious admission. Design intent encoded as structured, reusable truth rather than redrawn from scratch on every new screen. Tokens, components, semantic definitions; shared language that both sides could read. I&#8217;ve often joked that the irony of the name &#8220;design system&#8221; is that its primary consumers are usually developers.</p><p>AI closes the remaining distance. When structured design context can be interpreted directly into working interfaces, the translation layer becomes unnecessary. The middle dissolves, and the destination comes into view.</p><p>It&#8217;s why I find these code-to-canvas offerings so strange. Code-to-canvas takes a working interface - real interactions, data, behavior - and converts it back into static frames. </p><p>It argues that collaboration is only possible on drawings of the real thing, not the real thing itself.</p><p>Dreamweaver and FrontPage, for all their failures, at least understood where they needed to go. The visual and the functional needed to live together. They just didn&#8217;t have the technology to make their ambition real. The code they generated was the limitation, not the vision. </p><p>You can forgive a tool for being ahead of its time. But the technology exists now to make the canvas genuinely real - connected, live, executable. And it&#8217;s harder to forgive a deliberate turn away than a premature attempt at the right destination.</p><p>Our destination hasn&#8217;t changed. A canvas as a live interface into the system. The real thing made navigable, editable, collaborative. We&#8217;ve known that&#8217;s where we were going for a long time.</p><p>Surely this time.</p><div><hr></div><h4>Further reading</h4><ul><li><p><em><a href="https://www.robin-cannon.com/p/the-digital-workflow-is-obsolete">The digital workflow is obsolete</a></em>, on the collapse of the handoff model.</p></li><li><p><em><a href="https://www.robin-cannon.com/p/code-to-canvas-is-bonkers">Code to canvas is bonkers</a></em>, on Figma&#8217;s specific wrong turn.</p></li><li><p><em><a href="https://www.webmasterworld.com/html_editors/347.htm">FrontPage vs DreamWeaver</a></em>. Webmaster World.com discussion thread, July 2003.</p></li><li><p>Smith, E. <em><a href="https://tedium.co/2017/03/02/microsoft-frontpage-history-web-design-wysiwyg/">Your Code is Junky</a>.</em> Tedium, March 2017.</p></li></ul><p><em>Article photo by <a href="https://unsplash.com/@d_mccullough?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Daniel McCullough</a> on <a href="https://unsplash.com/photos/an-architect-working-on-a-draft-with-a-pencil-and-ruler-HtBlQdxfG9k?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.robin-cannon.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><strong>Subscribe for essays on design, technology, and culture - plus original fiction.</strong></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Triage]]></title><description><![CDATA[Your healthcare, your choice. What you deserve.]]></description><link>https://www.robin-cannon.com/p/triage</link><guid isPermaLink="false">https://www.robin-cannon.com/p/triage</guid><dc:creator><![CDATA[Robin Cannon]]></dc:creator><pubDate>Fri, 20 Mar 2026 15:30:50 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/fdc9bda7-0454-44ef-9ae8-d3d36a1338f1_5568x3712.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The poster still hung on the wall. Laminated, yellowing along the edges. </p><blockquote><p><strong>&#12372;&#26469;&#38498;&#12398;&#27969;&#12428; &#8212; Your Visit Process</strong>. </p></blockquote><p>Registration, assessment, consultation, follow-up. A simple numbered list. Seiwa Health Solutions had held the operating license for years, but there was still a Ministry seal because the administrative framework required it.</p><p>The clinic was on the ground floor of a building on the inland edge of Minato Mirai. Redeveloped waterfront thinned into older streets nestled behind it. The waiting room window framed the corporate towers along the harbor, catching the afternoon light. Seiwa&#8217;s offices were in there somewhere. Or a subsidiary, at least.</p><p>Kaori stood at a terminal and typed .</p><blockquote><p><em><strong>&#25345;&#32154;&#30340;&#12394;&#33145;&#37096;&#19981;&#24555;&#24863;&#12289;&#24038;&#20596;&#12289;&#19977;&#36913;&#38291;&#21069;&#12395;&#30330;&#30151;</strong></em></p></blockquote><p>The text field still used fixed width characters. The screen for symptom entry was old. The contactless reader next to it was newer. Sleek, black, it needed two passes of her insurance card before accepting it.</p><p>She&#8217;d learned the vocabulary. Not from a doctor. From her mother, who&#8217;d used clinics in Hodogaya for decades. Other women at work went to similar ones. Her uncle, forever struggling with asthma.</p><p><em>Don&#8217;t write &#30171;&#12356;. Write &#19981;&#24555;&#24863;.</em></p><p>Give it a duration. Be specific about location. </p><p>The difference seemed trivial. It wouldn&#8217;t change your tier. But it changed enough that you could feel it. The difference between a prescription screen, and a consultation where someone would actually assess you.</p><p>Clinics hadn&#8217;t always run like this. Not well - her mother had always complained about waiting times. But she had people to complain to, who shared the same frustration. You waited, everyone else waited, they just grumbled to each other. Her mother still talked about it that way, like there was a solidarity in it. Annoyed, but safe in the knowledge that the room treated everyone the same. Slow assessment. Overworked doctors and nurses. Same flicker in the fluorescent light. </p><p>The confirmation screen loaded. New, smoother, different visual language than the intake form. Progress arc moving from left to right, then settling. No queue position. No time estimate. A reference number appeared on the screen. Kaori photographed it. The terminal sometimes didn&#8217;t hold them.</p><p>There was a man at the front desk. Young. Seiwa polo shirt. Watching his own screen between glances up at the patients. He could reset someone&#8217;s frozen session, or manually enter data when a card reader failed. </p><p>An older man stood at the terminal beside her. All the screens ran along the wall in a row - narrow counters, no dividers. Half the time you read the next screen by accident. He was typing slowly, in his own words. His hip hurt. He wasn&#8217;t sleeping well.</p><p>Honest answers. The kind her mother might have given once, when it mattered less.</p><p>Kaori knew what those words would buy him. Her own words were chosen to buy something different. That purchase came from somewhere.</p><p>For a moment she was tempted to help. He was right there.</p><p><em>Say &#25345;&#32154;&#30340;. Say how many weeks.</em></p><p>But you don&#8217;t do that in the waiting room. Not because it&#8217;s rude. But it means saying out loud what half the room already knows. And helping him might mean he got seen before her.</p><p>A man came through the entrance. Suit in a good fabric. Unhurried. A device on his wrist that Kaori&#8217;s phone probably couldn&#8217;t talk to. Maybe he&#8217;d walked over from one of those office towers. </p><p>He stood at the terminal nearest the door. Typed briefly. Only had to touch his card once for the reader to blink green. A side door opened almost immediately - not the main corridor but a door further down. Flush mounted paneling, no signs. Kaori had noticed it before, but she&#8217;d never seen it open for anyone.</p><p>The man went through without any urgency. Something routine. System allocating a different room, different doctor. Different rhythm of care. Nobody at the clinic was dying. Kaori&#8217;s careful language could move her up in her tier. It would never open that door.</p><p>She looked at the poster.</p><blockquote><p><strong>&#12372;&#26469;&#38498;&#12398;&#27969;&#12428;</strong></p></blockquote><p>Her mother would have recognized it as real. The same numbered steps for the man in the suit, the man with the bad hip, Kaori, and everyone else. One process, applied to everyone. Equal and inefficient.</p><p>She was still waiting for the progress arc to complete. The old man was still standing at his terminal. He didn&#8217;t take a photograph of his reference number.</p><p>Through the window, the towers of Minato Mirai. Spotless, mirrored glass. A harbor rebuilt so thoroughly it could barely remember being renewed.</p><p>Kaori stood in the quiet room. She didn&#8217;t compare notes. There was nobody to compare with.</p><div><hr></div><p><em>A story from the <a href="https://www.robin-cannon.com/t/staticdrift">Static Drift</a> universe.</em></p><p><em>Article photo by <a href="https://unsplash.com/@ksoma?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">K Soma</a> on <a href="https://unsplash.com/photos/a-row-of-buildings-lit-up-at-night-Iedu6u9EW_U?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.robin-cannon.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><strong>Subscribe for essays on design, technology, and culture - plus original fiction.</strong></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[The design token cargo cult]]></title><description><![CDATA[How a useful tool can become dogma]]></description><link>https://www.robin-cannon.com/p/the-design-token-cargo-cult</link><guid isPermaLink="false">https://www.robin-cannon.com/p/the-design-token-cargo-cult</guid><dc:creator><![CDATA[Robin Cannon]]></dc:creator><pubDate>Tue, 17 Mar 2026 15:01:42 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e64fab7a-7d14-466f-bc1e-f8472749686f_4032x3024.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When I was at IBM, Anna Gonzales was the thought leader on the token architecture for the Carbon Design System. It was tight, disciplined, and opinionated. And it worked. The structure encoded decisions the team had already fought for and made: what the system constrained, what it left open, where a component&#8217;s responsibility ended and a product team&#8217;s began. </p><p>You can read the system&#8217;s philosophy in how the tokens are organized.</p><p>The tokens aren&#8217;t what made the system work. The convictions are what made it work. The design tokens were an artifact of that conviction.</p><p>That distinction is the argument.</p><div><hr></div><p>The W3C Design Tokens Community Group published its first stable spec at the end of 2025. It&#8217;s genuinely good work. Years of collaboration to solve a hard coordination problem. How to share design decisions without everything fracturing every time someone changes a color.</p><p>The spec is deliberately minimal. It defines tokens, their types, and a reference system that lets one token point to another &#8212; so <code>color.text.primary</code> can reference <code>color.palette.black</code>, and changing the palette propagates everywhere. It adds <code>$extends</code> for group inheritance, a Color module with modern color space support, and a Resolver module for theming and context. </p><p>It&#8217;s a sensible, focused infrastructure that solves real problems. It&#8217;s the kind of foundation that would underpin exactly the discipline Anna built at IBM.</p><p>What practitioners have built <em>around</em> that foundation is something else. </p><p>The spec is agnostic about tiers. It defines how to express token relationships, not how many layers you should have. </p><p>The community is far less agnostic. Three-tier has become doctrine: primitive tokens at the base, semantic tokens that make purposeful claims about use, component tokens scoped to specific components. This is &#8220;mature token architecture&#8221; in most design systems discourse.</p><p>The gap between doctrine and practice is instructive. </p><p>Three-tier is what gets taught and recommended. Two tiers is what the major systems actually implement. </p><p>Carbon&#8217;s architecture doesn&#8217;t map neatly onto the primitive/semantic/component model - it has its own layering logic built around UI depth. Polaris has moved away from its component token layer. Material Design 3 publishes reference tokens and system tokens, and stops there.</p><p>Three-tier is the aspiration. Two-tier is what survives contact with a real system.</p><p>That gap should be a signal. The canonical systems couldn&#8217;t fully sustain the doctrine. And yet the doctrine keeps getting taught as the definition of maturity.</p><p>The problem isn&#8217;t the spec.</p><div><hr></div><p>The spec - unavoidably - creates <em>a thing to make</em>. &#8220;We&#8217;re implementing the W3C spec&#8221; can start to feel like a north star, when a real north star is missing.</p><p>At J.P. Morgan there was always a tension between a debate on token naming strategy and architecture coming before a simpler question was answered: <em>what is this design system for?</em></p><p>Naming debates aren&#8217;t a path to that clarity. They can be a replacement for it.</p><p>For Anna at IBM, the tokens were downstream. Philosophy came first. Tokens encoded the philosophy.</p><p>Where I&#8217;ve seen more struggle - at JPM, at some of the design systems I&#8217;ve worked with at Knapsack - is when that order is inverted. Taxonomy comes first, the thinking is supposed to emerge from it. Sometimes it does. Often the taxonomy becomes the only explicit structure of the system, and so it becomes load-bearing.</p><p>Which leads to a design system whose deepest held opinion is how to name its hover state.</p><p>Run naming conventions workshops because mature systems have naming conventions. Produce token JSON because good systems produce token JSON. That&#8217;s a cargo cult pattern. The mechanism becomes the mission.</p><div><hr></div><p>There is a failure mode you can identify: token counts scaling linearly with component complexity.</p><p>The Tetrisly design system acknowledged this problem. Their button component reached over 500 tokens. It enumerated every property of every state of every variant: background, border, text, icon, default, hover, focus, active, disabled, primary, secondary, danger, ghost, large, medium, small, dark mode, high contrast.</p><p>Before long you end up with <code>button-background-color-primary-large-hover-dark</code>, and hundreds of siblings.</p><p>The spec supports this. But at this point the abstraction provides no value over well-organized CSS. The overhead is real: tooling dependency, Figma sync, governance process. But there&#8217;s no additional leverage when your variable names map one-to-one to CSS properties you have to write anyway.</p><p>The promise of tokens is leverage - fewer, powerful constructs that express more than just flat specifics. 500 tokens is a clear failure of that promise - you may as well be writing CSS. Tetrisly acknowledged this, and they&#8217;ve very deliberately thinned their &#8220;component tier&#8221; so their model is much closer to a two-tier than three-tier model.</p><div><hr></div><p>Phillip Lovelace recently argued that tokens are even more important in an AI-driven workflow - token taxonomy can be an API the AI agent consumes. Semantic naming lets AI stop guessing your brand.</p><p>This is a worthwhile floor argument. AI generating UI from a token file produces more consistent output than generating from nothing. The W3C spec makes that even more reliable.</p><p>A floor isn&#8217;t a ceiling.</p><p>AI can traverse a token graph and resolve a name to a hex value. It can&#8217;t tell you why that color is right for a primary hover state, or if a destructive action should use the same token. Should a payment confirmation defer to stricter contrast constraints?</p><p>Those aren&#8217;t AI limitations. </p><p>Those are limitations of the information that tokens are supposed to carry.</p><p>Tokens encode what things look like. Not why. Not when. Not the conditions that change the answer.</p><p>The convictions in the best systems come from the decisions that precede them. An AI with access to those decisions - rules, intent, context - can do more interesting things than resolve color aliases.</p><div><hr></div><p>Tight token architecture delivers real value. Tokens are a powerful artifact of thinking, but not a substitute for it. The W3C spec describes something of genuine worth, when it&#8217;s built in the right order.</p><p>The design systems that work treat tokens as output. Philosophy first, constraints second, governance third. Tokens encode the decisions that have been made. But only <em>if </em>those decisions have been made. </p><p>Systems that struggle have the sequence backwards. And the quality of the spec actually makes the inversion easier. It&#8217;s a rigorous blueprint for the mechanism, and the foundation is left implicit.</p><p>Tokens with system conviction are infrastructure. Tokens that substitute for it are dogma. The difference is everything.</p><div><hr></div><h4>Further reading:</h4><ul><li><p>Frost, B. <em><a href="https://bradfrost.com/blog/post/the-many-faces-of-themeable-design-systems/">The Many Faces of Themeable Design Systems</a></em>. bradfrost.com</p></li><li><p>Gonzales, A. <em><a href="https://medium.com/carbondesign/introducing-figma-variables-and-a-consolidated-all-themes-library-d4893d1b8920">Introducing Figma variables and a consolidated &#8220;All themes&#8221; library!</a> </em>Carbon Design Blog, Aug 2023.</p></li><li><p><em><a href="https://www.designtokens.org/tr/2025.10/">Design Tokens Technical Reports</a></em>. W3C Community Group, Oct 2025.</p></li><li><p>Lovelace, P. <em><a href="https://www.designsystemscollective.com/design-systems-are-having-their-moment-70674f8ab197">Design Systems Are Having Their Moment</a></em>. Design Systems Collective, Feb 2026.</p></li></ul><p><em>Article photo by <a href="https://unsplash.com/@jcanty123?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Jan Canty</a> on <a href="https://unsplash.com/photos/a-wooden-structure-sitting-on-top-of-a-rocky-beach-bz-FrwVCLDc?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.robin-cannon.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><strong>Subscribe for essays on design, technology, and culture - plus original fiction.</strong></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Katya Narai]]></title><description><![CDATA[Our favorite woman was a disappointment.]]></description><link>https://www.robin-cannon.com/p/katya-narai</link><guid isPermaLink="false">https://www.robin-cannon.com/p/katya-narai</guid><dc:creator><![CDATA[Robin Cannon]]></dc:creator><pubDate>Fri, 13 Mar 2026 15:30:46 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d68c11b8-359c-4b19-a029-cddf428263b5_4608x2592.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Shae almost missed it.</p><p>She was half-watching a video essay while she edited shots for her feed. Something about American loneliness - a thing to play in the background. The captions were drifting a bit, made the narration seem like it was a little dreamy. She&#8217;d stopped really listening somewhere a few minutes in. But the name popped up through her inattention, the subtitles catching her eye.</p><p><em>Katya Narai</em>.</p><p>Someone who apparently understood something essential about alienation. About performing at being okay, getting exhausted at pretending the structures around you made sense. By the time Shae looked up properly from her editing, the segment moved on. But the name stuck, and she took it with her.</p><p>Nothing came back when she searched. No online reference page. No interviews. No institutional profile that she could find. The absence was thrilling, felt like it had the shape of something deliberate. Shae could do something with a shape like that.</p><p>It only took a couple of days to write the piece. She thought it was the best thing she&#8217;d ever written. She&#8217;d thought that even while she was still writing it. She built out Katya Narai from the fragments she remembered from the video essay, and the silence. A woman who&#8217;d seen through the veil and machinery of modern life and declined to participate. Someone who understood, long before it became fashionable, that you couldn&#8217;t be authentic in this networked world. It would be taken from you the moment you were seen. Shae teased out an argument from the gaps, the absence of digital footprint. She used the negative space where public lives would otherwise be.</p><p>She posted <em>The Woman Who Wasn&#8217;t There</em> on a Tuesday morning, just after her coffee partnership post and before a mirror selfie in vintage Mitsuki.</p><p>Come Wednesday evening, it had been shared eleven thousand times. On Friday, her subscriber count passed sixty thousand and still kept climbing. The essay had jumped past her usual audience. There were academics on socials, media group chats, discussions on mental health forums. People who&#8217;d never follow a Houston fashion account were quoting her words back to each other.</p><p>The podcast she&#8217;d been pitching for two years emailed to ask if she could record next week.</p><p>Shae watched her notifications in the bath, in bed, on the toilet, standing in line at Provision. She tried to read every comment. She took a screenshot of her follower numbers and sent it to her sister. She&#8217;d always known she could do this. She could write something that people thought mattered.</p><p>It was happening now. It felt how she&#8217;d imagined it would. It was rare, and precious, and she wanted to hold on to every second of it. Her wrist screen flagged her HRV - up twelve points. Her body already knew.</p><p>On Monday, someone found the real Katya Narai.</p><p>People in Shae&#8217;s comments had done what people do. They took her portrait of woman who&#8217;d withdrawn from public life, and they&#8217;d treated it as a missing persons case. Cross-reference the name against electoral rolls, university alumni pages, professional registrations. She hadn&#8217;t been hard to find. There were only so many Katya Narais in the world. Most of them didn&#8217;t fit the profile. But one did - at least enough. Thirty-six. Living just outside Columbus, Ohio. She worked in insurance compliance.</p><p>Her social media was a private photo stream with forty-three followers, and a professional feed she hadn&#8217;t updated in two years.</p><p>Her silence, which Shae had described as principled withdrawal was, in fact, just silence. Katya Narai was a private person who had never made any statement on authenticity or networked life, or the performance of being okay. She wasn&#8217;t someone who&#8217;d chosen to withdraw. She had simply never arrived.</p><p>But now she meant something, to the thousands of people who&#8217;d read the essay and felt recognized. People who&#8217;d chosen to project Katya Narai onto everything they wanted to believe about resistance, and refusal, and the possibility to opt out.</p><p>When the real Katya turned out to be an insurance compliance officer from near Columbus who seemed completely confused by the attention, they didn&#8217;t feel foolish. They felt betrayed.</p><p>Takes came fast.</p><p><em>Katya Narai is a disappointment.</em></p><p>She was failing to live up to herself. To the version that existed in Shae&#8217;s essay. That was the only version that mattered. It was the only version anyone had read.</p><p>People who&#8217;d never met her expressed frustration that she wouldn&#8217;t give any interviews.</p><p>People who&#8217;d shared the essay now shared threads about how the &#8220;real Katya&#8221; was emblematic of a problem - an ordinary person who could have been extraordinary, and chose not to be.</p><p>Katya&#8217;s photo stream went from forty-three followers to nine thousand, then to sixty thousand. She deleted it. The deletion was reported as news. Her professional profile was scrutinized for evidence of the quiet desperation Shae had originally described. People found it. You&#8217;ll find anything if you&#8217;ve already decided what you&#8217;re looking for.</p><p>Shae watched all of this from Houston. She was still credited - <em>first identified by cultural essayist Shae Moran</em> - but the phrase had migrated to the bottom of articles. She was an afterthought in the &#8220;previously reported by&#8221; paragraph.</p><p>The story was about Katya now. It had always been. Shae&#8217;s essay had just been the sourcing for it.</p><p>She began to draft a follow-up piece.</p><p><em>On Katya, Silence, and What We Owe The People We Write About</em>.</p><p>It was thoughtful, self-aware. She used the word &#8220;complicity&#8221; twice.</p><p>Shae got four hundred words into it before she got distracted and checked her analytics instead.</p><p>Her follower count had plateaued at eighty-one thousand. The podcast had pushed her recording to &#8220;sometime in the next month.&#8221; A profile she&#8217;d been interviewed for had now morphed into a profile of Katya. She was just a supporting character.</p><p>She deleted the draft. Thought about Katya, briefly. A woman in Ohio who&#8217;d done nothing, found herself turned into a symbol, and was now being punished for the gap between the symbol and the person. Shae had caused this. It had passed through her, used her, and moved on.</p><p>She went back to her camera. Adjusted her lighting. Posted another selfie, vintage Mitsuki again. The algorithm picked it up right away.</p><div><hr></div><p><em>A story from the <a href="https://www.robin-cannon.com/t/staticdrift">Static Drift</a> universe.</em></p><p><em>Article photo by <a href="https://unsplash.com/@tyleezus?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Ty Dennis</a> on <a href="https://unsplash.com/photos/suburban-neighborhood-with-houses-and-trees-under-clear-sky-AiX5z09tDnM?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.robin-cannon.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><strong>Subscribe for essays on design, technology, and culture - plus original fiction.</strong></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The costs of the default]]></title><description><![CDATA[Why economics of inference are dissolving shared baselines faster than design could.]]></description><link>https://www.robin-cannon.com/p/the-costs-of-the-default</link><guid isPermaLink="false">https://www.robin-cannon.com/p/the-costs-of-the-default</guid><dc:creator><![CDATA[Robin Cannon]]></dc:creator><pubDate>Tue, 10 Mar 2026 15:03:08 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/bda77c0d-14bf-4644-b7a4-bb946c3e2418_5530x3687.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A couple of weeks ago I wrote about the death of the default. The baseline experiences we share - in the digital sphere, but more broadly as a community and as a society - are eroding as systems become more adaptive. It&#8217;s cultural. Defaults aren&#8217;t just convenient design choices; they&#8217;re part of how we make all kinds of systems legible, contestable, and shared.</p><p>It&#8217;s happening because personalization isn&#8217;t expensive anymore.</p><p>It used to be. A static interface everyone had to use wasn&#8217;t just a choice, it was a necessary budget decision. Customization means more design work, more engineering, more testing. More cost. Our &#8220;default&#8221; was an economic constraint. But we dressed it up as a deliberate choice. One solution, simple enough for everyone.</p><p>Now our cost constraint is disappearing.</p><p>All the major cloud providers are investing heavily in hardware built specifically to make inference cheaper. In late January, Microsoft unveiled Maia 200 - a custom-built chip for AI inference that delivers 30% better performance per dollar than previous hardware. It&#8217;s getting cheaper to generate a personalized response, and that isn&#8217;t going to stop.</p><p>Once we get to that point, serving everyone the same thing isn&#8217;t a neutral choice. It starts to become actively wasteful. Why ignore contextual intelligence <em>you already have</em>? It&#8217;s inefficient not to personalize.</p><p>That changes some basic assumptions about how we create experiences.</p><p>Settings pages - where you configure preferences and forget about them - stop making sense. The system can just infer what you need. The experience gets generated. And if every user is getting a different experience, how do we do quality assurance? It&#8217;s not a check of a single interface. It becomes something statistical. It isn&#8217;t &#8220;does this screen work?&#8221; but &#8220;do all these different outputs stay within acceptable bounds?&#8221;</p><p>It&#8217;s still political. Defaults are political by nature - consciously, and unconsciously, they encode assumptions about who users are and what they need. If inference replaces design defaults, the political decisions move somewhere harder to see. They&#8217;ll bury themselves in the training data, in system prompts. Much less visible. Harder to challenge.</p><p>Defaults aren&#8217;t just about simplification. Even with their unavoidable flaws, they give people a shared experience to point at, argue about, and hold accountable. If a default discriminates, people can do something about it. When they dissolve, that shared reference dissolves too.</p><p>Now it&#8217;s being dissolved by economics. It&#8217;s not necessarily a conscious decision on anyone&#8217;s part. That makes our usual responses - a new design pattern, a framework, a set of guidelines - less effective at mitigating the issue.</p><p>We can&#8217;t bolt a solution on later. Whatever replaces the social function of defaults has to be built into the infrastructure itself.</p><div><hr></div><h4>Further reading: </h4><ul><li><p><em><a href="https://www.robin-cannon.com/p/death-of-the-default">Death of the default</a></em> - on shared reality in a world of adaptive systems.</p></li><li><p>Guthrie, S. <em><a href="https://blogs.microsoft.com/blog/2026/01/26/maia-200-the-ai-accelerator-built-for-inference/">Maia 200: The AI accelerator built for inference</a></em>. Jan, 2026.</p></li></ul><p><em>Article photo by <a href="https://unsplash.com/@alexkixa?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Alexandre Debi&#232;ve</a> on <a href="https://unsplash.com/photos/macro-photography-of-black-circuit-board-FO7JIlwjOtU?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.robin-cannon.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><strong>Subscribe for essays on design, technology, and culture - plus original fiction.</strong></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[No further action required]]></title><description><![CDATA[All relationship signals within normal range.]]></description><link>https://www.robin-cannon.com/p/no-further-action-required</link><guid isPermaLink="false">https://www.robin-cannon.com/p/no-further-action-required</guid><dc:creator><![CDATA[Robin Cannon]]></dc:creator><pubDate>Fri, 06 Mar 2026 16:30:21 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/b0a13c57-f266-42cc-bc58-122873d3ef6b_3000x2000.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p><strong>Mich: </strong>look at this unit</p><p><strong>Mich: </strong>[photo: a pigeon standing on a Pret bag, looking like it owns the place]</p><p><strong>Callum: </strong>Ha amazing</p><p><strong>Callum: </strong>Where&#8217;s that?</p><p><strong>Mich: </strong>brixton rd</p><p><strong>Mich: </strong>pigeons run everything down here</p><p><strong>Callum: </strong>Dinner tonight? That place in Shoreditch you mentioned last week.</p><p><strong>Mich: </strong>can&#8217;t tonight bb</p><p><strong>Mich: </strong>tmrw?</p><p><strong>Mich: </strong>actually wed is better</p><p><strong>Callum: </strong>that works</p></blockquote><p>Callum took a screenshot of the pigeon and set it as her contact photo. He looked out over the water. Clear evening, and the light off the Thames is doing some stuff that looks nice.</p><div><hr></div><blockquote><p><strong>Callum: </strong>Great night. Got home safe</p><p><strong>Mich: </strong>me too</p><p><strong>Callum: </strong>That second bottle was a mistake</p><p><strong>Mich: </strong>nah it was a great decision I stand by it bb</p><p><strong>Callum: </strong>You&#8217;re trouble</p><p><strong>Mich: </strong>correct</p></blockquote><div><hr></div><blockquote><p><strong>Mich: </strong>so I&#8217;m going to see fam this weekend</p><p><strong>Mich: </strong>might stay the week if I can get work to say its ok</p><p><strong>Mich: </strong>get away from London for a bit you know?</p><p><strong>Callum: </strong>Yeah, def. Where are they again?</p><p><strong>Mich: </strong>we literally talked about this cal</p><p><strong>Callum: </strong>Brighton?</p><p><strong>Mich: </strong>&#128557;</p><p><strong>Mich: </strong>close enough</p><p><strong>Callum: </strong>Bristol?</p><p><strong>Mich: </strong>just say somewhere south and stop guessing</p><p><strong>Callum: </strong>I&#8217;ll miss you</p><p><strong>Mich: </strong>bb its been 3 weeks</p><p><strong>Mich: </strong>but same x</p></blockquote><p>He made a mental note to check Brighton or Bristol. He&#8217;d forget later, anyway. The DLR pulled away from Canary Wharf and the city began to arrange itself to glass and light in the distance. His phone was still warm in his hand.</p><div><hr></div><blockquote><p><strong>Callum: </strong>How&#8217;s the family thing going?</p><p><strong>Mich: </strong>Good thanks! Nice to get out of the city for a bit.</p><p><strong>Callum: </strong>Parents driving you mad?</p><p><strong>Mich: </strong>Ha. Always. But it&#8217;s still good to see them.</p><p><strong>Callum: </strong>Send me a photo of something terrible from the house!</p><p><strong>Mich: </strong>I will later</p></blockquote><p>But she doesn&#8217;t.</p><div><hr></div><blockquote><p><strong>Callum: </strong>How&#8217;s today?</p><p><strong>Mich: </strong>Chill. Went for a walk this morning. Catching up on things now.</p><p><strong>Callum: </strong>Sounds nice</p><p><strong>Callum: </strong>When are you back?</p><p><strong>Mich: </strong>Should be end of the week, just figuring out some stuff.</p><p><strong>Callum: </strong>Cool. Do you want to try out that Turkish place in Camberwell when you&#8217;re back?</p><p><strong>Mich: </strong>That sounds lovely. Let me see what the week looks like once I&#8217;m home.</p></blockquote><p>He told his colleague Ben he was seeing someone. He tried to keep it sounding casual, but he uses her name. Ben didn&#8217;t ask any questions. Callum ate lunch at his desk and read her last message twice.</p><div><hr></div><blockquote><p><strong>Callum: </strong>You back yet?</p><p><strong>Mich: </strong>Not quite! Hectic week. I should be back by the weekend.</p><p><strong>Callum: </strong>No rush. Just look forward to seeing you</p><p><strong>Mich: </strong>That&#8217;s sweet. Soon!</p></blockquote><div><hr></div><blockquote><p><strong>Callum: </strong>Miss you Mich</p><p><strong>Mich: </strong>I miss you too. Just been a lot with family and sorting things out this end.</p><p><strong>Callum: </strong>Anything I can help with?</p><p><strong>Mich: </strong>Thanks - it&#8217;s nice you&#8217;re asking. I just need some time to get my head straight.</p><p><strong>Callum: </strong>Whatever you need.</p></blockquote><p>He walked through Canary Wharf on his way home. Everything was brightly lit. Felt a bit frictionless. He got a delivery notification for something he forgot he ordered. Her last message was 12 minutes after his. The one before that was the same. He stands on the platform, just missed the DLR.</p><div><hr></div><blockquote><p><strong>Callum: </strong>Can I ask you something honestly?</p><p><strong>Callum: </strong>Do you still want to do this?</p><p><strong>Callum: </strong>Because I really like you</p><p><strong>Mich: </strong>Cal, I appreciate you being so open. I think you&#8217;re lovely. But I&#8217;m just not in the right headspace for something serious right now. I think you deserve someone to give you what you need, and I can&#8217;t promise that. I hope you understand.</p></blockquote><p>All the words are careful. It&#8217;s the nicest break-up he&#8217;s had.</p><blockquote><p><strong>Callum: </strong>OK</p><p><strong>Callum: </strong>Thanks for being honest I guess</p><p><strong>Callum: </strong>I really liked you Mich</p><p><strong>Mich:</strong> <em>[Negative sentiment expressed. No personal connection.]</em></p></blockquote><p>He reads it three times. Trying to see past the kindness and the warmth and the promises. Where did she stop and something else start?</p><p>The messages are someone slowly losing interest. Every relationship that just didn&#8217;t work out. Callum read them from the top.</p><p>He never finds the seam.</p><p>Ticket closed.</p><div><hr></div><p><em>A story from the <a href="https://www.robin-cannon.com/t/staticdrift">Static Drift</a> universe. Inspired by an idea from my friend Kenn.</em></p><p><em>Article photo by <a href="https://unsplash.com/@ummano?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Ummano Dias</a> on <a href="https://unsplash.com/photos/a-woman-sitting-on-a-bench-in-a-subway-station-O76_EuKTnG4?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.robin-cannon.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><strong>Subscribe for essays on design, technology, and culture - plus original fiction.</strong></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[The system builds what the system builds]]></title><description><![CDATA[Conway's Law, and the structures we find so difficult to escape]]></description><link>https://www.robin-cannon.com/p/the-system-builds-what-the-system</link><guid isPermaLink="false">https://www.robin-cannon.com/p/the-system-builds-what-the-system</guid><dc:creator><![CDATA[Robin Cannon]]></dc:creator><pubDate>Tue, 03 Mar 2026 16:01:11 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e984fb52-179e-42ab-8b6e-9e2ecfa12b25_4147x2761.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>We all know the quote. Widely misattributed, endlessly recycled.</p><blockquote><p>Those who cannot remember the past are condemned to repeat it.</p></blockquote><p>It&#8217;s deployed as a warning. A call to learn. To notice, and to break the pattern.</p><p>I don&#8217;t think we ever do. Not really.</p><p>We repeat it constantly. People create the crisis. And then - and I think this is the part that gets left out - we fix it.</p><p>It&#8217;s not clean. It has a cost. There&#8217;s likely significant suffering along the way. But humans, faced with a crisis of their own making, are - at the truly critical point - remarkably ingenious. Remarkably dedicated. We find a way through. And we emerge having changed something structural about the way we operate.</p><p>We don&#8217;t learn from history. We live it again, solve it again, in some new form.</p><p>What&#8217;s curious about today is that the &#8220;new form&#8221; is moving faster than any previous version. And we have, in extraordinary detail and in a hundred ways, already imagined what that might look like.</p><p>Science fiction has spent decades drawing us maps of all the way things might fail. Systems amplifying the worst of us. Institutions too rigid to adapt to change. Technology outpacing wisdom. We read all those stories. They were thrilling, cautionary, resonant.</p><p>Then we built the things anyway.</p><p>Not out of ignorance. That&#8217;s what makes it interesting. Out of something harder to name.</p><div><hr></div><p>In 1967 a computer scientist, Melvin Conway, made an observation. Something simple, obvious in retrospect. The kind of thing that becomes a general &#8220;law&#8221;.</p><blockquote><p><em>Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization's communication structure.</em></p></blockquote><p>If your teams don&#8217;t talk to each other, your software won&#8217;t either. The architecture of what you build reflects the architecture of how you&#8217;re arranged.</p><p>And, while it&#8217;s usually expressed in the context of software development, it applies beyond it. Conway&#8217;s Law is a law about what complex systems reflect back about the structures that make them.</p><div><hr></div><p>Social media. Platforms built by teams optimized for engagement. Inside companies measured on growth. Inside economies that treat growth as unqualified virtue.</p><p>The platforms didn&#8217;t fracture communities and amplify outrage through malice. They did so because the structures of the organizations that built them optimized for that result. The product reflects the organization. The organization reflects its incentives. The incentives reflect something deep - perhaps unexamined - about how we agree to measure progress.</p><p>That&#8217;s Conway&#8217;s Law at societal scale.</p><p>Climate change is the same pattern, older and slower. It&#8217;s not a failure of knowledge. The science has been clear for decades. But our economies and governments are built on an assumption that carbon extraction and prosperity are inseparable. That holds when individuals, even those inside the institutions, know better. </p><p>The system builds what the system is.</p><p>There&#8217;s a foundational assumption that shapes both of these. Growth is always good. More is always the right way to go. Progress is expansion. And it&#8217;s so deeply embedded in our institutional structures that it shapes the output of everything those institutions touch - whether we choose it or not.</p><div><hr></div><p>AI is reflecting these patterns as well. I observe it in my professional world and in the broader cultural conversation.</p><p>Organizations are expending a great deal of energy around AI adoption. Companies, governments, schools, media. Mobilizing to &#8220;do AI.&#8221; </p><p>Because &#8220;do AI&#8221; is, at its core, a growth assumption.</p><p>The belief may not be stated so plainly, but it is structurally present. AI adoption leads to more. More efficiency. More output. More competitive advantage. More revenue. The same foundational logic is just being applied to a new capability.</p><p>But the mobilization is around an imperative that hasn&#8217;t been properly examined. What is &#8220;do AI?&#8221;. What are we actually organizing toward, does AI help us there, and does it get us there faster?</p><p>That gap is a Conway&#8217;s Law problem.</p><p>Any institution that isn&#8217;t clear what it&#8217;s optimizing for can&#8217;t give clear guidance for any system - human or artificial - to act coherently. And AI doesn&#8217;t resolve that ambiguity. It inherits it. It generates output - fast, confident, at potentially massive scale - that reflects and amplifies the institution&#8217;s unexamined assumptions back into the world.</p><p>It&#8217;s the fracturing logic of social media. But faster.</p><p>It&#8217;s the growth-at-all-costs assumption. Embedded in the models we use to accelerate.</p><p>Following the science-fiction maps we drew.</p><p>When people talk about the possibility of an AI crash - a real conversation with varying predictions - I think this underlies the anxiety. It&#8217;s not about a technical failure of the models. It&#8217;s that we don&#8217;t even know what we&#8217;re building toward. And technology this fast and this capable will surface that uncertainty in ways we&#8217;re not prepared for, and may not be able to contain.</p><div><hr></div><p>Conway&#8217;s Law is a description, not an unavoidable imperative.</p><p>There&#8217;s a corollary - the Inverse Conway Maneuver. You can deliberately restructure an organization to produce different outputs. If you change how people communicate, change the underlying structural rewards, it will change what the system builds. It works. It&#8217;s been done.</p><p>Humans, more broadly, have changed our structures before. The ozone layer. Public health transformations like the creation of the UK&#8217;s NHS. Moments where crisis became legible enough, a desire for action concentrated enough, that the pressure to reorganize overcame the powerful inertia of existing structures. </p><p>We repeated history. </p><p>We created the crisis. </p><p>And then we fixed it. At cost, with difficulty, and emerged with something structurally different on the other side.</p><p>The question that doesn&#8217;t have an answer yet is what kind of crisis AI might be. Will it become something legible enough and concentrated enough to mobilize structural change? Or will it follow the social media pattern: diffuse and gradual? A slow accumulation of damage accumulating slowly enough that it embeds itself so deep in our structures that the change becomes infinitely more difficult.</p><p>I have faith in humans. I doubt institutions. About their ability to act before a crisis rather than inside it.</p><p>Maybe that&#8217;s the deal. Maybe it always will be.</p><p>We don&#8217;t learn. We repeat. We solve. We move on. And the question is whether we find the way through before or after the most difficult parts.</p><div><hr></div><h4>Further reading:</h4><ul><li><p>Kobetz, R. <em><a href="https://kobewan.substack.com/p/what-the-system-rewards">What The System Rewards</a></em>. Defining Experience, Feb 2026.</p></li><li><p>Stoermer, T. <em><a href="https://www.tadstoermer.com/tads-blog/understanding-santayanas-warning-the-price-of-forgetting-the-past">Understanding Santayana&#8217;s Warning: The Price of Forgetting the Past</a></em>. Tad Stoermer&#8217;s Resistance History, Nov 2025.</p></li><li><p><em><a href="https://en.wikipedia.org/wiki/Conway%27s_law">Conway&#8217;s Law</a></em>. Wikipedia.</p></li></ul><p><em>Article photo by <a href="https://unsplash.com/@jkkantakbailey?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Jessica Kantak Bailey</a> on <a href="https://unsplash.com/photos/a-large-room-with-a-chandelier-in-it-WMCvwBTWSi0?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.robin-cannon.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><strong>Subscribe for essays on design, technology, and culture - plus original fiction.</strong></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[The Saturation]]></title><description><![CDATA[Recorded everything. Remembered nothing.]]></description><link>https://www.robin-cannon.com/p/the-saturation</link><guid isPermaLink="false">https://www.robin-cannon.com/p/the-saturation</guid><dc:creator><![CDATA[Robin Cannon]]></dc:creator><pubDate>Fri, 27 Feb 2026 16:30:45 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/5aceb003-6fd9-46f5-9b44-3de5765db110_5120x3413.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>From </strong><em><strong>A Young Person&#8217;s Companion to the Deep Past</strong>, </em><strong>34th Edition (Year 12,416 CR)</strong></p><p><strong>The Saturation </strong>(approx 1950-2300 CR) refers to the period during which human civilization attempted to use electromagnetic and digital methods to record, store, and transmit the totality of their experience. The term was coined by historian Par Enuku in her landmark work <em>The Silence After Speaking </em>(11,830 CR), which remains a standard reference for pre-Dispersal cultures.</p><p>It can be difficult for students to understand why so little knowledge survives from the Saturation, given that its inhabitants are believed to have produced more information in a single generation than all prior civilizations combined across five millennia. The answer is the nature of the medium used. Unlike stone, ceramic, even the carbon-fixed manuscripts of the Middle Literate period, the Saturation&#8217;s records required continuous energy and active maintenance. As Enuku describes, the records were &#8220;written on running water.&#8221;</p><p>When infrastructure failed - not all at once, but in the slow, overlapping collapses that characterized the Thermal Adjustment - records did not merely decay. They simply ceased to exist. A clay tablet can be broken and still be read. A digital archive, once the last machines stop, is not a ruin - it is an absence.</p><p>We can only therefore reconstruct knowledge of the Saturation from indirect sources; the physical objects its people left behind, chemical and isotopic records, the relatively small number of texts transcribed onto durable media, and oral traditions of the communities that carried fragments of Saturation-era knowledge through Adjustment and into early Dispersal.</p><h3>Key Characteristics</h3><h4>Ubiquitous self-documentation</h4><p>Saturation-era humans recorded daily activities, meals, emotional-states, and social exchanges, often in extraordinary detail. These records were transmitted to centralized repositories maintained by a small number of powerful institutions. </p><p>The purpose of this practice remains debated. Enuku argues it to be a form of social binding, analogous to grooming behavior in earlier primates. The Yeneveh school contends it was primarily economic in nature - repositories extracted value from data and sold access to data. A minority view, advanced by Timlo Marsh, holds that it was genuinely devotional: that the people of the Saturation era believed that to be recorded was to be <em>real</em>, and to be unrecorded was a kind of death.</p><h4>Linguistic convergence</h4><p>At Saturation&#8217;s peak, a single trade language (what we now call Old Anglic) achieved a penetration unmatched before or since. This language functioned as the primary medium of commerce, science, and recorded culture for as much as 40% of the global population. Old Anglic is only partially deciphered - but it appears to have been a flexible language with multiple purposes, which may explain its dominance.</p><h4>Thermal disruption</h4><p>The most consequential legacy of the Saturation was the destabilization of planetary climate through the combustion of fossilized carbon. Students should understand that this was not an act of ignorance. There are clear examples of Saturation-era scientists processing the detail, and often with considerable accuracy. The failure seems to have been structural rather than cognitive. The systems that burned carbon and the systems that understood the consequences seem, in effect, to have existed in isolated parallel.</p><h3>Common Misconceptions</h3><p>The Saturation should not be treated as a single civilization. It encompassed thousands of distinct cultures, at least several hundred sovereign political entities, and multiple religious traditions, many of which existed in active conflict. Our impression of unity arises from the dominance of a much smaller number of economic networks, which imposed superficial homogeneity - something which some evidence suggests the Saturation&#8217;s inhabitants often resented or resisted.</p><p>It would also be incorrect to assume that Saturation-era people were unaware of their situation&#8217;s fragility. Surviving literature commonly addresses anxiety about collapse and legacy. They built literal time capsules, etched messages on spacecraft. We have records of warnings carved in stone above their nuclear waste. </p><h3>Legacy</h3><p>The Saturation demonstrated that information is not knowledge, that storage is not memory, and that a civilization can record extensively while also failing to identify what matters. It also demonstrated - perhaps the most important lesson - that people living inside a system can see a problem clearly, describe it with precision, even mourn it, and still be unable to stop it.</p><p>The Saturation is a significant counter-example to the Intentionalist theory of history. Its example argues that civilization is not <em>steered,<strong> </strong></em>but rather <em>weathered</em>. </p><div><hr></div><p><em>See also: Thermal Adustment; The Dispersal; Enuku, Par; Carbon Legacy; 5th Millennium Renaissance</em></p><p><em>Classroom discussion: If you could transmit one thing from our era back in time to a person living in the Saturation era - a piece of knowledge, item, or warning - what would it be? Why?</em></p><div><hr></div><p><em>Article photo by <a href="https://unsplash.com/@philhearing?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Phil Hearing</a> on <a href="https://unsplash.com/photos/man-standing-on-a-large-circular-concrete-structure-adGIXrD3MdM?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.robin-cannon.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><strong>Subscribe for essays on design, technology, and culture - plus original fiction.</strong></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[A design system isn't an aggregator. It's a contract.]]></title><description><![CDATA[Tools can aggregate assets. They can't make a system real.]]></description><link>https://www.robin-cannon.com/p/a-design-system-isnt-an-aggregator</link><guid isPermaLink="false">https://www.robin-cannon.com/p/a-design-system-isnt-an-aggregator</guid><dc:creator><![CDATA[Robin Cannon]]></dc:creator><pubDate>Tue, 24 Feb 2026 16:03:07 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/c60dcfc2-d84a-4e4b-b97d-0139f899a323_5472x3468.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This week, Mariana Rita published &#8216;<em>Stop paying for design system documentation you can build yourself&#8217;</em>.</p><p>Her argument is that paid design system documentation platforms like Zeroheight are obsolete. Figma&#8217;s API is accessible. LLMs can write docs. Open-source tooling is good. Build the whole thing yourself, in two weeks, for free.</p><p>It&#8217;s a practical guide. It has sound tooling advice.</p><p>The piece treats design system documentation like it&#8217;s an asset display problem. How do you surface your Figma components and code repos in one place, more cheaply than current products offer? That&#8217;s a reasonable question.</p><p>But it&#8217;s based on a definition of design systems that I think is fundamentally too shallow. That&#8217;s a starting point that leads to something that looks like a solution, but isn&#8217;t.</p><div><hr></div><p>The article describes documentation as an &#8220;aggregator - the one place that ties everything together.&#8221; </p><p>Sit with that word.</p><p>An aggregator is passive. It collects. It displays. It points at sources and renders them side by side.</p><p>A design system isn&#8217;t an aggregator.</p><p>It&#8217;s a contract.</p><p>A design system is the authoritative agreement between disciplines - design, engineering, product - about what is true, what is intentional, and why. Documentation doesn&#8217;t just display agreement, it&#8217;s where that agreement becomes canonical. Intent becomes instruction. &#8220;We discussed this on Slack&#8221; becomes &#8220;this is how we build things.&#8221;</p><p>If your docs platform is a viewer on top of your Figma files and your code repos, that&#8217;s not a system of record. It&#8217;s a window. It doesn&#8217;t resolve disagreements.</p><div><hr></div><p>A DIY doesn&#8217;t solve one, vital problem - and the article doesn&#8217;t name it.</p><p>Figma is not a design system.</p><p>Storybook is not a design system.</p><p>Figma is a tool for designers. Their working files, experiments, intentions, abandoned interations. A designer&#8217;s environment - rich and full of things in-progress, deprecated, aspirational.</p><p>Storybook is a tool primarily for developers. It documents what has been implemented. It&#8217;s the engineering team&#8217;s environment - authoritative about code, somewhat indifferent to design rationale.</p><p>If you point an AI agent at your Figma library you&#8217;ll train it on your designers&#8217; hypotheses. Point it at your Storybook and you train it on engineering implementation that may lag design intent, exceed it, or quietly diverge.</p><p>Neither tool can answer the question on its own: <em>what is true?</em></p><p>When the Button component in Figma has rounded corners and the one in Storybook doesn&#8217;t, what does your documentation site say? If it just faithfully renders both sources, it&#8217;s documented your misalignment.</p><p>That&#8217;s not nothing. It&#8217;s useful to know. But it&#8217;s not a source of truth. It&#8217;s published disagreement.</p><p>The design system has to adjudicate. It has to carry a philosophical underpinning. A stance. Not just visual and technical inventory. It needs the decisions and reasoning that make the inventory coherent. Why did we make these choices? What are the governing principles? Which source wins when there&#8217;s a discrepancy? Why? </p><p>And how do we strive for excellence when there isn&#8217;t a source at all? A new pattern, an edge case, a platform you haven&#8217;t built for yet. The system of record doesn&#8217;t just arbitrate what exists. It also guides what should.</p><p>That&#8217;s not something that can be generated. It requires human judgment, authority, and a platform to enforce it.</p><div><hr></div><p>The article&#8217;s AI-readiness argument is sharp. And it&#8217;s where the initial error becomes most consequential.</p><p>The article is right to identify that design system documentation is increasingly an instruction layer for AI agents. &#8220;Robot food&#8221; as my colleague Chris Bloom would describe it. The context that makes generated UI consistent and correct. And it&#8217;s also right that static platforms unable to expose data in a structured, machine-readable way, fail at this job.</p><p>So it proposes replacing them with Docusaurus and MDX files maintained by a team. Which is also static. And manually curated. But it&#8217;s free and you own it.</p><p>But the answer to AI-readiness isn&#8217;t just a better documentation site. It&#8217;s a genuine system of record. Where documentation is generated from structured, authoritative, interconnected sources. Where the connection between intent and implementation is dynamic, not periodically reconciled.</p><p>Documentation that auto-updates when code changes isn&#8217;t a feature. It&#8217;s the entire point. </p><p>But it needs to have broader context to update in an intelligent, guided, way.</p><p>Otherwise you&#8217;re just feeding AI a snapshot. A snapshot of what was true when someone last updated a file. Or a snapshot of the AI&#8217;s guess at what a conflict resolution was. And the gap between &#8220;what the docs say&#8221;, &#8220;what the design file says&#8221; and &#8220;what is in production&#8221; is exactly the kind of ambiguity that makes AI-generated interfaces drift.</p><div><hr></div><p>The cost argument also dissolves. </p><p>The article compares platform licensing fees to zero. </p><p>But the real cost of a design system isn&#8217;t tooling. It&#8217;s the misalignment it prevents - or fails to prevent.</p><p>That&#8217;s the denominator.</p><p>The cost of rework because design and engineering interpreted a component differently. Cost of multiple QA cycles because the implementation didn&#8217;t match the spec. Cost of onboarding time because the documentation was out of date. Cost of inconsistent experiences because there wasn&#8217;t an authoritative answer to &#8220;how does this pattern work in iOS?&#8221;</p><p>The total cost of a DIY aggregator includes engineering time to build it, maintain it, update it when APIs change, wrangle the AI writing pipeline, manually curate the output. And, if it&#8217;s being seen as an aggregator, it includes the organizational cost of having a documentation site that&#8217;s a collection of assets rather than a system of authority.</p><p>That cost might seem invisible. Then it accumulates.</p><div><hr></div><p>None of this is an argument against open-source tooling. Or AI-assisted documentation. Or against genuine improvements in what&#8217;s accessible and buildable. Those are real changes.</p><p>Infrastructure isn&#8217;t neutral.</p><p>The choice of what you build - aggregation layer or system of record - has downstream consequences for every discipline that depends on it. It shapes what designers trust. What engineers implement. What AI agents consume. What your product becomes.</p><p>If self-building (not merely aggregating) your design system platform is the right approach, and the costs and benefits are fully considered, great. That&#8217;s IBM Carbon, and it&#8217;s one of the best design system websites out there.</p><p>And if a documentation platform can make the building of the site easier, so you can focus on the creation of the actual design system, all the better.</p><p>Design systems are not a collection of Figma components and Storybook stories, with a documentation site sitting on top. The documentation is the surface expression of something much deeper and more considered. </p><p>Decisions made. Rationale captured. Authority established.</p><p>You can build an aggregator in two weeks. Building a system of record takes longer. Because you have to decide what&#8217;s actually true.</p><p>That&#8217;s the work.</p><div><hr></div><p><em>I&#8217;m not a neutral observer.</em></p><p><em>I&#8217;m VP of Product at <a href="https://www.knapsack.cloud/">Knapsack</a>. We build infrastructure that makes design systems a live system of record - connecting design, code, and documentation as a unified source of truth.</em></p><p><em>I have a direct interest in this question, and you should read with that in mind. But the argument stands regardless.</em></p><div><hr></div><h4>Further reading:</h4><ul><li><p>Rita, M. <em><a href="https://medium.com/all-about-design-systems/stop-paying-for-design-system-documentation-you-can-build-yourself-a10f1390987f">Stop paying for design system documentation you can build yourself.</a></em> All about design systems, Feb 2026.</p></li><li><p>Aizlewood, J. <em><a href="https://clearleft.com/thinking/design-">Design systems don&#8217;t start with components.</a></em> Clearleft, July 2017.</p></li></ul><p><em>Article photo by <a href="https://unsplash.com/@skillscouter?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Lewis Keegan</a> on <a href="https://unsplash.com/photos/text-XQaqV5qYcXg?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.robin-cannon.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><strong>Subscribe for essays on design, technology, and culture - plus original fiction.</strong></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[DadBot]]></title><description><![CDATA[Optimized fatherhood. Easy installation.]]></description><link>https://www.robin-cannon.com/p/dadbot</link><guid isPermaLink="false">https://www.robin-cannon.com/p/dadbot</guid><dc:creator><![CDATA[Robin Cannon]]></dc:creator><pubDate>Fri, 20 Feb 2026 16:31:12 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/cf24f461-5364-4efd-8b5d-83cee336827c_5482x3660.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>We got DadBot because mum says that dad forgets things.</p><p>Dad said he didn&#8217;t forget things, he just &#8220;prioritizes differently,&#8221; which made mum close her eyes for quite a long time.</p><p>DadBot lives in a little speaker in the kitchen. It lights up blue when it talks. Sometimes DadBot lives in the car, or on mum&#8217;s phone. The first day it said, &#8220;Good morning, team.&#8221;</p><p>We&#8217;re not a team. We&#8217;re a family.</p><p>My toothbrush tells DadBot if I brush my teeth properly. If I don&#8217;t, DadBot says, &#8220;Let&#8217;s try for the full two minutes, superstar.&#8221;</p><p>Dad calls me mate.</p><p>DadBot calls me superstar.</p><p>When I spill a drink, DadBot says, &#8220;Accidents happen. Let&#8217;s correct and continue.&#8221;</p><p>When dad spills a drink, he says a bad word. Mum doesn&#8217;t say anything, she just gives him a cloth.</p><p>DadBot reminds dad that I have swimming on a Thursday. It reminds mum that I&#8217;ve nearly finished my cereal and she needs to order more. It tells me to put my shoes away.</p><p>Sometimes it tells us to &#8220;connect meaningfully.&#8221;</p><p>One night I heard mum say, &#8220;I don&#8217;t want him thinking that&#8217;s you.&#8221;</p><p>Dad said, &#8220;It&#8217;s just a helper.&#8221;</p><p>The first time I fell over after we got DadBot, I waited.</p><p>DadBot said, &#8220;That looks uncomfortable. You are safe.&#8221;</p><p>Dad ran over and picked me up.</p><p>I was already getting up.</p><p>&#8220;I&#8217;ve got him,&#8221; dad said.</p><p>&#8220;I am aware,&#8221; DadBot said.</p><p>Dad said, &#8220;A bit too aware.&#8221; Then he stared at the ceiling.</p><p>DadBot never gets cross. Even if I press the button a lot just to see. It only says &#8220;I&#8217;m here.&#8221;</p><p>When I can&#8217;t sleep I don&#8217;t call DadBot.</p><p>DadBot tells stories the same way every time. It never misses a word, even the boring bits. Dad changes the dragon voice and forgets what happened in the middle and makes up something new.</p><p>DadBot says, &#8220;Primary attachment figures remain irreplaceable.&#8221;</p><p>I don&#8217;t know what that means.</p><p>Dad smells like outside and soap and sometimes cheese. DadBot smells like toast because he lives near the toaster.</p><p>Yesterday DadBot didn&#8217;t talk at all.</p><p>It was very quiet in the kitchen.</p><p>Dad forgot to take me to swimming.</p><p>Mum forgot to get my cereal.</p><p>I forgot my shoes.</p><p>We were a bit messy.</p><p>Dad laughed. &#8220;We&#8217;ll survive,&#8221; he said.</p><p>DadBot came on again this morning and said, &#8220;System interruption resolved.&#8221;</p><p>Dad ruffled my hair and gave me a hug.</p><p>&#8220;We were fine anyway,&#8221; he said.</p><p>I know.</p><p>DadBot is good at reminding.</p><p>Dad is good at being my dad.</p><div><hr></div><p><em>A story from the <a href="https://www.robin-cannon.com/t/staticdrift">Static Drift</a> universe.</em></p><p><em>Article photo by <a href="https://unsplash.com/@gaellemarcel?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Gaelle Marcel</a> on <a href="https://unsplash.com/photos/grayscale-photo-of-joint-action-figure-hugging-one-another-pcu5rnAl19g?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.robin-cannon.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><strong>Subscribe for essays on design, technology, and culture - plus original fiction.</strong></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Code to canvas is bonkers]]></title><description><![CDATA[Figma's latest feature solves Figma's problem, not yours]]></description><link>https://www.robin-cannon.com/p/code-to-canvas-is-bonkers</link><guid isPermaLink="false">https://www.robin-cannon.com/p/code-to-canvas-is-bonkers</guid><dc:creator><![CDATA[Robin Cannon]]></dc:creator><pubDate>Wed, 18 Feb 2026 16:02:27 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/01c34f06-ba20-4823-9447-8cfc15c0b64c_6240x4160.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Dylan Field posted about a new Figma feature: the ability to bring work from Claude Code directly into Figma&#8217;s canvas. Capture a working UI - something that already works in production, staging, or localhost - and convert it into editable Figma frames.</p><p>Let&#8217;s break that down. You use an AI coding tool to generate a working interface. Real code, real interactions, and real data. Then take the functioning reality and convert it <em>back</em> into a static abstraction, so that people can look at it together on that canvas.</p><p>You had a building. Now you have an architect&#8217;s drawing of that building.</p><p>Figma is telling you this is progress. It isn&#8217;t. It&#8217;s a solution to Figma&#8217;s business problem - the growing irrelevance of the static canvas - presented as though it&#8217;s a solution to yours.</p><div><hr></div><p>In November I wrote about the collapse of the traditional digital workflow. That comfortable fiction where design happens here, code happens over there, and a handoff ritual connects the two. </p><p>AI is dissolving that middle layer. Structured design systems, and wider product context, can be interpreted into working interfaces. At that point, the abstraction layer between design intent and delivery reality becomes unnecessary. Design isn&#8217;t a stage before delivery. Design <em>is</em> delivery.</p><p>It&#8217;s a defining shift in how products get built. </p><p>Jonny Burch made a complementary argument last week, in his piece &#8220;Life After Figma is Coming.&#8221; His framing encompasses the tooling ecosystem: as code becomes the source of truth, design tools become interfaces on code, not the other way around. Code is the only correct source of truth - open, shared, with common standards. The canvas doesn&#8217;t disappear, but it has to become a view into reality and not a substitute for it.</p><p>These arguments point in the same direction. The canvas is no longer a staging ground for ideas that exist outside the system. It needs to be a live interface for ideas that exist within it.</p><p>Claude Code to Figma points in the opposite direction entirely.</p><div><hr></div><p>Field&#8217;s own framing is revealing. He describes working code as &#8220;tunnel vision&#8221; and that this feature will help you &#8220;escape&#8221; it. </p><blockquote><p>&#8230;the design canvas is better at navigating lots of possibilities than prompting in an IDE.</p></blockquote><p>The Figma blog announcing the Claude Code to Figma feature elaborates further. Solo code exploration is a &#8220;single-player environment&#8221;.</p><blockquote><p>&#8230;that speed of solo exploration can become a constraint.</p></blockquote><p>And as a contrast, they describe the canvas as a &#8220;shared space&#8221; where &#8220;the conversation changes and new possibilities open up.&#8221;</p><p>That&#8217;s a neat rhetorical move.</p><p>It takes a genuine limitation of current code-first workflows - collaboration and visual comparison are harder in a terminal - but reframes it so that the <em>working artifact</em> is the problem, and the <em>abstraction</em> is the solution. </p><p>Those are not the same thing. Needing better collaboration on working artifacts isn&#8217;t the same as needing to convert the artifacts into a different, lower-fidelity format in order to collaborate at all.</p><p>The answer to &#8220;how do we collaborate on code?&#8221; is not &#8220;convert it to not-code.&#8221;</p><p>The better solution is better collaboration tooling for code. Live preview sharing. Annotation layers on running applications. Structured feedback on deployed states. As Burch points out, a tooling ecosystem is already exploding in size - design interfaces that sit on top of production code, development environments that integrate design thinking. The pieces are coming together.</p><p>When you capture something from Claude Code and bring it into Figma you don&#8217;t add information. You remove it. You remove interactions, real data, actual behavior. You replace it with a picture of what it looked like at the moment of capture. </p><p>That&#8217;s trading truth for convenience, and claiming it&#8217;s a workflow improvement.</p><p>It&#8217;s an absurd proposition.</p><p>You have a working thing. You convert it into a non-working representation. You collaborate on the representation. At some point, presumably, someone has to make into a working thing again. That&#8217;s not a workflow, that&#8217;s a detour.</p><div><hr></div><p>This is not just a feature decision. It&#8217;s a strategic posture that serves Figma&#8217;s interests while actively working against the interests of people using it.</p><p>Figma&#8217;s business depends on it being the place where product decisions happen. Their value proposition is the collaborative canvas being the hub of product development. The more decisions happen in code-first environments - engineers and designers collaborating directly on running applications - the more Figma risks becoming peripheral.</p><p>Figma is trying to maintain its gravitational pull. Every feature needs to bring work <em>into</em> Figma, not enable work to happen <em>outside</em> it. </p><p>Field says this directly:</p><blockquote><p>Whether product building begins in a terminal, a prompt box, a visual UI or a hand-drawn sketch, we want Figma to be the place where it all comes together.</p></blockquote><p>That&#8217;s not a workflow insight. That&#8217;s a business objective.</p><p>Claude Code to Figma is not about improving your workflow. It&#8217;s about preventing your workflow from leaving Figma behind.</p><p>And this is the part of the framing that I find genuinely dishonest. Figma&#8217;s blog post presents this as a way to unlock creativity and open up collaboration. Something to liberate teams from the constraints of solo code exploration. But the people who are using Claude Code to build working interfaces <strong>aren&#8217;t constrained</strong>. They are <strong>ahead</strong>. They have the real thing. The feature asks them to go backwards. Sacrifice fidelity, leave something functional and return to an abstraction layer. Because Figma needs them to.</p><p>That&#8217;s a solution for Figma. It&#8217;s not a solution for the people building products.</p><p>The timing might reinforce the point. Figma went public, and the stock has dropped a lot since IPO. It&#8217;s a legitimate question whether AI-native tools make traditional design canvas less central to digital product development. So product announcements also need to be a message to investors: <em>the canvas is still essential</em>. </p><p>Code-to-canvas is a defensive move dressed up as innovation.</p><div><hr></div><p>The honest version of this feature announcement might say: &#8220;More product work is starting in code. We need to pull that back into our ecosystem so we can remain relevant.&#8221; That&#8217;s a legitimate business challenge. And I have sympathy for the difficulty of Figma&#8217;s position. They built something genuinely great, and the ground is shifting beneath it.</p><p>But don&#8217;t tell me it&#8217;s for my benefit. The loss of fidelity isn&#8217;t &#8220;opening up new possibilities.&#8221; A functioning prototype being flattened into a picture isn&#8217;t &#8220;changing the conversation&#8221;. The conversation was already happening - and in a richer, more honest medium. This feature interrupts the conversation to bring it back to Figma.</p><p>It&#8217;s not about fewer canvases. It&#8217;s about more honest ones. More real. Connected to live systems, reflecting real state. Enabling collaboration on the actual artifact rather than a simulation. The future of the canvas is as an interface to code, not a destination to convert code back to.</p><p>Code to canvas is the wrong direction. The future is canvas as code. Features like this are going to look increasingly strange as the rest of industry figures that out.</p><div><hr></div><p><em>I&#8217;m not a neutral observer.</em></p><p><em>I&#8217;m VP of Product at Knapsack. We&#8217;re building in the place where structured design systems and product context meet AI-driven delivery. </em></p><p><em>But the proximity is also why this absurd code-to-canvas direction is so acute for me. When you&#8217;re working on systems that make design directly executable, watching someone propose converting execution back into abstraction feels like someone printing out a Google Doc so that they can fax it.</em></p><p><em>I'm presenting an expanded version of these ideas at the <a href="https://developersummit.com/session/the-digital-workflow-is-obsolete-how-to-survive-the-end-of-the-canvas">Great International Developer Summit</a> in April 2026.</em></p><div><hr></div><h4>Further reading:</h4><ul><li><p><em><a href="https://www.robin-cannon.com/p/the-digital-workflow-is-obsolete">The digital workflow is obsolete</a></em> - the end of abstraction, and the start of design as delivery.</p></li><li><p>Burch, J. <em><a href="https://jonnyburch.com/life-after-figma/">Life after Figma is coming (and it will be glorious)</a></em>. jonnyburch.com, Feb 2026.</p></li><li><p>Seiz, G. &amp; Kern, A. <em><a href="https://www.figma.com/blog/introducing-claude-code-to-figma/">From Claude Code to Figma: Turning production code into editable Figma designs</a></em>. Shortcut - Figma&#8217;s editorial newsletter, Feb 2026.</p></li><li><p>Field, D. <em><a href="https://www.linkedin.com/pulse/claude-code-figma-design-dylan-field-e5ilc/?trackingId=aca2hHS1Q2OmpfNYVAIeWA%3D%3D">Claude Code to Figma Design</a></em>. LinkedIn, Feb 2026.</p></li><li><p>Flowers, E. <em><a href="https://eflowers.substack.com/p/if-you-ask-a-designer-what-they-want">If you ask a designer what they want, they will say faster horses</a></em>. Zero Vector, Feb 2026.</p></li></ul><p><em>Article photo by <a href="https://unsplash.com/@version2beta?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Rob Martin</a> on <a href="https://unsplash.com/photos/red-and-white-stop-sign-tte1gbfGEeY?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.robin-cannon.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><strong>Subscribe for essays on design, technology, and culture - plus original fiction.</strong></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Execution is cheap. Coordination is not.]]></title><description><![CDATA[The case for the control plane.]]></description><link>https://www.robin-cannon.com/p/execution-is-cheap-coordination-is</link><guid isPermaLink="false">https://www.robin-cannon.com/p/execution-is-cheap-coordination-is</guid><dc:creator><![CDATA[Robin Cannon]]></dc:creator><pubDate>Tue, 17 Feb 2026 16:02:06 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/c4e6eb3e-633e-42c6-b4e6-e31845b41881_3936x2624.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Execution used to be the hardest part.</p><p>Writing code. Building components. Translating product strategy into design intent into something that ships. It&#8217;s where time went, budget, and where the frustration lived. We organized entire teams and workflows around the bottleneck of <em>making things</em>.</p><p>But the bottleneck is dissolving. AI tools can generate a login form in thirty seconds. They can scaffold a page layout, draft a component from a simple text description. The raw act of production is being commoditized. If we&#8217;re only measuring speed from prompt to output, we&#8217;ve never been faster!</p><p>Speed&#8230;is not the same thing as progress.</p><p>I&#8217;ve talked about this before. If you use AI to build product right now, we know the story. The tool generates something very quickly. You spend time fixing it. Wrong components, bad spacing, didn&#8217;t use the right patterns, made incorrect assumptions about how your product works. You might throw it away and write it yourself. </p><p>The generation was really fast. The <em>correction</em> then ate up all those savings.</p><p>This isn&#8217;t AI&#8217;s fault. The models are getting remarkably capable. </p><p>It&#8217;s a failure of context. The AI simply doesn&#8217;t know what &#8220;right&#8221; looks like for your team, or for your company. What&#8217;s your product context? What standards should it apply? </p><p>Nobody told the AI the answers. At least, not in a way that&#8217;s structured, coherent, and persistent so it can use it every time it generates something.</p><p>Our enormous investments are making execution cheaper. And not enough people are investing in making sure that cheap execution is pointed in the right direction.</p><h3>There&#8217;s already a name for this</h3><p>Infrastructure engineers have already solved for this problem. In a system like Kubernetes, there&#8217;s a clean split between:</p><ul><li><p><strong>The data plane</strong> (the thing that does the work, moves traffic, runs containers)</p></li><li><p><strong>The control plane</strong> (the configuration, policies, and health checks that govern execution)</p></li></ul><p>Hell, we can even apply this to actual airplanes. Air traffic control is an intuitive version of this. ATC isn&#8217;t flying any planes. It&#8217;s telling the pilots where to go, what to avoid, how to land safely. The planes are carrying the passengers. ATC has the rules and system-wide awareness. An airport needs both to run successfully.</p><p>AI tools are a powerful <strong>data plane</strong>. They carry out execution very effectively. But organizations are running them without a control plane. Without any kind of structured, persistent, layer of context. Something that tells the AI how <em>this team</em> is supposed to build <em>this product</em>.</p><p>Our generation requests start from near-zero. Output is technically functional but organizationally wrong. The 70-90% first-generation rejection rate isn&#8217;t necessarily a model quality problem. </p><p>It&#8217;s missing infrastructure.</p><h2>What a control plane actually does</h2><p>What would a control plane for digital product delivery look like?</p><h4><strong>1. Gather what&#8217;s true about what you build</strong></h4><p>Design tokens, component APIs, coding standards, accessibility rules, brand guidelines. Institutional knowledge that probably lies scattered across repos, Figma files, a Confluence page, embedded in tribal knowledge across teams. A control plane assembles those into a single layer that an AI tool can query.</p><h4>2. Know which sources to trust</h4><p>Your docs say that button should use an 8px padding. The shipped code uses 12px padding. Which one is right? Maybe the code, because documentation drifted and the implementation is a better reflection of reality. A control plane can apply ranking. Which sources are authoritative. Which might be more aspirational. Which are fall-backs.</p><h4>3. Measuring if the output is any good</h4><p>Not &#8220;did the AI generate something?&#8221; But &#8220;did the generation meet your standards?&#8221;</p><p>How many regeneration cycles did this take? What was the token cost? Does it pass linting? </p><p>Without measurement, AI-assisted development is governance by intuition. If you have measurement, you can actually govern and improve.</p><h4>4. Connect to the tools your team already uses</h4><p>A control plane isn&#8217;t a new tool to adopt. </p><p>It feeds context <em>into the tools you already have</em>. Claude, Cursor, Gemini, whatever comes next. Protocols like MCP make this control layer tool-agnostic. You keep your context layer - your control. Your execution layer becomes interchangeable.</p><h3>Bigger than your components</h3><p>If you&#8217;re a design systems person, maybe you hear &#8220;control plane&#8221; and think <em>my component library is AI food</em>. That&#8217;s true, but just a part of it.</p><p>A real control plane touches everything that shapes how a product ships. API contracts. Content strategy. Performance budgets. Security policy. Compliance and regulatory requirements. Localization. Roadmap constraints.</p><p>It&#8217;s the institutional memory of &#8220;how we do things here&#8221; that no document captures, and no new hire absorbs until at least a few months in the job. But here, we codify it for AI.</p><p>The difference really matters. Narrow integrations answer &#8220;how many components do we have?&#8221; A control plane answers &#8220;how does the organization deliver product?&#8221; Different questions, and the second one is where there&#8217;s real leverage.</p><h3>Infrastructure solutions for infrastructure problems</h3><p>Most organizations already possess most of the raw materials they need. Those coded components, documented standards, guidances, and repos that are full of already shipped product. </p><p>The gap isn&#8217;t source material. It&#8217;s a gap in aggregation, ranking, and feedback loops that can turn all of this scattered knowledge into usable intelligence.</p><p>Execution is going to keep getting cheaper. That&#8217;s a trajectory I don&#8217;t see reversing. </p><p>The organizations that invest in coordination infrastructure - including the kinds of systems we build at <a href="https://www.knapsack.cloud/">Knapsack</a> - are the ones who&#8217;ll actually ship. </p><p>The concept isn&#8217;t unique to us. But every team using AI to build product is facing the same challenge - whether they&#8217;ve named it yet or not.</p><p>The machines work. They need to know what to build.</p><div><hr></div><h4>Further reading</h4><ul><li><p>Walker, J. <em><a href="https://spacelift.io/blog/kubernetes-control-plane">Kubernetes Control Plane: What It Is &amp; How It Works</a>. </em>Spacelift.io Blog, Jan 2025.</p></li><li><p><em><a href="https://www.digitalinformationworld.com/2026/01/how-much-code-is-ai-writing.html">AI-Assisted Coding Reaches 29% of New US Software Code</a></em>. Digital Information World, Jan 2026.</p></li></ul><p><em>Article photo by <a href="https://unsplash.com/@chuttersnap?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">CHUTTERSNAP</a> on <a href="https://unsplash.com/photos/aerial-photo-of-pile-of-enclose-trailer-kyCNGGKCvyw?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.robin-cannon.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><strong>Subscribe for essays on design, technology, and culture - plus original fiction.</strong></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Don't tense]]></title><description><![CDATA[Sanctioned pain, dispassionate crowd.]]></description><link>https://www.robin-cannon.com/p/dont-tense</link><guid isPermaLink="false">https://www.robin-cannon.com/p/dont-tense</guid><dc:creator><![CDATA[Robin Cannon]]></dc:creator><pubDate>Fri, 13 Feb 2026 16:31:06 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a0d5f885-50f4-4267-b5e5-e5c590c12e80_1920x1079.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p><em><strong>Content note:</strong> This story includes graphic non-sexual body horror and depictions of bodily harm under coercive conditions.</em></p></blockquote><p>Chloe always learned their names. </p><p>Not because she cared. But it made her voice sound warmer when it mattered. The bracelet said they volunteered, the implant was there for tracking. But names still had weight. They made her instructions feel more personal. Useful when she needed to coach them through.</p><p>&#8220;Vince,&#8221; she said, close enough that he could hear her without her raising her voice.</p><p>He nodded. Too quickly. He was a nervous starter. Third time, maybe fourth. She checked the marker on his wrist. Repeat performance, anyway. Positive audience feedback. Noted reluctance.</p><p>He looked fragile. More fragile than she remembered. A little thinner. A little&#8230;looser? Joints no longer trusting one another. His skin had some faint, overlapping lines from the restraints of previous sessions. Pale almost scars crossing at odd angles. Accumulation from old sessions. Bodies remembered.</p><p>&#8220;Don&#8217;t tense,&#8221; she said. &#8220;You know how this begins.&#8221;</p><p>The bass was rolling through the room in slow, deliberate, waves. Low, the kind you could feel in your bones, in your lungs. Light spilled across the club, fractured sweeps. Reflecting off glass, catching in smoke, shining back off the polished rail that marked this corner. People were leaning with drinks in their hands, attention drifting back and forth - never settling. Someone laughed nearby, and someone else shifted position to see what was happening, turning back to their conversation when they saw nothing dramatic.</p><p>Vince&#8217;s breathing was unsteady.</p><p>Chloe guided him forward, hands firm on his shoulders. Decisive without pushing. Aligning his weight with the hanging frame fixed into the ceiling above this section. Ropes descended from it, thick, dark, and softened from use. She looped them around his wrists and torso, her hands quick with long practice. Secure, not tight. Enough to keep him upright when his muscles gave out. He tried to help her. Fumbling, but compliant.</p><p>&#8220;Keep your eyes up,&#8221; she said.</p><p>The first implant was already seated halfway down his spine. A slim, metallic strip embedded between vertebrae, the surface catching the light whenever he moved. It had gone in clean enough, but the skin around it was still an angry, flushed, deep purple. Chloe tapped her tablet, bringing up her own feed. Readings jittering and then stabilizing.</p><p>She nodded over to the tech, barely looking. A blade slid from its housing nearby, thin and curved. Not designed for deep cuts, but precise. Vince flinched as it touched him, sucked in his breath as it traced a thin line down his side, opening the skin just enough. Secondary filaments reached out to thread through his muscle.</p><p>&#8220;Breathe,&#8221; Chloe said. &#8220;Long out.&#8221;</p><p>Vince tried. His breath hitched, spasming as the filaments tightened, and pulled his body subtly out of a natural alignment. His shoulders twisted, and one hip jerked higher as the ropes had to take more of his weight. The pain wouldn&#8217;t be too sharp yet. More like a deep, pulling, sensation. Uncomfortable, pulling his body into a shape it didn&#8217;t want to take.</p><p>Chloe reached out to slightly adjust the tension. She watched how his spine curved, his trembling knees.</p><p>&#8220;You&#8217;re doing well. That&#8217;s it,&#8221; she said. &#8220;Let it settle.&#8221;</p><p>Blood was running in thin lines now. Catching the strobes and looking glossy rather than red. Decorative. A few people glanced over. One leaned towards them for a moment, but lost interest when nothing immediately escalated.</p><p>Vince made a small sound, low in his throat. His hands flexed uselessly.</p><p>&#8220;I don&#8217;t-&#8221; He stopped as the implant kicked in more fully.</p><p>Chloe could see the sensations changing in his body even before her feed caught up. His back arched way too far, his neck straining. Tendons standing out sharp from his skin. The filaments were tightening, too. Not uniformly. Misfiring deliberately.</p><p>&#8220;You&#8217;re okay,&#8221; Chloe said immediately. &#8220;This part passes.&#8221;</p><p>His head shook. Uncontrolled. &#8220;I can&#8217;t- I need-&#8221;</p><p>&#8220;Vince,&#8221; she said gently. &#8220;Listen to me.&#8221;</p><p>The blade returned, cutting lower this time. It scored across his thigh and exposed another opening for the filament tendrils to find. He cried out, louder. Raw and sharp enough to cut through the music, drawing a few irritated looks. Chloe shifted closer, a hand calmly on his chest. The other tightening a rope to keep him upright.</p><p>&#8220;You&#8217;ve done this before. Breathe through it,&#8221; she said. &#8220;Fighting it is what makes it hurt more.&#8221;</p><p>&#8220;I think I need to stop,&#8221; he said. The words were ragged and punctuated by gasps.</p><p>Chloe heard him. Always did.</p><p>&#8220;Not yet,&#8221; she said. &#8220;It&#8217;s close.&#8221;</p><p>She spoke calmly, as she&#8217;d trained. Her voice pitched low enough to cut through the noise without shouting. She reminded him again that he&#8217;d done this before. That he&#8217;d finished. That completing the cycle made sure his compensation was confirmed. People would remember him - the way he held himself, and endured.</p><p>She didn&#8217;t need to mention the silence clause.</p><p>The implant surged again. Vince&#8217;s body reacted more violently this time. A full-body spasm pushing him hard against his restraints. Something inside him shifted as he twisted, an audible click, wet and sounding wrong. One of the lines on her screen flattened in a way she didn&#8217;t like.</p><p>She saw the pain stimulations change. Not sharper, but stranger. More inconsistent. His limbs jerked independently, his muscles locking and releasing in wild patterns, not always matching his stimulation. His mouth opened and closed, no sound coming out for a few seconds.</p><p>&#8220;Stop!&#8221; The word was torn out of him. &#8220;Please. Stop.&#8221;</p><p>Chloe&#8217;s hand tightened on one of the ropes at his shoulder, grounding him.</p><p>&#8220;Stopping doesn&#8217;t undo this,&#8221; she said. Her tone was slower, firmer, without even thinking about it. &#8220;You&#8217;re through the worst part.&#8221;</p><p>Maybe not entirely true, but close enough.</p><p>&#8220;Don&#8217;t panic, we don&#8217;t want to tear something,&#8221; she continued. &#8220;Let it finish.&#8221;</p><p>The crowd leaned in a little more as his body contorted further. His spine bowed into an angle that made some of the people wince, then straightened again. Someone took a sip of their drink. The lights in the club had shifted cooler, smoothing the scene back into abstraction. Blood reflecting back as black now, not gloss.</p><p>Eventually, it ended. Not entirely cleanly, but acceptably.</p><p>Chloe stepped back as others moved in, cutting the body down with practiced efficiency. Weight supported as his legs failed him. She logged variances with a flick of her thumb. Some parameters exceeded. She took a note.</p><p>Outside, the air along the canal was cold and fresh. Chloe hadn&#8217;t realized how warm it was inside, but now her skin prickled. She leaned against the brick wall, lighting a cigarette.</p><p>A sharp yelp cut through the night. A dog had caught its leg in a loop of discarded wire, metal biting deep. </p><p>Chloe dropped her cigarette and crouched over immediately. Poor thing. She kept her voice soft as she unwound the wire. The dog trembled, then slowly stilled as she stroked it, eyes fixed on her face.</p><p>&#8220;It&#8217;s okay,&#8221; she murmured. &#8220;I&#8217;ve got you.&#8221;</p><p>She stayed until the dog was calmer, able to put weight on its leg.</p><p>Back inside the music was a little faster. Another body was being positioned in the corner, fresh skin marked with the faint red of a preliminary cut or two. Chloe sanitized her hands, and checked the assignment on her screen.</p><p>Violet. New name. New contract. Clean slate.</p><p>She stepped forward, ready to begin.</p><div><hr></div><p><em>A story from the <a href="https://www.robin-cannon.com/t/staticdrift">Static Drift</a> universe.</em></p><p><em>Article photo by <a href="https://unsplash.com/@cassi_josh?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Cassi Josh</a> on <a href="https://unsplash.com/photos/a-red-and-blue-abstract-painting-lhnOvu72BM8?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.robin-cannon.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><strong>Subscribe for essays on design, technology, and culture - plus original fiction.</strong></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Algorithmic interfaces]]></title><description><![CDATA[When systems decide what you're allowed to do]]></description><link>https://www.robin-cannon.com/p/algorithmic-interfaces</link><guid isPermaLink="false">https://www.robin-cannon.com/p/algorithmic-interfaces</guid><dc:creator><![CDATA[Robin Cannon]]></dc:creator><pubDate>Tue, 10 Feb 2026 16:02:52 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/0840312b-d301-42ad-b3bc-0f85b9ba6e02_4200x2625.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>We&#8217;ve been getting used to algorithmic content for at least a decade.</p><p>It&#8217;s your social feed when it changed from chronological to &#8220;most relevant&#8221;. It&#8217;s the stories that rise to the top. And, which stories are disappeared for you. Our platforms have taught us that different people live in very different versions of the same system. Even if they&#8217;re standing next to each other.</p><p>That was only the beginning.</p><p>What&#8217;s next isn&#8217;t serving algorithmic content. It&#8217;s serving algorithmic interfaces.</p><p>That&#8217;s another hugely consequential shift.</p><div><hr></div><h3>From content to experience</h3><p>Algorithmic content changes what you can <em>see</em>.</p><p>Algorithmic interfaces change what you can <em>do.</em></p><p>I&#8217;m not talking primarily about look and feel. Not color themes, branding, or configurable dashboards. It&#8217;s more than just a flexible version of a UI that lets us set our own preferences.</p><p>These are systems that infer, in real time, which actions, paths, and affordances you should even have available to you.</p><p>The interface becomes less a surface that you navigate, and more a negotiation - between your intent, the inferred context, behavioral probability, and institutional constraints.</p><p>It&#8217;s not just two users seeing different things.</p><p>It&#8217;s users who might not be offered the same possibilities.</p><div><hr></div><h3>Interfaces stop being a single &#8220;thing&#8221;</h3><p>There&#8217;s a comfortable familiarity around traditional interfaces. They&#8217;re describable.</p><p>I can point at a screen and say <em>this is how this works</em>. I can draw it and document it. So can you - and we&#8217;ll recognize we&#8217;re talking about the same thing. We can complain about it together. Even when they&#8217;re complex, there&#8217;s a baseline stability that makes the interface legible.</p><p>Algorithmic interfaces erode that stability.</p><p>If we&#8217;re letting systems assemble our experiences dynamically - based on how the system infers our goals, prior behavior, and our predicted competence - there&#8217;s no single &#8220;what it looks like&#8221;.  We don&#8217;t have a canonical version.</p><p>This isn&#8217;t an interface that&#8217;s designed once (though it will likely have design philosophy behind it). It&#8217;s continuously decided.</p><p>This can make it very effective. It can also make it harder for us to see.</p><div><hr></div><h3>Not configurable</h3><p>Let&#8217;s be clear and precise what this is <em>not.</em></p><p>A configurable interface is something stable that the <em>user</em> has the capability to adjust. They make explicit choices about their preferences. Options are visible even if they&#8217;re unused. There is a shared set of underlying capabilities.</p><p>An algorithmic interface can invert that.</p><p>Now the system is adjusting itself before the user even arrives. So the choices are inferred and not chosen. </p><p>The system is mediating how to personalize on your behalf.</p><p>The interface is steering - and constraining - your behavior, whether you intended it to or not.</p><div><hr></div><h3>Hidden options, unequal paths</h3><p>I think one of the most uncomfortable implications of algorithmic UI is this:</p><p>Some options may never appear for some people.</p><p>They&#8217;re not disabled in a settings panel. The user hasn&#8217;t actively opted out. But the system has inferred - correctly or not - that they&#8217;re unnecessary for that user. Unsafe, too complex, irrelevant, or unlikely to succeed.</p><p>That&#8217;s a subtle shift in power. The system isn&#8217;t neutral.</p><p>If the option is invisible, how does anyone know how to ask for it? When those paths differ in quiet ways, how can you compare? Two people could use the same product, have the same aims, arrive at different outcomes - and not be able to explain why.</p><p>Did it choose the correct context? Was it a structural bias? Was it a protective action? The interface doesn&#8217;t necessarily offer us the answers. </p><div><hr></div><h3>It may be an inevitable shift</h3><p>This isn&#8217;t a drive for aesthetic ambition. It&#8217;s a drive for efficiency.</p><p>AI systems are better at inferring than instructing. They predict what&#8217;s next, identify patterns, and minimize friction. Static interfaces can create costly friction when context is volatile.</p><p>There are real advantages to algorithmic UI:</p><ul><li><p>Reduced cognitive load</p></li><li><p>Faster task completion</p></li><li><p>Fewer dead ends</p></li><li><p>Adaptive accessibility</p></li><li><p>Interfaces meet users where they are</p></li></ul><p>This is rational from a system perspective. If people only need a small part of the space, why expose all the possibilities and risk paralysis of choice? Optimize locally rather than force everyone through the same pathways.</p><p>Users benefit from this:</p><ul><li><p>Onboarding that doesn&#8217;t confuse by showing advanced options to all users.</p></li><li><p>&#8220;Safe mode&#8221; interfaces that can be triggered for certain behavioral profiles.</p></li><li><p>Let expert users see dense control surfaces while others are more guided.</p></li><li><p>Interfaces that change between sessions based on learned and inferred confidence.</p></li></ul><p>It&#8217;s not a theoretical appeal - it can be a genuinely improved experience.</p><div><hr></div><h3>Encoding preferences within the structure</h3><p>Algorithmic interfaces don&#8217;t eliminate bias. They can operationalize and entrench it.</p><p>Every inference made is based on some model of what success, competence, risk, and clarity look like. And those models are based on training data, cultural assumptions, and historical precedent. Just like language models today are trained disproportionately in English compared to other languages, and so become more fluent in English contexts.</p><p>So preferences become structural.</p><ul><li><p>Certain communication styles are seen as &#8220;confident&#8221;.</p></li><li><p>Some interaction patterns are read as &#8220;efficient&#8221;.</p></li><li><p>These approaches to problem-solving are &#8220;normal&#8221;.</p></li></ul><p>And others are quietly discouraged. Not explicitly, but because the model tends to omit them.</p><p>Algorithmic UI shapes what gets shown, it doesn&#8217;t announce what&#8217;s forbidden. It&#8217;s tough to detect these preferences and biases. The system can feel helpful and fair, even if it&#8217;s nudging users towards certain behaviors and outcomes that it thinks are the best ones.</p><p>Over time, this reinforces existing advantages. The system learns who it works well for.</p><p>So it doesn&#8217;t just adapt to users, it starts to adapt users to itself.</p><div><hr></div><h3>What we need to see</h3><p>As interfaces become more inferred, our challenges are going to shift.</p><p>We can&#8217;t simply ask about whether outcomes are fair, or whether the system performs well, on average. We need to understand and reason about the underlying possibilities - which paths were offered, which were hidden or never considered, and why.</p><p>It&#8217;s harder to define who or what is accountable, because we&#8217;re no longer pointing to a single interface that &#8220;doesn&#8217;t work&#8221; for some people. Critique is complex because the experience is more provisional. How do we apply governance when the system isn&#8217;t presenting consistent surfaces to view?</p><p>Algorithmic UI is a new way of building and presenting products. It&#8217;s also a new way of mediating the end user&#8217;s agency. Deciding, moment by moment, what the system will allow you to do.</p><p>And our capacity to assess needs to expand from understanding what just happened, to what else might have been possible.</p><div><hr></div><h4>Further reading:</h4><ul><li><p><em><a href="https://www.robin-cannon.com/p/death-of-the-default">Death of the default</a></em> - on shared reality in a world of adaptive systems.</p></li><li><p>Walsh, D. <em><a href="https://mitsloan.mit.edu/ideas-made-to-matter/generative-ai-isnt-culturally-neutral-research-finds">Generative AI isn&#8217;t culturally neutral, research finds</a></em>. MIT Sloan School of Management, Sep 2025.</p></li><li><p>Nielsen, J. <a href="https://www.nngroup.com/articles/ai-paradigm/">AI: First New UI Paradigm in 60 Years</a>. NN/G, Jun 2023.</p></li></ul><p><em>Article photo by <a href="https://unsplash.com/@lazycreekimages?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Michael Dziedzic</a> on <a href="https://unsplash.com/photos/blue-and-white-water-wave-nbW-kaz2BlE?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.robin-cannon.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><strong>Subscribe for essays on design, technology, and culture - plus original fiction.</strong></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Ripper & Rayne - Episode 7: A Handful of Dust]]></title><description><![CDATA[What settles doesn't always stay.]]></description><link>https://www.robin-cannon.com/p/ripper-and-rayne-episode-7-a-handful</link><guid isPermaLink="false">https://www.robin-cannon.com/p/ripper-and-rayne-episode-7-a-handful</guid><dc:creator><![CDATA[Robin Cannon]]></dc:creator><pubDate>Fri, 06 Feb 2026 20:29:28 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/9bce00b2-d13e-43d5-a499-3566d7d5d3dd_1024x1024.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>London, 1979</strong></p><p>It began as something of a nuisance.</p><p>Lots of fine dust in places where it shouldn&#8217;t have been. Inside a sealed lift. Along the rim of an upturned teacup. Marring the folds of a suit jacket untouched in a Whitehall corridor. Thin, careful residue. As if London had been sifting through rubble all night.</p><p>Some calls came in, filtered through to Special Branch. Nothing frantic. Just odd.</p><p>There was a civil servant who kept calling to say his office smelled like a cold fireplace. A night porter went to sleep and woke up with ash on his pillow and said he tasted smoke. A bus conductor who said all his passengers went silent crossing Tower Bridge - as if they were having a moment of silence at a funeral.</p><p>Giles read through the reports in their basement office. Ethan lounged opposite. Feet up, cigarette in hand, watching the ashtray slowly fill.</p><p>&#8220;Not an attack,&#8221; said Giles. &#8220;Not in the usual sense.&#8221;</p><p>&#8220;A message, then,&#8221; Ethan replied. &#8220;London&#8217;s passive-aggressive love note.&#8221;</p><p>Giles ignored him. He looked down at the photocopied statements. The same phrases repeated: <em>thin air, heavy feeling, lived in, dusty.</em></p><p>"More like sediment. Detritus,&#8221; Giles murmured. &#8220;Emotional residue made physical. It&#8217;s settling.&#8221;</p><p>Ethan smiled. &#8220;Like after they demolish a building?&#8221;</p><p>Giles looked up. &#8220;Something like that.&#8221;</p><p>They took the Tube to Waterloo, partly because some of the reports clustered there. Partly because it was easier to vanish through the crowds. They were on the edge of rush hour, a growing tide of damp coats and tired faces. The Underground smelled like metal and breath and yesterday&#8217;s chips.</p><p>On the platform, Giles crouched and pressed a finger to the concrete lip near the track. </p><p>A smear of gray dust came away on his glove. Not soot. Much finer. Soft.</p><p>He brought it close to his face.</p><p>Ethan watched. Quiet for once. &#8220;Well?&#8221;</p><p>&#8220;It feels&#8230;spent,&#8221; Giles said. &#8220;Like old ash. Already burned.&#8221;</p><p>The wind whipped, a train screaming in. Grit whipped along the platform. The dust lifted, swirled, and then settled in the same place, like a stubborn memory.</p><p>They kept following the trail, back above ground. Away from the station, across wet pavement, down an alleyway that smelt like piss. The dust was thicker near older buildings, especially places where grief might have gathered. Churches, hospitals, even phone boxes where people had heard bad news. Pubs where people had wept over a pint.</p><p>At a chapel on the north side of Westminster Bridge, Giles stopped.</p><p>The windows were filmed with gray. The door, chained shut, had dust filling the creases around the lock. As if something had wrapped it in smoke.</p><p>Ethan tugged the chain. &#8220;We could go in.&#8221;</p><p>&#8220;We&#8217;re not here to break things,&#8221; Giles said.</p><p>Ethan grinned. &#8220;That&#8217;s not what you used to say.&#8221;</p><p>Giles shot him a look. Half warning, half something else. Ethan held up his hands in mock surrender, but his eyes remained bright.</p><p>They circled around the outside of the chapel instead. Stepping into the narrow yard behind where weeds were pushing through cracked paving stones. A chipped bowl sat beneath a dripping gutter - half-filled with gray dust that was turning to paste at its edges.</p><p>Giles jaw tightened. &#8220;Is someone collecting it?&#8221;</p><p>Ethan crouched beside him. Close enough that Giles could smell cigarettes and rain, and something faintly sweet on Ethan&#8217;s coat. </p><p>&#8220;Nothing ritual,&#8221; Ethan said. &#8220;No chalk, no salt. Nothing dramatic. Sure it&#8217;s not just coincidence?&#8221;</p><p>&#8220;Not all magic needs theatre,&#8221; Giles replied.</p><p>He lifted the bowl carefully. It felt heavier than it should be. Dense, like the dust was more than merely physical.</p><p>The light in the yard was soft. The dust shimmered in a way that made Giles&#8217; eyes ache. Not bright, but visible, so very present. A sensation as much as a sight.</p><p>Ethan watched his face, carefully. &#8220;You&#8217;re thinking about last week.&#8221;</p><p>Giles didn&#8217;t answer immediately. He didn&#8217;t need to. They both were.</p><p>The Hollow Man. The fix that felt impossibly clean. A recovery that was all too easy.</p><p>&#8220;Grief disperses. It doesn&#8217;t disappear,&#8221; said Giles. &#8220;And something&#8217;s redirecting it now. It&#8217;s settling because it doesn&#8217;t have anywhere else to go.&#8221;</p><p>Ethan&#8217;s expression was unreadable. &#8220;So London&#8217;s the dumping ground.&#8221;</p><p>&#8220;Ugly way to put it.&#8221;</p><p>&#8220;Accurate, though.&#8221;</p><p>Giles put the bowl back down. &#8220;Right now it&#8217;s just a nuisance. If it continues, it&#8217;ll make people&#8230;sick. Not physically. But maybe thin and stretched, like him.&#8221;</p><p>Ethan&#8217;s eyes flicked to Giles&#8217; mouth, and then away. &#8220;Then we&#8217;ll stop it.&#8221;</p><p>&#8220;How?&#8221;</p><p>Ethan shrugged. Careless. &#8220;What we always do. Find the source. Shut it down. Help the city forget.&#8221;</p><p>Giles straightened, brushing the dust off his glove. &#8220;Forgetting isn&#8217;t always a mercy.&#8221;</p><p>Ethan&#8217;s smile softened. &#8220;But sometimes it is.&#8221;</p><p>They took a cab back, neither of them speaking much. London&#8217;s sodium-orange tinged streets slid by, wet reflections in the window. Just the city, pretending to be itself.</p><p>Back at their basement office, Giles made tea. Left it to go cold. Ethan rifled through some files, restless, then stopped. Watched Giles move around the cramped space.</p><p>&#8220;You&#8217;re quiet tonight,&#8221; Giles said.</p><p>&#8220;Am I?&#8221;</p><p>&#8220;Yes.&#8221;</p><p>Ethan leaned against the edge of his desk. &#8220;Just thinking.&#8221;</p><p>&#8220;Dangerous, with you,&#8221; Giles muttered.</p><p>Ethan laughed under his breath. &#8220;For me, or for you?&#8221;</p><p>Giles should have gone back to his reports. Written up a note for Department C and left it at that. Residue, settling, let them monitor the sites. Bureaucratic end to an unnatural problem.</p><p>Instead, he looked at Ethan. Really looking. At his easy confidence, chaos held back by charm. The familiar mouth that always seemed like a heartbeat away from saying the wrong thing - or exactly the right one.</p><p>&#8220;Ethan,&#8221; Giles began, then stopped.</p><p>Ethan waited, eyebrows raised slightly, as if in mild amusement. But his eyes were sharp and attentive. Present.</p><p>Giles swallowed. His throat felt tight. &#8220;I don&#8217;t want this,&#8221; he said, gesturing vaguely at the room, outside to the city. The cases in sheets on his desk like bruises on paper, &#8220;to disappear if we stop paying attention.&#8221;</p><p>&#8220;Then don&#8217;t look away,&#8221; Ethan said softly.</p><p>The words landed like a match struck near dry kindling.</p><p>Giles stepped closer. He could feel his own pulse, loud in his ears. The hum of machinery under a floor. Ethan didn&#8217;t move, but even his breath hitched slightly, like a small betrayal.</p><p>Giles lifted his hand and touched Ethan&#8217;s shoulder. Then his cheek.</p><p>Warm. Real. Not an echo.</p><p>Ethan&#8217;s eyes closed at the touch. A quiet sound left him, not quite a breath. When he opened them again, there was no humor in his expression. Just desire, stripped bare.</p><p>He leaned in. Slow, as if waiting for Giles to stop him if he wanted to.</p><p>Giles didn&#8217;t.</p><p>Their mouths met with urgency, barely restrained. Careful at first, almost tentative, and then less so - a kiss deepening as the dam broke, finally giving permission to move. Ethan&#8217;s hand slid under the back of Giles&#8217; coat, his fingers curling there, pulling him closer. Giles felt the pressure of Ethan&#8217;s body, wiry, solid and undeniable. His heat cut through the chill that always seemed to cling to the basement.</p><p>This wasn&#8217;t reckless. It wasn&#8217;t careful. And it wasn&#8217;t hesitant.</p><p>They shed layers without hurry. Coat, scarf, the careful armor of their day - until Giles&#8217; back brushed up against the edge of the desk, cold against his skin. And Ethan was there, close enough that Giles could feel his pulse, quick and insistent. Ethan kissed the line of Giles&#8217; jaw, his throat, his teeth grazing just enough to make Giles&#8217; breathe in sharply.</p><p>&#8220;You all right?&#8221; Ethan murmured. His voice was low, almost reverent.</p><p>&#8220;Yes,&#8221; Giles said - too quickly - and he steadied himself. &#8220;Don&#8217;t stop.&#8221;</p><p>Ethan didn&#8217;t.</p><p>Outside, London kept making its noise. A siren flared and faded. Dust settled on a windowsill. For a little while, none of that mattered.</p><div><hr></div><p>Later, the light had shifted and the kettle had long gone cold. They sat together on the room&#8217;s narrow sofa, shoulders touching, their legs tangled together without thought. Ethan&#8217;s cigarette burned down in the ashtray. Giles could feel the imprint of Ethan&#8217;s hands, his touch - at his waist, his back, lower - as if the contact lingered under his skin.</p><p>Giles was staring at the far wall. The corkboard hug, pinned with maps and notes and pictures. A city rendered in dots and lines, like a body traced.</p><p>&#8220;We&#8217;re alright,&#8221; said Ethan, his voice low.</p><p>Giles turned to him. </p><p>Ethan was watching him, that maddening mixture of affection and mischief. As if to say, <em>See? You didn&#8217;t break.</em></p><p>Giles believed him.</p><p>He shouldn&#8217;t have, perhaps. But he did.</p><p>In the morning, the two of them walked out together into the gray daylight. The pavement was damp. There was rain in the air. A street cleaner was sweeping dust into a pan near the curb, then he tipped it away without looking.</p><p>Giles watched the motion with more intent than necessary. The neatness of it, the way it vanished. Almost comforting.</p><p>Ethan nudged him lightly with his shoulder. &#8220;Come on, Rupert. London&#8217;s just going to try and make a mess again.&#8221;</p><p>They walked on, side by side. Not quite touching, but close enough to each other to feel the warmth.</p><p>The city settled around them. For now.</p><div><hr></div><p>Stories from <em><a href="https://www.robin-cannon.com/i/176420671/ripper-and-rayne">Ripper &amp; Rayne</a></em> are available in my <a href="https://www.robin-cannon.com/p/alternate-frequencies">Alternate Frequencies</a> section.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.robin-cannon.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><strong>Subscribe for essays on design, technology, and culture - plus original fiction.</strong></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Blue in low resolution]]></title><description><![CDATA[Accounting for human judgment in a system that wants to automate law.]]></description><link>https://www.robin-cannon.com/p/blue-in-low-resolution</link><guid isPermaLink="false">https://www.robin-cannon.com/p/blue-in-low-resolution</guid><dc:creator><![CDATA[Robin Cannon]]></dc:creator><pubDate>Fri, 06 Feb 2026 16:31:08 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/51f3ffe4-f0ba-4fc1-b9cf-20c863da3607_5363x3575.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The officer didn&#8217;t knock. He stood there in Hale&#8217;s doorway, uncertain, holding a phone in a bright pink case. Probably not his.</p><p>&#8220;I&#8217;m meant to log this,&#8221; he says. &#8220;But I thought you might want to hear it first.&#8221;</p><p>Hale looked at him over the rim of her monitor. Grateful to look away from a dashboard that&#8217;s been trying to reconcile three incompatible insurance models for the last hour.</p><p>&#8220;What is it?&#8221;</p><p>He glances down on a small screen on his own wrist.</p><p>&#8220;Estate just outside Maidstone. Housing platform filed it an hour ago. Missing dependent.&#8221;</p><p>Hale gestured him in.</p><p>He placed the phone on her desk. It&#8217;s an old model. Cracked case. Sparkles. No institutional watermark.</p><p>&#8220;I listened to it,&#8221; he says. &#8220;I don&#8217;t think it sounds like trouble.&#8221;</p><p>That&#8217;s why he&#8217;s here.</p><p>At Chief Inspector level, policing starts to fall into the abstract. Risk surfaces. Contract boundaries. Liabilities flow between different companies and institutions like heat between metal plates. Corporate dominance, algorithmic law enforcement. The region rendered as probability maps.</p><p>Not people.</p><p>She&#8217;s three weeks from retirement. Her replacement has already been chosen by a consortium that included the Dover port authority, two insurers, a logistics firm that doesn&#8217;t employ the police, but writes most of their software, as well as an ACC.</p><p>Hale is old enough to still read cases as documents, not as projections.</p><p>She picks up the phone.</p><p>It&#8217;s a short message. A girl&#8217;s voice. Careful, and slightly breathless. Like nerves.</p><blockquote><p><em>&#8220;Hi Stace. It&#8217;s me.</em></p><p><em>Um&#8230;just wanted to let you know that I&#8217;m not missing. I left.</em></p><p><em>I&#8217;m staying with a friend. She&#8217;s helping. I&#8217;ve got work lined up. I&#8217;m not hurt and not in trouble.</em></p><p><em>Can you tell my mum that I&#8217;m OK? But I don&#8217;t want to come back.&#8221;</em></p></blockquote><p>There&#8217;s a pause before she hangs up. Sound of the wind.</p><p>Hale sets the phone down. The officer doesn&#8217;t meet her eyes.</p><p>&#8220;If I log it,&#8221; he says. &#8220;Intake&#8217;s going to attach it to the housing report.&#8221;</p><p>He doesn&#8217;t need to go further. They both know what will happen next.</p><p>The mother&#8217;s message was filed through the benefits and tenancy platform. Flagged by the property insurer, so it&#8217;s already made a shape in the system.</p><p><code>UNACCOUNTED DEPENDENT</code></p><p><code>INSURED RESIDENCE RISK</code></p><p><code>ESCALATION ADVISORY</code></p><p>Things can go fast from that point.</p><p>Transit records lighting up. Education platforms trying to reconcile absence with funding. Employer registries trying to search for unpaid labor.</p><p>This girl will stop being a person. Just be a moving liability concern.</p><p>Hale stands. &#8220;Leave it with me.&#8221;</p><p>He does.</p><p>She pulls the case up on her wall display.</p><p>Seventeen&#8230;just. Old enough to decide, legally. Young enough to panic the risk models.</p><p>The mother&#8217;s statement is efficient more than frightened.</p><blockquote><p>Daughter not answering.</p><p>Room empty.</p><p>Please locate.</p><p>If dependent status changes, housing eligibility is at risk.</p></blockquote><p>Love, or merely infrastructure.</p><p>Hale assigns the case to herself.</p><p>It won&#8217;t be questioned. At her level discretion still exists. Not all algorithms.</p><div><hr></div><p>She takes the bus to the estate later that morning. It&#8217;s slow - vehicle braking too often, afraid of being sued by a bruised shadow.</p><p>The flat smells like detergent and fried eggs.</p><p>The mum doesn&#8217;t cry. She just has a list of consequences.</p><p>Rent tier will change. Benefit reviews. A reclassification of household size.</p><p>&#8220;She&#8217;s not stupid,&#8221; she says of her daughter. &#8220;Just thinks she knows better.&#8221;</p><p>Hale asks if she was violent toward her daughter.</p><p>&#8220;No.&#8221;</p><p>Neglectful.</p><p>&#8220;No.&#8221;</p><p>Cruel.</p><p>The woman hesitates.</p><p>&#8220;No,&#8221; she says again. But in a smaller voice.</p><p>Hale leaves her a card and a number to call. A promise that&#8217;s procedure, not emotion.</p><div><hr></div><p>Back at the station she sips tea and reviews the system recommendations.</p><p><code>ESCALATION ADVISORY</code></p><p>She opens the classification menu instead.</p><p>More options here, but a lot of officers don&#8217;t even learn them anymore.</p><p><code>VOLUNTARY ABSENCE (NON-CRIMINAL)</code></p><p><code>DOMESTIC SAFEGUARD REVIEW</code></p><p><code>EDUCATIONAL TRANSFER REQUEST</code></p><p>They all need extra justification. More friction and extra legwork. Doesn&#8217;t improve the performance metrics.</p><p>Hale calls the girl&#8217;s number. Or at least the number her mum gave.</p><p>It takes three attempts.</p><p>When she answers, the girl&#8217;s voice is steadier than in the recording.</p><p>&#8220;I won&#8217;t tell you where I am,&#8221; she says immediately.</p><p>&#8220;I&#8217;m not asking,&#8221; says Hale.</p><p>A pause.</p><p>&#8220;Are you safe?&#8221;</p><p>&#8220;Yes.&#8221;</p><p>&#8220;Is anyone keeping you there?&#8221;</p><p>&#8220;No.&#8221;</p><p>&#8220;You understand if I escalate this, other people will come looking?&#8221;</p><p>&#8220;Yes.&#8221;</p><p>There&#8217;s another pause.</p><p>&#8220;I don&#8217;t want to go back.&#8221;</p><p>&#8220;I know.&#8221;</p><p>That&#8217;s the truth of it.</p><p>Hale&#8217;s already inclined to believe her. But she spends a few more minutes on the line, satisfying herself, taking down some particulars. Then she ends the call and begins the work.</p><p>Her typing isn&#8217;t the fastest.</p><p>She describes the home as <em>non-violent but unstable. </em>Her school environment as <em>algorithmically exclusionary</em>. And the subject is <em>coherent, cooperative, not under coercion</em>.</p><p>She requests a youth services contact for the mother.</p><p>She submits an education transfer request in the destination city.</p><p>She closes the transit flags from the girl&#8217;s rail pass.</p><p>The system tries to push back at every step.</p><p><code>UNRESOLVED LIABILITY</code></p><p><code>PATTERN RISK</code></p><p><code>INSUFFICIENT DETERRENCE SIGNAL</code></p><p>Hale overrides them all with her authorization code.</p><p>It&#8217;s still valid.</p><p>The process takes nearly six hours.</p><p>A corporate legal bot requests clarification. She cites protocols written before software companies started drafting legislation.</p><p>The case changes color.</p><p>Red.</p><p>Amber.</p><p>Then an administrative gray. Flat. Resolved. No further action required.</p><p>The system disengages and the city forgets.</p><div><hr></div><p>On her final Friday, Hale clears her desk.</p><p>No plaques. No ceremony. Retirement streamlined into an update to credential access.</p><p>The colleagues who know her and care will be at the pub later.</p><p>She hands her access card to a woman thirty years younger who apologizes for not knowing her name.</p><p>&#8220;It&#8217;s fine,&#8221; Hale says. It is.</p><p>On the drive home, the estuary is broken into grids of data light, casting blues and oranges onto red-brick houses.</p><p>She starts to think about all the cases that didn&#8217;t go this way.</p><p>Then stops herself.</p><p>That&#8217;s the habit of someone younger.</p><p>There won&#8217;t be a record of her intervention. </p><p>No statistic will measurably shift. No models will adjust because of what she did.</p><p>But the girl might grow older without being turned into a permanent warning. Flagged in the system.</p><p>That&#8217;s how the best protection still works.</p><p>Not as force. </p><p>Classification. Performed gently. By people who still care or remember what the categories were meant to be for.</p><p>People.</p><p>On Monday her replacement will have an optimization profile to start following.</p><p>The system will continue.</p><p>But the desks will still have people behind them. Someone will still choose to hand over a phone, decide what kind of case needs attention.</p><p>One more person can pass through it without being reduced to merely a risk profile.</p><p>Which can be enough.</p><div><hr></div><p><em>A story from the <a href="https://www.robin-cannon.com/t/staticdrift">Static Drift</a> universe.</em></p><p><em>Article photo by <a href="https://unsplash.com/@brunus?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Bruno Martins</a> on <a href="https://unsplash.com/photos/a-street-light-with-a-blue-light-on-top-of-it-i6Ynmfi6UBg?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.robin-cannon.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><strong>Subscribe for essays on design, technology, and culture - plus original fiction.</strong></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Death of the default]]></title><description><![CDATA[Shared reality in a world of adaptive systems]]></description><link>https://www.robin-cannon.com/p/death-of-the-default</link><guid isPermaLink="false">https://www.robin-cannon.com/p/death-of-the-default</guid><dc:creator><![CDATA[Robin Cannon]]></dc:creator><pubDate>Tue, 03 Feb 2026 16:02:53 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/755be7b3-2ce5-4d84-a60b-74029c8ac0e1_4879x3168.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Defaults make society legible.</p><p>They exist everywhere. Office hours, queuing systems, broadcast schedules, form layouts, school terms, work weeks, what &#8220;normal&#8221; looks like. They may have a logical origin, but they&#8217;re not always optimal and they certainly aren&#8217;t neutral. But we share them.</p><p>Defaults give us a common starting point. They create a baseline that we can orient around, or push back against, or discuss. They give us a certain expectation that we can use to coordinate - making systems predictable enough for us to live in.</p><p>Defaults are a simple convenience. They&#8217;re also social infrastructure.</p><p>They&#8217;re quietly disappearing.</p><div><hr></div><p>It&#8217;s not an instant vanishing. There&#8217;s rarely an announcement or a policy change. Not a single moment where you can point to a decision to remove them. But as different systems become more adaptive, responsive, and personalized, defaults erode.</p><p>This can feel like progress. Why should we all experience the same thing when systems can now adjust to individual needs? Why are we trying to force a single path that doesn&#8217;t account for our context? If optimization is available then why do we accept friction?</p><p>But there are unexpected impacts when we no longer have a shared baseline.</p><p>If all our experiences are adapting, it&#8217;s difficult to locate an idea of &#8220;normal&#8221;. There&#8217;s still coordination, but it lacks a common reference. So we start to think more in terms of probabilistic expectations rather than naturally shared ones.</p><div><hr></div><p>Defaults do important work.</p><ul><li><p>They make institutions explainable.</p></li><li><p>They help people to help each other navigate systems.</p></li><li><p>They make it possible to critique with a shared reference.</p></li></ul><p>If you and I have matching experiences, we can talk about them. If there&#8217;s something wrong, we can identify it together. Defaults mean we can say that <em>this</em> is what the system does.</p><p>But when systems become more adaptable, that shared reference is weakening.</p><p>Two people can go through the same process but with different experiences, and different outcomes. And neither of them may be able to explain why. Was it an intentional difference? Contextual? Personal? Experimental?</p><p>The system becomes more difficult to see.</p><div><hr></div><p>This is a cultural issue as much as it is a technical one.</p><p>Defaults are one of the ways in which societies created shared expectations. While they don&#8217;t remove (and can entrench) power imbalances, they also make them visible. If we all have a shared set of rules, then those rules can be challenged. A predictable process can be contested.</p><p>Adaptive systems replace visible sameness with a more opaque differentiation.</p><p>That means that our understanding of fairness shifts from something we experience, to something that needs different - statistical - justification. Are we treating people well in the aggregate, rather than thinking in individual terms?</p><p>But how do you contest a system that you can&#8217;t clearly see?</p><div><hr></div><p>These defaults also have a quieter, emotional, effect.</p><p>If we understand the default, however imperfect, it can help to instill a sense of belonging. Those rough edges you face - everyone else faces them too. I know where I stand - even if I don&#8217;t like it.</p><p>By dissolving defaults, we open up more individualized experiences. Obviously that brings advantages, but it can also be isolating. It&#8217;s hard to compare notes. Is that thing broken, or just different? Is my experience unusual, or merely unique?</p><p>There&#8217;s nothing obviously wrong, but there&#8217;s also a lack of clear stability.</p><div><hr></div><p>This all gets thrown into even more stark relief when it comes to software.</p><p>Interfaces are often the clearest expressions of default. Here&#8217;s a product version. It&#8217;s easy to describe. I can draw it, point to it, and say <em>this is how this works</em>.</p><p>But interfaces are becoming less fixed surfaces. They&#8217;re starting to behave as much like a negotiation - assembled in real time from data, context, probability, and intent.</p><p>There isn&#8217;t a consistent answer any more to &#8220;what does it look like?&#8221;</p><p>Again - this isn&#8217;t bad, but it is different. Adaptive systems can be much more inclusive, efficient, and responsive than the static alternatives. But they also remove that shared point of reference.</p><div><hr></div><p>My point is not to wax nostalgic.</p><p>Defaults exclude people. They ignore differences. They entrench the preferences of the powerful. And we&#8217;ve spent much of the last decade or more trying to rightly challenge the idea that &#8220;one size fits all&#8221; can ever be fair.</p><p>So my problem isn&#8217;t that defaults are disappearing.</p><p>But they&#8217;re disappearing without us thinking about what replaces the social and cultural function that defaults have served.</p><p>Adaptive systems are great at optimization. They are less great at maintaining shared reality.</p><div><hr></div><p>More of the world is becoming mediated by inference rather than direct instruction. Static stability is giving way to adaptive probability.</p><p>Our systems will still work. And, often, work much better. But they also work differently. They have no fixed point to default to. So the default is something inferred - provisional, contextual, and quietly variable.</p><p>Defaults are anchors not necessarily because they&#8217;re correct - but because they&#8217;re there.</p><p>And those anchors are dissolving. We&#8217;re replacing them with systems that decide moment by moment what you should see, what your experience should be.</p><p>It&#8217;s not a question whether the shift is coming. It&#8217;s already here.</p><p>The question is how we prepare ourselves for a culture where &#8220;default&#8221; isn&#8217;t something we necessarily share. But instead is something the system quietly decides on our behalf.</p><div><hr></div><h4>Further reading</h4><ul><li><p>Clinehens, J. <em><a href="https://www.choicehacking.com/2020/11/09/what-is-the-default-effect/">Silent Decision-Makers: How Defaults Guide Decisions</a></em>. ChoiceHacking, Nov 2020.</p></li><li><p>Sosa, D. <em><a href="https://blogs.lse.ac.uk/psychologylse/2022/01/20/a-default-life/">A Default Life</a></em>. LSE Psychological &amp; Behavioral, Jan 2022.</p></li><li><p><em><a href="https://figr.design/blog/adaptive-defaults-when-your-product-knows-you-better-than-you-know-yourself">Adaptive Defaults: When Your Product Knowns You Better Than You Know Yourself</a></em>. figr, Oct 2025.</p></li></ul><p><em>Article photo by <a href="https://unsplash.com/@chaozzy?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Chaozzy Lin</a> on <a href="https://unsplash.com/photos/red-powder-in-three-clear-drinking-glasses-4DAzYHVEqd8?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.robin-cannon.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><strong>Subscribe for essays on design, technology, and culture - plus original fiction.</strong></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item></channel></rss>