<?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[CodedShapes]]></title><description><![CDATA[Exploring the craft of computational design. I write technical explanations and stories from practice, including what I’ve learned and what I’m still figuring out.]]></description><link>https://www.codedshapes.com</link><image><url>https://substackcdn.com/image/fetch/$s_!DATU!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8783c1e-94bb-4979-9c47-889d3da8083d_500x500.png</url><title>CodedShapes</title><link>https://www.codedshapes.com</link></image><generator>Substack</generator><lastBuildDate>Mon, 19 Oct 2026 23:09:11 GMT</lastBuildDate><atom:link href="https://www.codedshapes.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Braden Koh]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[bradenkoh@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[bradenkoh@substack.com]]></itunes:email><itunes:name><![CDATA[Braden Koh]]></itunes:name></itunes:owner><itunes:author><![CDATA[Braden Koh]]></itunes:author><googleplay:owner><![CDATA[bradenkoh@substack.com]]></googleplay:owner><googleplay:email><![CDATA[bradenkoh@substack.com]]></googleplay:email><googleplay:author><![CDATA[Braden Koh]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Do Visual Scripts Still Have a Place in the Age of AI?]]></title><description><![CDATA[Do we still need Grasshopper or Dynamo ?]]></description><link>https://www.codedshapes.com/p/do-visual-scripts-still-have-a-place</link><guid isPermaLink="false">https://www.codedshapes.com/p/do-visual-scripts-still-have-a-place</guid><dc:creator><![CDATA[Braden Koh]]></dc:creator><pubDate>Wed, 14 Oct 2026 23:01:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OVjj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b0130ce-dd00-4409-82ca-dacca81840e0_3300x1858.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_!OVjj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b0130ce-dd00-4409-82ca-dacca81840e0_3300x1858.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OVjj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b0130ce-dd00-4409-82ca-dacca81840e0_3300x1858.png 424w, https://substackcdn.com/image/fetch/$s_!OVjj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b0130ce-dd00-4409-82ca-dacca81840e0_3300x1858.png 848w, https://substackcdn.com/image/fetch/$s_!OVjj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b0130ce-dd00-4409-82ca-dacca81840e0_3300x1858.png 1272w, https://substackcdn.com/image/fetch/$s_!OVjj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b0130ce-dd00-4409-82ca-dacca81840e0_3300x1858.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OVjj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b0130ce-dd00-4409-82ca-dacca81840e0_3300x1858.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0b0130ce-dd00-4409-82ca-dacca81840e0_3300x1858.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2682232,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.codedshapes.com/i/219533041?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b0130ce-dd00-4409-82ca-dacca81840e0_3300x1858.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!OVjj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b0130ce-dd00-4409-82ca-dacca81840e0_3300x1858.png 424w, https://substackcdn.com/image/fetch/$s_!OVjj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b0130ce-dd00-4409-82ca-dacca81840e0_3300x1858.png 848w, https://substackcdn.com/image/fetch/$s_!OVjj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b0130ce-dd00-4409-82ca-dacca81840e0_3300x1858.png 1272w, https://substackcdn.com/image/fetch/$s_!OVjj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b0130ce-dd00-4409-82ca-dacca81840e0_3300x1858.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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><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 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"></figcaption></figure></div><p>Lately, I&#8217;ve been reaching out to companies about automation. And a common response I get now is that they&#8217;d rather use AI than hire someone like me. To them, it&#8217;s $20&#8211;$150 per month plus what they already pay their engineer to build new tools. Someone I&#8217;ve worked with before even told me, &#8220;Yeah, we&#8217;ve been using AI a lot which must be a hard blow for your business.&#8221;</p><p>That is a pretty good way to trigger a small midlife crisis. Especially since, I&#8217;ve spent almost a decade solving engineering problems with programming and visual scripting, and I&#8217;ve just left my full-time job to <a href="https://www.codedshapes.com/p/im-starting-codedconstructs">build a consultancy around automation for firms</a>.</p><p>When I first started using AI, I was excited by how much more I could do. It doubled or even tripled my productivity and made me so good at my job, that I hadn&#8217;t even considered what that would mean when everyone else could build things too.</p><p>And as sucky as it is, it&#8217;s just the way of the world. From their side, describing what they want in a chat looks cheaper and easier than hiring someone to build it.</p><p>Okay, that is on the tool and programming side, what about visual scripting?</p><p>A large part of my work is using tools like Grasshopper and Dynamo to build scripts and tools for projects. A lot of those projects would not have gone smoothly if it weren&#8217;t for visual scripting.</p><p>But was that just because it was easier than programming? Does the use of AI now mean that it&#8217;s actually easier to generate code than to use visual scripts ?</p><div class="callout-block" data-callout="true"><p><em>Hi, I&#8217;m Braden</em></p><p><em>I write about the craft of computational design, from working with geometry and data to the experience of building tools for other people.</em></p><p><em>If you&#8217;re new to CodedShapes, welcome! You might enjoy these:</em></p><ul><li><p><em><a href="https://www.codedshapes.com/p/how-to-know-if-your-workflow-is-actually">How to know if your workflow is actually worth automating</a></em></p></li><li><p><em><a href="https://www.codedshapes.com/p/stop-using-grasshopper-for-everything">Stop using Grasshopper for everything</a></em></p></li><li><p><em><a href="https://www.codedshapes.com/p/applying-computational-design-where">How to apply computational design to your projects</a></em></p></li></ul><p><strong>If you&#8217;d like help with a workflow of your own, <a href="https://codedconstructs.com/contact/">let&#8217;s work on it together.</a></strong></p></div><h2>The era of generic yet bespoke tools</h2><p>The biggest advantage I see with AI-generated tools is being able to describe the exact workflow you want in a chat. You can give it as little or as much detail as you like, and it will move heaven and earth (on your computer) to make that happen. Even if it has to make stuff up.</p><p>It can be a small app or even a complex platform, but you get to control how it works and, to some extent, how it looks. Even if it looks similar to other AI-generated stuff out there, it&#8217;s tailored to the way you want it to work. Through a conversation and you are part of the creation process of your very own bespoke tool. It&#8217;s the <a href="https://en.wikipedia.org/wiki/IKEA_effect">IKEA effect</a>, but for automation instead of furniture.</p><p>Compare that to giving someone a Grasshopper script. They need to <a href="https://www.codedshapes.com/p/the-real-cost-of-sharing-grasshopper">get Rhino, the right plugins</a>, then learn how to navigate the script. Even for someone experienced like me, <a href="https://www.codedshapes.com/p/why-cant-everyone-have-the-same-kitchenscript">someone else&#8217;s giant script can take a while to figure out</a>. Not to mention, one small data format change and the script may break. You can fix it, but you have to understand enough of the components, data flow and the script itself to know where to even begin. AI-generated tools may need fixing too. But with AI, you just describe what went wrong and it&#8217;ll fix itself.</p><h2>The role of visual scripting in an AI era</h2><p>So, with all the <a href="https://www.codedshapes.com/p/stop-using-grasshopper-for-everything">downsides of visual scripting</a>, why use it? Why not just get AI to keep whipping you up plugins for all your automation needs?</p><p>Well recently, I needed to create a parametric model of a facade baffle. In Grasshopper, that just meant connecting a bunch of geometrical and data components I already knew how to use. It took me about 2 hours to get the script up and running with the right inputs and no errors. Here&#8217;s what it looks like.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!a-iv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Face639da-a240-4ac7-857e-98e480b4565c_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!a-iv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Face639da-a240-4ac7-857e-98e480b4565c_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!a-iv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Face639da-a240-4ac7-857e-98e480b4565c_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!a-iv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Face639da-a240-4ac7-857e-98e480b4565c_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!a-iv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Face639da-a240-4ac7-857e-98e480b4565c_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!a-iv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Face639da-a240-4ac7-857e-98e480b4565c_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ace639da-a240-4ac7-857e-98e480b4565c_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:970801,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.codedshapes.com/i/219533041?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Face639da-a240-4ac7-857e-98e480b4565c_1920x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!a-iv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Face639da-a240-4ac7-857e-98e480b4565c_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!a-iv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Face639da-a240-4ac7-857e-98e480b4565c_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!a-iv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Face639da-a240-4ac7-857e-98e480b4565c_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!a-iv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Face639da-a240-4ac7-857e-98e480b4565c_1920x1080.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><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 icon-noB79L"><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>Now, imagine trying to explain that to an AI. Imagine trying to describe that with words. I think it would have taken me just as long, if not longer, to explain what I needed properly. In fact, just try explaining that to a friend with words.</p><p>Also, if I went through the AI route, it could only create that model in Rhino through scripts. Which meant I had to run it, look at the geometry and describe the fixes I wanted. Then, I&#8217;d have to delete the old geometry, get AI to make the changes and then run the script again. In Grasshopper, all I had to do is keep tweaking the components and the geometry changes. The feedback loop is instant.</p><p><a href="https://www.codedshapes.com/p/we-need-to-stop-asking-llms-to-do">Geometry can be hard to describe in words</a>. The same goes for anything &#8220;graphical&#8221; like UI design.<br>I can see what I want, but explaining it with words is hard which reminds me of the <a href="https://www.youtube.com/watch?v=cDA3_5982h8">Exact Instructions Challenge</a> from a few years ago.</p><p>For geometry work and exploration like this, visual scripting is often still the quicker and better option. The instant feedback lets me see whether I got the geometry right or wrong without having to re-describe what to change.</p><p>Where I think AI takes over visual scripting is in the <a href="https://www.codedshapes.com/p/what-do-you-actually-deliver">&#8220;tool&#8221; space</a>. Where people used to create &#8220;tools&#8221; with Grasshopper, AI generated plugins do a much better job. A &#8220;tool&#8221; here refers to something that can be used repeatedly and by many people.</p><p>Plugins (AI-generated or not) are just easier to <a href="https://www.codedshapes.com/p/writing-a-script-isnt-the-same-as">deploy to other teams and people</a>. No one needs to know how to navigate Grasshopper or Dynamo just to use the tool. And since we can control how the interface behaves, we can tailor the user experience to exactly what they need to see and use. We don&#8217;t have to force our users to browse a visual script anymore. AI makes building that kind of interface and function more accessible now.</p><h2>What if we add AI to visual scripting?</h2><p>But, it doesn&#8217;t have to be AI vs visual scripting. What if we add AI to visual scripting? Can it overcome some of the short comings of pure AI or pure visual scripting ?</p><p>This year, Autodesk just added its Assistant to <a href="https://dynamobim.org/dynamo-core-4-2-release/">Dynamo Core 4.2</a>, where it can generate and modify graphs. There are options for Grasshopper too, like <a href="https://www.raven.build/en/help/overview">Raven</a>, which can build and edit scripts.</p><p>When you use AI to build a plugin or an application, checking its work means going through the code it generated. Which, maybe you can read but it&#8217;s going to be the best experience unless you really know how to use AI to generate code. But if it builds a visual script, <a href="https://www.codedshapes.com/p/does-consistency-in-scripts-even">following the components and connections</a> is a lot easier. Especially if you know Grasshopper/Dynamo but not code.</p><p>So having AI assist us with visual scripts might mean that we get the benefits of AI but an easier time modifying it&#8217;s work than raw code.</p><p>I can see myself setting up a complex visual script for the geometry, then asking AI to help fix the data when an input format changes. Which is one of the most common errors and it&#8217;s usually the most time-consuming part to fix. With the components and connections already there, I wouldn&#8217;t have to describe the whole thing from scratch. I could point it to the problem, then follow the graph to check what it changed.</p><p>But it doesn&#8217;t take away the deployment problem. Sharing visual scripts (AI made or not) would still mean other have to know how to navigate Grasshopper / Dynamo. But it does mean that we have way more options now. Instead of AI vs visual scripts, we can opted for both now too.</p><h2>So, what does this all mean?</h2><p>There&#8217;s still a place for visual scripting, AI doesn&#8217;t entirely replace it.</p><p>The fact that Autodesk is adding an assistant to Dynamo means they think so too.</p><p>When I&#8217;m exploring geometry, being able to <a href="https://www.codedshapes.com/p/how-computational-design-changes">see the result and tweak it straight away</a> is a key part of the development process. And being able to configure different ways of creating that geometry is still a very important part of the process.</p><p>Replacing that with an AI generated plugin just doesn&#8217;t make sense. The development cycle is more cumbersome and it&#8217;s hard to explain geometry to the AI in words. But adding AI to visual scripting might just give us the best of both worlds.</p><p>So, with those client conversations. AI lets their engineers build more themselves, and it makes me more efficient too. But an engineer with AI isn&#8217;t always the right setup for any problem. We&#8217;ve seen that if you don&#8217;t have the digital experience or the skillset, AI tends to suffer with geometry work and creating <a href="https://www.codedshapes.com/p/your-script-doesnt-need-to-work-on">tools that need to scale</a>.</p><p>As cliche as it sounds, the right solution depends on <a href="https://www.codedshapes.com/p/5-questions-that-made-me-rethink">what needs building</a>, the skills involved and <a href="https://www.codedshapes.com/p/you-dont-have-to-build-your-own-automation">how much time (money) you are willing to put into development</a>.</p><div class="pullquote"><p>Thanks for reading. If you&#8217;d like more articles like this, subscribe to CodedShapes to get them delivered to your inbox</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codedshapes.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.codedshapes.com/subscribe?"><span>Subscribe now</span></a></p></div><p><em><strong>Work with me:</strong> <a href="https://codedconstructs.com/contact/">https://codedconstructs.com/contact/</a></em></p><p><em><strong>Computational Design Courses: </strong><a href="https://learn.codedshapes.com/">https://learn.codedshapes.com/</a></em></p><p><em><strong>Scripository (A library of computational scripts): </strong><a href="https://scripository.com/">https://scripository.com/</a></em></p>]]></content:encoded></item><item><title><![CDATA[Making Room for Products When Projects Pay the Bills]]></title><description><![CDATA[Is there really a way to make this work ?]]></description><link>https://www.codedshapes.com/p/making-room-for-products-when-projects</link><guid isPermaLink="false">https://www.codedshapes.com/p/making-room-for-products-when-projects</guid><dc:creator><![CDATA[Braden Koh]]></dc:creator><pubDate>Wed, 07 Oct 2026 23:00:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!kfvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc931e299-cb18-490e-9187-65b36564021e_3300x1858.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_!kfvK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc931e299-cb18-490e-9187-65b36564021e_3300x1858.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kfvK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc931e299-cb18-490e-9187-65b36564021e_3300x1858.png 424w, https://substackcdn.com/image/fetch/$s_!kfvK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc931e299-cb18-490e-9187-65b36564021e_3300x1858.png 848w, https://substackcdn.com/image/fetch/$s_!kfvK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc931e299-cb18-490e-9187-65b36564021e_3300x1858.png 1272w, https://substackcdn.com/image/fetch/$s_!kfvK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc931e299-cb18-490e-9187-65b36564021e_3300x1858.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kfvK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc931e299-cb18-490e-9187-65b36564021e_3300x1858.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c931e299-cb18-490e-9187-65b36564021e_3300x1858.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2749742,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.codedshapes.com/i/218454692?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc931e299-cb18-490e-9187-65b36564021e_3300x1858.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kfvK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc931e299-cb18-490e-9187-65b36564021e_3300x1858.png 424w, https://substackcdn.com/image/fetch/$s_!kfvK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc931e299-cb18-490e-9187-65b36564021e_3300x1858.png 848w, https://substackcdn.com/image/fetch/$s_!kfvK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc931e299-cb18-490e-9187-65b36564021e_3300x1858.png 1272w, https://substackcdn.com/image/fetch/$s_!kfvK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc931e299-cb18-490e-9187-65b36564021e_3300x1858.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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><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 icon-noB79L"><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>For two years, I told people I couldn&#8217;t help them even though the tools they relied on for their projects kept breaking. Tools that I help make. </p><p>On paper, I had a great reason. I was working on one of the biggest projects the Melbourne office ever had. It was high-profile, massively urgent and needed all hands on deck. There were even people that couldn&#8217;t even go home during the holidays because of it. </p><p>Still, I had other drafters and engineers come to me with something broken or an improvement they needed on the tools that I helped built. But, I didn&#8217;t have the time to help because this project was the priority.</p><p>And from the company&#8217;s perspective, it&#8217;s the &#8220;right&#8221; move. The project brought in revenue and the company&#8217;s reputation was at stake. It&#8217;s even the "right&#8221; move personally because excelling on this project was the golden ticket for my manager and my manager&#8217;s boss. </p><p>But letting everyone else down because of it felt wrong. It&#8217;s shortsighted to go all in on the project and leave the internal tools broken. What would happen after the project ended? Would the glory of this project make up for letting everyone else down? Would they still trust me to build tools after this ? I am responsible for the people relying on them in the first place. </p><p>Even when I found time to help, <a href="https://www.codedshapes.com/p/going-fast-isnt-the-same-as-rushing">I was always rushing</a>. That might have made things worse, but I never knew whether I had two days or fifteen minutes before the project pulled me back in. So, I took whatever &#8220;free&#8221; time I had and went went as fast as I could. I was trying to squeeze in as much help as I could give. </p><p>If you balance project work with tool work, this is <a href="https://www.codedshapes.com/p/being-billable-isnt-the-same-as-being">a struggle you probably know too well</a>. It&#8217;s also a common theme I&#8217;ve touched on several times but I thought <a href="https://www.codedshapes.com/p/im-starting-codedconstructs">running my own consultancy</a> meant I would have the freedom to do things differently.</p><p>But a few months in, earning money immediately through projects is still too intoxicating.</p><div class="callout-block" data-callout="true"><p><em>Hi, I&#8217;m Braden</em></p><p><em>I write about the craft of computational design, from working with geometry and data to the experience of building tools for other people.</em></p><p><em>If you&#8217;re new to CodedShapes, welcome! You might enjoy these:</em></p><ul><li><p><em><a href="https://www.codedshapes.com/p/how-to-know-if-your-workflow-is-actually">How to know if your workflow is actually worth automating</a></em></p></li><li><p><em><a href="https://www.codedshapes.com/p/stop-using-grasshopper-for-everything">Stop using Grasshopper for everything</a></em></p></li><li><p><em><a href="https://www.codedshapes.com/p/applying-computational-design-where">How to apply computational design to your projects</a></em></p></li></ul><p><strong>If you&#8217;d like help with a workflow of your own, <a href="https://codedconstructs.com/contact/">let&#8217;s work on it together.</a></strong></p></div><h2>Long term vs short term</h2><p>I no longer have internal tools to build and maintain but the tools I&#8217;m building now are products I hope to sell. So, I still have to choose between paid work in front of me and building something that might become valuable later.</p><p>With project work, there&#8217;s <a href="https://www.codedshapes.com/p/youre-too-good-at-fixing-things">urgency, pressure and accountability to other people</a>. With tools, there&#8217;s still pressure but it&#8217;s less urgent. In fact, the pressure is subtler because at least for me, it comes in the form of guilt. </p><p>Guilt that I let a product idea or development sit there for weeks because I am too busy delivering on projects. I know that a well-made tool can be more valuable in the long run than spending another week on a project. But I also know that only building tools is not financially sustainable. And spending all my time on projects and I might never build the tools or develop the skills that would help me in the future. </p><p>So, as clich&#233; as it is, there&#8217;s a balance here.</p><p>We&#8217;ve established that trying to do both makes it easy for the short-term work to win. I doubt most managers would ever prioritise an internal tool over incoming revenue. Heck, even with my own consultancy, I struggle to do it.</p><p>I told myself, &#8220;After this week, I&#8217;ll take some time to work on those products.&#8221; That was two months ago, and I still haven&#8217;t started.</p><h2>Protected capacity</h2><p>Okay, so I needed to do something before I got swept back into working only on projects, just as I had in my previous job.</p><p>After <a href="https://www.codedshapes.com/p/the-business-models-of-digital-work">researching how other firms operate</a>, I decided to try protecting my own capacity for each kind of work. I would choose how much time to give projects and products, then put that time into my calendar before the week began. Reading Richard Rumelt&#8217;s <em>Good Strategy / Bad Strategy</em> helped me think through the choices behind that plan. A lot of it was about taking concrete steps instead of just dreaming that the right balance would come.</p><p>First, I had to answer what am I actually trying to achieve? Both in the work itself and financially? What do I actually want ? </p><p>For me, that meant creating a sustainable business where I can provide value and work on things I want to work on. Financially, that meant I wanted to make back what I used to earn, then work out what growing that income without taking more of my time would look like.</p><p>Super vague, I know. But that gave me somewhere to start. Then with that in mind, I needed to work out how to actually do that, which is the second question.</p><p>What kind of business would let me achieve those goals?</p><p>I needed to understand what a &#8220;sustainable business&#8221; meant within what I can do and what I&#8217;m willing to do. For me, that meant taking on client projects and building my own tools to sell. I will always want a mixture of the two. I enjoy projects, and they give me problems worth solving, but I also want time to develop my own products. </p><p>I&#8217;d like to see them as equal instead of &#8220;products&#8221; just filling in the downtime between projects like most firms do. So, then what are the concrete steps I can take to get there ? How much time do I want to spend on each?</p><p>A 50/50 split between projects and products seemed like a reasonable starting point for me. But I already knew that I can&#8217;t just say that, I would have to put in place something that forces me to achieve that. </p><p>Which meant getting really clear on where I am spending my time. What I now do is look ahead one or two weeks and put &#8220;work blocks&#8221; into my calendar. These are chunks of time dedicated to projects or tools, arranged around meetings and other commitments in life.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fyWx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2a5667a-9c81-4402-9cf8-1c3adce40d06_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fyWx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2a5667a-9c81-4402-9cf8-1c3adce40d06_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!fyWx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2a5667a-9c81-4402-9cf8-1c3adce40d06_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!fyWx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2a5667a-9c81-4402-9cf8-1c3adce40d06_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!fyWx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2a5667a-9c81-4402-9cf8-1c3adce40d06_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fyWx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2a5667a-9c81-4402-9cf8-1c3adce40d06_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c2a5667a-9c81-4402-9cf8-1c3adce40d06_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1600139,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.codedshapes.com/i/218454692?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2a5667a-9c81-4402-9cf8-1c3adce40d06_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fyWx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2a5667a-9c81-4402-9cf8-1c3adce40d06_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!fyWx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2a5667a-9c81-4402-9cf8-1c3adce40d06_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!fyWx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2a5667a-9c81-4402-9cf8-1c3adce40d06_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!fyWx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2a5667a-9c81-4402-9cf8-1c3adce40d06_1536x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><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 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>An illustrative week based on my TickTick calendar, with anonymised workblocks </em></figcaption></figure></div><p>That lets me see how my time is spread out before I commit to more work. As the days progress and priorities change, I can move the blocks around and check whether I&#8217;m still making room for both.</p><p>If a project takes over a tool block, I can move that block to another day and see when I&#8217;ll return to it. That takes some of the guilt out of postponing it because I know I&#8217;ll have another session. This has been essential in stopping me from rushing product work all the time.</p><h2>Making room </h2><p>The blocks also give me something to review. I can look back at how I intended to spend my time and compare it with what I actually did.</p><p>Some weeks, the project is all-consuming. I can accept that. But if I still want to build products, I need to make more room for them in the weeks that follow. Otherwise, I will keep saying 50/50 while spending my time 90/10 and I am right back where I started.</p><p>I wish I&#8217;d had that clarity at my old firm. I wanted to sit down with my manager and talk about the broken tools, the people relying on them and the project commitments competing for my time. We could have weighed the consequences of delaying each kind of work and agreed on what I should do next. Instead, project work was always the number one priority, there was no conversation at all.</p><p>This whole &#8220;plan ahead with a vision&#8221; strategy works for me or even smaller teams but I can see how difficult it would be for larger firms. As simple as it is, they would still have to agree on how much time internal tools need, plan that work alongside the projects and revisit the plan when a deadline disrupts it. Combine that with <a href="https://www.codedshapes.com/p/the-spreadsheet-is-never-just-a-spreadsheet">office politics</a>, role hierarchies and you&#8217;ll get a huge confusing mess.</p><p>I&#8217;m still figuring out the balance in my own business too. But I have to do something about working on all the things that matter to me instead of only on what is urgent. I want time to work through a problem properly, without wondering whether I have two days or fifteen minutes before I have to drop it again.</p><div class="pullquote"><p>Thanks for reading. If you&#8217;d like more articles like this, subscribe to CodedShapes to get them delivered to your inbox</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codedshapes.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.codedshapes.com/subscribe?"><span>Subscribe now</span></a></p></div><p><em><strong>Work with me:</strong> <a href="https://codedconstructs.com/contact/">https://codedconstructs.com/contact/</a></em></p><p><em><strong>Computational Design Courses: </strong><a href="https://learn.codedshapes.com/">https://learn.codedshapes.com/</a></em></p><p><em><strong>Scripository (A library of computational scripts): </strong><a href="https://scripository.com/">https://scripository.com/</a></em></p>]]></content:encoded></item><item><title><![CDATA[The Leap From a Problem to a Proposal ]]></title><description><![CDATA[It&#8217;s a bigger gap than I thought]]></description><link>https://www.codedshapes.com/p/the-leap-from-a-problem-to-a-proposal</link><guid isPermaLink="false">https://www.codedshapes.com/p/the-leap-from-a-problem-to-a-proposal</guid><dc:creator><![CDATA[Braden Koh]]></dc:creator><pubDate>Thu, 01 Oct 2026 00:00:39 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!5MRC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c9c9e2-3bbf-44da-b98d-ed6bcba9d4c2_3300x1858.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_!5MRC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c9c9e2-3bbf-44da-b98d-ed6bcba9d4c2_3300x1858.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5MRC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c9c9e2-3bbf-44da-b98d-ed6bcba9d4c2_3300x1858.png 424w, https://substackcdn.com/image/fetch/$s_!5MRC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c9c9e2-3bbf-44da-b98d-ed6bcba9d4c2_3300x1858.png 848w, https://substackcdn.com/image/fetch/$s_!5MRC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c9c9e2-3bbf-44da-b98d-ed6bcba9d4c2_3300x1858.png 1272w, https://substackcdn.com/image/fetch/$s_!5MRC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c9c9e2-3bbf-44da-b98d-ed6bcba9d4c2_3300x1858.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5MRC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c9c9e2-3bbf-44da-b98d-ed6bcba9d4c2_3300x1858.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a5c9c9e2-3bbf-44da-b98d-ed6bcba9d4c2_3300x1858.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3018451,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.codedshapes.com/i/217379198?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c9c9e2-3bbf-44da-b98d-ed6bcba9d4c2_3300x1858.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5MRC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c9c9e2-3bbf-44da-b98d-ed6bcba9d4c2_3300x1858.png 424w, https://substackcdn.com/image/fetch/$s_!5MRC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c9c9e2-3bbf-44da-b98d-ed6bcba9d4c2_3300x1858.png 848w, https://substackcdn.com/image/fetch/$s_!5MRC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c9c9e2-3bbf-44da-b98d-ed6bcba9d4c2_3300x1858.png 1272w, https://substackcdn.com/image/fetch/$s_!5MRC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5c9c9e2-3bbf-44da-b98d-ed6bcba9d4c2_3300x1858.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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><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 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I remember a colleague of mine, now a friend, coming up to my desk one day to ask me a question. Let&#8217;s call her Kate. It&#8217;s not her real name, but it&#8217;ll do.</p><p>She sat beside me and asked, &#8220;Mind if I run something by you?&#8221; She opened her laptop and started to show me the problem.</p><p>Kate had been copying and pasting bending moments for each floor from her analysis program into Excel so she could design the columns on her current project.</p><p>On a smaller building, copying the results might take an afternoon. On a taller building like this one, the work would normally be split between a few engineers, with each person taking a range of floors.</p><p>This time, two of the engineers were off sick, and Kate needed to design all the columns alone while managing three other projects. What she needed was a way to speed the entire process up without taking up so much of her time.</p><p>We immediately got to work. I searched for ways to automate the workflow while she explored what the analysis program could do. There was no API, but with the right settings, it could produce a file with a consistent format, which meant a custom script could read that file and transfer the data into Excel.</p><p>So, we tried it.</p><p>Sitting side by side, we tested a few program settings and versions of the script. Sometimes the file didn&#8217;t have enough information and Kate had to dig through the settings to get it right. Other times, the script failed because there was a bug. We spent about two or three hours going back and forth before we had something that worked.</p><p>But that effort paid off. By the end of the project, Kate had probably used the script ten to twenty times, even after meeting the first deadline. The project conditions kept changing and the columns needed to be redesigned, but she no longer had to copy the results over by hand.</p><h2>The friction being the external person</h2><p>Now that I run my own consultancy, it isn&#8217;t as easy for people to come to me with their problems anymore. I knew I would lose some of that seamlessness, but I didn&#8217;t know how hard it would be to recreate that experience.</p><p>The work itself doesn&#8217;t change. Someone comes to me with a problem, we explore it a little, then decide whether to build something. But that conversation is different when we work for different companies.</p><p>People can&#8217;t walk up to my desk anymore. They can&#8217;t sit with me through a problem. In fact, before I can even see the problem, I might need to sign an NDA. They might be worried that I am too expensive. Heck, they might even think AI can do it, so why talk to someone like me?</p><p>All of that makes sense. We no longer work for the same company. Their projects and client information need protecting, and both of us need to know <a href="https://www.codedshapes.com/p/the-three-agreements-before-i-build">what we are agreeing to</a>. But this creates a lot of friction before we even get to the problem.</p><p>When Kate and I worked for the same company, it was easy not to worry about trust and money. As someone external, I needed a way to make the work feel safe for someone who had never worked with me before.</p><p>When I started <a href="https://codedconstructs.com/">CodedConstructs</a>, I thought fixed pricing would do that. I would do so much for free because I wanted people to be clear on exactly what we were solving. I would have several meetings, do analysis work and even prototype some stuff, all to be sure before we ever agreed to work together.</p><p>It felt honest because everyone was clear on the work, and a fixed price meant the client wouldn&#8217;t get a larger bill if I took longer than expected.</p><p>It felt like the safest way to work, and it had worked well for my past clients.</p><p>Kate only had to sit beside me and open her laptop. A new client had to sign an NDA, send me their files, explain the workflow and then decide whether to spend thousands of dollars with me before we had solved one thing together. It was still too much friction. They faced a large upfront commitment, while I could spend a week on discovery work and still hear no.</p><p>It also killed any opportunity for smaller automations. The script I made with Kate would never have made sense between two companies. I could have built it in the time it took to hold the meetings and write the proposal, while the cost of all that admin could exceed the cost of the tool itself.</p><p>Those smaller jobs were also our chance to solve something real together before either of us committed to something larger.</p><h2>Trying to bring some of it back</h2><p>I had overcorrected. I knew working between companies needed more paperwork and clearer boundaries, so I made the whole engagement feel like a handover. The client describes the problem, I define the complete solution, they sign the contract, I build it and they pay for it.</p><p>That felt like how an official consultancy should work. But it created one large decision at the beginning, when we knew the least about the tool, the problem and each other.</p><p>The clarity still matters, though. Everyone still needs to understand the problem, the solution and whether the cost makes sense. But I had inflated all of that into an admin nightmare instead of just trying to solve the problem.</p><p>Sometimes a fixed price will still be the right choice. If the problem and outcome are understood, it gives everyone certainty about what will be delivered and what it will cost. But if an idea is still unclear or if someone is unsure about it, a smaller first commitment gives us room to learn and explore before we agree to the complete build. It also gives us a chance to find out <a href="https://www.codedshapes.com/p/5-questions-that-made-me-rethink">whether the thing we think is valuable actually is</a>.</p><p>So, I have started offering hourly work again.</p><p>Hourly pricing alone doesn&#8217;t make the work safer. A complex solution will take as long as it has to take. I still estimate the effort, agree on a limit and stop for a conversation if the direction changes. But starting with a few hours reduces the friction of committing to a large build when you don&#8217;t even know if it&#8217;s valuable or if you trust me yet.</p><p>It also creates room for <a href="https://www.codedshapes.com/p/what-do-you-actually-deliver">scripts and rougher automations</a> that a fixed build might not justify. Someone can bring me one awkward script or one part of a workflow. We can work through it using their real files, see whether it helps and <a href="https://www.codedshapes.com/p/it-takes-two-to-build-the-right-thing">learn how we work together</a> before committing to something bigger and more polished.</p><h2>A smaller place to start</h2><p>Hourly work won&#8217;t suit every project. Some problems are clear enough for a fixed price from the beginning. When the problem or solution is still uncertain, starting with a few hours gives us a lower-friction way to work on something real before either of us commits serious time and money.</p><p>The point is to choose how we work based on the trust between us and how much we understand about the problem. Fixed pricing can make a well-understood build predictable. Hourly work can give a muddier idea room to develop, provided we agree on the limits and keep checking whether the work is still useful.</p><p>I can&#8217;t recreate Kate walking over to my desk and opening her laptop. But I can create a smaller place to start with a new client. We can open their files, work through one real problem and decide together whether we should keep going.</p><div class="pullquote"><p>Thanks for reading <br>Subscribe to CodedShapes to get more articles like this delivered to your inbox</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codedshapes.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.codedshapes.com/subscribe?"><span>Subscribe now</span></a></p></div><p><em><strong>Work with me:</strong> <a href="https://codedconstructs.com/contact/">https://codedconstructs.com/contact/</a></em></p><p><em><strong>Resources on Computational Design: </strong><a href="https://www.codedshapes.com/p/scripository">https://www.codedshapes.com/p/scripository</a></em></p>]]></content:encoded></item><item><title><![CDATA[Planning Should Scale With Uncertainty]]></title><description><![CDATA[A correct hunch isn&#8217;t enough to start building something]]></description><link>https://www.codedshapes.com/p/planning-should-scale-with-uncertainty</link><guid isPermaLink="false">https://www.codedshapes.com/p/planning-should-scale-with-uncertainty</guid><dc:creator><![CDATA[Braden Koh]]></dc:creator><pubDate>Thu, 10 Sep 2026 00:00:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!E1od!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50b846a1-c5d3-4045-95a3-1e0404b9500a_3300x1858.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_!E1od!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50b846a1-c5d3-4045-95a3-1e0404b9500a_3300x1858.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!E1od!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50b846a1-c5d3-4045-95a3-1e0404b9500a_3300x1858.png 424w, https://substackcdn.com/image/fetch/$s_!E1od!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50b846a1-c5d3-4045-95a3-1e0404b9500a_3300x1858.png 848w, https://substackcdn.com/image/fetch/$s_!E1od!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50b846a1-c5d3-4045-95a3-1e0404b9500a_3300x1858.png 1272w, https://substackcdn.com/image/fetch/$s_!E1od!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50b846a1-c5d3-4045-95a3-1e0404b9500a_3300x1858.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!E1od!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50b846a1-c5d3-4045-95a3-1e0404b9500a_3300x1858.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/50b846a1-c5d3-4045-95a3-1e0404b9500a_3300x1858.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2499464,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.codedshapes.com/i/214248223?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50b846a1-c5d3-4045-95a3-1e0404b9500a_3300x1858.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!E1od!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50b846a1-c5d3-4045-95a3-1e0404b9500a_3300x1858.png 424w, https://substackcdn.com/image/fetch/$s_!E1od!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50b846a1-c5d3-4045-95a3-1e0404b9500a_3300x1858.png 848w, https://substackcdn.com/image/fetch/$s_!E1od!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50b846a1-c5d3-4045-95a3-1e0404b9500a_3300x1858.png 1272w, https://substackcdn.com/image/fetch/$s_!E1od!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50b846a1-c5d3-4045-95a3-1e0404b9500a_3300x1858.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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><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 icon-noB79L"><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>A client once asked me to review an automation they had been using for years. They were an engineering manufacturer with several product lines, but the automation had only been built around one of them.</p><p>It was old but still really good. An engineer could configure the product in a spreadsheet and, with a push of a button, get a 3D model, a list of materials and a detailed set of drawings ready for production. They still had to clean up the drawings and add any custom parts, but the tool removed a huge amount of manual work.</p><p>Now, they wanted that same kind of efficiency for another product line.</p><p>The obvious starting point was to repurpose the tool they already had. But <a href="https://www.codedshapes.com/p/does-your-tool-still-fit-the-way">the tool had grown around the first product over several years</a>. Its code, templates and rules all carried decisions made for that particular product. The client suspected that adapting the whole application would be expensive and bring across features the new product did not need. They still needed to know whether any of it could be carried across.</p><p>I was brought in to move the automation across. Given its history and complexity, I suggested we begin with a discovery phase. I could not assess a tool that had been working for several years from a surface-level explanation.</p><p>I discussed the existing and proposed workflows with the client and inspected the current tool&#8217;s code. Because I was coming to it fresh, I could stop and question decisions that had become a normal part of the workflow. I looked at which rules belonged to the underlying engineering process and which parts had grown around the first product line.</p><p>We spent close to a week in meetings and reviewed the codebase against sample files. The findings were close to what the client suspected. The current automation depended heavily on templates, parameters and files that were specific to one product line. Carrying all of that into the new product line would add functionality the workflow did not need and make the new application harder to maintain.</p><p>Rebuilding everything from scratch would also waste useful core engineering code. The application itself was the wrong starting point, but the codebase already had <a href="https://www.codedshapes.com/p/the-spreadsheet-is-never-just-a-spreadsheet">the company&#8217;s standards and rules baked in</a>. Those parts were worth reusing.</p><p>My final recommendation was to keep the existing automation where it was and build a new one around the second product line, reusing only the engineering logic that genuinely belonged to both. That would preserve what already worked while giving the second product line a tool designed around its own workflow.</p><p>The client&#8217;s hunch was right, but the discovery phase still mattered because it turned that hunch into a clear direction.</p><div class="callout-block" data-callout="true"><p><em>Hi, I&#8217;m Braden</em></p><p><em>I write about the craft of computational design, from working with geometry and data to the experience of building tools for other people.</em></p><p><em>If you&#8217;re new to CodedShapes, welcome! You might enjoy these:</em></p><ul><li><p><em><a href="https://www.codedshapes.com/p/how-to-know-if-your-workflow-is-actually">How to know if your workflow is actually worth automating</a></em></p></li><li><p><em><a href="https://www.codedshapes.com/p/stop-using-grasshopper-for-everything">Stop using Grasshopper for everything</a></em></p></li><li><p><em><a href="https://www.codedshapes.com/p/applying-computational-design-where">How to apply computational design to your projects</a></em></p></li></ul><p><strong>If you&#8217;d like help with a workflow of your own, <a href="https://codedconstructs.com/contact/">let&#8217;s work on it together.</a></strong></p></div><h2>A correct hunch still needs a build plan</h2><p>Clients usually know their own workflows better than I do because they use them every day. They know which parts cause trouble, where people lose time and which tools have become difficult to work around.</p><p>A reasonable suspicion and a goal are enough to begin investigating, but they are a poor basis for defining the scope and price of a build. Suspecting that the existing tool would be too expensive to adapt told us nothing about what to do next. If it was too expensive, what should they do instead?</p><p>So, we needed to find out whether the expense came from the code, the rules, the templates or the way the tool had grown over time. Maybe the hunch was wrong and replacing a template would have been enough to keep it working for the new product line.</p><p>The discovery gave us the evidence we needed to explain the hunch. We could show why adapting the whole application would be expensive, which parts were still worth reusing and what the next steps should look like.</p><h2>The investigation should match the uncertainty</h2><p>Not everything requires such a detailed discovery phase. <a href="https://www.codedshapes.com/p/what-do-you-actually-deliver">A small script and an established application carry different risks</a>, so they do not need the same investigation.</p><p>The time and effort needed to reach an answer scale with the uncertainty. We still need to <a href="https://www.codedshapes.com/p/it-takes-two-to-build-the-right-thing">understand the pain points and the workflow</a>, whether we are building a script or a full application.</p><p>Before I scope the build, I might ask for sample files, process documents, the codebase or the tool itself. That material gives us something concrete to investigate and a basis for deciding what comes next.</p><p>But we cannot stay in discovery forever. At some point, more investigation stops removing meaningful uncertainty and only delays the build. I tend to match the investigation to the consequences of the unknowns. If we cannot explain <a href="https://www.codedshapes.com/p/the-three-agreements-before-i-build">how it should work, what the inputs and outputs are or which assumptions could change the scope</a>, then we still need to investigate more.</p><p>Sometimes a call and a few sample files are all it takes. In a case like this one, it can mean working through the manual process, the current problems and the existing code.</p><p>In the end, the client did not get a surprising answer. Their hunch was correct, but it was now supported by evidence and they have a clear direction on how to move forward. They knew what to leave untouched and what could be reused.</p><p>So if something is complex and you have a hunch about it. You should <a href="https://www.codedshapes.com/p/are-you-thinking-about-your-script">test it before making any decisions</a>. This sounds like common sense but in this AI era, it can be so easy to over build something because it seemed easier.</p><p>The whole point of this is to understand what is going on and how to move forward.</p><div class="pullquote"><p>Thanks for reading. If you&#8217;d like more articles like this, subscribe to CodedShapes to get them delivered to your inbox</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codedshapes.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.codedshapes.com/subscribe?"><span>Subscribe now</span></a></p></div><p><em><strong>Work with me:</strong> <a href="https://codedconstructs.com/contact/">https://codedconstructs.com/contact/</a></em></p><p><em><strong>Computational Design Courses: </strong><a href="https://learn.codedshapes.com/">https://learn.codedshapes.com/</a></em></p><p><em><strong>Scripository (A library of computational scripts): </strong><a href="https://scripository.com/">https://scripository.com/</a></em></p>]]></content:encoded></item><item><title><![CDATA[Week 8: An Abysmal Reply Rate ]]></title><description><![CDATA[Sometimes you gotta just stop and listen to the market]]></description><link>https://www.codedshapes.com/p/week-8-an-abysmal-reply-rate</link><guid isPermaLink="false">https://www.codedshapes.com/p/week-8-an-abysmal-reply-rate</guid><dc:creator><![CDATA[Braden Koh]]></dc:creator><pubDate>Fri, 04 Sep 2026 06:08:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/47fSd36MBgU" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div id="youtube2-47fSd36MBgU" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;47fSd36MBgU&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/47fSd36MBgU?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Alright, week 8.</p><p>Two months into doing this full-time.</p><p>I hit another wall, or maybe an obstacle? I don&#8217;t know yet.</p><p>For the past two months, a big part of finding clients has been outbound marketing. It is the modern version of door-knocking. Instead of physically walking up to someone&#8217;s house to ask if they are interested in what you are selling, you send a cold message in form of an email or DM. </p><p>It is also notorious place for spam and people bothering you with stuff that you really don&#8217;t want. But when outbound marketing works, it is a way to let people know you exist.</p><p>Well, I don&#8217;t want to spam people. I don&#8217;t even think it would work if I tried anyway. I can&#8217;t email 10,000 people asking, <em>&#8220;Hey, do you need automation?&#8221;</em> and expect everyone to come running to me with their automation needs.</p><p>So, I have been using AI to help me find and filter for companies and teams that I think might benefit from what I do. I look for signals on their website or someone&#8217;s profile, then write an email around what I can see and what I think I can help with.</p><p>Basically, I acknowledge the signal, tell them about my experience or something similar I have done before, then explain where I may be able to help. It is a bet that the signal points to a problem they have that I might be able to help with.</p><p>And I did get a few replies and meetings from it. It was enough to make me think it was semi-working. </p><p>I knew my reply rates were lower that usual, but I am only one person, so I don&#8217;t need that many clients in one go.</p><h2>Looking at the numbers</h2><p>I couldn&#8217;t put that feeling to rest. So, this week I decided to do a bit of a data dive. Now that I have been doing outreach for two months, I have some data to look back on.</p><p>I wanted to know whether it was <em>actually</em> working, so I pulled the data together and looked at it properly.</p><p>My reply rate was about 5%. These are replies not whether or not it led to projects.</p><p>It was abysmal.</p><p>I felt really shit when I saw it. I mean, I know I am new to this and the first few emails I sent were really clunky, but it still sucks. It felt like I wasted two months of my time just flailing around. </p><p>So, I stopped what I was doing, took a break and re-evaluated the whole thing. </p><p>I am not going to start spamming people as promising as the &#8220;marketing gurus&#8221; on outbound marketing makes it sound. And the idea of using signals still makes sense to me. I have to change how I am doing it. And I have to experiment more instead of sticking with one thing and hoping it will work. </p><p>This will be the third direction I have tried in two months now. Every time I think I understand outbound a little better, I find another mistake I have been making. Or that it&#8217;s a failed experiment.</p><p>It is depressing to look back and think the last two months could have gone differently if I had known then what I know now. Yeah, I know there&#8217;s a quote somewhere about hindsight and all that. But it doesn&#8217;t mean it still doesn&#8217;t suck. </p><p>Never have I been so envious of people that started their own business and it just worked from the start. For me, it feels like running one experiment after another until something works.</p><p>It is me saying to the market, <em>&#8220;Here&#8217;s what I believe in. Do you think it works?&#8221;</em> and the market telling me to shove it where the sun don&#8217;t shine.</p><p>I don&#8217;t know if the next version will work, but I guess that&#8217;s the process, ey?</p><p>Alright, thanks for reading.</p><p>Onward to week 9.</p><div class="pullquote"><p>Thanks for reading,<br>Subscribe to follow the journey directly from your inbox!</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codedshapes.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.codedshapes.com/subscribe?"><span>Subscribe now</span></a></p></div><p><em><strong>Work with me:</strong> <a href="https://codedconstructs.com/contact/">https://codedconstructs.com/contact/</a></em></p><p><em><strong>Resources on Computational Design: </strong><a href="https://www.codedshapes.com/p/scripository">https://www.codedshapes.com/p/scripository</a></em></p>]]></content:encoded></item><item><title><![CDATA[The Proposal I Shouldn’t Have Written]]></title><description><![CDATA[Part of confidence is being able to stand my ground]]></description><link>https://www.codedshapes.com/p/the-proposal-i-shouldnt-have-written</link><guid isPermaLink="false">https://www.codedshapes.com/p/the-proposal-i-shouldnt-have-written</guid><dc:creator><![CDATA[Braden Koh]]></dc:creator><pubDate>Thu, 03 Sep 2026 00:01:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!czww!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff77dd16-7189-491c-81f6-7c6529f1d83d_3300x1858.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_!czww!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff77dd16-7189-491c-81f6-7c6529f1d83d_3300x1858.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!czww!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff77dd16-7189-491c-81f6-7c6529f1d83d_3300x1858.png 424w, https://substackcdn.com/image/fetch/$s_!czww!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff77dd16-7189-491c-81f6-7c6529f1d83d_3300x1858.png 848w, https://substackcdn.com/image/fetch/$s_!czww!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff77dd16-7189-491c-81f6-7c6529f1d83d_3300x1858.png 1272w, https://substackcdn.com/image/fetch/$s_!czww!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff77dd16-7189-491c-81f6-7c6529f1d83d_3300x1858.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!czww!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff77dd16-7189-491c-81f6-7c6529f1d83d_3300x1858.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ff77dd16-7189-491c-81f6-7c6529f1d83d_3300x1858.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2831480,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.codedshapes.com/i/213229049?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff77dd16-7189-491c-81f6-7c6529f1d83d_3300x1858.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!czww!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff77dd16-7189-491c-81f6-7c6529f1d83d_3300x1858.png 424w, https://substackcdn.com/image/fetch/$s_!czww!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff77dd16-7189-491c-81f6-7c6529f1d83d_3300x1858.png 848w, https://substackcdn.com/image/fetch/$s_!czww!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff77dd16-7189-491c-81f6-7c6529f1d83d_3300x1858.png 1272w, https://substackcdn.com/image/fetch/$s_!czww!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff77dd16-7189-491c-81f6-7c6529f1d83d_3300x1858.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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><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 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I was watching TV after dinner when I heard my phone buzz on the table.</p><p>So, like clockwork, I picked it up to check. I had a new email.</p><p>It was from Daniel (not his real name), a potential client I&#8217;d spoken to the week before. I&#8217;d just wrapped up some discovery work for his firm and sent him a proposal.</p><p>I was actually surprised at how quickly he responded. I had been planning to follow up too. Anyway, I was proud of this proposal. I had done my research, explored what was possible and believed the tool we were about to build would be good for both of us. It would improve his workflow, and I sure could use the money. Him replying this quickly sounds like good news.</p><p>So, I opened the email.</p><p>Daniel thanked me for all the work, but they had decided <em>not to proceed.</em></p><p>I&#8217;d like to tell you my heart sank, but really, I just locked my phone and continued watching TV.</p><p>The TV kept playing, I think I went through two or even three episodes and I couldn&#8217;t tell you what was on them. My mind was elsewhere. I was trying to figure out what had gone wrong.</p><div class="callout-block" data-callout="true"><p><em>Hi, I&#8217;m Braden</em></p><p><em>I write about the craft of computational design, from working with geometry and data to the experience of building tools for other people.</em></p><p><em>If you&#8217;re new to CodedShapes, welcome! You might enjoy these:</em></p><ul><li><p><em><a href="https://www.codedshapes.com/p/how-to-know-if-your-workflow-is-actually">How to know if your workflow is actually worth automating</a></em></p></li><li><p><em><a href="https://www.codedshapes.com/p/stop-using-grasshopper-for-everything">Stop using Grasshopper for everything</a></em></p></li><li><p><em><a href="https://www.codedshapes.com/p/applying-computational-design-where">How to apply computational design to your projects</a></em></p></li></ul><p><strong>If you&#8217;d like help with a workflow of your own, <a href="https://codedconstructs.com/contact/">let&#8217;s work on it together.</a></strong></p></div><h2>The discovery went really well</h2><p>After a few back-and-forth emails, we&#8217;d finally made it to a call.</p><p>Only five minutes in, we were already riffing on ideas for automating his current preliminary design process. We were on the same wavelength too. I was finishing his sentences, or so it felt. He&#8217;d even been using Claude to help him out. But he just couldn&#8217;t get Claude to talk to the engineering program. So, I didn&#8217;t need to convince him about automation. He was already a strong proponent of it.</p><p>The biggest problem we identified was that his team was spending too long cleaning and redrawing the architect&#8217;s input before they could begin designing. When they finally produced some structural advice, the plans would change and they would have to start all over again. The loop from architect to structural advise was too manual and too long.</p><p>So, to help, Daniel wanted to take a floor plan from an architect, pass it through some kind of staging area for the engineering inputs, then produce a preliminary analysis model. We&#8217;re talking about dragging a file, filling in a form and getting an analysis model out of it.</p><p>I could already picture the workflow, and as we riffed on ideas, he seemed ready to start. So, the call ended with me requesting sample files to iron out all the details of this workflow. To put pen to paper.</p><h2>Two out of five</h2><p>I spent the next couple of days researching Daniel&#8217;s engineering program, working out what its API would let me do and prototyping the workflow.</p><p>It turned out that two of the five things he wanted to automate weren&#8217;t supported. Maybe there was some hacked way around it, but the API didn&#8217;t support them. So, I sent Daniel a quick email with an update, a few images of the prototype and how I envisioned the tool working. I also explained that I would continue with the proposal because we could still solve three of the five things.</p><p>He didn&#8217;t reply, so I treated that as permission to continue. No news is good news, I told myself. Plus, the call and emails had gone so well that I assumed Daniel just wanted to start.</p><p>I spent the day writing up the proposal. I worked through the costing, finalised the workflow, documented the tool requirements and defined how we would test it. By the end, I had written a proposal for something I could build and <a href="https://www.codedshapes.com/p/how-i-actually-know-if-my-scripts">truly believed would be useful</a>.</p><p>So, I sent it off, believing we were about to change how his firm worked. Well, then I got that email.</p><h2>Asking for feedback</h2><p>The morning after the rejection, I read the email a <s>couple</s> ten more times, hoping it would tell me what I had done wrong. Maybe there was a hint, a line, something I missed while being too excited to deliver.</p><p>The call had gone so well and the proposal seemed so clear. What in the world happened?</p><p>After staring at the same email for far too long, I still had no explanation. No hint of what had gone wrong. I could almost cite you the email from memory.</p><p>So, I decided to ask Daniel.</p><p>The worst thing that could happen was that he wouldn&#8217;t reply. So, I drafted something and sent it.</p><p>To my surprise, Daniel replied.</p><p>He was generous enough to give me some honest feedback. Which was when I found out that those two things the API didn&#8217;t support were actually the critical features for the automation. The remaining three would have improved his workflow, but his existing process handled them well enough. He couldn&#8217;t justify paying for something that he already did decently. It just wasn&#8217;t painful enough.</p><p>I&#8217;ve written before about <a href="https://www.codedshapes.com/p/how-to-know-if-your-workflow-is-actually">how to know whether a workflow is actually worth automating</a>. I failed to ask the question again after the scope changed. I had been comparing my proposal with the friction in his workflow. Daniel was comparing it with an existing process that already worked and cost him nothing new. Why would he pay for something only slightly more refined?</p><h2>I should have pushed for clarity</h2><p>The feedback helped, but I still felt blindsided. In the moment, it felt like I&#8217;d done nothing wrong. The call felt aligned, and the tool felt valuable.</p><p>The problem was that I didn&#8217;t stop to think when we got new information. I overlooked the fact that a change in scope meant less value for Daniel.</p><p>I had already argued that <a href="https://www.codedshapes.com/p/it-takes-two-to-build-the-right-thing">it takes two people to build the right thing</a>, yet I kept pushing through on my own after getting new information. Yes, Daniel didn&#8217;t reply to my first email, but I should have followed up or insisted on another call. I should have asked:</p><p><em>Given those limitations, is the remaining workflow still valuable enough for you to pursue?</em></p><p>That would have saved me the time I spent writing a proposal for a scope Daniel no longer valued. It might also have led us to another way around the limitations, or a different workflow we could have explored together. I can&#8217;t know. What I do know is that I should have waited until the workflow was <a href="https://www.codedshapes.com/p/the-three-agreements-before-i-build">clear and </a><em><a href="https://www.codedshapes.com/p/the-three-agreements-before-i-build">agreed</a></em><a href="https://www.codedshapes.com/p/the-three-agreements-before-i-build"> on</a>.</p><p>Technically, everything went well. I understood the problem, the workflow and its limitations. I didn&#8217;t understand which parts mattered enough for Daniel to pay to change them.</p><p>I&#8217;ve learnt my lesson. Next time the scope changes in any meaningful way, I&#8217;ll get back on a call before I open the proposal document. If we can&#8217;t agree that what remains is still worth pursuing, there is no proposal to write yet.</p><div class="pullquote"><p>Thanks for reading. If you&#8217;d like more articles like this, subscribe to CodedShapes to get them delivered to your inbox</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codedshapes.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.codedshapes.com/subscribe?"><span>Subscribe now</span></a></p></div><p><em><strong>Work with me:</strong> <a href="https://codedconstructs.com/contact/">https://codedconstructs.com/contact/</a></em></p><p><em><strong>Computational Design Courses: </strong><a href="https://learn.codedshapes.com/">https://learn.codedshapes.com/</a></em></p><p><em><strong>Scripository (A library of computational scripts): </strong><a href="https://scripository.com/">https://scripository.com/</a></em></p>]]></content:encoded></item><item><title><![CDATA[Week 7: Changing How I Price My Work]]></title><description><![CDATA[Sometimes the market changes your mind]]></description><link>https://www.codedshapes.com/p/week-7-changing-how-i-price-my-work</link><guid isPermaLink="false">https://www.codedshapes.com/p/week-7-changing-how-i-price-my-work</guid><dc:creator><![CDATA[Braden Koh]]></dc:creator><pubDate>Fri, 28 Aug 2026 07:00:35 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/6aCTiVkHrSE" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div id="youtube2-6aCTiVkHrSE" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;6aCTiVkHrSE&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/6aCTiVkHrSE?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Alright, week 7.</p><p>Mostly business as usual. Some product work, meetings with potential clients and still creating content. I am also happy to report that the time blocking method from l <a href="https://www.codedshapes.com/p/week-3-strong-on-paper">week 3</a> is still going strong.</p><p>The more interesting news is that last week&#8217;s in-person meeting turned into a real proposal this week. Writing the reply made me realise how much trust my usual pricing model asks from a new client.</p><h2>A smaller first bet</h2><p>Until now, I have generally offered fixed-fee development followed by a retainer for any updates or new features.</p><p>My theory, and one that has worked with previous clients, was that a fixed fee made the cost predictable. If the work took more time or effort than expected, I ate the cost on my end. The client knew what they would pay, with no hidden costs.</p><p>But the last few weeks have taught me that a fixed fee can still feel risky from the client&#8217;s perspective, especially if it is our first time working together.</p><p>Let&#8217;s say you were the client.</p><p>You&#8217;ve reached out to me, we&#8217;ve gone back and forth over email and agreed to a call or even an in-person meeting. The meeting goes well. I understand what you need and we both come away with a good feeling.</p><p>Then, a week after sending me some sample models and files, you receive a proposal that says the automation will cost $10,000.</p><p>Now you have to decide whether the value is worth that cost. You also have to trust that I can deliver the tool you want, even though we&#8217;ve never worked together before. And how sure are you that this tool is what you need in the first place?</p><p>Even after a good meeting, that is a big first bet.</p><p>In the past few weeks, I tried to close that gap by doing deeper unpaid discovery. I spent more time clarifying the problem and working out the likely solution before sending a proposal.</p><p>That makes the scope clearer, but the final jump is still there. The client still has to decide whether the $10,000 is worth it, while I might spend days working through a proposal that gets rejected.</p><p>Writing this week&#8217;s proposal made that gap hard to ignore.</p><p>So, I am trying capped hourly work, something I was against from the beginning.</p><p>I estimate how many hours the work should take and agree on a maximum with the client. If it takes less time, they only pay for the hours I used. If it looks like I will exceed the cap, we stop and talk first.</p><p>I have written before that the <a href="https://www.codedshapes.com/p/the-business-models-of-digital-work">hourly rate model is a poor proxy for value</a>. I still think that is true. But it is a useful proxy for effort, and everyone understands it.</p><p>Fixed pricing still has a place. For a first engagement, though, capped hourly work gives the client a ceiling without asking them to pay for the whole ceiling if the work takes less time. It also means I can take on smaller scripts and automations that do not need to become full-blown applications.</p><p>It feels more like becoming a client&#8217;s automation partner. We can start with one piece of work, learn how we work together and decide where to go next.</p><p>I don&#8217;t know if this will work long term, or even short term. But I won&#8217;t know until I try.</p><p>Alright, thanks for reading. </p><p>Onward to week 8.</p><div class="pullquote"><p>Thanks for reading <br>Subscribe to CodedShapes to get more articles like this delivered to your inbox</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codedshapes.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.codedshapes.com/subscribe?"><span>Subscribe now</span></a></p></div><p><em><strong>Work with me:</strong> <a href="https://codedconstructs.com/contact/">https://codedconstructs.com/contact/</a></em></p><p><em><strong>Resources on Computational Design: </strong><a href="https://www.codedshapes.com/p/scripository">https://www.codedshapes.com/p/scripository</a></em></p>]]></content:encoded></item><item><title><![CDATA[What Does It Take to Trust a Custom Tool?]]></title><description><![CDATA[Digital Ownership is more than just building]]></description><link>https://www.codedshapes.com/p/what-does-it-take-to-trust-a-custom</link><guid isPermaLink="false">https://www.codedshapes.com/p/what-does-it-take-to-trust-a-custom</guid><dc:creator><![CDATA[Braden Koh]]></dc:creator><pubDate>Thu, 27 Aug 2026 00:01:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!DlZI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd18a39fc-6715-49f4-9a73-f421ea9019ab_3300x1858.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_!DlZI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd18a39fc-6715-49f4-9a73-f421ea9019ab_3300x1858.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DlZI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd18a39fc-6715-49f4-9a73-f421ea9019ab_3300x1858.png 424w, https://substackcdn.com/image/fetch/$s_!DlZI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd18a39fc-6715-49f4-9a73-f421ea9019ab_3300x1858.png 848w, https://substackcdn.com/image/fetch/$s_!DlZI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd18a39fc-6715-49f4-9a73-f421ea9019ab_3300x1858.png 1272w, https://substackcdn.com/image/fetch/$s_!DlZI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd18a39fc-6715-49f4-9a73-f421ea9019ab_3300x1858.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DlZI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd18a39fc-6715-49f4-9a73-f421ea9019ab_3300x1858.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d18a39fc-6715-49f4-9a73-f421ea9019ab_3300x1858.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2805770,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.codedshapes.com/i/212228010?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd18a39fc-6715-49f4-9a73-f421ea9019ab_3300x1858.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DlZI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd18a39fc-6715-49f4-9a73-f421ea9019ab_3300x1858.png 424w, https://substackcdn.com/image/fetch/$s_!DlZI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd18a39fc-6715-49f4-9a73-f421ea9019ab_3300x1858.png 848w, https://substackcdn.com/image/fetch/$s_!DlZI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd18a39fc-6715-49f4-9a73-f421ea9019ab_3300x1858.png 1272w, https://substackcdn.com/image/fetch/$s_!DlZI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd18a39fc-6715-49f4-9a73-f421ea9019ab_3300x1858.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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><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 icon-noB79L"><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>On the bottom right corner of any engineering or architectural drawing, you can find the initials of the people who drew, checked and approved it. Somewhere nearby, you can usually see a history of how the drawing has changed and who worked on it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gAJD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34315f4-fa91-4e8d-8871-b023789e1c05_2172x724.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gAJD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34315f4-fa91-4e8d-8871-b023789e1c05_2172x724.png 424w, https://substackcdn.com/image/fetch/$s_!gAJD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34315f4-fa91-4e8d-8871-b023789e1c05_2172x724.png 848w, https://substackcdn.com/image/fetch/$s_!gAJD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34315f4-fa91-4e8d-8871-b023789e1c05_2172x724.png 1272w, https://substackcdn.com/image/fetch/$s_!gAJD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34315f4-fa91-4e8d-8871-b023789e1c05_2172x724.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gAJD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34315f4-fa91-4e8d-8871-b023789e1c05_2172x724.png" width="1456" height="485" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d34315f4-fa91-4e8d-8871-b023789e1c05_2172x724.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:485,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1223531,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.codedshapes.com/i/212228010?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34315f4-fa91-4e8d-8871-b023789e1c05_2172x724.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gAJD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34315f4-fa91-4e8d-8871-b023789e1c05_2172x724.png 424w, https://substackcdn.com/image/fetch/$s_!gAJD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34315f4-fa91-4e8d-8871-b023789e1c05_2172x724.png 848w, https://substackcdn.com/image/fetch/$s_!gAJD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34315f4-fa91-4e8d-8871-b023789e1c05_2172x724.png 1272w, https://substackcdn.com/image/fetch/$s_!gAJD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd34315f4-fa91-4e8d-8871-b023789e1c05_2172x724.png 1456w" sizes="100vw"></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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><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 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A regular title block on a drawing</figcaption></figure></div><p>Yes, it gives people credit but more importantly, it shows front and center who is responsible for it. It&#8217;s not &#8220;who&#8217;s the amazing genius that drew this&#8221;, it&#8217;s more &#8220;if this went horribly, who do we blame&#8221;.</p><p>And yeah, it makes sense. A drawing depicts something real and if it goes wrong, people can get hurt. It&#8217;s why the approval process can be so rigorous. Only a qualified person can sign off on drawings and there&#8217;s usually a round or two of review before someone on site sees it. Heck, even with all of this, companies still pay a lot in insurance because the risk doesn&#8217;t go away.</p><p>Now, imagine me. Coming along and <a href="https://www.codedshapes.com/p/im-starting-codedconstructs?r=yraxj">pushing digital work in the AEC</a> to these people. But there&#8217;s <a href="https://www.codedshapes.com/p/your-tools-dont-last-because-its?r=yraxj">no title block for a script or a tool</a>. Sure, my name is on the tools that I make, but it doesn&#8217;t carry the same weight. If the tool goes badly, I might lose a client or damage my reputation. The professional responsibility still lies with the person who signs off on the drawing, not the tool or how we got there.</p><p>Their name is on the drawing, their registration sits behind that name and the company has insurance in case something goes wrong. It&#8217;s also why we don&#8217;t yet let AI design buildings on its own.</p><blockquote><p><em>&#8220;AI cannot be held accountable, nor can it replace the training, experience, and judgement of a professional engineer.&#8221;</em> - <a href="https://www.asce.org/advocacy/policy-statements/ps573---artificial-intelligence-and-engineering-responsibility">ASCE, Policy Statement 573</a> (2024)</p></blockquote><p>I still have a responsibility as the person who made it. I should be responsible for how the tool behaves, what its limits are and what happens when it stops working. That is a different kind of responsibility from the one carried by the engineer, but there&#8217;s just no formal bearing for it.</p><p>The lack of accountability on with tools and AI is why human judgement has to stay in the loop, but it only answers one side of the problem. Because if the engineer still carries the professional responsibility, what would make them put their name behind a custom tool built by someone else?</p><div class="callout-block" data-callout="true"><p><em>Hi, I&#8217;m Braden</em></p><p><em>I write about the craft of computational design, from working with geometry and data to the experience of building tools for other people.</em></p><p><em>If you&#8217;re new to CodedShapes, welcome! You might enjoy these:</em></p><ul><li><p><em><a href="https://www.codedshapes.com/p/how-to-know-if-your-workflow-is-actually">How to know if your workflow is actually worth automating</a></em></p></li><li><p><em><a href="https://www.codedshapes.com/p/stop-using-grasshopper-for-everything">Stop using Grasshopper for everything</a></em></p></li><li><p><em><a href="https://www.codedshapes.com/p/applying-computational-design-where">How to apply computational design to your projects</a></em></p></li></ul><p><strong>If you&#8217;d like help with a workflow of your own, <a href="https://codedconstructs.com/contact/">let&#8217;s work on it together.</a></strong></p></div><h2>The answer is trust</h2><p>When someone looks into automating something, we don&#8217;t have to jump straight to custom tools. Think about using Excel instead of pen and paper.</p><p>When you work out 1 + 1 by hand, you use your judgement at every step before writing down &#8220;2&#8221; as the answer. When you do the same thing in Excel, you exercise that judgement earlier. You decide that Excel can be trusted, then allow it to perform those steps for you.</p><p>You haven&#8217;t given up responsibility for the answer, because if it spits out &#8220;1654&#8221;, you as the human need to know that&#8217;s wrong. But you have given up some direct control over how it was produced. Part of the judgement moves into the tool while the accountability stays with the person approving the result.</p><p>That decision is easy with something like Excel. It has been around for years, its limits are familiar and there are established ways of checking its output. Thousands of other people use it every day. It has earned enough trust that most of us don&#8217;t stop to question every calculation.</p><p>A custom-made tool like a plugin or standalone application doesn&#8217;t have any of that.</p><p>Not only would it have been made recently (time hasn&#8217;t had a chance to test it), every tool is arguably one of a kind. Because it&#8217;s <a href="https://www.codedshapes.com/p/your-script-doesnt-need-to-work-on?r=yraxj">unique to each client&#8217;s workflow</a>. It&#8217;s kind of the point. Industry-standard tools are made to work for everyone, while a custom tool is developed around the way one team works and the exact problem they need to solve.</p><p>It&#8217;s like the difference between buying a suit from a shop and having one made for you. The one from the shop is familiar and predictable, but it probably won&#8217;t fit perfectly. The custom suit should fit the way you need it to, but you have to trust that it won&#8217;t rip apart the minute you move too much.</p><p>The benefit of a custom tool is that bespoke fit. The cost is that it has no history, broad adoption or familiar process to fall back on. You can&#8217;t just ask someone next to you why your custom tool isn&#8217;t working, the same way you can with Excel. Without the custom tool, the work might be slower and painful, but at least you can see and control every step.</p><p>So what gives a custom tool enough credibility for an engineer to put their name behind its output? It can&#8217;t borrow trust from years of use. Someone has to take responsibility for earning that trust.</p><h2>Building trust with digital ownership</h2><p>It&#8217;s not enough to say &#8220;trust me bro, the tool I build will solve all your problems&#8221;.</p><p>Ownership is how we make a custom-built tool less of a leap of faith. It&#8217;s about reducing the risk and clarifying what the tool does, what it needs and what happens after it has been built. <a href="https://www.codedshapes.com/p/it-takes-two-to-build-the-right-thing">It&#8217;s really a two-way thing.</a></p><p>I don&#8217;t want to come in, tell you how to do your job and then leave when things &#8220;get real&#8221;. When I say ownership, I mean having a real stake in what happens after the decision to build. You should be able to trust what I&#8217;ve built, know that I can explain what happened when it fails and have a plan for what happens next. The engineer still owns their judgement and the final call on the output. The part I can own is how the tool behaves and what it produces when it&#8217;s used appropriately.</p><p>That responsibility doesn&#8217;t have to stay with me forever, but it can&#8217;t disappear when the build ends either. It needs a known place to go.</p><p>For a tool that has never existed before, there are three questions that define ownership to me. They follow the life of the tool: what it needs to achieve before we build, how people can understand it while they use it, and who looks after it afterwards.</p><p>Then, when we can answer these questions, we have to <em>write them down</em>, so that they hold whoever built the tool accountable to the people relying on it. It turns the <a href="https://www.codedshapes.com/p/being-a-computational-designer-is">abstractness of digital work</a> into something with a clear input, steps and outputs.</p><h3>How do we ensure the tool does what you need?</h3><p>The first risk is that it doesn&#8217;t do what you need. It&#8217;s not broken, it just doesn&#8217;t solve the problem the way you thought it would. It&#8217;s like making a wish with an evil genie, wish to be the smartest in the world and the genie does it by making everyone around you stupid. You got the result but just not what you actually wanted.</p><p>So, the first step before building anything is to get clear on what it is we are actually solving. It&#8217;s not just a &#8220;let&#8217;s automate this&#8221; and we just do it. That&#8217;s why the <a href="https://www.codedshapes.com/p/the-three-agreements-before-i-build">scoping conversation</a>, prototyping and research are a big part of the work. They are often treated as the necessary evil before building the actual tool, but it&#8217;s really the most important part.</p><p>The whole point of a custom tool is to build something that solves your problem the way you need it to. If we don&#8217;t agree on the problem and what a useful result looks like, we can&#8217;t build a tool that is actually valuable for you.</p><p>The suit analogy matters here too. A tailor can&#8217;t make something fit by guessing. You have to get fitted, choose the material and decide on the style. The tailor should make recommendations, but ultimately you have to decide if it&#8217;s something you want. Scoping a custom tool works the same way.</p><h3>How do we know what the tool is doing?</h3><p>Once we&#8217;ve ironed out the specifics of what the custom tool will solve, how does it go about doing that?</p><p>In Excel terms, what happens when I put in <code>1 + 1 * 10</code>? Excel gives me 11 because it performs the multiplication first. It has the same rules that we use in our heads, so that the steps it performs is correct.</p><p>Understanding a custom tool works the same way. We need to clarify the steps it takes and the assumptions it makes. For a complex tool, this happens at a high level so that everyone involved can understand it. You don&#8217;t need to understand the code, just the intention and the main steps it takes. It&#8217;s my job to communicate that to everyone involved and ensure that we all <a href="https://www.codedshapes.com/p/are-you-thinking-about-your-script?r=yraxj">agree on how the tool works</a> and what&#8217;s needed to make it work reliably.</p><p>For my engagements, this normally means testing the tool against sample models and files, then agreeing on whether the result is correct. Trying as best to simulate real world working conditions and ensuring that the tool produces the ideal output.</p><p>A tool you can&#8217;t understand is a tool you have to take on blind faith. And because it&#8217;s a &#8220;one of a kind&#8221; tool, there are no YouTube videos to help you. The person building it has to make its behavior clear enough for the people putting their names behind its output.</p><h3>Who looks after it when something changes or goes wrong?</h3><p>The first two questions can be answered during the build. The third needs an answer for as long as the tool remains in use. Once the tool is made, somebody still needs the time and authority to <a href="https://www.codedshapes.com/p/what-happens-when-the-person-who?r=yraxj">maintain it</a>.</p><p>A tool might work perfectly for the first five projects, then stop because the <a href="https://www.codedshapes.com/p/youll-never-see-me-saying-automation">software was updated</a>, the input format changed or the team started working differently. Software isn&#8217;t a &#8220;set and forget&#8221; thing. The tool has to be revisited when the environment around it changes.</p><p>There is also a difference between a defect and a changed requirement. If the tool stops working against the requirements we agreed on, that is a defect. If the software, inputs or workflow have changed, that is new work.</p><p>The point here is that there should be a clear path forward to keeping the tool usable and maintained. If a client stopped working with me tomorrow, they should still be able to understand the tool, use it and find someone else to maintain it.</p><p>I think of that person as the named tool owner. They aren&#8217;t responsible for every way somebody uses it. The engineer still owns that judgement. The tool owner understands how it behaves, keeps the documentation together, coordinates changes and makes sure problems have somewhere to go.</p><p>This responsibility could stay with the original developer, perhaps through a retainer if it&#8217;s an external person like me, or it could move to someone inside the company. Either way, it&#8217;s about making the responsibility explicit before everyone moves on. Just because the tool works now doesn&#8217;t mean the work is done.</p><p>The responsibility for the tool needs a home, and whoever takes it needs the knowledge, time and authority to act.</p><h2>Why most tools never get an owner</h2><p>A lot of internal tools don&#8217;t start as tools. They start as an answer to an immediate project problem. Someone opens Grasshopper, Dynamo, Excel or whatever else they have and builds a way through the work in front of them.</p><p>At that point, success means getting the project delivered. If the script works, it has done its job. Nobody stops to decide who owns it, how it should be tested outside that project or what happens if another team starts relying on it.</p><p>But useful tools spread. Someone shares the file, another project picks it up and eventually the person who built it becomes the default contact whenever something goes wrong. They are treated like the owner because they know the most about it, even though nobody gave them the time or authority to actually own it.</p><p>The work that would make ownership real sits between roles. Scoping the problem properly, making sure people understand what the tool does, testing it, writing things down and planning who looks after it are all part of the tool&#8217;s life. But they aren&#8217;t the visible act of building it, and inside a company they <a href="https://www.codedshapes.com/p/being-billable-isnt-the-same-as-being?r=yraxj">aren&#8217;t always billable</a>.</p><p>So when project work takes over, those are the first things to lose time. The tool can still have a builder and plenty of people using it, but no one has formally taken responsibility for what happens next.</p><p>The builder might care about it. They might work nights or weekends to keep it alive. But without an owner, the tool eventually fades away or becomes so brittle that everyone&#8217;s afraid to modify it.</p><p>This is why ownership has to be more than a name attached to the file. It has to be assigned. Somebody needs the knowledge, time and authority to look after the tool from the first conversation through to the day the workflow changes.</p><h2>What this looks like in practice</h2><p>I&#8217;m not trying to change who carries professional liability in the industry. We made the tools, so we should be responsible for how they behave. Not for how they&#8217;re used.</p><p>In practice, the answers to those three questions need three places to live.</p><p>The problem, agreed outcome, acceptance criteria and support boundaries belong in the proposal or contract. It doesn&#8217;t have to capture every detail, but it should make the commitment clear before the building starts.</p><p>The inputs, assumptions, main steps, limits and test results belong in documentation that stays with the tool. That gives the people using it something concrete to check rather than asking them to rely on memory or blind faith.</p><p>Before the build ends, the tool needs a named owner and an agreed path for maintenance or handover. That is how the responsibility survives after the original builder moves on.</p><p>That is what I mean by digital ownership. It is the responsibility around the tool that the title block gives to the drawing. When that responsibility is clear, people have a reason to trust the tool rather than taking it on blind faith.</p><p>Thanks for reading.</p><div class="pullquote"><p>Thanks for reading. If you&#8217;d like more articles like this, subscribe to CodedShapes to get them delivered to your inbox</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codedshapes.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.codedshapes.com/subscribe?"><span>Subscribe now</span></a></p></div><p><em><strong>Work with me:</strong> <a href="https://codedconstructs.com/contact/">https://codedconstructs.com/contact/</a></em></p><p><em><strong>Computational Design Courses: </strong><a href="https://learn.codedshapes.com/">https://learn.codedshapes.com/</a></em></p><p><em><strong>Scripository (A library of computational scripts): </strong><a href="https://scripository.com/">https://scripository.com/</a></em></p>]]></content:encoded></item><item><title><![CDATA[Week 6: Product Whiplash & first in-person client meeting]]></title><description><![CDATA[Good and bad hurdles, but it&#8217;s all hurdles]]></description><link>https://www.codedshapes.com/p/week-6-product-whiplash-and-first</link><guid isPermaLink="false">https://www.codedshapes.com/p/week-6-product-whiplash-and-first</guid><dc:creator><![CDATA[Braden Koh]]></dc:creator><pubDate>Sat, 22 Aug 2026 00:07:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/QwkePodD8sI" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div id="youtube2-QwkePodD8sI" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;QwkePodD8sI&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/QwkePodD8sI?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>You know how in TV shows, when one major problem gets solved, another one just as big (sometimes bigger) shows up?</p><p>Well, that about sums up my week.</p><p>Within a few days, I went from wondering whether my outreach was working, to getting a client meeting, to feeling dejected about my product, to finding a reason to keep building it.</p><p>Safe to say, it was not boring.</p><h2>Product building whiplash</h2><p>So, before I decided to build this product, I did all my research. I asked around, looked on the internet and got AI to do some searching for me. Maybe it was just the excitement, but I was convinced there was a real gap.</p><p>I mean, even as I started building it and looked for role models on how to price, structure and sell it, I still could not find a direct competitor.</p><p>It wasn&#8217;t like I was trying to revolutionize the industry. This was a small market gap. Still, it took some effort to make. I&#8217;m about six weeks in with about 10 hours per week and it&#8217;s not quite ready for deployment yet.</p><p>But then, I found a competitor.</p><p>All that research and asking AI didn&#8217;t even bring this up. On the surface, it did exactly what I wanted my product to do.</p><p>I started laughing. I wasn&#8217;t sure if I was relieved or angry. On one hand, I was sick of working on it. Ten hours a week for six weeks and nothing to show for it yet? Damn. I wanted it off my plate, and a direct competitor gave me an excuse to stop. On the other hand, it was something I believed in, and stopping meant throwing all that work down the drain.</p><p>So, I did what I thought was the best thing, I took a break. I went to the gym, had some lunch, <s>talked</s> vented to a few friends and complained to Claude. I worked on some other stuff before finally coming back to look at it again.</p><p>What do I do now? Have I really lost the advantage?</p><p>I took a breath and gave the competitor a spin.</p><p>About two hours of serious testing later, I realised it was a different product. It looked the same, but functioned differently and served a different market. It&#8217;s not entirely different but it was different enough that mine could still exist.</p><p>Slowly, as I realised this, I felt annoyed but excited that it wasn&#8217;t over. I wasn&#8217;t out of the fight yet.</p><p>And instead of trying to build this from my head, I had a pretty close role model. I had something to reference and learn from.</p><p>So, within a single day, I killed and revived my product.</p><h2>First in-person client meeting</h2><p>I&#8217;ve had plenty of client meetings before, so I am pretty used to them. But for better or worse, they have all been online.</p><p>This week I had my first in-person meeting. I walked into someone else&#8217;s office and sat in their meeting room. Even when I had a corporate job, I&#8217;d only done this maybe twice in my life. And that was pre-Covid, before video calls were the norm.</p><p>It felt......strange, to say the least.</p><p>I wasn&#8217;t that nervous, but it felt like a job interview. Taking the lift up, asking to meet the person and saying the words:</p><p>&#8220;Hi, I&#8217;m here for a meeting.&#8221;</p><p>It&#8217;s a bit like being in someone&#8217;s home. You are welcome there, but you are still very aware that it isn&#8217;t your space. Which I think made me more self-conscious than I expected. I had to walk in, sit down and represent the business in front of actual people.</p><p>Which made the business feel oddly real.</p><p>Alright, that was week 6.</p><p>Plenty of lessons from it all, gotta keep going.</p><p>Onward to week 7.</p><div class="pullquote"><p>Thanks for reading <br>Subscribe to get these updates directly into your inbox!</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codedshapes.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.codedshapes.com/subscribe?"><span>Subscribe now</span></a></p></div><p><em><strong>Work with me:</strong> <a href="https://codedconstructs.com/contact/">https://codedconstructs.com/contact/</a></em></p><p><em><strong>Resources on Computational Design: </strong><a href="https://www.codedshapes.com/p/scripository">https://www.codedshapes.com/p/scripository</a></em></p>]]></content:encoded></item><item><title><![CDATA[The Three Agreements Before I Build Anything]]></title><description><![CDATA[Clarity and Alignment]]></description><link>https://www.codedshapes.com/p/the-three-agreements-before-i-build</link><guid isPermaLink="false">https://www.codedshapes.com/p/the-three-agreements-before-i-build</guid><dc:creator><![CDATA[Braden Koh]]></dc:creator><pubDate>Thu, 20 Aug 2026 00:00:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!klpE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4457de1-4bec-4926-8a08-e7310f6bde10_3300x1858.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_!klpE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4457de1-4bec-4926-8a08-e7310f6bde10_3300x1858.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!klpE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4457de1-4bec-4926-8a08-e7310f6bde10_3300x1858.png 424w, https://substackcdn.com/image/fetch/$s_!klpE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4457de1-4bec-4926-8a08-e7310f6bde10_3300x1858.png 848w, https://substackcdn.com/image/fetch/$s_!klpE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4457de1-4bec-4926-8a08-e7310f6bde10_3300x1858.png 1272w, https://substackcdn.com/image/fetch/$s_!klpE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4457de1-4bec-4926-8a08-e7310f6bde10_3300x1858.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!klpE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4457de1-4bec-4926-8a08-e7310f6bde10_3300x1858.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f4457de1-4bec-4926-8a08-e7310f6bde10_3300x1858.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2616063,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.codedshapes.com/i/211145707?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4457de1-4bec-4926-8a08-e7310f6bde10_3300x1858.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!klpE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4457de1-4bec-4926-8a08-e7310f6bde10_3300x1858.png 424w, https://substackcdn.com/image/fetch/$s_!klpE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4457de1-4bec-4926-8a08-e7310f6bde10_3300x1858.png 848w, https://substackcdn.com/image/fetch/$s_!klpE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4457de1-4bec-4926-8a08-e7310f6bde10_3300x1858.png 1272w, https://substackcdn.com/image/fetch/$s_!klpE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4457de1-4bec-4926-8a08-e7310f6bde10_3300x1858.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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><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 icon-noB79L"><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>There are hints when your project is about to get expensive.</p><p>&#8220;It&#8217;s not quite right.&#8221; Or &#8220;that&#8217;s confusing.&#8221; Or my personal favourite, &#8220;it&#8217;s not really what I had in mind.&#8221;</p><p>They are all sentences I have heard after spending weeks, sometimes months, building something.</p><p>You&#8217;d think after all those meetings and documents, we&#8217;d be on the same page. Heck, you&#8217;d think after every development update, we&#8217;d be on the same page.</p><p>But no, we never actually agreed on anything. Everyone just thought we did.</p><div class="pullquote"><p><em>The great enemy of communication, we find, is the illusion of it.</em> <br>~ William H. Whyte</p></div><p>There are so many assumptions swirling around in our heads that the same sentence can mean completely different things depending on who hears it. Someone says &#8220;yes, the tool will handle changes&#8221;. To the engineer, that means the tool updates as the design changes. To the manager, it means the tool tells the engineer when she needs to update the model.</p><p>Exact same sentence, different interpretation.</p><h2>Hidden misalignment</h2><p>You can come away from every meeting and call satisfied, with everyone apparently on the same page, and still get it wrong.</p><p>It&#8217;s only when you build the thing and put it in front of them that anyone can disagree. Because for better or worse, building something and showing it will confirm or deny their assumptions. </p><p>The cost is that it might take you weeks or months to find out nobody ever agreed in the first place. That time to build has definitely shrunk thanks to AI. But even then, you still have to clean up or fix something that should have been accounted from the beginning. It&#8217;s still the cost of building the wrong thing first.</p><p>Regardless of how quickly you made it, code is an expensive place to discover disagreement.</p><p>Once something is implemented it&#8217;s rework, not design. Maybe it turns out you never agreed on the core workflow. Maybe the philosophy was wrong from the beginning. What are you going to do with the 5,000 lines of code <s>you</s> the LLM wrote?</p><p>It&#8217;s like a tax. The longer you put off coordinating with everyone, the worse the bill gets, and everyone &#8220;agreeing&#8221; in every meeting feels great until you&#8217;re dumping two months of work down the drain.</p><p>Unfortunately, human communication is messy and it takes real effort to get everyone on the same page. So, you don&#8217;t get to skip this kind of work, you only get to choose when you pay for it. It might feel like a waste of time, but it&#8217;s always cheaper to pay it earlier, because the <a href="https://www.codedshapes.com/p/how-i-learned-about-coordination">bill grows the longer you put it off.</a></p><p>In fact, <a href="https://www.codedshapes.com/p/my-three-biggest-failures-in-computational">my three biggest failures in computational design</a>, had nothing to do with the technical stuff and everything got to do with a lack of clarity and alignment.</p><div class="callout-block" data-callout="true"><p><em>Hi, I&#8217;m Braden</em></p><p><em>I write about the craft of computational design, from working with geometry and data to the experience of building tools for other people.</em></p><p><em>If you&#8217;re new to CodedShapes, welcome! You might enjoy these:</em></p><ul><li><p><em><a href="https://www.codedshapes.com/p/how-to-know-if-your-workflow-is-actually">How to know if your workflow is actually worth automating</a></em></p></li><li><p><em><a href="https://www.codedshapes.com/p/stop-using-grasshopper-for-everything">Stop using Grasshopper for everything</a></em></p></li><li><p><em><a href="https://www.codedshapes.com/p/applying-computational-design-where">How to apply computational design to your projects</a></em></p></li></ul><p><strong>If you&#8217;d like help with a workflow of your own, <a href="https://codedconstructs.com/contact/">let&#8217;s work on it together.</a></strong></p></div><h2>Three things I want agreed before I build</h2><p>Now that I run my own consultancy, I&#8217;ve put things in place from experience to keep everyone aligned before and during development. It&#8217;s not foolproof, but it at least gives us a fighting chance.</p><p>It comes down to three things that need agreeing. How someone will actually use the tool, what it needs from them, and how we&#8217;ll both know it worked.</p><p>I call them agreements rather than requirements or a spec because a spec is something that can be perfectly written and still be a document only one side agrees with. <a href="https://www.codedshapes.com/p/it-takes-two-to-build-the-right-thing">An agreement requires both parties to sign off.</a></p><p>Yes, none of this is new and most of us already know it. You might even have discussed all three in some shape or form. But the key here is to write them down.</p><p>It becomes a shared space that everyone can point at and discuss. Instead of assumptions and thoughts floating around in people&#8217;s heads, it&#8217;s written down concisely and clearly.</p><p>I do all of this in my proposals to clients. On a complex tool it might take a few meetings to get there. On simpler things it might be a single meeting. <a href="https://www.codedshapes.com/p/this-is-what-working-with-a-computational">It&#8217;s really about having something concrete to work off.</a></p><h2>No. 1, How someone will actually use it</h2><p>I had a previous client who wanted a Revit plugin to help them model steel framing. They knew the problem inside out. What we couldn&#8217;t agree on was how the tool worked.</p><p>Every meeting went the same way. The conversation felt good, like we all knew what the tool would do. And then someone would break that dream and ask &#8220;okay, so that means the tool automatically rotates the members, right?&#8221; and the illusion shattered, because we had never discussed rotation before.</p><p>We were each describing a workflow that looked completely different in our own heads.</p><p>After the third meeting, I got sick of going round and round. So instead of coming in with notes, I spent an afternoon sketching the workflow and how I thought the tool should behave. Taking a page out of the UI/UX playbook, I showed a markup of the tool rather than describing it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MErk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ef6413c-4b16-401f-82e4-0d75f59c9ff1_1199x1191.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MErk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ef6413c-4b16-401f-82e4-0d75f59c9ff1_1199x1191.png 424w, https://substackcdn.com/image/fetch/$s_!MErk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ef6413c-4b16-401f-82e4-0d75f59c9ff1_1199x1191.png 848w, https://substackcdn.com/image/fetch/$s_!MErk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ef6413c-4b16-401f-82e4-0d75f59c9ff1_1199x1191.png 1272w, https://substackcdn.com/image/fetch/$s_!MErk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ef6413c-4b16-401f-82e4-0d75f59c9ff1_1199x1191.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MErk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ef6413c-4b16-401f-82e4-0d75f59c9ff1_1199x1191.png" width="1199" height="1191" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6ef6413c-4b16-401f-82e4-0d75f59c9ff1_1199x1191.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1191,&quot;width&quot;:1199,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:78907,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.codedshapes.com/i/211145707?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ef6413c-4b16-401f-82e4-0d75f59c9ff1_1199x1191.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MErk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ef6413c-4b16-401f-82e4-0d75f59c9ff1_1199x1191.png 424w, https://substackcdn.com/image/fetch/$s_!MErk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ef6413c-4b16-401f-82e4-0d75f59c9ff1_1199x1191.png 848w, https://substackcdn.com/image/fetch/$s_!MErk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ef6413c-4b16-401f-82e4-0d75f59c9ff1_1199x1191.png 1272w, https://substackcdn.com/image/fetch/$s_!MErk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ef6413c-4b16-401f-82e4-0d75f59c9ff1_1199x1191.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><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 icon-noB79L"><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 next meeting was completely different. Everyone suddenly had something to point to instead of just describing things. Every step and assumption was laid bare for them to see. That diagram became the source of truth.</p><p>That&#8217;s the first agreement: <strong>How someone will actually use the tool.</strong></p><p>This is the step that most people skip. I have skipped it too. I pride myself as a &#8220;people person&#8221;, which to me meant that clients should say &#8220;fix my problem&#8221;, give me a wink, and I&#8217;ll solve their dreams. But as we&#8217;re all finding out with LLMs, we have to get better at telling people and AI exactly what we want. That&#8217;s what the diagram did.</p><p>Vague and unclear requirements lead to vague and unclear tools.</p><p>So now, for every project I take on, I put in the upfront effort of clarifying exactly what the tool will do.</p><h2>No. 2, What the tool needs to do its work</h2><p>That same diagram helped out from another angle. It made the starting point and the assumptions visible.</p><p>In the earlier meetings, the client and I talked about the tool starting from a blank model, or maybe the user fills in a form, or maybe a floor plan.</p><p>When I drew the diagram based on how I thought the tool would work, I unconsciously gave it a starting point. Which told the client exactly what the tool needed to work.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Kh2V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792f982f-98e2-4cf4-b1d5-76e3aaec2446_1034x476.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Kh2V!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792f982f-98e2-4cf4-b1d5-76e3aaec2446_1034x476.png 424w, https://substackcdn.com/image/fetch/$s_!Kh2V!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792f982f-98e2-4cf4-b1d5-76e3aaec2446_1034x476.png 848w, https://substackcdn.com/image/fetch/$s_!Kh2V!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792f982f-98e2-4cf4-b1d5-76e3aaec2446_1034x476.png 1272w, https://substackcdn.com/image/fetch/$s_!Kh2V!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792f982f-98e2-4cf4-b1d5-76e3aaec2446_1034x476.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Kh2V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792f982f-98e2-4cf4-b1d5-76e3aaec2446_1034x476.png" width="1034" height="476" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/792f982f-98e2-4cf4-b1d5-76e3aaec2446_1034x476.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:476,&quot;width&quot;:1034,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:21151,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.codedshapes.com/i/211145707?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792f982f-98e2-4cf4-b1d5-76e3aaec2446_1034x476.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Kh2V!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792f982f-98e2-4cf4-b1d5-76e3aaec2446_1034x476.png 424w, https://substackcdn.com/image/fetch/$s_!Kh2V!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792f982f-98e2-4cf4-b1d5-76e3aaec2446_1034x476.png 848w, https://substackcdn.com/image/fetch/$s_!Kh2V!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792f982f-98e2-4cf4-b1d5-76e3aaec2446_1034x476.png 1272w, https://substackcdn.com/image/fetch/$s_!Kh2V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F792f982f-98e2-4cf4-b1d5-76e3aaec2446_1034x476.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><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 icon-noB79L"><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>That&#8217;s the second agreement. <strong>What the tool needs from you</strong>. and what it&#8217;s allowed to assume.</p><p>Every automation is a stack of promises about the state of the world. It takes an assumption, encodes it, and works from there. In this case, we agreed the tool would start from a floor plan with walls already modeled in, and that those walls were floor to floor and never half height. How they got into the model was outside the tool&#8217;s scope. We also agreed it would only use a list of verified steel members in its functions.</p><p>These are the rules of engagement. A list of exactly what the tool needs, and what it doesn&#8217;t support to execute the agreed workflow.</p><p>The tricky part here though, is that you can&#8217;t capture all of it without making the tool. The number of things that could be true about someone&#8217;s Revit model is effectively endless. </p><p>So the goal isn&#8217;t to be exhaustive. It&#8217;s to catch the critical ones before you invest time in development. Unfortunately, that comes down to experience. Because I have made countless Revit plugins before, I can make a guess on what the rules might be. </p><p>The half height walls are a good example. It&#8217;s a rule because I know that Revit won&#8217;t allow us to execute the workflow that we want. That&#8217;s just from past experience. So, I brought it up in a meeting, wrote it down, and everyone agreed it was a rule for the tool to work.</p><p>Identifying those exceptions takes experience, and I still miss things. But at least we capture what we can at the time, instead of arguing later. </p><h2>No. 3, How we&#8217;ll know the tool works</h2><p>Switching gears for a bit. A few years ago I worked on the fa&#231;ade movement analysis for a high rise tower. It was a complicated fa&#231;ade and we knew we had to analyse it, but we didn&#8217;t know why. All the client told us was to make sure it was all okay.</p><p>That forced us to understand what we were even doing. Analysis and &#8220;work&#8221; can mean a thousand different things, so we set about exploring. What can we analyse, what results can we get, and what do they ultimately mean for the fa&#231;ade.</p><p>We ran rigid body experiments to work out what to measure. We built Excel sheets to check the maths independently. We even 3D printed a small joint to check our simulations. All of it was us trying to understand what &#8220;make sure it&#8217;s all okay&#8221; meant.</p><p>The result was a series of metrics that told us whether the joints would open or close under the building load. If we could understand how much the building moved, we could understand whether the fa&#231;ade panels would clash into each other.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Fcok!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84d52d6d-2706-46d6-a35d-9a0e753ca714_1451x837.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Fcok!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84d52d6d-2706-46d6-a35d-9a0e753ca714_1451x837.png 424w, https://substackcdn.com/image/fetch/$s_!Fcok!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84d52d6d-2706-46d6-a35d-9a0e753ca714_1451x837.png 848w, https://substackcdn.com/image/fetch/$s_!Fcok!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84d52d6d-2706-46d6-a35d-9a0e753ca714_1451x837.png 1272w, https://substackcdn.com/image/fetch/$s_!Fcok!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84d52d6d-2706-46d6-a35d-9a0e753ca714_1451x837.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Fcok!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84d52d6d-2706-46d6-a35d-9a0e753ca714_1451x837.png" width="1451" height="837" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/84d52d6d-2706-46d6-a35d-9a0e753ca714_1451x837.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:837,&quot;width&quot;:1451,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:185479,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.codedshapes.com/i/211145707?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84d52d6d-2706-46d6-a35d-9a0e753ca714_1451x837.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Fcok!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84d52d6d-2706-46d6-a35d-9a0e753ca714_1451x837.png 424w, https://substackcdn.com/image/fetch/$s_!Fcok!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84d52d6d-2706-46d6-a35d-9a0e753ca714_1451x837.png 848w, https://substackcdn.com/image/fetch/$s_!Fcok!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84d52d6d-2706-46d6-a35d-9a0e753ca714_1451x837.png 1272w, https://substackcdn.com/image/fetch/$s_!Fcok!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F84d52d6d-2706-46d6-a35d-9a0e753ca714_1451x837.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><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 icon-noB79L"><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>That&#8217;s the third agreement. <strong>How everyone will know if the tool works.</strong></p><p>It&#8217;s easy to skip, because by the time you&#8217;ve agreed on the workflow and the inputs it feels like the work is done. Which is the same trap as before, everyone assuming they&#8217;re already on the same page.</p><p>And to be fair, &#8220;done&#8221; is hard to define, but it has to be defined, because it&#8217;s the last part of making the tool concrete.</p><p>For a custom tool it means agreeing to a set of representative files, the output each one should produce, and what happens when we run them. I do this as test cases and a checklist. I&#8217;ll ask a client for five to ten files that represent their typical working situation, and together we write the checklist the output of the has to meet.</p><p>This is what we call <strong>User Acceptance Testing.</strong> And it&#8217;s all about agreeing on what the tool should produce and under what circumstance. </p><p>It&#8217;s here that a tool stops being &#8220;it should work like this&#8221; and becomes a list of tests that it passes/fails against. A list that has been agreed on by both sides. </p><h2>It&#8217;s not formality for its own sake, it&#8217;s clarity</h2><p>It probably sounds like a lot of effort and paperwork before the tool gets built.</p><p>It can be, but the goal isn&#8217;t formality for its own sake. It&#8217;s clarity. A small script might need one meeting and a couple of pages. A complex tool might need a few meetings and a denser proposal. Either ways, it&#8217;s the same three agreements. </p><p>The size of the build changes the amount of effort and paperwork you have to do but it doesn&#8217;t change whether you need to agree.</p><p>Meetings are good and I have a lot of them, but a conversation doesn&#8217;t produce anything solid that everyone can poke at. It also can&#8217;t hold the details of a complex tool. A diagram or a few paragraphs can.</p><p>For every project I have done, the biggest problem has always been <em><strong>believing you&#8217;re aligned when you&#8217;ve never tested whether you actually are</strong></em>. Again, it isn&#8217;t  foolproof. It just gives you a much better chance.</p><h2>Alignment and clarity</h2><p>The goal is alignment and clarity. If everyone agrees and understands exactly what will be built, the problem it solves and how it solves it, everybody wins.</p><p>Unlike physical things we can touch and hold, a digital tool lives in the ether. Its abstractness is hard to visualise, and even when you can, everyone visualises it differently. Digital tools have real value, but we have to do the work to define them better for everyone involved.</p><p>Things will still change midway and sometimes the scope blows out. But there&#8217;s a real difference between finding out you disagreed and finding out you never agreed at all.</p><p>So whenever you&#8217;re about to build something, think about these three and write them down. Bring as much clarity and alignment as you can before anyone starts.</p><p>Thanks for reading.</p><div class="pullquote"><p>Thanks for reading. If you&#8217;d like more articles like this, subscribe to CodedShapes to get them delivered to your inbox</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codedshapes.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.codedshapes.com/subscribe?"><span>Subscribe now</span></a></p></div><p><em><strong>Work with me:</strong> <a href="https://codedconstructs.com/contact/">https://codedconstructs.com/contact/</a></em></p><p><em><strong>Computational Design Courses: </strong><a href="https://learn.codedshapes.com/">https://learn.codedshapes.com/</a></em></p><p><em><strong>Scripository (A library of computational scripts): </strong><a href="https://scripository.com/">https://scripository.com/</a></em></p>]]></content:encoded></item><item><title><![CDATA[Week 5: Squeezing too tight makes it harder to actually hold on]]></title><description><![CDATA[The answer isn't more efficiency]]></description><link>https://www.codedshapes.com/p/week-5-squeezing-too-tight-makes</link><guid isPermaLink="false">https://www.codedshapes.com/p/week-5-squeezing-too-tight-makes</guid><dc:creator><![CDATA[Braden Koh]]></dc:creator><pubDate>Fri, 14 Aug 2026 07:02:37 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/qs932GUYLP0" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div id="youtube2-qs932GUYLP0" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;qs932GUYLP0&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/qs932GUYLP0?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Alright, week 5.</p><p>Last week I published an article about the <a href="https://www.codedshapes.com/p/the-business-models-of-digital-work?r=yraxj">business models of digital work</a>, and I ended it saying I wanted <a href="https://codedconstructs.com/">CodedConstructs </a>to be a service firm that also builds products. I also said I knew from experience that balancing those two is hard, and that I&#8217;d eventually have to build better boundaries between them.</p><p>Well this week, I got a preview of just how annoyingly difficult that is.</p><h2>The product I built did the wrong thing</h2><p>I have been working on a product alongside trying to get clients and creating content.</p><p>But the tempting thing with LLMs is that you let them do more and more as you get busier and busier with other things. And as I got busy creating content or doing client work, there were a few times I just let it run. </p><p>This week though, it &#8220;finished&#8221; and it&#8217;s time to test. I have automated tests but this was the end to end one. The one where I put myself in the shoes of my users and go through the product itself. </p><p>In the first 20 minutes, I listed maybe 15+ things that were wrong with it. Which was to be expected, but 1/15 needed significant rework. It was part of the core design of the product and the LLM had gotten it so so wrong. </p><p>So, I went to look back at all the notes and plans it worked off. I saw that I actually approved the wrong design. Probably because I was busy with something else and it kept asking me questions, so I just approved everything. The LLM, not knowing any better, just kept piling on top of that. </p><p>When the foundation is already wrong, building more on top of it makes it worse and that&#8217;s where I am at now. I have the cost of building the wrong thing and also now the added cost of fixing the thing because I said yes without knowing the consequences. </p><h2>Focus more is not the answer</h2><p>The easy answer here is &#8220;focus more&#8221;. In fact, I can almost hear my ex-managers giving me this same advice. To do less. </p><p>And I think it&#8217;s partly true but it&#8217;s not the whole story. It&#8217;s not to give up any of my current endeavors, I think it&#8217;s to focus on a few things at a time, not everything at once. </p><p>I was being too greedy. </p><p>If you&#8217;re a software developer, you would understand this. When we made stuff pre-AI, every time we made a change, we would have to wait for the computer to recompile. It would take 2 maybe 5 minutes before you can type a line of code again. </p><p>What do you do in this time ? You can scroll your phone, read something, stare at the screen, etc.</p><p>Now, in the AI world, it&#8217;s waiting for agents to finish.</p><p>So, what do I do now? Well, I start another agent to do something else. </p><p>Then, what do I do while waiting for that ? I start another </p><p>So, I end up having 2-3 agents at the same time. There was one time, I had up to 6.</p><p>It sounds awesome, like I am this grand puppet master with an army of agents working for me. But this actually means my attention and judgement (which arguably is my most valuable asset) is split across multiple equally important tasks. </p><p>It&#8217;s just plain greedy. Instead of 1 amazing result, I now have 6 mediocre ones.</p><p>So, my lesson for week 5 is to resist the urge to squeeze as much as I can. Because the harder I try to be efficient, the less I actually am. </p><p>Thanks for reading,</p><p><br>Onward to week six.</p><div class="pullquote"><p>Thanks for reading <br>Subscribe to CodedShapes to follow along in my journey!</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codedshapes.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.codedshapes.com/subscribe?"><span>Subscribe now</span></a></p></div><p><em><strong>Work with me:</strong> <a href="https://codedconstructs.com/contact/">https://codedconstructs.com/contact/</a></em></p><p><em><strong>Resources on Computational Design: </strong><a href="https://www.codedshapes.com/p/scripository">https://www.codedshapes.com/p/scripository</a></em></p>]]></content:encoded></item><item><title><![CDATA[No One's Around To Tell Me I'm Wrong]]></title><description><![CDATA[Rabbit holes are just so easy to find when you're on your own]]></description><link>https://www.codedshapes.com/p/no-ones-around-to-tell-me-im-wrong</link><guid isPermaLink="false">https://www.codedshapes.com/p/no-ones-around-to-tell-me-im-wrong</guid><dc:creator><![CDATA[Braden Koh]]></dc:creator><pubDate>Thu, 13 Aug 2026 00:00:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!sBMc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab50f222-ffc6-42e7-99ad-455b7217214b_3300x1858.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_!sBMc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab50f222-ffc6-42e7-99ad-455b7217214b_3300x1858.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sBMc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab50f222-ffc6-42e7-99ad-455b7217214b_3300x1858.png 424w, https://substackcdn.com/image/fetch/$s_!sBMc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab50f222-ffc6-42e7-99ad-455b7217214b_3300x1858.png 848w, https://substackcdn.com/image/fetch/$s_!sBMc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab50f222-ffc6-42e7-99ad-455b7217214b_3300x1858.png 1272w, https://substackcdn.com/image/fetch/$s_!sBMc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab50f222-ffc6-42e7-99ad-455b7217214b_3300x1858.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sBMc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab50f222-ffc6-42e7-99ad-455b7217214b_3300x1858.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ab50f222-ffc6-42e7-99ad-455b7217214b_3300x1858.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2573940,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.codedshapes.com/i/210190670?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab50f222-ffc6-42e7-99ad-455b7217214b_3300x1858.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!sBMc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab50f222-ffc6-42e7-99ad-455b7217214b_3300x1858.png 424w, https://substackcdn.com/image/fetch/$s_!sBMc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab50f222-ffc6-42e7-99ad-455b7217214b_3300x1858.png 848w, https://substackcdn.com/image/fetch/$s_!sBMc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab50f222-ffc6-42e7-99ad-455b7217214b_3300x1858.png 1272w, https://substackcdn.com/image/fetch/$s_!sBMc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fab50f222-ffc6-42e7-99ad-455b7217214b_3300x1858.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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><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 icon-noB79L"><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>You know, they say when you start a company, you truly feel alone.</p><p>I never really understood that. Instead, it was just so freeing. I felt the pressure to make money and deliver, sure, but that&#8217;s different from feeling alone.</p><p>But I recently wrote my first proposal to a client since <a href="https://www.codedshapes.com/p/im-starting-codedconstructs?r=yraxj">going full time</a> and the &#8220;alone-ness&#8221; finally caught up to me. Well, I wasn&#8217;t truly alone, I had self-doubt to keep me company.</p><div class="callout-block" data-callout="true"><p><em>Hi, I&#8217;m Braden</em></p><p><em>I write about the craft of computational design, from working with geometry and data to the experience of building tools for other people.</em></p><p><em>If you&#8217;re new to CodedShapes, welcome! You might enjoy these:</em></p><ul><li><p><em><a href="https://www.codedshapes.com/p/how-to-know-if-your-workflow-is-actually">How to know if your workflow is actually worth automating</a></em></p></li><li><p><em><a href="https://www.codedshapes.com/p/stop-using-grasshopper-for-everything">Stop using Grasshopper for everything</a></em></p></li><li><p><em><a href="https://www.codedshapes.com/p/applying-computational-design-where">How to apply computational design to your projects</a></em></p></li></ul><p><strong>If you&#8217;d like help with a workflow of your own, <a href="https://codedconstructs.com/contact/">let&#8217;s work on it together.</a></strong></p></div><p>While I was writing the proposal, I was trying to come up with a scope which in turn leads to how I price the actual work. Costs aside, I had trouble nailing down <a href="https://www.codedshapes.com/p/what-do-you-actually-deliver?r=yraxj">what to actually deliver</a> because there was just so many options. Simply put, it&#8217;s a tool that helps transfer documentation into an analysis model.</p><p>I could have done only a base build, you know get the foundation and skeleton up first, then if it&#8217;s useful add on more features later. A good analogy here is think of it like I am building you a car. Instead of giving you all the passenger seats and a trunk. Let me just give you a car with a driver&#8217;s seat only. And if you need the rest, we&#8217;ll slowly add it in.</p><p>But what happens if passengers are important to you ? Maybe that&#8217;s the whole reason you&#8217;re buying from me. Maybe you need a trunk, maybe having a fully featured car is what you&#8217;re actually after.</p><p>With all those questions in mind, I wrote up a proposal that gave this potential client several choices. I offered a &#8220;base build + modules&#8221; scope.</p><ul><li><p>Base build</p></li><li><p>Feature A</p></li><li><p>Feature B</p></li><li><p>Feature C</p></li><li><p>Feature D</p></li></ul><p>As in, take a base build + 2 or 3 modules and there&#8217;ll be a bundling discount too.</p><h2>What&#8217;s wrong with it ?</h2><p>On the surface, nothing. I mean more choices is good right ?</p><p>When&#8217;s the last time you hated not having a choice ?</p><p>Well, I think some choice is good, too many and it&#8217;s just overwhelming. And I have definitely given the client too many.</p><p>Imagine you don&#8217;t know anything about cars, and your mechanic presents you with say 10 choices all for you to decide. I would be so overwhelmed that I would just leave to find another mechanic that understands my problem and recommends the exact path that solves it for me.</p><p>I didn&#8217;t catch any of this on the day, though. I read it back the next morning, before I&#8217;d had any coffee, and it was immediately obvious. Same document, same words, and a completely different reaction to it. That was the closest thing I had to a second opinion, and it was still only me, twelve hours later.</p><p>So I did what I&#8217;d have wanted that mechanic to do. I gutted the whole thing and rewrote it with one option in mind. The one that I thought was best for him.</p><p>And it was a good thing I did too because that proposal was actually tailored to him rather than me just giving him a menu of things to decide. I showed my expertise in what I think is best for him, rather than staying stuck in fear and offloading the decision to him.</p><h2>Being alone</h2><p>It made me think why haven&#8217;t I come across this before ? I have written plenty of proposals for myself and when I worked at companies. Why was this one so hard ? Why did I keep second guessing myself ?</p><p>The answer, that came to me after a night of sleep, is that I had no one else pushing against me.</p><p>In a company, there are so many review processes and casual conversations that help you think but when you&#8217;re alone, the rabbit hole is deep and oh so tempting. No one tells me what to do, but no one tells me when I&#8217;m wrong either.</p><p>And that, I think, is the biggest contributing factor to the loneliness.</p><p>At least in a company, you can turn to someone sitting next to you and ask them something. You can bounce ideas around because <a href="https://www.codedshapes.com/p/nobody-knows-as-much-as-you-think?r=yraxj">you&#8217;re in the same boat</a>. But here, even though I have friends and family to talk to, it&#8217;s different.</p><p>They&#8217;ll listen, and they&#8217;ll be supportive, but they can&#8217;t tell me my scope is wrong. They don&#8217;t know what a good proposal looks like in this industry. So, what I miss isn&#8217;t the companionship. It&#8217;s someone with enough context to <a href="https://www.codedshapes.com/p/it-takes-two-to-build-the-right-thing?r=yraxj">push me towards a better answer</a> than the one already in my head.</p><p>The part that actually unsettles me is that I can&#8217;t tell, in the moment, whether I&#8217;m being thorough or just <a href="https://www.codedshapes.com/p/why-the-thing-youre-building-wont?r=yraxj">going in circles</a>. Both feel exactly the same and &#8220;trusting yourself more&#8221; doesn&#8217;t really help if I am deep in the wrong rabbit hole.</p><p>And the cost of being wrong has changed too. In a company, a bad scope meant a rework and an awkward conversation with someone down the hall. Out here it means a client who quietly decides I don&#8217;t know what I&#8217;m doing.</p><p>I think that&#8217;s just the discomfort I have to get used to. I don&#8217;t regret re-writing that proposal, that time bought me real clarity on the problem and it was worth it. But I only know that in hindsight, and hindsight isn&#8217;t much of a system.</p><p>So when people say you feel alone doing this, I think this is what they actually mean. Not that there&#8217;s nobody around. Just that there&#8217;s nobody in the &#8220;trenches&#8221; with you, and you tend to find out you were wrong long after you could have done anything about it.</p><p>But I am slowly getting used to it.</p><div class="pullquote"><p>Thanks for reading. If you&#8217;d like more articles like this, subscribe to CodedShapes to get them delivered to your inbox</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codedshapes.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.codedshapes.com/subscribe?"><span>Subscribe now</span></a></p></div><p><em><strong>Work with me:</strong> <a href="https://codedconstructs.com/contact/">https://codedconstructs.com/contact/</a></em></p><p><em><strong>Computational Design Courses: </strong><a href="https://learn.codedshapes.com/">https://learn.codedshapes.com/</a></em></p><p><em><strong>Scripository (A library of computational scripts): </strong><a href="https://scripository.com/">https://scripository.com/</a></em></p>]]></content:encoded></item><item><title><![CDATA[Week 4: Disappointed But Not Discouraged]]></title><description><![CDATA[Just learning the lessons as they come]]></description><link>https://www.codedshapes.com/p/week-4-disappointed-but-not-discouraged</link><guid isPermaLink="false">https://www.codedshapes.com/p/week-4-disappointed-but-not-discouraged</guid><dc:creator><![CDATA[Braden Koh]]></dc:creator><pubDate>Fri, 07 Aug 2026 07:01:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/vX6zcXt8LuE" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div id="youtube2-vX6zcXt8LuE" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;vX6zcXt8LuE&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/vX6zcXt8LuE?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Alright, week 4. A full month in now.</p><p>Better than last week, which I wasn&#8217;t expecting given how it started.</p><p>That proposal I sent out from last week came back rejected. But funnily enough it didn&#8217;t really affect my confidence. I mean I was disappointed but the rejection didn&#8217;t mean my work was bad.</p><p>It was just that what I could build for them didn&#8217;t fit what they needed.</p><p>I was also proud that I asked for feedback. I wanted to understand if I could have done any better or maybe there were some confusing parts.</p><p>The lesson I took away is that I have to get better at alignment from the beginning. Instead of me sinking a few days into coming up with a proposal, I should have asked more questions instead of assuming things. It&#8217;s to be courageous and ask for more information instead of assuming I am disturbing them.</p><p>What it did do though was make me wonder whether there&#8217;s a clearer more cohesive way to tell people what I do. So, I spent a couple of days on strategy.</p><p>When I first started CodedShapes and posting on LinkedIn , the goal was just to see if I could be consistent. Not only have I proven to myself that I can, I also enjoy it. But, I did it in a pretty unstructured way. I posted or wrote whatever was on my mind. Which I think is great but it meant my ideas and thoughts were all over the place sometimes.</p><p>Now that I completely control the narrative and don&#8217;t have to worry about office politics and all that, I can make it more cohesive. So I am trying a content pillar approach. Simply put, it&#8217;s about defining some pretty wide buckets, and then every idea I come up with needs to be reframed into a bucket.</p><p>It&#8217;s something I sort of do already but this just formalizes it and helps me focus on what I am actually trying to say.</p><p>Hopefully it makes things clearer and less like rambling. But I do like writing whatever comes to mind though, so don&#8217;t expect that to change anytime soon. I am just trying to be more focused with my messaging is all.</p><p>Other than that, the time blocking method is helping me properly triage my tasks now, which is good.</p><p>Alright, that&#8217;s it.</p><p>Thanks for reading,<br>Onward to week five.</p><div class="pullquote"><p>Thanks for reading <br>Subscribe to CodedShapes to follow along in my journey!</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codedshapes.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.codedshapes.com/subscribe?"><span>Subscribe now</span></a></p></div><p><em><strong>Work with me:</strong> <a href="https://codedconstructs.com/contact/">https://codedconstructs.com/contact/</a></em></p><p><em><strong>Resources on Computational Design: </strong><a href="https://www.codedshapes.com/p/scripository">https://www.codedshapes.com/p/scripository</a></em></p>]]></content:encoded></item><item><title><![CDATA[The Business Models of Digital Work in AEC]]></title><description><![CDATA[Which is better, product, service, or a bit of both ?]]></description><link>https://www.codedshapes.com/p/the-business-models-of-digital-work</link><guid isPermaLink="false">https://www.codedshapes.com/p/the-business-models-of-digital-work</guid><dc:creator><![CDATA[Braden Koh]]></dc:creator><pubDate>Thu, 06 Aug 2026 00:03:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Ru98!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff46d7b9-579a-4f3f-9ca5-d286c39ef242_3300x1858.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_!Ru98!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff46d7b9-579a-4f3f-9ca5-d286c39ef242_3300x1858.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ru98!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff46d7b9-579a-4f3f-9ca5-d286c39ef242_3300x1858.png 424w, https://substackcdn.com/image/fetch/$s_!Ru98!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff46d7b9-579a-4f3f-9ca5-d286c39ef242_3300x1858.png 848w, https://substackcdn.com/image/fetch/$s_!Ru98!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff46d7b9-579a-4f3f-9ca5-d286c39ef242_3300x1858.png 1272w, https://substackcdn.com/image/fetch/$s_!Ru98!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff46d7b9-579a-4f3f-9ca5-d286c39ef242_3300x1858.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ru98!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff46d7b9-579a-4f3f-9ca5-d286c39ef242_3300x1858.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ff46d7b9-579a-4f3f-9ca5-d286c39ef242_3300x1858.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2722713,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.codedshapes.com/i/209229316?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff46d7b9-579a-4f3f-9ca5-d286c39ef242_3300x1858.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Ru98!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff46d7b9-579a-4f3f-9ca5-d286c39ef242_3300x1858.png 424w, https://substackcdn.com/image/fetch/$s_!Ru98!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff46d7b9-579a-4f3f-9ca5-d286c39ef242_3300x1858.png 848w, https://substackcdn.com/image/fetch/$s_!Ru98!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff46d7b9-579a-4f3f-9ca5-d286c39ef242_3300x1858.png 1272w, https://substackcdn.com/image/fetch/$s_!Ru98!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff46d7b9-579a-4f3f-9ca5-d286c39ef242_3300x1858.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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><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 icon-noB79L"><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>If you haven&#8217;t been following along, about a month ago I <a href="https://open.substack.com/pub/bradenkoh/p/im-starting-codedconstructs">announced that I started my own firm</a>, <a href="https://codedconstructs.com/">CodedConstructs</a>. </p><p>But before leaving a stable job, one of the biggest decisions I had to make was the business model of the whole thing. This is something I think about for everything I do anyway, but I wanted to understand how digital work in the Architecture, Engineering, Construction (AEC) industry actually makes money.</p><blockquote><p><em>It&#8217;s all well and good to build things and solve cool problems, but how do we not only make money but build a sustainable and profitable business by doing so?</em></p></blockquote><p>That is the question I set out to answer. There are several existing models to learn from, some of which I have experienced personally.</p><ul><li><p>The internal tools and projects model (a team or company that supports internal tools alongside external services)</p></li><li><p>The product then support model (build a product that someone will use, then charge a service to help/teach them to use it)</p></li><li><p>Custom coaching and making courses (Teach people, don&#8217;t do the work for them)</p></li></ul><p>You can of course mix these too, like <a href="https://timoharboe.com/">Timo Harboe</a> who takes on projects but has created a course. And you also have the pure ones, like pure service (like most consulting firms) or pure product (normal software firm). But they don&#8217;t need any new explanation because they tend to lean towards the more conventional firms we already know so well.</p><p>What I set out to find out is how I want to operate in this world, that can change but it helps to get the lay of the land first.</p><div class="callout-block" data-callout="true"><p><em>Hi, I&#8217;m Braden</em></p><p><em>I write about the craft of computational design, from working with geometry and data to the experience of building tools for other people.</em></p><p><em>If you&#8217;re new to CodedShapes, welcome! You might enjoy these:</em></p><ul><li><p><em><a href="https://www.codedshapes.com/p/how-to-know-if-your-workflow-is-actually">How to know if your workflow is actually worth automating</a></em></p></li><li><p><em><a href="https://www.codedshapes.com/p/stop-using-grasshopper-for-everything">Stop using Grasshopper for everything</a></em></p></li><li><p><em><a href="https://www.codedshapes.com/p/applying-computational-design-where">How to apply computational design to your projects</a></em></p></li></ul><p><strong>If you&#8217;d like help with a workflow of your own, <a href="https://codedconstructs.com/contact/">let&#8217;s work on it together.</a></strong></p></div><h2>The internal tools and projects model</h2><p>This is arguably the most popular model out there. Whether it was intentional or not, it&#8217;s the way most consulting firms (the ones that bill by the hour on projects) already operate. So when it came to digital work, they just applied what they knew.</p><p>On the surface, it&#8217;s perfect. Do projects most of the time, then work on internal tools during the down time. Technically, you&#8217;re fully resourced. Fund the internal tools with the extra margin from projects. When executed perfectly, it makes for a great cycle. Make more money on projects -&gt; develop more tools -&gt; you&#8217;re more efficient, which leads you to make more on projects and so on.</p><p>But there&#8217;s a huge flaw, and it&#8217;s something I have <a href="https://open.substack.com/pub/bradenkoh/p/your-tools-dont-last-because-its">written about many times</a>. When you put paying billable projects up against non-paying internal tools, billable always wins. We all have a finite amount of time, so the work that makes money directly always wins. So, instead of working on tools during the down time, most people spend it finding more projects. And &#8220;doing internal tools only during down time&#8221; ignores the maintenance and emergency fixes that come with tools.</p><blockquote><p>&#8220;From 1995 through 1998, approximately 87% of the product ventures initiated by software-service companies were unsuccessful. [&#8230;] Inappropriate transfer of organizational practices and development culture from the service sector to the product sector is a recipe for failure.&#8221;</p><p>&#8212; Satish Nambisan, <em><a href="https://sloanreview.mit.edu/article/why-service-businesses-are-not-product-businesses/">Why Service Businesses Are Not Product Businesses</a></em>, MIT Sloan Management Review (2001)</p></blockquote><p>When you have <a href="https://www.codedshapes.com/p/youre-too-good-at-fixing-things">the urgency of projects breathing down your neck</a> all the time, you can&#8217;t build great tools.</p><p>A common band-aid here is to treat building tools as a &#8220;project&#8221;. As in, block out 4-6 weeks for development, deploy, then move on. But then the questions of maintenance and ownership come into play after the tool is built. What happens when the tool fails? <a href="https://www.codedshapes.com/p/the-cost-of-inheriting-other-peoples">Who maintains it</a> if it isn&#8217;t anyone&#8217;s full-time job? If you&#8217;re hopping from project to project, how can you make time to support tools?</p><p>If you teeter between billable projects and maintaining internal tools, I&#8217;ll stress it once more, the billability of projects will always win.</p><p>But, I am not saying it&#8217;s impossible. I&#8217;m saying that it&#8217;s a constant uphill battle to convince the always urgent project natured people that you can&#8217;t help them because you&#8217;re working on an internal tool.</p><p>When I worked for a structural consultancy, I found it hard to fight for development time, because it meant pushing away work that directly made money. And this isn&#8217;t just my experience. <a href="https://aecmag.com/computational-design/bespoke-bim-software-workflows-custom-aec-tools/">AEC Magazine</a>, writing about firms that build their own tools, pins the friction on exactly this: <em>&#8220;the mindset of managers, which strictly adhered to the concept of allocating project billable hours to employees&#8221;</em> runs against the craft-based mindset needed to build great tools.</p><p>Nate Miller, who runs his own company, <a href="https://apps.provingground.io/">Proving Ground</a>, says it more bluntly: <em>&#8220;the business model of architecture and engineers&#8230; is, in some ways, incompatible with the business model of running a software company.&#8221;</em></p><p>The two operating philosophies are diametrically opposed. And if projects make up the majority of the firm, it&#8217;s easy and common to be scrutinised, sometimes even punished, for operating against that. As valuable as the internal tools are, the current way to create them goes against the operating norms of most service-based companies.</p><p>Which is why the firms that actually produce commercial tools tend to split it out. <a href="https://www.thorntontomasetti.com/">Thornton Tomasetti</a>, a large structural engineering firm, built an interoperability tool called Konstru that <a href="https://www.thorntontomasetti.com/capability/konstru">became its own independent company</a>. Decades earlier, Arup did the same by spinning out <a href="https://www.oasys-software.com/about-oasys/">Oasys</a> as its software arm. Even a smaller firm like <a href="https://idadesigngroup.com.au/">IDA Architects</a> noticed this and created <a href="https://idatechnology.com.sg/">IDA Technology</a> for their digital work.</p><p>The pattern, then, is that service firms which build successful products tend to wall the product off from the billable work so it can exist on its own. Having a barrier between the two ways of operating seems to be the key here.</p><h2>The product and support model</h2><p>The second model is about building a tool and then selling the maintenance and support as the service. It&#8217;s the reverse of the previous model, where a product was treated like a project.</p><p>The idea is to build a tool that people will pay to use, then sell them a separate service to help them actually use it. People buy the licence to use your product, but if they want updates or expert advice or custom work, they pay extra.</p><p>Strand7, the finite element package a lot of structural engineers use, does this. They sell you their program and also offer <a href="https://www.strand7.com/html/aboutsupport.htm">Strand7 Support and Maintenance</a> as a separate subscription. For that you get a support hotline, a model review service where you can send them your actual model to look over, and every update released while you stay subscribed. They even run <a href="https://www.strand7.com/html/trainingSchedule.htm">paid training</a> on top of that, because the software is complex enough that it takes real expertise to use well.</p><p>Oasys, the same Arup software arm from before, does the same thing. You buy a perpetual licence, then pay an <a href="https://www.oasys-software.com/support/licensing-of-oasys-software/">annual maintenance contract priced as a percentage of the list price</a> to keep the support and updates coming. It also works well for them because Arup offers structural advice, and Oasys becomes a kind of &#8220;locked-in&#8221; inbound marketing tool.</p><p>Autodesk does a similar thing, offering not just their software but custom training, developer support and certification on top.</p><p>And the money on the service side is bigger than you&#8217;d think. Or at least it was, for me. Julien Bek of Sequoia <a href="https://trends.vc/service-as-software-solo-operator-pattern-the-61-ratio-liability-as-a-service/">put it plainly</a>: &#8220;for every dollar spent on software, six are spent on services.&#8221; The product gets you in the door; the ongoing help is the larger market. The crude way of saying it is that once people are locked into using the tool, they&#8217;ll pay for anyone who helps them use it better.</p><p>That&#8217;s why this model holds up so well. You get the leverage of a product, build it once and sell it many times, and the stickiness of a service, a relationship that renews every year. It smooths out the lumpiness of pure project work, and it means the software brings in recurring revenue.</p><p>The &#8220;services-as-software&#8221; idea is getting a lot of attention right now, because as products get easier to build, the value shifts to showing people how to best use them. As Foundation Capital <a href="https://foundationcapital.com/ideas/the-4-6t-services-as-software-opportunity-lessons-from-the-first-year">describes it</a>, &#8220;what you build is no longer your moat. How you integrate, embed, and operate becomes the moat.&#8221; The support layer becomes more of the thing you&#8217;re actually selling.</p><p>What I like about this model is how honest it is about the work. Building a comprehensive tool and helping people use it are two different kinds of value. It&#8217;s the do-it-yourself vs do-it-for-you (or with you) approach.</p><p>Know the software well? Great. Need some help? Also great, because we offer that too. It also fixes the maintenance problem from the last model. The never-ending tail of features and bugs stops being a drain on your margins and becomes the thing people are paying for. This model makes working on the software and teaching people to use it billable.</p><p>But it&#8217;s not all glory. The biggest downside is that you need to invest in building a comprehensive tool, because if it&#8217;s intuitive and simple, why would anyone pay you extra to help them use it? And you have to make sure what you&#8217;re building is legitimately useful.</p><p>It means that before you even offer support or maintenance contracts, you need to put a lot of work into building a complex but useful product. Some products organically become this, but if this is the model you&#8217;re after, you have to plan for it.</p><p>And to bring home a point from the last model, you can&#8217;t just decide to do this if you&#8217;re a primarily service-based company. When Ramboll turned an internal tool into a commercial product, SiteSolve, Paul Jeffries <a href="https://aecmag.com/computational-design/bespoke-bim-software-workflows-custom-aec-tools/">described the jump</a> as: &#8220;selling software commercially requires a whole new level of quality assurance, documentation, training and interface... we&#8217;ve gone further than we would have ever gone if we weren&#8217;t going to sell it.&#8221;</p><p>It&#8217;s the reason Strand7 and Arup can offer it: their programs are so comprehensive that there might be hundreds of ways to get to the same result, but only a true expert would know how. You end up paying for that expertise twice, once in a useful but complicated product, and again in the help to actually use it.</p><h2>The coaching and training model</h2><p>The third model steps away from tools entirely, but you can see it in the same light of services and products. Custom training workshops or coaching would be the service, and the self-paced courses would be the products.</p><p>I don&#8217;t consider this a &#8220;pure&#8221; business model, because it&#8217;s a relatively new one. With the internet, it&#8217;s something a lot of digital people are already doing. </p><p><a href="https://hopific.com/grasshopper-pro/">Hopific</a>, run by Thomas Tait who spent years at Sn&#248;hetta, sells a self-paced Grasshopper course for a one-time $197 with lifetime access. <a href="https://learngrasshopper.com/">Learn Grasshopper</a>, arguably the most famous one around, does the same with a whole ladder of self-paced courses, from Grasshopper basics to Grasshopper in Tekla and Python for AEC. Timo Harboe from before, who runs his own practice, set up <a href="https://pythonforstructuralengineers.com/">Python for Structural Engineers</a> the same way, a one-off &#163;398 course built with fellow engineers.</p><p>Instead of selling software, you sell courses. Different contents, but still products.</p><p>And the same argument applies: it can be either a subscription or a one-off. <a href="https://www.thinkparametric.com/">ThinkParametric</a> runs a subscription with a library of 60-odd courses, the same way <a href="https://www.patreon.com/junichirohorikawa">Junichiro Horikawa</a> runs a Patreon for his computational design tutorials. </p><p>But again, you can&#8217;t escape that initial friction. Like products, there&#8217;s a lot of effort in making a course or a YouTube channel. And it&#8217;s another kind of bet: you&#8217;re wagering that enough people will find it valuable enough to pay.</p><p>This is made harder because the scale of our audience is a lot smaller than, say, a cooking YouTube channel.</p><h2>It&#8217;s the economics, not the technicality</h2><p>Line all three models up and you can see the pattern. Building tools, supporting software, teaching courses, it doesn&#8217;t really matter which you pick. They all come down to using your finite hours to either serve people (projects, software support, live training) or build assets (software or courses).</p><p>Services require expertise and are linear. You get paid for how valuable you are per hour. The only way to be more profitable is to increase your scope or find a way to be more efficient. But the more efficient you get, the more tempting it is to price lower, because being cheaper is a market advantage.</p><p>Assets (software or courses) are different. It&#8217;s no longer purely about the hours you put in, it&#8217;s about the problem it solves. <a href="https://www.codedshapes.com/p/your-script-doesnt-need-to-work-on">Solve a problem well and repeatedly</a>, and it almost doesn&#8217;t matter how many hours went in. But assets are a gamble on whether the thing is valuable enough for people to pay, and they need an upfront investment of your time and sometimes your money.</p><p>It&#8217;s trite, but this really is the craft mindset vs the service mindset. One means you work on yourself, and because your work is good, people buy from you. The other means you offer your service to someone else because you have expertise to share.</p><p>With an asset, you make the thing once and it works for you whether you&#8217;re at your desk or not. That&#8217;s the dream, but getting there means being willing to risk that months of development don&#8217;t pan out the way you wanted.</p><p>So the debate isn&#8217;t really about choosing the business model or the mindset. It&#8217;s about your appetite for risk. Working on projects gives you control and transparency; you can see how your time is spent and how much you earn from it. Building a product means gambling on a problem, but if it pays off, you have something valuable and repeatable.</p><h2>How CodedConstructs Operates</h2><p>I am blessed (or cursed) with insatiable curiosity. I love working on projects because it lets me meet more people and solve more interesting stuff, and it&#8217;s usually where the best ideas for products and content come from. But I also love to build, and I love to write. I didn&#8217;t come into this industry for the projects alone.</p><p>So, I am going to be greedy and pick all three. <a href="https://codedconstructs.com/">CodedConstructs </a>will be a balance of services, products and content, but they aren&#8217;t all equal.</p><p>Right now, since I am just starting out, client projects are the engine. They help me figure out which problems are worth solving, and they help me pay my bills. Products and content are the assets I build alongside them, my long-term bets on where I think I can bring value aside from projects.</p><p>Eventually, I am going to have to figure out how to build walls between my services and products but I at least know that going in. Because we know if I put billable work against products, and say it with me, billable always wins.</p><div class="pullquote"><p>Thanks for reading. If you&#8217;d like more articles like this, subscribe to CodedShapes to get them delivered to your inbox</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codedshapes.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.codedshapes.com/subscribe?"><span>Subscribe now</span></a></p></div><p><em><strong>Work with me:</strong> <a href="https://codedconstructs.com/contact/">https://codedconstructs.com/contact/</a></em></p><p><em><strong>Computational Design Courses: </strong><a href="https://learn.codedshapes.com/">https://learn.codedshapes.com/</a></em></p><p><em><strong>Scripository (A library of computational scripts): </strong><a href="https://scripository.com/">https://scripository.com/</a></em></p>]]></content:encoded></item><item><title><![CDATA[Key Value Search, the Vlookup of Grasshopper]]></title><description><![CDATA[Match multiple list structures with this component]]></description><link>https://www.codedshapes.com/p/key-value-search-the-vlookup-of-grasshopper</link><guid isPermaLink="false">https://www.codedshapes.com/p/key-value-search-the-vlookup-of-grasshopper</guid><dc:creator><![CDATA[Braden Koh]]></dc:creator><pubDate>Tue, 04 Aug 2026 00:00:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!WyJw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff748d868-4fe6-4a14-875c-d1cb0fdf99e4_3300x1858.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_!WyJw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff748d868-4fe6-4a14-875c-d1cb0fdf99e4_3300x1858.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WyJw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff748d868-4fe6-4a14-875c-d1cb0fdf99e4_3300x1858.png 424w, https://substackcdn.com/image/fetch/$s_!WyJw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff748d868-4fe6-4a14-875c-d1cb0fdf99e4_3300x1858.png 848w, https://substackcdn.com/image/fetch/$s_!WyJw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff748d868-4fe6-4a14-875c-d1cb0fdf99e4_3300x1858.png 1272w, https://substackcdn.com/image/fetch/$s_!WyJw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff748d868-4fe6-4a14-875c-d1cb0fdf99e4_3300x1858.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WyJw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff748d868-4fe6-4a14-875c-d1cb0fdf99e4_3300x1858.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f748d868-4fe6-4a14-875c-d1cb0fdf99e4_3300x1858.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2590932,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.codedshapes.com/i/209580531?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff748d868-4fe6-4a14-875c-d1cb0fdf99e4_3300x1858.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WyJw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff748d868-4fe6-4a14-875c-d1cb0fdf99e4_3300x1858.png 424w, https://substackcdn.com/image/fetch/$s_!WyJw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff748d868-4fe6-4a14-875c-d1cb0fdf99e4_3300x1858.png 848w, https://substackcdn.com/image/fetch/$s_!WyJw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff748d868-4fe6-4a14-875c-d1cb0fdf99e4_3300x1858.png 1272w, https://substackcdn.com/image/fetch/$s_!WyJw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff748d868-4fe6-4a14-875c-d1cb0fdf99e4_3300x1858.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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><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 icon-noB79L"><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>If you&#8217;ve ever had to pull data together from more than one source in Grasshopper, you know it&#8217;s rarely as clean as it should be. A prime example of this is when you&#8217;re working with structural analysis models. Because most programs store their geometry and results separately. And it always means you have to do some form of list matching to get them to line up.</p><p>A few weeks ago, I had a list of nodes from a model that I needed results for. Like most structural analysis programs, ETABS hands you one list of nodes and a separate list of results, expecting you to use the node IDs to cross-check between them.</p><h2>So how do you join two lists by an ID in Grasshopper?</h2><p>If you&#8217;re comfortable with code, there are many ways to do this. You can use a dictionary in C# or Pandas in Python. Even in Excel, Vlookup by the ID of one list will help you line up the two different lists.</p><p>And, well, you can actually do the same in Grasshopper. The component you&#8217;re after is called <em>Key Value Search</em>. It works very similarly to a dictionary in C#.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FF7q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96694243-f0f3-4720-930f-9f81ccaeca73_1356x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FF7q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96694243-f0f3-4720-930f-9f81ccaeca73_1356x1080.png 424w, https://substackcdn.com/image/fetch/$s_!FF7q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96694243-f0f3-4720-930f-9f81ccaeca73_1356x1080.png 848w, https://substackcdn.com/image/fetch/$s_!FF7q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96694243-f0f3-4720-930f-9f81ccaeca73_1356x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!FF7q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96694243-f0f3-4720-930f-9f81ccaeca73_1356x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FF7q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96694243-f0f3-4720-930f-9f81ccaeca73_1356x1080.png" width="1356" height="1080" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/96694243-f0f3-4720-930f-9f81ccaeca73_1356x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1080,&quot;width&quot;:1356,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:76769,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.codedshapes.com/i/209580531?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96694243-f0f3-4720-930f-9f81ccaeca73_1356x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FF7q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96694243-f0f3-4720-930f-9f81ccaeca73_1356x1080.png 424w, https://substackcdn.com/image/fetch/$s_!FF7q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96694243-f0f3-4720-930f-9f81ccaeca73_1356x1080.png 848w, https://substackcdn.com/image/fetch/$s_!FF7q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96694243-f0f3-4720-930f-9f81ccaeca73_1356x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!FF7q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96694243-f0f3-4720-930f-9f81ccaeca73_1356x1080.png 1456w" sizes="100vw"></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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><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 icon-noB79L"><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>And the best part is that you can pass in anything, not just numbers. Geometry, custom data, whatever you have. So, instead of using a script component or doing Vlookups in Excel before Grasshopper, this component let&#8217;s you keep everything in a script.</p><p><em>Okay, if you&#8217;re a paid member of CodedShapes, you get to see how I use this component in action as well as a sample script at the bottom.</em></p>
      <p>
          <a href="https://www.codedshapes.com/p/key-value-search-the-vlookup-of-grasshopper">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Week 3: Strong on Paper]]></title><description><![CDATA[Technically going okay but doesn't feel like it]]></description><link>https://www.codedshapes.com/p/week-3-strong-on-paper</link><guid isPermaLink="false">https://www.codedshapes.com/p/week-3-strong-on-paper</guid><dc:creator><![CDATA[Braden Koh]]></dc:creator><pubDate>Fri, 31 Jul 2026 08:00:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/ni4W-5A8fps" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div id="youtube2-ni4W-5A8fps" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;ni4W-5A8fps&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/ni4W-5A8fps?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Alright, week 3.</p><p>It&#8217;s what I am now calling the self-doubt week because that is the strongest feeling here.</p><p>But on paper it&#8217;s a strong week, two discovery calls, some solid time spent working on products, spent time on building a community, and I even implemented the new time boxing method from <a href="https://www.codedshapes.com/p/week-2-too-many-balls-in-the-air">last week</a>.</p><p>That really helped. Simply put, instead of only working on things that are top of mind, I treat each day as 3-4 blocks, about two hours each, then I assign tasks to all of them for the upcoming week.</p><p>I am not strict on adhering to it though because I know there are meetings and other random life things that get in the way. But the biggest benefit has been the clarity of everything. I can see now all laid out on my calendar things that I should be working on. Thinking about my time in blocks has also helped me focus, when you only have limited work blocks, you can&#8217;t pretend everything fits. So, it has forced me to decide where to put things and which should remain in the backlog.</p><p>Last week, just felt like all the tasks were due at the same time and I was task switching like a headless chicken.</p><h2>The midnight discovery call</h2><p>Sydney is a great place but the timezone difference with the ET (Eastern US Time) sucks. That discovery call I had was at midnight and I felt fine during the call, but the days after sucked. Mostly from the disrupted sleep and it could be why I feel so much self-doubt this week.</p><p>But that call was worth it though.</p><p>Because it gave me a new perspective on the way other people work. Even though I have worked with many structural engineers, I still get caught by surprise on how many assumptions I make that are wrong. So, it felt like that call brought me closer to reality.</p><h2>Building a community</h2><p>It&#8217;s still hush-hush for now but I promise I&#8217;ll release more information soon when we have something solid.</p><p>But the first half of my week was working on creating a community for digital people in the AEC. I know there are a few out there now but I am hoping that this one will help support people in other ways that are rarely talked about.</p><h2>Moving into next week</h2><p>Well, the self doubt is strong right now but I have to remind myself that I can only control the inputs. So, as sucky as this week felt, I still believe in what I am doing and I should hold the faith that it will turn out okay.</p><p>So, I think next week is about keep on doing the thing and trusting myself.</p><p>Thanks for reading,<br>Onward to week four.</p>]]></content:encoded></item><item><title><![CDATA[Being Billable Isn't the Same as Being Valuable]]></title><description><![CDATA[It took me a long time to learn this]]></description><link>https://www.codedshapes.com/p/being-billable-isnt-the-same-as-being</link><guid isPermaLink="false">https://www.codedshapes.com/p/being-billable-isnt-the-same-as-being</guid><dc:creator><![CDATA[Braden Koh]]></dc:creator><pubDate>Thu, 30 Jul 2026 00:01:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!fTEF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cca1c4c-6991-4f78-9d8b-b3928a07a8b7_3300x1858.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_!fTEF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cca1c4c-6991-4f78-9d8b-b3928a07a8b7_3300x1858.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fTEF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cca1c4c-6991-4f78-9d8b-b3928a07a8b7_3300x1858.png 424w, https://substackcdn.com/image/fetch/$s_!fTEF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cca1c4c-6991-4f78-9d8b-b3928a07a8b7_3300x1858.png 848w, https://substackcdn.com/image/fetch/$s_!fTEF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cca1c4c-6991-4f78-9d8b-b3928a07a8b7_3300x1858.png 1272w, https://substackcdn.com/image/fetch/$s_!fTEF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cca1c4c-6991-4f78-9d8b-b3928a07a8b7_3300x1858.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fTEF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cca1c4c-6991-4f78-9d8b-b3928a07a8b7_3300x1858.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8cca1c4c-6991-4f78-9d8b-b3928a07a8b7_3300x1858.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2840348,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.codedshapes.com/i/208312564?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cca1c4c-6991-4f78-9d8b-b3928a07a8b7_3300x1858.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fTEF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cca1c4c-6991-4f78-9d8b-b3928a07a8b7_3300x1858.png 424w, https://substackcdn.com/image/fetch/$s_!fTEF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cca1c4c-6991-4f78-9d8b-b3928a07a8b7_3300x1858.png 848w, https://substackcdn.com/image/fetch/$s_!fTEF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cca1c4c-6991-4f78-9d8b-b3928a07a8b7_3300x1858.png 1272w, https://substackcdn.com/image/fetch/$s_!fTEF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cca1c4c-6991-4f78-9d8b-b3928a07a8b7_3300x1858.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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><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 icon-noB79L"><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>A couple of weeks have passed, and I still can&#8217;t quite explain how I feel.</p><p>If you didn&#8217;t know, I <a href="https://www.codedshapes.com/p/im-starting-codedconstructs">recently started my own firm</a>, and I&#8217;ve been documenting the thoughts, the work, and the feelings in <a href="https://www.codedshapes.com/p/week-1-free-and-running-out-of-time">this journal section here</a>.</p><p>The central theme of these early days has been <a href="https://www.codedshapes.com/p/week-2-too-many-balls-in-the-air">the strange, fleeting feeling of time</a>. Okay, sounds very abstract but please bear with me.</p><p>I thought that once I was on my own, I&#8217;d be able to squeeze out way more work, because I&#8217;d finally be in full control. No meetings, no random support calls, no need to perform acts of productivity just for the boss.</p><p>Instead, what I&#8217;ve actually found is a constant influx of things to do. Not work exactly, not things that make money directly, just things to do. Like writing this newsletter, talking to people, admin stuff, etc.</p><p>I have enough savings to afford my current life for a while, so money shouldn&#8217;t be the thing I worry about. Yet I can&#8217;t help but feel things ticking down. Like a really drawn out time bomb. And I&#8217;m sitting in brace position waiting for it. Which, if I&#8217;m honest, does me more harm than good I think. Being safe is good but worrying about it just wastes my energy and time.</p><p>Some days I wake up ready to take on the world. Other days, I tend to worry about if I made the wrong decision. I&#8217;ve spent a lot of my time teetering between feeling like crap and feeling on top of the world. So, I wanted to take a moment today to answer the question.</p><p>Why put myself through this? Why leave the stability of a job, in this economy, to feel the extremes of every emotion alone?</p><p>Like most decisions, it was made of many small ones, and it took me a few months to understand why it was the right one. As I pondered the decision, some people who know me well said that starting my own firm was inevitable. Others tell me it&#8217;s the worst decision because of the bad economy, there&#8217;s a war, market is bad, there&#8217;s endless worry....... Even my own thoughts whirled with endless possibility and doubt.</p><p>With so much conflicting advice, I had to take the time to work out what I actually believed and if this was actually something I wanted to do.</p><div class="callout-block" data-callout="true"><p><em>Hi, I&#8217;m Braden</em></p><p><em>I write about the craft of computational design, from working with geometry and data to the experience of building tools for other people.</em></p><p><em>If you&#8217;re new to CodedShapes, welcome! You might enjoy these:</em></p><ul><li><p><em><a href="https://www.codedshapes.com/p/how-to-know-if-your-workflow-is-actually">How to know if your workflow is actually worth automating</a></em></p></li><li><p><em><a href="https://www.codedshapes.com/p/stop-using-grasshopper-for-everything">Stop using Grasshopper for everything</a></em></p></li><li><p><em><a href="https://www.codedshapes.com/p/applying-computational-design-where">How to apply computational design to your projects</a></em></p></li></ul><p><strong>If you&#8217;d like help with a workflow of your own, <a href="https://codedconstructs.com/contact/">let&#8217;s work on it together.</a></strong></p></div><h2>How I made the decision (after months of thinking)</h2><p>The clearest part of the answer came from my last big project.</p><p>It was the biggest job for the Melbourne team, and it ran for two years. It&#8217;s actually still going. It was complex, high-profile, and very delayed. Everyone involved was so stressed that if you dunked their head underwater you&#8217;d get enough steam to power the office. That project was all-consuming. Some of the lead engineers even worked through holidays.</p><p>Which meant every internal tool I looked after got de-prioritized, even the ones the whole office used. Drafters and engineers would come to me with something broken or a critical improvement they needed, and I couldn&#8217;t work on it. The project was my life and nothing else mattered.</p><p>Okay, but saying no once, or as much as three times, is fine. That&#8217;s just a backlog. Saying no for over two years is not good. I let the same people down over and over, and I inevitably lost their trust. It was also the same time that AI got really good, so people stopped waiting on me and started building what they needed themselves.</p><p>Part of me is glad they got that independence. The other part knows what it really meant: on the tool side, I&#8217;d become unreliable. Then, here I was seeing everyone else build cool shit while I was stuck <a href="https://www.codedshapes.com/p/youre-too-good-at-fixing-things">putting out fires</a> on this Melbourne project.</p><p>I am stubborn, with all that project work, I still didn&#8217;t want to give up the tools. I am responsible for them and for everyone that relies on them to deliver a project. So, for two years I lived pulled in two directions.</p><p>I&#8217;d rush to patch a tool, then rush back to the project, then when I was stuck waiting on someone, rush back to the tool because the band-aid I&#8217;d put earlier failed. And because project is king, I had to spend some nights, some weekend, even the days when I was sick to support the tools. Terrible boundaries, but it was the only way to truly support the teams using it.</p><p>And at its core, I get it. A company has to protect its flagship project. There were a lot of eyes on this one, and it had already been delayed twice. In the director&#8217;s point of view and with the project on fire like that, I&#8217;d have made the same call. Force everyone to drop their stuff and work on it. Essentially, all hands on deck.</p><p>I also love project work. Some of my best tool ideas came from it, and there&#8217;s nothing quite like solving a real problem with a team pulling toward the same thing. So this was never project work versus tools.</p><p>The problem was that <a href="https://www.codedshapes.com/p/the-spreadsheet-is-never-just-a-spreadsheet">projects were the only thing that ever counted</a>. With projects vs internal tools, projects always win, no matter how critical the tools were. My effort could be overridden at any moment by whatever was loudest and most billable that week.</p><p>So, yes putting out fires constantly for two years was exhausting but what made it worse was that I couldn&#8217;t be there for the people relying on what I&#8217;d built.</p><p>It took me a long time to find the word for it. Ownership. The part I cared about most was being able to manage and handle a problem from end to end. That means maintenance and <a href="https://www.codedshapes.com/p/the-cost-of-inheriting-other-peoples">being responsible to the people relying on them</a>. I want to build useful things that last and solve real problems. And always being pulled onto a project on fire meant that I couldn&#8217;t do that.</p><p>So I left.</p><h2>Trading safety for more control</h2><p>The truth is, I couldn&#8217;t have fixed any of that. And as much as I complain here, most companies work the same way. They&#8217;re not evil, they just have other priorities. Failing the people who relied on my tools was the worst outcome I could picture. But to the company, failing to deliver that project was worse. If the whole team had quit but the project succeeded, that would still have counted as a good result.</p><p>So more ownership of the tools was not possible, at least not while I worked for a company that only cared about direct billable hours (which in the AEC, is most of them). <a href="https://sloanreview.mit.edu/article/why-service-businesses-are-not-product-businesses/">No company running on billable hours can protect the time and effort needed to build tools.</a> I am not saying that companies should ignore the cost of tools, but they should better weigh them against the projects, to figure which is a better use of resources.</p><p>Out on my own, I finally get to decide where the effort goes. I can actually support the things I&#8217;ve built and the people using them. But that&#8217;s always easier said than done. I now need to worry about the business case of everything I do.</p><p>There&#8217;s nowhere to hide. For all the harm office politics causes, they double as a shield, it&#8217;s so easy for me to just blame them. Now, if I stop delivering value, I don&#8217;t get paid. But ownership and exposure are the same coin. I don&#8217;t get to own more without also being the one responsible when it breaks.</p><p>None of this means project work is the enemy. It&#8217;s that the tools a team leans on need an owner who won&#8217;t get pulled away, someone who owns the problem end to end, maintenance and all. Out here, that&#8217;s the whole job.</p><p>Which brings me back to where I started. The teetering, the brace position, not knowing if this was the smartest or the dumbest thing I&#8217;ve done. I used to think that feeling meant I&#8217;d made a mistake. Now I think it just means the work is finally mine to answer for. Some days that terrifies me. I&#8217;ll still take it over drifting.</p><div class="pullquote"><p>Thanks for reading. If you&#8217;d like more articles like this, subscribe to CodedShapes to get them delivered to your inbox</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codedshapes.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.codedshapes.com/subscribe?"><span>Subscribe now</span></a></p></div><p><em><strong>Work with me:</strong> <a href="https://codedconstructs.com/contact/">https://codedconstructs.com/contact/</a></em></p><p><em><strong>Computational Design Courses: </strong><a href="https://learn.codedshapes.com/">https://learn.codedshapes.com/</a></em></p><p><em><strong>Scripository (A library of computational scripts): </strong><a href="https://scripository.com/">https://scripository.com/</a></em></p>]]></content:encoded></item><item><title><![CDATA[Week 2: Too Many Balls in The Air]]></title><description><![CDATA[Week 2 of starting my own digital company in the AEC]]></description><link>https://www.codedshapes.com/p/week-2-too-many-balls-in-the-air</link><guid isPermaLink="false">https://www.codedshapes.com/p/week-2-too-many-balls-in-the-air</guid><dc:creator><![CDATA[Braden Koh]]></dc:creator><pubDate>Fri, 24 Jul 2026 07:37:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/cC5KCATVIeQ" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div id="youtube2-cC5KCATVIeQ" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;cC5KCATVIeQ&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/cC5KCATVIeQ?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>If week 1 was fast, week 2 was a blink.</p><p>Holy shit, it went quick.</p><p>I think it&#8217;s because I&#8217;m juggling too much now. Right now that&#8217;s:</p><ul><li><p>Daily outreach</p></li><li><p>Meeting new people</p></li><li><p>Writing a new newsletter issue</p></li><li><p>Editing next week&#8217;s newsletter issue</p></li><li><p>Creating and editing 5x LinkedIn posts</p></li><li><p>Making the paid newsletter issue</p></li><li><p>Building a few software products</p></li><li><p>Building a new community (more on this soon)</p></li><li><p>Writing and assessing proposals</p></li></ul><p>And there&#8217;s actually no client work in there yet, which is crazy to even think about right now. But what actually ate my time was meeting people and prepping a proposal. Which I guess always take longer than I think.</p><p>I know it looks like too much, and it feels like it too. But it&#8217;s all work I care about, so the skill I need is triaging, instead of cutting things out. I know that everything isn&#8217;t urgent and not everything needs my best energy. So, I have to get better at protecting specific times for specific things.</p><p>This week, I moved outreach to the afternoons. The quality holds up fine at moderate energy, and it frees my mornings for the harder stuff. I also made a rule not to take meetings in the morning, unless there&#8217;s really no choice, like people in the EST timezone.</p><p>So, really, this week has been a big lesson in figuring out how to best plan and use my time effectively.</p><h2>My first proposal since going full-time</h2><p>Some of the outreach is bearing fruit, and it left me writing my first proposal since going full-time.</p><p>Compared to when I did this part-time, the stakes here feel higher. Like I don&#8217;t want to mess things up. I didn&#8217;t have to re-write a new one but I did take some time to compile and cherry pick the best bits from my old proposals into this new one.</p><p>That part was fine, the part that actually took more time was the classic problem of scoping the work and pricing it.</p><p>My first instinct was to give this new potential client choices. Because who doesn&#8217;t love choices? It was going to be a base build, then modules on top of that, each priced separately: base + A, B, C. Where the more modules he took, the bigger the bundled discount.</p><p>I was ready to hit send when I realized it was way too many choices. We are talking like 9 choices to make.</p><p>I think it was because I was scared. I wanted to hand the decision to the client instead of asserting what I thought was best. I mean who am I to assume what is best for him right ?</p><p>But I reminded myself that I know what I am doing and I should offer my opinion. Even if it&#8217;s wrong at least, I am providing some direction instead of pilling on more uncertainty.</p><p>So, I gutted the whole thing and started again. This time, no modules, just offering what I thought was the best for his situation.</p><p>I hope I&#8217;m right and but we&#8217;ll see.</p><p>Making that call felt like maturing, and it gave me more confidence to act on what I think instead of trying to please people by giving them options.</p><h2>Co-working</h2><p>The other thing I did a lot more of this week was co-working with a friend. We jumped on a call, chat a bit and got straight to work.</p><p>We did two 50-minute pomodoros each time. Did this for 3 days.</p><p>It&#8217;s been great because one thing about starting out on my own is that I don&#8217;t get to talk about the work I do as much. I mean I meet people but those are potential clients and that&#8217;s different from just working with someone.</p><div class="pullquote"><p>Subscribe to follow along for the journey!</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codedshapes.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.codedshapes.com/subscribe?"><span>Subscribe now</span></a></p></div><p><em><strong>Work with me:</strong> <a href="https://codedconstructs.com/contact/">https://codedconstructs.com/contact/</a></em></p><p><em><strong>Resources on Computational Design: </strong><a href="https://www.codedshapes.com/p/scripository">https://www.codedshapes.com/p/scripository</a></em></p><p></p>]]></content:encoded></item><item><title><![CDATA[Selling Work That's Hard To Explain]]></title><description><![CDATA[It's always been hard telling people what I do]]></description><link>https://www.codedshapes.com/p/selling-work-thats-hard-to-explain</link><guid isPermaLink="false">https://www.codedshapes.com/p/selling-work-thats-hard-to-explain</guid><dc:creator><![CDATA[Braden Koh]]></dc:creator><pubDate>Thu, 23 Jul 2026 00:01:17 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!iIkL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a499b3-17a2-4fc7-9892-a49f9fd2b07a_3300x1858.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_!iIkL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a499b3-17a2-4fc7-9892-a49f9fd2b07a_3300x1858.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iIkL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a499b3-17a2-4fc7-9892-a49f9fd2b07a_3300x1858.png 424w, https://substackcdn.com/image/fetch/$s_!iIkL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a499b3-17a2-4fc7-9892-a49f9fd2b07a_3300x1858.png 848w, https://substackcdn.com/image/fetch/$s_!iIkL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a499b3-17a2-4fc7-9892-a49f9fd2b07a_3300x1858.png 1272w, https://substackcdn.com/image/fetch/$s_!iIkL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a499b3-17a2-4fc7-9892-a49f9fd2b07a_3300x1858.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iIkL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a499b3-17a2-4fc7-9892-a49f9fd2b07a_3300x1858.png" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/01a499b3-17a2-4fc7-9892-a49f9fd2b07a_3300x1858.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2556665,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.codedshapes.com/i/207762759?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a499b3-17a2-4fc7-9892-a49f9fd2b07a_3300x1858.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!iIkL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a499b3-17a2-4fc7-9892-a49f9fd2b07a_3300x1858.png 424w, https://substackcdn.com/image/fetch/$s_!iIkL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a499b3-17a2-4fc7-9892-a49f9fd2b07a_3300x1858.png 848w, https://substackcdn.com/image/fetch/$s_!iIkL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a499b3-17a2-4fc7-9892-a49f9fd2b07a_3300x1858.png 1272w, https://substackcdn.com/image/fetch/$s_!iIkL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01a499b3-17a2-4fc7-9892-a49f9fd2b07a_3300x1858.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 buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><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 icon-noB79L"><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>Okay, so what&#8217;s the first thing someone does when they start a new company?</p><p>You know, the one thing that&#8217;s easy to do and makes you feel productive and in control.</p><p>.<br>.<br>.</p><p>Did you guess it?</p><p>.<br>.<br>.</p><p>They build a website. </p><p>And that&#8217;s exactly what I did, <a href="https://open.substack.com/pub/bradenkoh/p/im-starting-codedconstructs">a few weeks after going solo</a>.</p><p>But I have an advantage here. I&#8217;ve built plenty of websites before, so my problem now is not the design or the tech stack. It&#8217;s the messaging. Basically, I&#8217;m trying to answer:</p><p><em>How do I communicate what I do to others?</em></p><p>Which is a problem I&#8217;ve been circling for years. I&#8217;ve written before about <a href="https://www.codedshapes.com/p/what-happens-when-no-one-understand">what happens when no one understands what you do</a>, except back then it was a problem inside a company. Now there&#8217;s no company to hide behind.</p><h2>At first, I thought the job was to prove myself</h2><p>I&#8217;d just left a big-ish structural firm with a pile of projects and tools under my belt. I wanted to show every complex thing I&#8217;d built. Surely, that&#8217;s my value, right? I&#8217;d even done something like it before, so I had a template to copy.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zjZv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36c8d560-1b97-4b6d-a257-09a60aacdec1_3765x2028.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zjZv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36c8d560-1b97-4b6d-a257-09a60aacdec1_3765x2028.png 424w, https://substackcdn.com/image/fetch/$s_!zjZv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36c8d560-1b97-4b6d-a257-09a60aacdec1_3765x2028.png 848w, https://substackcdn.com/image/fetch/$s_!zjZv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36c8d560-1b97-4b6d-a257-09a60aacdec1_3765x2028.png 1272w, https://substackcdn.com/image/fetch/$s_!zjZv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36c8d560-1b97-4b6d-a257-09a60aacdec1_3765x2028.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zjZv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36c8d560-1b97-4b6d-a257-09a60aacdec1_3765x2028.png" width="578" height="311.2307692307692" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/36c8d560-1b97-4b6d-a257-09a60aacdec1_3765x2028.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:784,&quot;width&quot;:1456,&quot;resizeWidth&quot;:578,&quot;bytes&quot;:1441173,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.codedshapes.com/i/207762759?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36c8d560-1b97-4b6d-a257-09a60aacdec1_3765x2028.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zjZv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36c8d560-1b97-4b6d-a257-09a60aacdec1_3765x2028.png 424w, https://substackcdn.com/image/fetch/$s_!zjZv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36c8d560-1b97-4b6d-a257-09a60aacdec1_3765x2028.png 848w, https://substackcdn.com/image/fetch/$s_!zjZv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36c8d560-1b97-4b6d-a257-09a60aacdec1_3765x2028.png 1272w, https://substackcdn.com/image/fetch/$s_!zjZv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F36c8d560-1b97-4b6d-a257-09a60aacdec1_3765x2028.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><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 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>My &#8220;portfolio&#8221; at bradenkoh.com</em></figcaption></figure></div><p>So I spent two days doing exactly that for CodedConstructs. But the more I worked on it, the more I hated it. It got to the point where I just gutted the whole thing and started again.</p><p><em>I just wasn&#8217;t sure what I was saying anymore.</em></p><div class="callout-block" data-callout="true"><p><em>Hi, I&#8217;m Braden</em></p><p><em>I write about the craft of computational design, from working with geometry and data to the experience of building tools for other people.</em></p><p><em>If you&#8217;re new to CodedShapes, welcome! You might enjoy these:</em></p><ul><li><p><em><a href="https://www.codedshapes.com/p/how-to-know-if-your-workflow-is-actually">How to know if your workflow is actually worth automating</a></em></p></li><li><p><em><a href="https://www.codedshapes.com/p/stop-using-grasshopper-for-everything">Stop using Grasshopper for everything</a></em></p></li><li><p><em><a href="https://www.codedshapes.com/p/applying-computational-design-where">How to apply computational design to your projects</a></em></p></li></ul><p><strong>If you&#8217;d like help with a workflow of your own, <a href="https://codedconstructs.com/contact/">let&#8217;s work on it together.</a></strong></p></div><h2>Round 2, cutting the flash</h2><p>I didn&#8217;t hate the portfolio because I wasn&#8217;t proud of those projects. I hated it because I didn&#8217;t want to be that person. You know the type. The super-techy, know-it-all who&#8217;s always screaming &#8220;look how much value I&#8217;d bring if you&#8217;d just pay me.&#8221;</p><p>That&#8217;s the opposite of what I want <a href="https://codedconstructs.com/">CodedConstructs </a>to feel like. I want to be your partner in solving problems. I want to show that I understand the problem and can build something that fixes it. I want the site to do what I&#8217;d do in-person, ask questions, dig into the problem, before offering anything.</p><p>A flashy portfolio is the opposite of that. All it does is alienate people. What&#8217;s worse, it says nothing about whether I can build you a tool that saves your team time and effort. It&#8217;s the same mistake as <a href="https://www.codedshapes.com/p/this-is-why-they-dont-trust-us">building for the demo instead of the job</a>, just in a different medium.</p><p>In a field this abstract and confusing, I&#8217;m aiming for <em>clarity</em>. Not flash.</p><p>After some thinking, the way I got there was to <em>lead with the problem</em>, then show what it&#8217;s like to work on it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!s52f!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F105eaacd-1059-4b26-a98d-53d66bf2b8e6_3765x2028.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!s52f!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F105eaacd-1059-4b26-a98d-53d66bf2b8e6_3765x2028.png 424w, https://substackcdn.com/image/fetch/$s_!s52f!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F105eaacd-1059-4b26-a98d-53d66bf2b8e6_3765x2028.png 848w, https://substackcdn.com/image/fetch/$s_!s52f!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F105eaacd-1059-4b26-a98d-53d66bf2b8e6_3765x2028.png 1272w, https://substackcdn.com/image/fetch/$s_!s52f!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F105eaacd-1059-4b26-a98d-53d66bf2b8e6_3765x2028.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!s52f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F105eaacd-1059-4b26-a98d-53d66bf2b8e6_3765x2028.png" width="1456" height="784" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/105eaacd-1059-4b26-a98d-53d66bf2b8e6_3765x2028.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:784,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:226854,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.codedshapes.com/i/207762759?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F105eaacd-1059-4b26-a98d-53d66bf2b8e6_3765x2028.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!s52f!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F105eaacd-1059-4b26-a98d-53d66bf2b8e6_3765x2028.png 424w, https://substackcdn.com/image/fetch/$s_!s52f!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F105eaacd-1059-4b26-a98d-53d66bf2b8e6_3765x2028.png 848w, https://substackcdn.com/image/fetch/$s_!s52f!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F105eaacd-1059-4b26-a98d-53d66bf2b8e6_3765x2028.png 1272w, https://substackcdn.com/image/fetch/$s_!s52f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F105eaacd-1059-4b26-a98d-53d66bf2b8e6_3765x2028.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><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 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Of course, since the problem can be broad, I show the three ways I can help.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sPcz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b246f4c-a416-40cb-8714-4b614a7515cd_3765x2028.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sPcz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b246f4c-a416-40cb-8714-4b614a7515cd_3765x2028.png 424w, https://substackcdn.com/image/fetch/$s_!sPcz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b246f4c-a416-40cb-8714-4b614a7515cd_3765x2028.png 848w, https://substackcdn.com/image/fetch/$s_!sPcz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b246f4c-a416-40cb-8714-4b614a7515cd_3765x2028.png 1272w, https://substackcdn.com/image/fetch/$s_!sPcz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b246f4c-a416-40cb-8714-4b614a7515cd_3765x2028.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sPcz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b246f4c-a416-40cb-8714-4b614a7515cd_3765x2028.png" width="1456" height="784" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5b246f4c-a416-40cb-8714-4b614a7515cd_3765x2028.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:784,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:244666,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.codedshapes.com/i/207762759?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b246f4c-a416-40cb-8714-4b614a7515cd_3765x2028.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!sPcz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b246f4c-a416-40cb-8714-4b614a7515cd_3765x2028.png 424w, https://substackcdn.com/image/fetch/$s_!sPcz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b246f4c-a416-40cb-8714-4b614a7515cd_3765x2028.png 848w, https://substackcdn.com/image/fetch/$s_!sPcz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b246f4c-a416-40cb-8714-4b614a7515cd_3765x2028.png 1272w, https://substackcdn.com/image/fetch/$s_!sPcz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b246f4c-a416-40cb-8714-4b614a7515cd_3765x2028.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><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 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>This is actually more reflective of me in real life too. I always start by trying to understand the problem first.</p><h2>Showing the process</h2><p>As part bringing more <em>clarity</em>, I wanted to show people what it&#8217;s like to work with me.</p><p>There aren&#8217;t many examples of digital work in the AEC industry, so I laid out what has worked for me in the past. Again, the goal is to take some of the blurriness out of all this digital stuff and replace it with a clearer picture of what building an effective tool actually involves. <a href="https://www.codedshapes.com/p/computational-design-isnt-magic">None of it is magic</a>, it just looks that way from the outside.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RhYC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F680faccc-6420-4270-b59b-0c32baae6036_3765x2028.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RhYC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F680faccc-6420-4270-b59b-0c32baae6036_3765x2028.png 424w, https://substackcdn.com/image/fetch/$s_!RhYC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F680faccc-6420-4270-b59b-0c32baae6036_3765x2028.png 848w, https://substackcdn.com/image/fetch/$s_!RhYC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F680faccc-6420-4270-b59b-0c32baae6036_3765x2028.png 1272w, https://substackcdn.com/image/fetch/$s_!RhYC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F680faccc-6420-4270-b59b-0c32baae6036_3765x2028.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RhYC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F680faccc-6420-4270-b59b-0c32baae6036_3765x2028.png" width="1456" height="784" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/680faccc-6420-4270-b59b-0c32baae6036_3765x2028.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:784,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:183797,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.codedshapes.com/i/207762759?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F680faccc-6420-4270-b59b-0c32baae6036_3765x2028.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RhYC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F680faccc-6420-4270-b59b-0c32baae6036_3765x2028.png 424w, https://substackcdn.com/image/fetch/$s_!RhYC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F680faccc-6420-4270-b59b-0c32baae6036_3765x2028.png 848w, https://substackcdn.com/image/fetch/$s_!RhYC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F680faccc-6420-4270-b59b-0c32baae6036_3765x2028.png 1272w, https://substackcdn.com/image/fetch/$s_!RhYC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F680faccc-6420-4270-b59b-0c32baae6036_3765x2028.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><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 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>As simple as it looks on the website, most of that work was me iterating on how to articulate my own process.</p><h2>Examples, not a portfolio</h2><p>Cutting the traditional &#8220;portfolio&#8221; meant cutting my examples too. Which was a real loss, because examples are proof of work and they sometimes spark ideas people hadn&#8217;t considered.</p><p>What I didn&#8217;t want was the <em>show-ey</em> part. The big beautiful images that almost never represented the value of a digital tool.</p><p>So, I&#8217;ve gone against the grain and kept the examples light and text only. Along with a way to filter them by <em>pattern</em> and <em>discipline</em>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ANSt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7551daff-47f6-47a3-888a-edaaba0c47a4_3765x2028.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ANSt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7551daff-47f6-47a3-888a-edaaba0c47a4_3765x2028.png 424w, https://substackcdn.com/image/fetch/$s_!ANSt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7551daff-47f6-47a3-888a-edaaba0c47a4_3765x2028.png 848w, https://substackcdn.com/image/fetch/$s_!ANSt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7551daff-47f6-47a3-888a-edaaba0c47a4_3765x2028.png 1272w, https://substackcdn.com/image/fetch/$s_!ANSt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7551daff-47f6-47a3-888a-edaaba0c47a4_3765x2028.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ANSt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7551daff-47f6-47a3-888a-edaaba0c47a4_3765x2028.png" width="1456" height="784" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7551daff-47f6-47a3-888a-edaaba0c47a4_3765x2028.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:784,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:295215,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.codedshapes.com/i/207762759?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7551daff-47f6-47a3-888a-edaaba0c47a4_3765x2028.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ANSt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7551daff-47f6-47a3-888a-edaaba0c47a4_3765x2028.png 424w, https://substackcdn.com/image/fetch/$s_!ANSt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7551daff-47f6-47a3-888a-edaaba0c47a4_3765x2028.png 848w, https://substackcdn.com/image/fetch/$s_!ANSt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7551daff-47f6-47a3-888a-edaaba0c47a4_3765x2028.png 1272w, https://substackcdn.com/image/fetch/$s_!ANSt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7551daff-47f6-47a3-888a-edaaba0c47a4_3765x2028.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><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 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>But even with text only, I kept falling back into deep technical dives about the solution. Flashy is a hard habit to break.</p><p>So, each example followed a strict format that should be skimmable by anyone.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!h_Rx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46dd0189-15ac-4eb2-81dc-bdf3c6dcc1bc_3765x2028.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!h_Rx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46dd0189-15ac-4eb2-81dc-bdf3c6dcc1bc_3765x2028.png 424w, https://substackcdn.com/image/fetch/$s_!h_Rx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46dd0189-15ac-4eb2-81dc-bdf3c6dcc1bc_3765x2028.png 848w, https://substackcdn.com/image/fetch/$s_!h_Rx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46dd0189-15ac-4eb2-81dc-bdf3c6dcc1bc_3765x2028.png 1272w, https://substackcdn.com/image/fetch/$s_!h_Rx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46dd0189-15ac-4eb2-81dc-bdf3c6dcc1bc_3765x2028.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!h_Rx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46dd0189-15ac-4eb2-81dc-bdf3c6dcc1bc_3765x2028.png" width="1456" height="784" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/46dd0189-15ac-4eb2-81dc-bdf3c6dcc1bc_3765x2028.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:784,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:261875,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.codedshapes.com/i/207762759?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46dd0189-15ac-4eb2-81dc-bdf3c6dcc1bc_3765x2028.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!h_Rx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46dd0189-15ac-4eb2-81dc-bdf3c6dcc1bc_3765x2028.png 424w, https://substackcdn.com/image/fetch/$s_!h_Rx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46dd0189-15ac-4eb2-81dc-bdf3c6dcc1bc_3765x2028.png 848w, https://substackcdn.com/image/fetch/$s_!h_Rx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46dd0189-15ac-4eb2-81dc-bdf3c6dcc1bc_3765x2028.png 1272w, https://substackcdn.com/image/fetch/$s_!h_Rx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46dd0189-15ac-4eb2-81dc-bdf3c6dcc1bc_3765x2028.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><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 icon-noB79L"><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 idea here is for anyone to read and hopefully identify with an example. Then, be motivated to reach out.</p><p>I want my examples to show the value and type of work I do not to overwhelm people with &#8220;awe&#8221;.</p><h2>I had to choose who not to help</h2><p>This was the hardest part of the site.</p><p>Deciding who I can&#8217;t help means focusing on areas I bring the most value to. This was particularly challenging because I love solving all types of problems.</p><p>But specificity opens more doors than being broad. Saying &#8220;I build custom tools&#8221; is vague and not helpful at all, which is roughly the reason I got fussy about <a href="https://www.codedshapes.com/p/what-do-you-actually-deliver">what I actually deliver</a> in the first place. So, I got more specific about the firms I can best help.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EaSv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc1d196a-8607-40e0-851c-5aa0e6674985_3738x2019.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EaSv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc1d196a-8607-40e0-851c-5aa0e6674985_3738x2019.png 424w, https://substackcdn.com/image/fetch/$s_!EaSv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc1d196a-8607-40e0-851c-5aa0e6674985_3738x2019.png 848w, https://substackcdn.com/image/fetch/$s_!EaSv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc1d196a-8607-40e0-851c-5aa0e6674985_3738x2019.png 1272w, https://substackcdn.com/image/fetch/$s_!EaSv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc1d196a-8607-40e0-851c-5aa0e6674985_3738x2019.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EaSv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc1d196a-8607-40e0-851c-5aa0e6674985_3738x2019.png" width="1456" height="786" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dc1d196a-8607-40e0-851c-5aa0e6674985_3738x2019.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:786,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:204098,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.codedshapes.com/i/207762759?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc1d196a-8607-40e0-851c-5aa0e6674985_3738x2019.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EaSv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc1d196a-8607-40e0-851c-5aa0e6674985_3738x2019.png 424w, https://substackcdn.com/image/fetch/$s_!EaSv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc1d196a-8607-40e0-851c-5aa0e6674985_3738x2019.png 848w, https://substackcdn.com/image/fetch/$s_!EaSv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc1d196a-8607-40e0-851c-5aa0e6674985_3738x2019.png 1272w, https://substackcdn.com/image/fetch/$s_!EaSv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc1d196a-8607-40e0-851c-5aa0e6674985_3738x2019.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><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 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>To me, it&#8217;s the small-to-medium, busy firms without the in-house capability to build tools for themselves. Big firms can afford a digital person. It&#8217;s the small-but-slammed shops that need the automation most and are least able to make it. That&#8217;s where I&#8217;ve delivered the most value.</p><p>The uncomfortable bit is that I <em>could</em> say yes to more. I&#8217;ve spent most of my career inside structural firms. I could offer structural advice, or drafting help. But that&#8217;s not the value I want to bring. The whole point is helping teams get more out of their computers, and I can&#8217;t do that while trying to be everything to everyone.</p><h1>This is all a working theory</h1><p>As certain as I sound about all this, it&#8217;s still a bet.</p><p>I&#8217;ve just started my own firm, so how I position CodedConstructs is bound to change, and hopefully the site changes with it. I&#8217;m <a href="https://www.codedshapes.com/p/week-1-free-and-running-out-of-time">writing all of it down as I go</a>, messaging included.</p><p>I know a website won&#8217;t be some overnight client magnet, and most people won&#8217;t even know it exists. But it&#8217;s the one place I fully control the narrative. It&#8217;s where I get to define what CodedConstructs stands for and how I want to talk about digital work in AEC. And knowing me, I&#8217;ll keep tinkering with it forever.</p><p>Whether leading with the problem actually pulls the right people in, I honestly don&#8217;t know yet. But it&#8217;s the stance I&#8217;m taking.</p><p>Hopefully this gave you a glimpse of what CodedConstructs is about. And maybe a nudge to ask yourself the same question. How would you explain your work if you had to?</p><p>The site is live, come have a look: <a href="https://codedconstructs.com/">www.codedconstructs.com</a>.</p><div class="pullquote"><p>Thanks for reading. If you&#8217;d like more articles like this, subscribe to CodedShapes to get them delivered to your inbox</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codedshapes.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.codedshapes.com/subscribe?"><span>Subscribe now</span></a></p></div><p><em><strong>Work with me:</strong> <a href="https://codedconstructs.com/contact/">https://codedconstructs.com/contact/</a></em></p><p><em><strong>Computational Design Courses: </strong><a href="https://learn.codedshapes.com/">https://learn.codedshapes.com/</a></em></p><p><em><strong>Scripository (A library of computational scripts): </strong><a href="https://scripository.com/">https://scripository.com/</a></em></p>]]></content:encoded></item><item><title><![CDATA[Week 1: Free, and Running Out of Time]]></title><description><![CDATA[This is what I did in the first week of leaving my job and starting a new company.]]></description><link>https://www.codedshapes.com/p/week-1-free-and-running-out-of-time</link><guid isPermaLink="false">https://www.codedshapes.com/p/week-1-free-and-running-out-of-time</guid><dc:creator><![CDATA[Braden Koh]]></dc:creator><pubDate>Mon, 20 Jul 2026 00:33:13 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/h4xWJAArbsY" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="callout-block" data-callout="true"><p><strong>What is this</strong></p><p>I&#8217;m going to try to write, and film, one of these every week. It&#8217;s a short log of what it&#8217;s like to leave a job and build something on my own. I am treating this as a &#8220;documenting&#8221; style but will try to make it as coherent as possible.<br></p><p>I think this journey of mine is going to be interesting, so I want to share it with everyone but I also didn&#8217;t want to disrupt my current newsletter. So, I create a new &#8220;section&#8221; on Substack.<br></p><p>And if you don&#8217;t want to follow along or read this, no problems, you can always unsubscribe to this section at the bottom while still getting the normal CodedShapes issues every week.</p></div><h2>Rules</h2><p>I adding this to my already pretty long things to do weekly, so I made some rules to prevent this from sucking up too much of my time.</p><ul><li><p>Writing and editing, can only take 1 hour</p></li><li><p>Filming and editing, can only take 1 hour</p><ul><li><p>During filming, no more than 5 re-takes.</p></li></ul></li><li><p>Publishing (in all it&#8217;s nitty gritty), can only take 30 minutes</p></li></ul><p>I am going to set a time for each and when the time is up, I&#8217;ll wrap up and publish. The whole point is for this to be rough and it&#8217;s a log, not &#8220;content&#8221;.</p><h2>Week 1</h2><div id="youtube2-h4xWJAArbsY" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;h4xWJAArbsY&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/h4xWJAArbsY?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>It&#8217;s the end of week 1 of going independent for me.</p><p>And if I could sum it up in two words, it would be: freeing and exhausting.</p><p>Like the start of most journeys, I&#8217;m find myself wanting to do many things. Filled with excitement and busier than ever.</p><p>I got more done than I had in weeks.</p><p>Just as a summary,</p><ul><li><p>I got the company setup and all its accounting logistics and tax implications</p></li><li><p>I got the CodedConstructs site up and running</p></li><li><p>I have been doing some outreach every day</p></li><li><p>I had some meetings with new people (Just meeting interesting people)</p></li><li><p>I had some discussions about new projects to collaborate</p></li><li><p>I have been doing some product development too</p></li></ul><p>Every evening, I am exhausted. But there&#8217;s a strong sense of accomplishment each day. There&#8217;s just something about being able to own the end-to-end process that makes working on it, so great. Maybe it&#8217;s the control and also the fact that I am able to execute on my &#8220;vision&#8221; for what digital work looks like.</p><p>It&#8217;s also the small things too. Like being able to go to the gym before lunch instead of &#8220;slumming&#8221; it with the after work crowd. Or meeting people and not worrying about my lunch break ending and having to rush the end of a great conversation. Since, I just started being able to work from my &#8220;office&#8221; at home is way better than the pressure of needing to go to the an office (although I imagine, this will get lonely soon).</p><p>All of this in the first week has made imagine going back to a full time job unimaginable.</p><p>As Naval once said:</p><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://x.com/naval/status/977712028163833856?ref_src=twsrc%5Etfw\&quot;>March&quot;,&quot;full_text&quot;:&quot;<span class=\&quot;tweet-fake-link\&quot;>@johndurant</span> A taste of freedom can make you unemployable.&quot;,&quot;username&quot;:&quot;naval&quot;,&quot;name&quot;:&quot;Naval&quot;,&quot;profile_image_url&quot;:&quot;https://pbs.substack.com/profile_images/1256841238298292232/ycqwaMI2_normal.jpg&quot;,&quot;date&quot;:&quot;2018-03-25T01:01:27.000Z&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:84,&quot;retweet_count&quot;:981,&quot;like_count&quot;:4554,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:null,&quot;video_url&quot;:null,&quot;video_preview_media_key&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><p>But it&#8217;s not all glorious.</p><p>The elephant in the room here is that at some point, all of this has to make money.</p><p>Freedom is great and all but so is being able to pay the bills.</p><p>And it&#8217;s a sneaky one. Because now that I am alone and every decision is on me. Which leaves room for a lot of doubt and questions. No more manager or &#8220;management&#8221; to blame. Everything is on me.</p><p>Which when I am tired, can feel overwhelming.</p><p>It&#8217;s a strange to feel so free and also feel that time is running out at the same time.</p><p>It&#8217;s led me to understand burnout better now than I ever did on a salary. Because there is just an infinite things to work on at a given time. There&#8217;s just always more to do.</p><p>Actually, the hardest part might even be to trust myself more. Because well I making decisions that need to have a positive and monetary impact and a lot of that is trusting my own instincts and processes.</p><p>In a few moments of weakness I have thought of reaching out to the less savoury kind of people ~asking~ begging for a project just because it seemed easier than to stand my ground. But I&#8217;m hoping I never go through with that.</p><div><hr></div><p>That&#8217;s week one in a nutshell.</p><p>I am going to try and keep these up each week because I find it interesting to see how this unfolds.</p><p>Thanks for reading.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.codedshapes.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">Subscribe to follow along for the journey!</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><div><hr></div><p><em><strong>Work with me:</strong> <a href="https://codedconstructs.com/contact/">https://codedconstructs.com/contact/</a></em></p><p><em><strong>Computational Design Courses: </strong><a href="https://learn.codedshapes.com/">https://learn.codedshapes.com/</a></em></p><p><em><strong>Scripository (A library of computational scripts): </strong><a href="https://scripository.com/">https://scripository.com/</a></em></p>]]></content:encoded></item></channel></rss>