<?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[Smoke Some Paint]]></title><description><![CDATA[Things I think about.]]></description><link>https://www.smokesomepaint.com</link><image><url>https://substackcdn.com/image/fetch/$s_!JbpN!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa12244d0-7271-4573-8a28-917e74ac5650_1024x1024.png</url><title>Smoke Some Paint</title><link>https://www.smokesomepaint.com</link></image><generator>Substack</generator><lastBuildDate>Thu, 09 Apr 2026 04:53:15 GMT</lastBuildDate><atom:link href="https://www.smokesomepaint.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Cully Wakelin]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[smokesomepaint@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[smokesomepaint@substack.com]]></itunes:email><itunes:name><![CDATA[Cully Wakelin]]></itunes:name></itunes:owner><itunes:author><![CDATA[Cully Wakelin]]></itunes:author><googleplay:owner><![CDATA[smokesomepaint@substack.com]]></googleplay:owner><googleplay:email><![CDATA[smokesomepaint@substack.com]]></googleplay:email><googleplay:author><![CDATA[Cully Wakelin]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Is suspension a primitive or a trick?]]></title><description><![CDATA[Resonate is addressing the problem of suspension by pinning the answer to a protocol instead of a runtime.]]></description><link>https://www.smokesomepaint.com/p/is-suspension-a-primitive-or-a-trick</link><guid isPermaLink="false">https://www.smokesomepaint.com/p/is-suspension-a-primitive-or-a-trick</guid><dc:creator><![CDATA[Cully Wakelin]]></dc:creator><pubDate>Wed, 08 Apr 2026 16:41:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!GSif!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F565efa7f-7dd3-4588-94f3-6791bb310c80_1024x608.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GSif!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F565efa7f-7dd3-4588-94f3-6791bb310c80_1024x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GSif!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F565efa7f-7dd3-4588-94f3-6791bb310c80_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!GSif!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F565efa7f-7dd3-4588-94f3-6791bb310c80_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!GSif!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F565efa7f-7dd3-4588-94f3-6791bb310c80_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!GSif!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F565efa7f-7dd3-4588-94f3-6791bb310c80_1024x608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GSif!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F565efa7f-7dd3-4588-94f3-6791bb310c80_1024x608.png" width="1024" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/565efa7f-7dd3-4588-94f3-6791bb310c80_1024x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:608,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GSif!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F565efa7f-7dd3-4588-94f3-6791bb310c80_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!GSif!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F565efa7f-7dd3-4588-94f3-6791bb310c80_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!GSif!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F565efa7f-7dd3-4588-94f3-6791bb310c80_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!GSif!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F565efa7f-7dd3-4588-94f3-6791bb310c80_1024x608.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Have you read this? <a href="https://www.inngest.com/blog/hanging-promises-for-control-flow">Hanging Promises for Control Flow.</a></p><p>So, if I understand it correctly, you&#8217;re inside a serverless function. You hit a step you can&#8217;t finish in this invocation. You need to get the user&#8217;s <code>async</code> function off the stack without throwing &#8212; because user <code>try/catch</code> might swallow the signal. So you <code>await</code> a promise that never resolves. Function suspends, process gets torn down, GC cleans up the frame, fresh invocation replays from the top using a memoization map of finished steps.</p><p>Clever, though isn&#8217;t this a workaround for a problem that only exists because suspension isn&#8217;t a first-class thing the runtime owns?</p><p>Seems like the whole maneuver leans on a property of the language&#8217;s runtime, where each language would require its own version of the trick with its own caveats.</p><p>As you know I work <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Resonate HQ&quot;,&quot;id&quot;:3947434,&quot;type&quot;:&quot;pub&quot;,&quot;url&quot;:&quot;https://open.substack.com/pub/resonatehqio&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/26ad1caa-901d-4c62-8d7c-03bc0ee34fc1_645x645.png&quot;,&quot;uuid&quot;:&quot;30f87950-3226-4430-a739-3457bb343cb9&quot;}" data-component-name="MentionToDOM"></span> and we bet (well, <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Dominik Tornow&quot;,&quot;id&quot;:104069074,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/068ee5c3-5642-49c2-b981-a35a27d0aeae_400x400.jpeg&quot;,&quot;uuid&quot;:&quot;6f6ed370-79ec-4b83-970a-1395a3644418&quot;}" data-component-name="MentionToDOM"></span> bet) that suspension shouldn&#8217;t be a clever thing the runtime sneaks past user code &#8212; it should be a <em>protocol</em>. </p><p>Coincidentally enough, the protocol calls for a <a href="https://docs.resonatehq.io/">durable promise</a> that lives outside any single process, or any single language.</p><p>When a function awaits a durable promise, the runtime parks the computation. Promise resolves &#8212; same process, different process, one that doesn&#8217;t exist yet &#8212; computation comes back. No exception to dodge, no GC trick to lean on. The <code>await</code> (or in the current Resonate Typescript SDK version its <code>yield</code>) means what it says.</p><p>If that&#8217;s right, the hanging-promise technique is a great answer <em>inside one language&#8217;s constraints</em>, but Resonate is making the same problem moot one layer down by pinning the answer to a protocol instead of a runtime.</p><p>If you think I&#8217;ve got something backwards, tell me.</p>]]></content:encoded></item><item><title><![CDATA[Vibe coding with 15 years of context]]></title><description><![CDATA[The workspace is the brain. Claude is the hands.]]></description><link>https://www.smokesomepaint.com/p/vibe-coding-with-15-years-of-context</link><guid isPermaLink="false">https://www.smokesomepaint.com/p/vibe-coding-with-15-years-of-context</guid><dc:creator><![CDATA[Cully Wakelin]]></dc:creator><pubDate>Tue, 07 Apr 2026 15:31:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!4DIC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf50d9b1-8083-4942-abba-fb87300302b9_1024x608.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4DIC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf50d9b1-8083-4942-abba-fb87300302b9_1024x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4DIC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf50d9b1-8083-4942-abba-fb87300302b9_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!4DIC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf50d9b1-8083-4942-abba-fb87300302b9_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!4DIC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf50d9b1-8083-4942-abba-fb87300302b9_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!4DIC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf50d9b1-8083-4942-abba-fb87300302b9_1024x608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4DIC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf50d9b1-8083-4942-abba-fb87300302b9_1024x608.png" width="1024" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bf50d9b1-8083-4942-abba-fb87300302b9_1024x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:608,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4DIC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf50d9b1-8083-4942-abba-fb87300302b9_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!4DIC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf50d9b1-8083-4942-abba-fb87300302b9_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!4DIC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf50d9b1-8083-4942-abba-fb87300302b9_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!4DIC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf50d9b1-8083-4942-abba-fb87300302b9_1024x608.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The vibe in "vibe coding" is the developer's intuition about what the code should do, how it should fit together, and when something's off.</p><p>Not the agent, or the model. Not your keyboard. The vibe is <em><strong>you</strong></em>.</p><p>I've been shipping software for 15 years &#8212; tech support, devrel, docs, product, engineering, startups that made it, startups that didn't. When I sit down with Claude Code now, I'm not just prompting an AI to write or build something for me. I'm compressing 15 years of pattern recognition into a structured environment where an AI can actually be useful.</p><p>That distinction matters. And I think most of the "vibe coding" discourse misses it completely, though often humorously.</p><p>The real magic happens before Claude writes any executable code.</p><p>By the time I say, &#8220;hey Claude, build me a dashboard&#8221;, I've already put together rules to follow, skill directories, and decision structures that Claude reads at the start of every session. Every project has an AGENT.md &#8212; a structured document that tells any AI agent exactly what the project is, what the stack looks like, what the architecture rules are, and what not to break. Above that, a workspace-level orientation file maps every project, defines data boundaries, and enforces privacy rules. Below that, a knowledge layer &#8212; domain-specific documents covering everything from data source registries to privacy regulations to tax law to investment frameworks, etc.</p><p>The AI doesn't guess. It reads. Every new Claude session starts fresh &#8212; no memory of yesterday &#8212; but within 30 seconds it has full context and is capable of producing quality output.</p><p>In other words, my 15 years of experience is now applied to the structure that makes Claude&#8217;s output predictable in quality.</p><p>And it's the same idea all the way down.</p><p>This pattern &#8212; write a structured spec, then generate the output &#8212; isn't just how I work with Claude Code. It's the same principle behind what we're building at <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Resonate HQ&quot;,&quot;id&quot;:3947434,&quot;type&quot;:&quot;pub&quot;,&quot;url&quot;:&quot;https://open.substack.com/pub/resonatehqio&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/26ad1caa-901d-4c62-8d7c-03bc0ee34fc1_645x645.png&quot;,&quot;uuid&quot;:&quot;8f5c3c7c-26bc-4440-b40d-3fb2f2f2c213&quot;}" data-component-name="MentionToDOM"></span>.</p><p>Resonate is a durable execution platform. Instead of hand-writing server components for every possible deployment topology, we wrote a formal protocol specification. Language-agnostic. Transport-agnostic. Storage-agnostic. Then we generate the components from the spec.</p><p>Need a server targeting Postgres + HTTP? Generate it. Need one for Cloudflare Workers + D1? Generate that. Every line of code exists because your stack needs it. Nothing else ships.</p><p>The parallel is almost too clean: I don't hand-write code for each project from scratch anymore. I write structured context &#8212; rules, skills, architecture docs &#8212; and let Claude generate the implementation. Same mentality. Specify the constraints, generate the output, validate against the spec.</p><p>In both cases, the quality of the output is determined by the quality of the specification. Garbage spec, garbage code. Precise spec, precise code. The generation step is the easy part.</p><p>Fresh instances and structured workspaces are simple but key aspects to quality Claude usage.</p><p>One thing people don't realize about working with Claude Code: every session is a blank slate. The model doesn't remember what you did yesterday. It doesn't learn your preferences over time. Every conversation starts from zero.<br><br>That sounds like a limitation. It's actually a usable feature.<br><br>Because every session is fresh, you're forced to make your context explicit. You can't rely on "Claude knows what I mean." You have to write it down. The rules, the architecture, the boundaries, the patterns &#8212; all of it lives in files, not in your head.<br><br>And once it's in files, any agent can read it. Not just Claude. A CI bot. A code review tool. A new team member. The structured workspace becomes a unique product of its own.<br><br>I spin up fresh Claude instances for specific tasks all the time. One for frontend work, reading the component library docs. One for data pipeline work, reading the data source registry. One for financial modeling, reading the tax reference corpus. Each one gets exactly the context it needs and nothing it doesn't.<br><br>The workspace is the brain. Claude is the hands.<br><br>If you're new to programming and you're vibe coding, you're probably generating code you can't fully evaluate. You'll probably accept a function that works but scales quadratically because you've never been burned by that. You'll probably let the AI set up auth in a way that's fine for a tutorial and catastrophic in production.<br><br>That's not a reason to stop. It's a reason to build your own pattern library as you go.<br><br>Every time Claude generates something you don't understand, that's a learning opportunity you're either taking or skipping. The developers who use AI to learn faster will end up with great instincts &#8212; just compressed into fewer years. The ones who use AI to avoid learning will plateau at "can generate code, can't evaluate code."</p><p>Velocity comes from having pre-built component libraries, a clear architecture, and an AI that reads the entire project context before writing a line.</p><p>One danger for experienced devs isn't going too slow. It's going so fast that everything feels worth building. The cost to produce software has collapsed for everybody. Which means speed isn't the differentiator anymore. Judgment is. Knowing which direction to go is what matters.<br><br>The vibe has always been you &#8212; about knowing what to make, how it should fit together, and when something's off. AI has just become fast enough to match whatever level of that you bring.</p>]]></content:encoded></item><item><title><![CDATA[The Wisdom Paradox]]></title><description><![CDATA[To be human is to wrestle with this paradox, again and again.]]></description><link>https://www.smokesomepaint.com/p/the-wisdom-paradox</link><guid isPermaLink="false">https://www.smokesomepaint.com/p/the-wisdom-paradox</guid><dc:creator><![CDATA[Cully Wakelin]]></dc:creator><pubDate>Thu, 08 May 2025 17:51:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa12244d0-7271-4573-8a28-917e74ac5650_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>There's a paradox I encounter every day.</p><p>I see it in engineering discussions, cultural debates, even in personal growth.</p><p>Here's the paradox:</p><p>Intertwingularity is real. Knowledge doesn't sit in neat categories. There are no absolute definitions or rigid boundaries. Everything flows, shifts, and overlaps. The world is messy, fluid, and in constant motion.</p><p>Yet, as human beings, we depend on models and definitions. Our ability to communicate, teach, and learn hinges on structure&#8212;on drawing lines, labeling things, and following rules. Without these models, society can't function.</p><p>This contradiction echoes the Dreyfus Model of Skill Acquisition.</p><p>According to the model, beginners need clear rules to operate. They follow step-by-step instructions because they lack the experience to interpret complexity. But as they gain mastery, their intuition grows. Experts don't follow rigid instructions&#8212;they feel what to do. Their actions are shaped by context, not checklists.</p><p>I&#8217;ve seen this in software engineering. Concepts like &#8220;durable execution&#8221; &#8220;event-driven architecture,&#8221; or &#8220;serverless&#8221; are abstract and often fluid in practice. But to discuss them, we need shared mental models. We define things like &#8220;pure functions&#8221; or &#8220;side effects&#8221; not because they exist in perfect clarity, but because without these definitions, communication becomes impossible. A beginner might take these models literally. An expert knows they&#8217;re just tools&#8212;useful simplifications to help navigate complexity.</p><p>This paradox explains many individual and societal disagreements.</p><p>Take politics. Experts often speak in nuances. But the public&#8212;understandably&#8212;wants clarity. Politicians exploit this tension. They weaponize simplicity, offering rigid models that feel safe, even if they mislead. They use the paradox to win arguments, votes, or influence&#8212;often at the expense of truth.</p><p>And yet, we need those simple models.</p><p>Most of us are beginners in many areas of life. That's not a flaw&#8212;it's just reality. Society needs frameworks and definitions to function. Teachers can't educate without them. Businesses can't operate without clear processes. Even something as basic as a map requires us to define what a &#8220;road&#8221; is and where it begins and ends.</p><p>Without definitions, mental models collapse. And when they do, communication breaks down. Education fails. Society stumbles.</p><p>But those same models create tension. Experts may find them limiting. Beginners may find them confusing. And both may talk past each other without realizing why.</p><p>As long as we're human, we'll live with this paradox.</p><p>We need structure to grow, and we need to outgrow that structure to master.<br></p><p></p>]]></content:encoded></item></channel></rss>