<?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[Software Design: Tidy First?: From the Archives]]></title><description><![CDATA[Short pieces, lightly edited, from the dawn of time (pre-2020 anyway)]]></description><link>https://tidyfirst.substack.com/s/from-the-archives</link><image><url>https://substackcdn.com/image/fetch/$s_!RtcJ!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Ftidyfirst.substack.com%2Fimg%2Fsubstack.png</url><title>Software Design: Tidy First?: From the Archives</title><link>https://tidyfirst.substack.com/s/from-the-archives</link></image><generator>Substack</generator><lastBuildDate>Sat, 18 Apr 2026 10:37:32 GMT</lastBuildDate><atom:link href="https://tidyfirst.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Kent Beck]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[sponsorships@kentbeck.com]]></webMaster><itunes:owner><itunes:email><![CDATA[sponsorships@kentbeck.com]]></itunes:email><itunes:name><![CDATA[Kent Beck]]></itunes:name></itunes:owner><itunes:author><![CDATA[Kent Beck]]></itunes:author><googleplay:owner><![CDATA[sponsorships@kentbeck.com]]></googleplay:owner><googleplay:email><![CDATA[sponsorships@kentbeck.com]]></googleplay:email><googleplay:author><![CDATA[Kent Beck]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Explore *Then* Expand *Then* Extract]]></title><description><![CDATA[First publishing February 2016]]></description><link>https://tidyfirst.substack.com/p/explore-then-expand-then-extract</link><guid isPermaLink="false">https://tidyfirst.substack.com/p/explore-then-expand-then-extract</guid><dc:creator><![CDATA[Kent Beck]]></dc:creator><pubDate>Thu, 04 Dec 2025 18:29:21 GMT</pubDate><content:encoded><![CDATA[<blockquote><p>First publishing February 2016</p></blockquote><div class="pullquote"><p><em>Migrations are expensive in ... opportunity cost. Write hot spots appear only after a product is gaining real traction, which is a bad time to temporarily stop feature development and back off on user growth.</em></p></div><p>The above was an argument for pre-emptive, speculative performance tuning. If this product is successful, goes the thinking, then data write performance is going to become a bottleneck. We don&#8217;t want to have pause user growth to switch to a new database. Let&#8217;s just fix the bottleneck now.</p><p>I can empathize with the sentiment, but I think this line of reasoning creates risk &amp; reduces profit.</p><h2>Review</h2><p>Going from exploration to expansion always creates the risk of uncovering new bottlenecks. Fixing bottlenecks quickly so extraction can commence is a more realistic goal.</p><p>To review, product development proceeds:</p><ol><li><p>From exploration&#8212;the risky search for a viable return for a viable investment</p></li><li><p>To expansion&#8212;the elimination of bottlenecks to growth</p></li><li><p>To extraction&#8212;where profitable growth continues</p></li></ol><h2>Can&#8217;t Jump To Expand</h2><p>The system design rules change between the three phases. In exploration, anything goes as long as it reduces the cost of experimentation. Use infrastructure that doesn&#8217;t scale if it accelerates experimentation.</p><p>The transition from exploration to expansion is tricky. The activities &amp; values that resulted in successful exploration become dangerous during expansion. Exploration requires diverse, tangential thinking and experimentation. Expansion requires singular focus on removing the next bottleneck just before it chokes growth. Continuing to experiment distracts from this focus.</p><p>The activities &amp; values that make for successful expansion, however, endanger exploration deployed prematurely. Doing a better job preparing for future growth slows experimentation, reducing the chance of success.</p><h2>Success</h2><p>The lament above, that during traction is a &#8220;bad time to stop feature development&#8221; is perfectly understandable. You&#8217;ve been experimenting for months or years. You&#8217;ve begun to despair of those experiments ever paying off. Suddenly you&#8217;re on a hot streak. Everything you try works.</p><p>Who wants to stop during a hot streak? (In poker we call this &#8220;playing the rush&#8221;.)</p><p>You can&#8217;t create infrastructure that eliminates all bottlenecks. You don&#8217;t know the exact circumstances of those bottlenecks. You don&#8217;t know what data distributions look like, usage patterns geographically or by time of day or day of week.</p><p>Universal infrastructure is under-constrained, does work it needn&#8217;t do. That extra work perversely creates risk in the precise situations we need to overcome now that users have shown us what those situations are.</p><h2>Conclusion</h2><p>The best we can hope for is:</p><ul><li><p>To repair emerging bottlenecks quickly so we can get on with extraction. If this requires that we pause or throttle growth so we survive, that&#8217;s the price of success.</p></li><li><p>To permanently repair bottlenecks that &#8220;rhyme&#8221; with past bottlenecks, but this as an Extract project.</p></li></ul>]]></content:encoded></item><item><title><![CDATA[Cloud Development Environments Tame Complexity By Reducing State]]></title><description><![CDATA[This article was first published in 2022.]]></description><link>https://tidyfirst.substack.com/p/cloud-development-environments-tame</link><guid isPermaLink="false">https://tidyfirst.substack.com/p/cloud-development-environments-tame</guid><dc:creator><![CDATA[Kent Beck]]></dc:creator><pubDate>Thu, 14 Aug 2025 13:09:30 GMT</pubDate><content:encoded><![CDATA[<blockquote><p>This article was first published in 2022. It has become newly relevant because remote development environments turn out to be key enabling infrastructure for remote genies.</p></blockquote><p>When I joined Gusto 3 and a half years ago I got to program production Ruby for the first time. I was excited to get started. Alex, a senior developer, walked me through the steps required to get tests &amp; an IDE running on my laptop. All was well for a few days.</p><p>Then I updated the repository &amp; the tests wouldn&#8217;t run. &#8220;Oh, yeah,&#8221; Alex said, &#8220;You have to delete this file &amp; re-run that script. No problem.&#8221; I did. No problem.</p><p>Come the next Monday, though, it was, &#8220;Hmmm, I haven&#8217;t seen this before.&#8221; Type type type. &#8220;Let me ask somebody.&#8221; Type type type. &#8220;There, all fixed.&#8221;</p><p>Every few days, my development environment got borked. Often it was a quick fix. Sometimes not. But always time taken from one of the most productive programmers (Alex, not me.)</p><div><hr></div><p><em>Welcome to new sponsor <strong><a href="https://fnf.dev/46Jc55M">CodeRabbit</a></strong>. As I continue to write more code with AI, I long for a "what all did the genie do?" tool.</em></p><p><em>CodeRabbit offers this visibility, providing code reviews right in the IDE (for individual coding insights) and on PRs (to ensure consistency and quality across your org). CodeRabbit fits into existing toolchains and git-based workflows, can be personalized for individuals and teams, and can be used in conjunction with some of our favorite AI agents (including Claude Code, Augment Code, Cline, etc.).</em></p><p><em><a href="https://fnf.dev/46Jc55M">Sign up today</a> and see how CodeRabbit can cut bugs and review time in half (while also letting you keep tabs on your augmented coding projects).</em></p><div><hr></div><h2><strong>Structural Problem</strong></h2><p>Developers spend hours a week just being able to program on laptops. Laptops have advantages as a programming location: control, latency, flexibility. However, we just don&#8217;t seem to be able to keep them working without leaving the floor covered in yak hair. We&#8217;re programmers. Can&#8217;t we just solve this problem?</p><p>No. As I was getting acquainted with GitPod the other day, it struck me that there is no direct way around the problem of a stable, predictable development environment on a personal machine.</p><h2><strong>Variability, Interconnection, State, Irreversibility</strong></h2><p>I learned the following model from Professor Enrico Zaninotto, at the time the Dean of Economics at the University of Trento. Large, complicated system aren&#8217;t controllable when they combine 4 properties:</p><ul><li><p>Variability &#8212; the environment around the system changes out of control &amp; visibility of the system.</p></li><li><p>Interconnection &#8212; the elements in the environment affect each other.</p></li><li><p>State &#8212; the system can be in one of many states at any given time.</p></li><li><p>Irreversibility &#8212; changes to the system, once made, cannot easily be unmade.</p></li></ul><p>When all 4 properties are present, there is no way of predicting how the system will behave. Change the system, there is no way of predicting how the overall behavior will change. You can&#8217;t understand the system well enough to fix this problem.</p><p>His first example was mass production gaining control by reducing the number of states. All Model T Fords were black not because Henry Ford liked black so much, but because &#8220;paint or no paint&#8221; is easier to manage than &#8220;how much of each color of paint to do we have/need?&#8221;.</p><p>(Professor Zaninotto was trying to understand the effectiveness of Extreme Programming. Software development has all 4 properties. <a href="https://www.facebook.com/notes/681695435785808/">XP, in this model, works by introducing reversibility to software development decisions.</a>)</p><h2><strong>Applied to Development Environments</strong></h2><p>How does this model apply to development environments?</p><ul><li><p>Variability &#8212; Yes. Today&#8217;s style of development takes advantage of a long &amp; complicated supply chain. All the systems we rely on change independently.</p></li><li><p>Interconnection &#8212; Yes. The parts of our system rely on each other.</p></li><li><p>State &#8212; Oh my yes. The current state of a development environment is enormous. What&#8217;s been downloaded, initialized, running, messed up?</p></li><li><p>Irreversibility &#8212; Surprisingly, yes. &#8220;Oh, upgrading this messed up that? Just reinstall the previous version.&#8221; Yeah, right.</p></li></ul><p>How does this help with my Monday morning laptop blues? We still want to take advantage of variability. We aren&#8217;t Forth programmers writing all of our own stack down to silicon. We can&#8217;t avoid interconnection.</p><p>That leaves us with state and irreversibility. Pre-built development environments of the sort offered by GitPod give everyone using the same environment the exact same state. If today&#8217;s pre-build doesn&#8217;t work, we can easily load yesterday&#8217;s &amp; get back to a known-good environment.</p><h2><strong>And Then&#8230;</strong></h2><p>I&#8217;m excited to see how this plays out. The first advantage for programmers is the time they save. I&#8217;ve seen different numbers for the current cost of keeping a development environment working, but it&#8217;s certainly tens of percent.</p><p>More important, I suspect, will be all the programs that folks will try writing because they are no longer afraid of wasting another 4 hours before giving up. One of those programs that wouldn&#8217;t have been started will turn out to be exceedingly valuable.</p><p>Interesting problems remain. How does remote development retain the latency of local development? How do you share a remote environment? How do you satisfy the needs of beginner, intermediate, &amp; expert programmers at the same time?</p>]]></content:encoded></item><item><title><![CDATA[When Should Visual Design Precede Implementation?]]></title><description><![CDATA[First published April 2016]]></description><link>https://tidyfirst.substack.com/p/when-should-visual-design-precede</link><guid isPermaLink="false">https://tidyfirst.substack.com/p/when-should-visual-design-precede</guid><dc:creator><![CDATA[Kent Beck]]></dc:creator><pubDate>Fri, 04 Apr 2025 14:06:17 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_QXx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ad2a0cb-bd18-410f-9e20-f9e8f525463c_600x802.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p>First published April 2016</p></blockquote><p>As a programmer, I hate getting a wire frame and having to reproduce it with code. I never had a good way to be empathetic with those who want to work in that style. I now have an explanation for when it makes sense.</p><div><hr></div><p>Welcome new sponsor <a href="https://augmentcode.com">Augment</a>! Their CEO (and my friend) Igor Ostrovsky walked me through their chat-based programming assistance &amp; previewed their sexy new agentic tools. I <em>love</em> writing programs that modify programs &amp; now I can do it with all the benefits of a tool embedded in VS Code.</p><p>Some things Augment Agent can do:</p><ul><li><p>Add new features spanning multiple files</p></li><li><p>Queue up tests in the terminal</p></li><li><p>Open Linear tickets, start a pull request</p></li><li><p>Start a new branch in GitHub from recent commits</p></li></ul><p>The limitation is your imagination. Build something real&#8212;Augment Agent is standing by to help. <a href="https://fnf.dev/3RpJ5qE">Sign up and start building with Augment Agent</a>.</p><div><hr></div><h2>Distilled essence of convexity</h2><p>[ed: I&#8217;d call this Explore now, but I was just on the verge of minting those words at the time of writing]</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_QXx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ad2a0cb-bd18-410f-9e20-f9e8f525463c_600x802.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_QXx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ad2a0cb-bd18-410f-9e20-f9e8f525463c_600x802.png 424w, https://substackcdn.com/image/fetch/$s_!_QXx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ad2a0cb-bd18-410f-9e20-f9e8f525463c_600x802.png 848w, https://substackcdn.com/image/fetch/$s_!_QXx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ad2a0cb-bd18-410f-9e20-f9e8f525463c_600x802.png 1272w, https://substackcdn.com/image/fetch/$s_!_QXx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ad2a0cb-bd18-410f-9e20-f9e8f525463c_600x802.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_QXx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ad2a0cb-bd18-410f-9e20-f9e8f525463c_600x802.png" width="600" height="802" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7ad2a0cb-bd18-410f-9e20-f9e8f525463c_600x802.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:802,&quot;width&quot;:600,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:649864,&quot;alt&quot;:&quot;Cards lined up vertically: Vision, Strategy, Design, Engineering, Product&quot;,&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://tidyfirst.substack.com/i/160556433?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ad2a0cb-bd18-410f-9e20-f9e8f525463c_600x802.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Cards lined up vertically: Vision, Strategy, Design, Engineering, Product" title="Cards lined up vertically: Vision, Strategy, Design, Engineering, Product" srcset="https://substackcdn.com/image/fetch/$s_!_QXx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ad2a0cb-bd18-410f-9e20-f9e8f525463c_600x802.png 424w, https://substackcdn.com/image/fetch/$s_!_QXx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ad2a0cb-bd18-410f-9e20-f9e8f525463c_600x802.png 848w, https://substackcdn.com/image/fetch/$s_!_QXx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ad2a0cb-bd18-410f-9e20-f9e8f525463c_600x802.png 1272w, https://substackcdn.com/image/fetch/$s_!_QXx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7ad2a0cb-bd18-410f-9e20-f9e8f525463c_600x802.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Which Comes First?</figcaption></figure></div><p>In early product development, everything is in flux (I would say it is highly convex&#8212;small chance of a big success). Even the vision may or may not be useful, pending feedback. We can&#8217;t say which activity should precede which other, because they all swirl around as you discover and learn. We hop between activities without a predictable sequence.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cjxm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02adc587-50ab-47ed-b57c-50ceaa6cd902_590x796.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cjxm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02adc587-50ab-47ed-b57c-50ceaa6cd902_590x796.png 424w, https://substackcdn.com/image/fetch/$s_!cjxm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02adc587-50ab-47ed-b57c-50ceaa6cd902_590x796.png 848w, https://substackcdn.com/image/fetch/$s_!cjxm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02adc587-50ab-47ed-b57c-50ceaa6cd902_590x796.png 1272w, https://substackcdn.com/image/fetch/$s_!cjxm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02adc587-50ab-47ed-b57c-50ceaa6cd902_590x796.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cjxm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02adc587-50ab-47ed-b57c-50ceaa6cd902_590x796.png" width="590" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/02adc587-50ab-47ed-b57c-50ceaa6cd902_590x796.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&quot;width&quot;:590,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:704692,&quot;alt&quot;:&quot;Now the Vision card is pulled out to the left&quot;,&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://tidyfirst.substack.com/i/160556433?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02adc587-50ab-47ed-b57c-50ceaa6cd902_590x796.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Now the Vision card is pulled out to the left" title="Now the Vision card is pulled out to the left" srcset="https://substackcdn.com/image/fetch/$s_!cjxm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02adc587-50ab-47ed-b57c-50ceaa6cd902_590x796.png 424w, https://substackcdn.com/image/fetch/$s_!cjxm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02adc587-50ab-47ed-b57c-50ceaa6cd902_590x796.png 848w, https://substackcdn.com/image/fetch/$s_!cjxm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02adc587-50ab-47ed-b57c-50ceaa6cd902_590x796.png 1272w, https://substackcdn.com/image/fetch/$s_!cjxm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02adc587-50ab-47ed-b57c-50ceaa6cd902_590x796.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Validated Vision</figcaption></figure></div><p>Now the vision has been validated&#8212;people really do want last minute tickets to nearby live concerts and there are empty seats to be filled [&lt;- pulled from thin air]. We no longer iterate on the vision unless it starts running out of gas.</p><p>How are we going to make money/create engagement/connect people? We keep iterating Strategy, Design, Engineering, &amp; Product together until we have a strategy that stands up to feedback.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mXgy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa55cf8dd-6bb8-4fa7-9a03-2e6e7326667b_596x794.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mXgy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa55cf8dd-6bb8-4fa7-9a03-2e6e7326667b_596x794.png 424w, https://substackcdn.com/image/fetch/$s_!mXgy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa55cf8dd-6bb8-4fa7-9a03-2e6e7326667b_596x794.png 848w, https://substackcdn.com/image/fetch/$s_!mXgy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa55cf8dd-6bb8-4fa7-9a03-2e6e7326667b_596x794.png 1272w, https://substackcdn.com/image/fetch/$s_!mXgy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa55cf8dd-6bb8-4fa7-9a03-2e6e7326667b_596x794.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mXgy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa55cf8dd-6bb8-4fa7-9a03-2e6e7326667b_596x794.png" width="596" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a55cf8dd-6bb8-4fa7-9a03-2e6e7326667b_596x794.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:596,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:659868,&quot;alt&quot;:&quot;Now Vision &amp; Strategy are both pulled to the left, Vision &amp; then Strategy&quot;,&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://tidyfirst.substack.com/i/160556433?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa55cf8dd-6bb8-4fa7-9a03-2e6e7326667b_596x794.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Now Vision &amp; Strategy are both pulled to the left, Vision &amp; then Strategy" title="Now Vision &amp; Strategy are both pulled to the left, Vision &amp; then Strategy" srcset="https://substackcdn.com/image/fetch/$s_!mXgy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa55cf8dd-6bb8-4fa7-9a03-2e6e7326667b_596x794.png 424w, https://substackcdn.com/image/fetch/$s_!mXgy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa55cf8dd-6bb8-4fa7-9a03-2e6e7326667b_596x794.png 848w, https://substackcdn.com/image/fetch/$s_!mXgy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa55cf8dd-6bb8-4fa7-9a03-2e6e7326667b_596x794.png 1272w, https://substackcdn.com/image/fetch/$s_!mXgy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa55cf8dd-6bb8-4fa7-9a03-2e6e7326667b_596x794.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Validated Strategy</figcaption></figure></div><p>What&#8217;s the product? We keep iterating&#8211;is it a web site, an app, a bot, a VR location? Eventually we find a product that supports the vision and strategy. Now the product stops wiggling but we still need rapid iteration between design &amp; implementation.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RgWB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc942b184-77e3-4ca7-a882-692a6e97ab78_592x708.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RgWB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc942b184-77e3-4ca7-a882-692a6e97ab78_592x708.png 424w, https://substackcdn.com/image/fetch/$s_!RgWB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc942b184-77e3-4ca7-a882-692a6e97ab78_592x708.png 848w, https://substackcdn.com/image/fetch/$s_!RgWB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc942b184-77e3-4ca7-a882-692a6e97ab78_592x708.png 1272w, https://substackcdn.com/image/fetch/$s_!RgWB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc942b184-77e3-4ca7-a882-692a6e97ab78_592x708.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RgWB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc942b184-77e3-4ca7-a882-692a6e97ab78_592x708.png" width="592" height="708" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c942b184-77e3-4ca7-a882-692a6e97ab78_592x708.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:708,&quot;width&quot;:592,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:544710,&quot;alt&quot;:&quot;Now Product has been pulled to the right. Design is above Engineering&quot;,&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://tidyfirst.substack.com/i/160556433?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc942b184-77e3-4ca7-a882-692a6e97ab78_592x708.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Now Product has been pulled to the right. Design is above Engineering" title="Now Product has been pulled to the right. Design is above Engineering" srcset="https://substackcdn.com/image/fetch/$s_!RgWB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc942b184-77e3-4ca7-a882-692a6e97ab78_592x708.png 424w, https://substackcdn.com/image/fetch/$s_!RgWB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc942b184-77e3-4ca7-a882-692a6e97ab78_592x708.png 848w, https://substackcdn.com/image/fetch/$s_!RgWB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc942b184-77e3-4ca7-a882-692a6e97ab78_592x708.png 1272w, https://substackcdn.com/image/fetch/$s_!RgWB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc942b184-77e3-4ca7-a882-692a6e97ab78_592x708.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Validated Product</figcaption></figure></div><p>We need to iterate because we&#8217;re still not quite sure how the product should look. Sometimes small changes in appearance can result in large savings in engineering. It&#8217;s worth iterating.</p><p>Once we have the look &amp; initial implementation nailed down [ed: I&#8217;d call this Extract now], then it&#8217;s worth taking a careful up-front look at the design.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZXq1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5efcb14-f0e2-40fb-8b58-bf8dee437ad7_596x594.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZXq1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5efcb14-f0e2-40fb-8b58-bf8dee437ad7_596x594.png 424w, https://substackcdn.com/image/fetch/$s_!ZXq1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5efcb14-f0e2-40fb-8b58-bf8dee437ad7_596x594.png 848w, https://substackcdn.com/image/fetch/$s_!ZXq1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5efcb14-f0e2-40fb-8b58-bf8dee437ad7_596x594.png 1272w, https://substackcdn.com/image/fetch/$s_!ZXq1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5efcb14-f0e2-40fb-8b58-bf8dee437ad7_596x594.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZXq1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5efcb14-f0e2-40fb-8b58-bf8dee437ad7_596x594.png" width="596" height="594" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f5efcb14-f0e2-40fb-8b58-bf8dee437ad7_596x594.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:594,&quot;width&quot;:596,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:392108,&quot;alt&quot;:&quot;Now the cards are laid out horizontally--Vision, Strategy, Design, Engineering, &amp; Product&quot;,&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://tidyfirst.substack.com/i/160556433?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5efcb14-f0e2-40fb-8b58-bf8dee437ad7_596x594.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Now the cards are laid out horizontally--Vision, Strategy, Design, Engineering, &amp; Product" title="Now the cards are laid out horizontally--Vision, Strategy, Design, Engineering, &amp; Product" srcset="https://substackcdn.com/image/fetch/$s_!ZXq1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5efcb14-f0e2-40fb-8b58-bf8dee437ad7_596x594.png 424w, https://substackcdn.com/image/fetch/$s_!ZXq1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5efcb14-f0e2-40fb-8b58-bf8dee437ad7_596x594.png 848w, https://substackcdn.com/image/fetch/$s_!ZXq1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5efcb14-f0e2-40fb-8b58-bf8dee437ad7_596x594.png 1272w, https://substackcdn.com/image/fetch/$s_!ZXq1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5efcb14-f0e2-40fb-8b58-bf8dee437ad7_596x594.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Totally Concave</figcaption></figure></div><p>There you have it. Or rather, there I have it. Late in concavity [ed: during Extract], the exploitation [ed: see? I was getting close to the words] of a successful product, the efficiency and consistency wins offered by design-first implementation make sense. The reason I never saw this before is that I am a tree shaker, not a jelly maker (tx Jesse Jackson), so I&#8217;m long gone before reaching this stage.</p>]]></content:encoded></item><item><title><![CDATA[How I Will Measure My Life]]></title><description><![CDATA[Originally-originally published February 2018.]]></description><link>https://tidyfirst.substack.com/p/how-i-will-measure-my-life</link><guid isPermaLink="false">https://tidyfirst.substack.com/p/how-i-will-measure-my-life</guid><dc:creator><![CDATA[Kent Beck]]></dc:creator><pubDate>Fri, 07 Feb 2025 14:26:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!mFbW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17a6c486-aa34-4bfe-afcb-dc86e50001c9_2750x1250.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p>Originally-originally published February 2018. Republished 2022. Newly relevant &amp; speaking to a new audience. It&#8217;s apropos our recent conversations around developer &#8220;productivity&#8221; metrics. It&#8217;s also apropos all the changes in my business life.</p><p>I went through a period of intense anxiety around finances about a year ago. I&#8217;ll write more about that later. I felt uncertain. Nothing I did made any measurable difference. And I built habits that made the whole situation worse over time. This republication is me reminding myself of context.</p></blockquote><p>I read <a href="http://amzn.to/2FRn11C?fbclid=IwAR0Ovaj6S-icL-M2uEPiKKqWAkX74kBDQvyVdsupmNJ3Tpokgd_Igkf-FYw">How Will You Measure Your Life</a> by Clayton Christensen late last year. I liked the idea of living according to consciously chosen goals. However, the engineer in me wanted to know about the units of measurement. I was dissatisfied that I couldn&#8217;t find metrics that I thought would help me live my life better.</p><p>The question&#8212;How will you measure your life?&#8212;seemed right on point. I didn&#8217;t know the units. Until yesterday.</p><h1><strong>Unmeasurable</strong></h1><p>A theme of the book is that many of the things that make life worth living aren&#8217;t measurable at all, or if they are measurable then they aren&#8217;t comparable. How many dinners with family equal one random act of kindness?</p><p>My goal in this note is to inform my intuition, not create some pseudo-precise metrics for living. I want to:</p><ul><li><p>Rapidly reject dominated options, those that are worse in every way than some other option.</p></li><li><p>Use my creativity to seek dominating options, those that are better in every way than other options.</p></li><li><p>Make conscious tradeoffs between things that matter to me when a tradeoff is unavoidable.</p></li></ul><div><hr></div><p>Thanks to today&#8217;s sponsor <a href="https://tuple.app/?utm_source=newsletter&amp;utm_medium=email&amp;utm_campaign=kent+beck+3">Tuple</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mFbW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17a6c486-aa34-4bfe-afcb-dc86e50001c9_2750x1250.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mFbW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17a6c486-aa34-4bfe-afcb-dc86e50001c9_2750x1250.png 424w, https://substackcdn.com/image/fetch/$s_!mFbW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17a6c486-aa34-4bfe-afcb-dc86e50001c9_2750x1250.png 848w, https://substackcdn.com/image/fetch/$s_!mFbW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17a6c486-aa34-4bfe-afcb-dc86e50001c9_2750x1250.png 1272w, https://substackcdn.com/image/fetch/$s_!mFbW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17a6c486-aa34-4bfe-afcb-dc86e50001c9_2750x1250.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mFbW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17a6c486-aa34-4bfe-afcb-dc86e50001c9_2750x1250.png" width="1456" height="662" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/17a6c486-aa34-4bfe-afcb-dc86e50001c9_2750x1250.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:662,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:453968,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mFbW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17a6c486-aa34-4bfe-afcb-dc86e50001c9_2750x1250.png 424w, https://substackcdn.com/image/fetch/$s_!mFbW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17a6c486-aa34-4bfe-afcb-dc86e50001c9_2750x1250.png 848w, https://substackcdn.com/image/fetch/$s_!mFbW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17a6c486-aa34-4bfe-afcb-dc86e50001c9_2750x1250.png 1272w, https://substackcdn.com/image/fetch/$s_!mFbW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17a6c486-aa34-4bfe-afcb-dc86e50001c9_2750x1250.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://tuple.app/?utm_source=newsletter&amp;utm_medium=email&amp;utm_campaign=kent+beck+3">Tuple</a> is developer-grade screen sharing, for pairing and more. They interviewed me for the Distributed podcast, and I went deep on software design as an exercise in human relationships and distributed work. <strong><a href="https://distributed.fm/kent-beck-on-why-software-development-is-an-exercise-in-human-relationships?utm_source=newsletter&amp;utm_medium=email&amp;utm_campaign=kent+beck+3">Check it out here</a></strong>.</p><div><hr></div><h1><strong>Measuring</strong></h1><p>Just because many things that matter for a life well-lived can&#8217;t be measured or compared doesn&#8217;t mean that <em>nothing</em> that matters can be measured and compared. I&#8217;ll walk you through my thinking so you can think of your own axes and how they relate. I have chosen two axes of measurement that matter to me:</p><ul><li><p>Moneyoptions &#8212; not money itself, but rather the options that money creates for me.</p></li><li><p>Freetime &#8212; time I use as I choose. When I wake up &amp; my calendar is empty &amp; I say, &#8220;What do I want to do today?&#8221;, that&#8217;s freetime. [ed: I have ~2 days a week of this &amp; I love it!]</p></li></ul><h1><strong>Moneyoptions</strong></h1><p>The first axis of the tradeoff is financial. However:</p><ul><li><p>It&#8217;s not linear. Two dollars are not necessarily twice as good as one dollar.</p></li><li><p>It&#8217;s not about money. It&#8217;s what the money lets me do that I care about.</p></li></ul><p>Say you are living paycheck-to-paycheck and you find a way to start saving. When you finally have a six month cushion in the bank, you have new options you didn&#8217;t have before:</p><ul><li><p>A long job search</p></li><li><p>Retraining</p></li><li><p>Relocating</p></li></ul><p>Having a twelve month cushion in the bank is twice as much money, but it&#8217;s not twice as good. The first, say, $50,000 creates options. The second $50,000 doesn&#8217;t create as many options. Keep saving, though, and as soon as you have enough for the down payment on a house, you have new options you didn&#8217;t have before.</p><p>Take an example from the extreme end of finances. The difference between being able to fly first class and having a private jet and pilot is maybe $10,000,000. That $10M offers me new options, but they aren&#8217;t options that I particularly care about. The absolute number of dollars is large but the value of the option is small to me. I wouldn&#8217;t be willing to sacrifice something else I care about to earn that option.</p><h1><strong>Freetime</strong></h1><p>My second tradeoff axis is freetime. &#8220;Free&#8221; means that I get to do with my time what I choose. Only part of it is &#8220;margarita in the hand/toes in the sand&#8221; time. I also want to learn organic chemistry, construct fountains, learn cartooning, code quixotic projects, read, train, play guitar, teach in Africa, &amp; have intense conversations with interesting people.</p><p>Like moneyoptions, freetime is non-linear. Some is essential. My idea of essential might be (likely is) larger than yours. At the top end, though, the difference between 90% freetime and 95% freetime doesn&#8217;t really matter to me.</p><h1><strong>Tradeoff</strong></h1><p>Usually I draw a tradeoff as two crossing curves. In this case, though, I am finding it more helpful to plot the axes as X and Y.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!USzc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F877c079a-576d-4c2d-9cec-0a1f46219358_700x401.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!USzc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F877c079a-576d-4c2d-9cec-0a1f46219358_700x401.jpeg 424w, https://substackcdn.com/image/fetch/$s_!USzc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F877c079a-576d-4c2d-9cec-0a1f46219358_700x401.jpeg 848w, https://substackcdn.com/image/fetch/$s_!USzc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F877c079a-576d-4c2d-9cec-0a1f46219358_700x401.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!USzc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F877c079a-576d-4c2d-9cec-0a1f46219358_700x401.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!USzc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F877c079a-576d-4c2d-9cec-0a1f46219358_700x401.jpeg" width="700" height="401" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/877c079a-576d-4c2d-9cec-0a1f46219358_700x401.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:401,&quot;width&quot;:700,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Empty graph with 2 non-linear axes, freetime &amp; moneyoptions.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Empty graph with 2 non-linear axes, freetime &amp; moneyoptions." title="Empty graph with 2 non-linear axes, freetime &amp; moneyoptions." srcset="https://substackcdn.com/image/fetch/$s_!USzc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F877c079a-576d-4c2d-9cec-0a1f46219358_700x401.jpeg 424w, https://substackcdn.com/image/fetch/$s_!USzc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F877c079a-576d-4c2d-9cec-0a1f46219358_700x401.jpeg 848w, https://substackcdn.com/image/fetch/$s_!USzc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F877c079a-576d-4c2d-9cec-0a1f46219358_700x401.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!USzc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F877c079a-576d-4c2d-9cec-0a1f46219358_700x401.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Freetime versus moneyoptions</em></figcaption></figure></div><p>Note that the axes are non-linear, representing that sometimes a little more moneyoptions is a big deal and sometimes a lot more isn&#8217;t. Same with freetime.</p><p>Each axis has a comfortable minimum.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1XIM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f1dc66f-8ddc-44d0-84e1-c116510b2dec_700x381.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1XIM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f1dc66f-8ddc-44d0-84e1-c116510b2dec_700x381.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1XIM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f1dc66f-8ddc-44d0-84e1-c116510b2dec_700x381.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1XIM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f1dc66f-8ddc-44d0-84e1-c116510b2dec_700x381.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1XIM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f1dc66f-8ddc-44d0-84e1-c116510b2dec_700x381.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1XIM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f1dc66f-8ddc-44d0-84e1-c116510b2dec_700x381.jpeg" width="700" height="381" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1f1dc66f-8ddc-44d0-84e1-c116510b2dec_700x381.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:381,&quot;width&quot;:700,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Add dotted line representing minimum freetime &amp; minimum moneyoptions&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Add dotted line representing minimum freetime &amp; minimum moneyoptions" title="Add dotted line representing minimum freetime &amp; minimum moneyoptions" srcset="https://substackcdn.com/image/fetch/$s_!1XIM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f1dc66f-8ddc-44d0-84e1-c116510b2dec_700x381.jpeg 424w, https://substackcdn.com/image/fetch/$s_!1XIM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f1dc66f-8ddc-44d0-84e1-c116510b2dec_700x381.jpeg 848w, https://substackcdn.com/image/fetch/$s_!1XIM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f1dc66f-8ddc-44d0-84e1-c116510b2dec_700x381.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!1XIM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f1dc66f-8ddc-44d0-84e1-c116510b2dec_700x381.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Each has a minimum comfortable level</em></figcaption></figure></div><p>Whatever I do, I want to stay in the top right quadrant. This was an informative part of drawing this tradeoff: I have lines I will not cross. Where those lines are and what they measure made me more conscious of my decisions. Knowing my boundaries helped me eliminate many possibilities quickly.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GnzF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0316bd0-0a3f-46a1-a24d-6a1b046dd413_700x438.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GnzF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0316bd0-0a3f-46a1-a24d-6a1b046dd413_700x438.jpeg 424w, https://substackcdn.com/image/fetch/$s_!GnzF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0316bd0-0a3f-46a1-a24d-6a1b046dd413_700x438.jpeg 848w, https://substackcdn.com/image/fetch/$s_!GnzF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0316bd0-0a3f-46a1-a24d-6a1b046dd413_700x438.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!GnzF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0316bd0-0a3f-46a1-a24d-6a1b046dd413_700x438.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GnzF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0316bd0-0a3f-46a1-a24d-6a1b046dd413_700x438.jpeg" width="700" height="438" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a0316bd0-0a3f-46a1-a24d-6a1b046dd413_700x438.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:438,&quot;width&quot;:700,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Thick lines added to highlight the top right quadrant--enough freetime &amp; enough moneyoptions&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Thick lines added to highlight the top right quadrant--enough freetime &amp; enough moneyoptions" title="Thick lines added to highlight the top right quadrant--enough freetime &amp; enough moneyoptions" srcset="https://substackcdn.com/image/fetch/$s_!GnzF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0316bd0-0a3f-46a1-a24d-6a1b046dd413_700x438.jpeg 424w, https://substackcdn.com/image/fetch/$s_!GnzF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0316bd0-0a3f-46a1-a24d-6a1b046dd413_700x438.jpeg 848w, https://substackcdn.com/image/fetch/$s_!GnzF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0316bd0-0a3f-46a1-a24d-6a1b046dd413_700x438.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!GnzF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0316bd0-0a3f-46a1-a24d-6a1b046dd413_700x438.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Keep to the acceptable quadrant</em></figcaption></figure></div><p>There will often be tradeoffs within that quadrant of acceptability, more moneyoptions versus less freetime or vice versa.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!v_Ft!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd89193c7-3149-4926-8d29-d18b9c6126eb_700x429.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!v_Ft!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd89193c7-3149-4926-8d29-d18b9c6126eb_700x429.jpeg 424w, https://substackcdn.com/image/fetch/$s_!v_Ft!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd89193c7-3149-4926-8d29-d18b9c6126eb_700x429.jpeg 848w, https://substackcdn.com/image/fetch/$s_!v_Ft!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd89193c7-3149-4926-8d29-d18b9c6126eb_700x429.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!v_Ft!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd89193c7-3149-4926-8d29-d18b9c6126eb_700x429.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!v_Ft!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd89193c7-3149-4926-8d29-d18b9c6126eb_700x429.jpeg" width="700" height="429" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d89193c7-3149-4926-8d29-d18b9c6126eb_700x429.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:429,&quot;width&quot;:700,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;2 points added in the top right quadrant representing a tradeoff--more freetime &amp; fewer moneyoptions versus more moneyoptions &amp; less freetime&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="2 points added in the top right quadrant representing a tradeoff--more freetime &amp; fewer moneyoptions versus more moneyoptions &amp; less freetime" title="2 points added in the top right quadrant representing a tradeoff--more freetime &amp; fewer moneyoptions versus more moneyoptions &amp; less freetime" srcset="https://substackcdn.com/image/fetch/$s_!v_Ft!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd89193c7-3149-4926-8d29-d18b9c6126eb_700x429.jpeg 424w, https://substackcdn.com/image/fetch/$s_!v_Ft!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd89193c7-3149-4926-8d29-d18b9c6126eb_700x429.jpeg 848w, https://substackcdn.com/image/fetch/$s_!v_Ft!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd89193c7-3149-4926-8d29-d18b9c6126eb_700x429.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!v_Ft!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd89193c7-3149-4926-8d29-d18b9c6126eb_700x429.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Area of the rectangles is a rough way of comparing possibilities. Don&#8217;t get too cute.</em></figcaption></figure></div><p>So, for example, I&#8217;m working now, vesting Gusto stock. I have less freetime this week but I hope to have more freetime &amp; moneyoptions in the future. [ed: hard not to be bitter about this as Gusto (&amp; the market) drags its feet about liquidity. I thought I was getting moneyoptions but I really wasn&#8217;t, I was just spending freetime. Oops.]</p><h1><strong>Conclusion</strong></h1><p>I want to emphasize that the above is an intuition honing exercise, not an attempt to superglue a veneer of rationality atop a subjective, uncertain, non-linear, and changing landscape of decisions. If something doesn&#8217;t work out, fine, but I don&#8217;t want to say, &#8220;I should have known better,&#8221; and actually be right. The value of the exercise of describing my primary tradeoff was choosing my axes, understanding that they were non-linear, setting my minima, and preparing to make tradeoffs.</p><p>I wish you a sensibly measured &amp; thoughtfully chosen life.</p>]]></content:encoded></item><item><title><![CDATA[Remote Site Growth Is Not A Conquest Game]]></title><description><![CDATA[...not exactly...]]></description><link>https://tidyfirst.substack.com/p/remote-site-growth-is-not-a-conquest</link><guid isPermaLink="false">https://tidyfirst.substack.com/p/remote-site-growth-is-not-a-conquest</guid><dc:creator><![CDATA[Kent Beck]]></dc:creator><pubDate>Fri, 24 Jan 2025 17:25:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!4vFf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1a452e-f5fe-4fc0-9390-c07f2a5c71f4_2750x1250.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p>First published March 2017. I was addressing the problem of growing remote development sites (this is when work from home wasn&#8217;t common). You open a new engineering site in, say, London. How do you structure your projects? The same dynamics apply when building a single software product, though.</p></blockquote><p>Way back when, before there were interwebs or MacBooks, we used to load all of our Macs into the back of our Volvo station wagon, pick up a whole rum cake (still warm) at the Boulder Creek Deli, and drive up to my cousin Herb Derby&#8217;s house on a Saturday. There we would wire up a temporary LAN and start playing Spaceward Ho!</p><p>Ho! was a game of exploration and conquest set in space [ed: what would now be called a 4X game]. It was full of tradeoffs: invest in better technology or more colonization, invest in better range or better firepower, long-term or short-term? Each tradeoff created risks and opportunities, depending on what the other players chose.</p><p>These game evenings went on far into the night (and sometimes the morning). At the end there was one gloating winner and a bunch of losers, but all full of cake and eager for the next battle.</p><p>I played many hours of Ho! against the fiendishly clever computer opponent, trying to refine my game play so that when the time came I could earn the coveted Last Slice.</p><p>In the end I found two reasonable strategies. I was reminded of Ho! when discussing growth strategies recently.</p><div><hr></div><p><em>Thank you to my sponsor <a href="https://tuple.app/?utm_source=newsletter&amp;utm_medium=email&amp;utm_campaign=kent+beck+2">Tuple</a>.</em></p><p><strong>Remote pairing for fun &amp; profit</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4vFf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1a452e-f5fe-4fc0-9390-c07f2a5c71f4_2750x1250.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4vFf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1a452e-f5fe-4fc0-9390-c07f2a5c71f4_2750x1250.png 424w, https://substackcdn.com/image/fetch/$s_!4vFf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1a452e-f5fe-4fc0-9390-c07f2a5c71f4_2750x1250.png 848w, https://substackcdn.com/image/fetch/$s_!4vFf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1a452e-f5fe-4fc0-9390-c07f2a5c71f4_2750x1250.png 1272w, https://substackcdn.com/image/fetch/$s_!4vFf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1a452e-f5fe-4fc0-9390-c07f2a5c71f4_2750x1250.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4vFf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1a452e-f5fe-4fc0-9390-c07f2a5c71f4_2750x1250.png" width="1456" height="662" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4c1a452e-f5fe-4fc0-9390-c07f2a5c71f4_2750x1250.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:662,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:202988,&quot;alt&quot;:&quot;friction prevents pairing, Tuple encourages it&quot;,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="friction prevents pairing, Tuple encourages it" title="friction prevents pairing, Tuple encourages it" srcset="https://substackcdn.com/image/fetch/$s_!4vFf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1a452e-f5fe-4fc0-9390-c07f2a5c71f4_2750x1250.png 424w, https://substackcdn.com/image/fetch/$s_!4vFf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1a452e-f5fe-4fc0-9390-c07f2a5c71f4_2750x1250.png 848w, https://substackcdn.com/image/fetch/$s_!4vFf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1a452e-f5fe-4fc0-9390-c07f2a5c71f4_2750x1250.png 1272w, https://substackcdn.com/image/fetch/$s_!4vFf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c1a452e-f5fe-4fc0-9390-c07f2a5c71f4_2750x1250.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Collaboration enhances focus. But what if you get distracted on the way to collaborating? <a href="https://tuple.app/?utm_source=newsletter&amp;utm_medium=email&amp;utm_campaign=kent+beck+2">Tuple's</a> 2 engineering pillars are:</p><ul><li><p>Make it easy to start a session</p></li><li><p>Make pairing fun</p></li></ul><p>Screen sharing, fun pairing in 2 clicks with <a href="https://tuple.app/?utm_source=newsletter&amp;utm_medium=email&amp;utm_campaign=kent+beck+2">Tuple</a>. Use code KB1 to get 33% off your team's first year.</p><div><hr></div><h2><strong>The Problem</strong></h2><p>One tradeoff facing each remote site: concentrate on a few (or even just one) project or to have several projects? Succession plays a part as well. When you have one successful project, how quickly do you start new projects? How do you staff them? New hires, average folks from the successful project, the best folks from the successful project?</p><p>Once a site is well established the question is moot. There are always going to be a variety of projects. Early growth, though is tricky. Diversify too soon and you risk crippling the foundational projects. Diversify too late and you slow the growth of the site.</p><h2><strong>The Strategies</strong></h2><p>Ho! contains an analogous tradeoff. Do you grow conservatively? Do you wait for each colony to become profitable before starting the next one? This lets you maintain your investment in technology for the inevitable clash with enemies. Or do you grow quickly, expecting that the eventual revenue from many colonies funding rapid technology development will make up for lack of early technology investment?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4ywE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2a92626-d806-4e49-913d-2666c9cba121_366x355.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4ywE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2a92626-d806-4e49-913d-2666c9cba121_366x355.png 424w, https://substackcdn.com/image/fetch/$s_!4ywE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2a92626-d806-4e49-913d-2666c9cba121_366x355.png 848w, https://substackcdn.com/image/fetch/$s_!4ywE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2a92626-d806-4e49-913d-2666c9cba121_366x355.png 1272w, https://substackcdn.com/image/fetch/$s_!4ywE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2a92626-d806-4e49-913d-2666c9cba121_366x355.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4ywE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2a92626-d806-4e49-913d-2666c9cba121_366x355.png" width="366" height="355" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b2a92626-d806-4e49-913d-2666c9cba121_366x355.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:355,&quot;width&quot;:366,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:148843,&quot;alt&quot;:&quot;Net income goes negative when you establish a new colony. Do you wait for profitability before colonizing or go deeper in debt in hopes a bigger eventual payoff?&quot;,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Net income goes negative when you establish a new colony. Do you wait for profitability before colonizing or go deeper in debt in hopes a bigger eventual payoff?" title="Net income goes negative when you establish a new colony. Do you wait for profitability before colonizing or go deeper in debt in hopes a bigger eventual payoff?" srcset="https://substackcdn.com/image/fetch/$s_!4ywE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2a92626-d806-4e49-913d-2666c9cba121_366x355.png 424w, https://substackcdn.com/image/fetch/$s_!4ywE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2a92626-d806-4e49-913d-2666c9cba121_366x355.png 848w, https://substackcdn.com/image/fetch/$s_!4ywE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2a92626-d806-4e49-913d-2666c9cba121_366x355.png 1272w, https://substackcdn.com/image/fetch/$s_!4ywE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2a92626-d806-4e49-913d-2666c9cba121_366x355.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Conservative versus aggressive</figcaption></figure></div><h2><strong>The Analogy</strong></h2><p>A development site and a game of Spaceward Ho! are not perfect analogies. Site building is not a zero sum game. The rest of the company is not an opponent (at least needn&#8217;t be an opponent). The part of the analogy that spoke to me, though, is that the longer you are willing to wait for the big payoff, the bigger the payoff in the end. The proviso is that you can&#8217;t wait so long for a payoff that you get shut down. (Mumble mumble Kelly Criteria mumble mumble.)</p><p>Applying this insight, I would err on the side of aggressive growth in number of projects, even at the expense of some short-term progress on existing successful projects. I would err on the side of encouraging the best engineers to seed those new projects. It&#8217;s not like the new people who come in are idiots. They are going to quickly ramp up and provide their own perspective.</p><p>I would hedge my bets on new projects by applying explore/expand/extract to keep new projects small, diverse, and rapidly iterating based on concrete feedback.</p><div class="pullquote"><p><em>tl;dr early in the life of a development site, grow the portfolio of projects as fast as possible consistent with giving each project a chance of success</em></p></div>]]></content:encoded></item><item><title><![CDATA[Meeting Prevents Exceeding]]></title><description><![CDATA[Originally published March 2017]]></description><link>https://tidyfirst.substack.com/p/meeting-prevents-exceeding</link><guid isPermaLink="false">https://tidyfirst.substack.com/p/meeting-prevents-exceeding</guid><dc:creator><![CDATA[Kent Beck]]></dc:creator><pubDate>Fri, 17 Jan 2025 14:16:41 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!SLzh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0c984fb-89d8-42eb-a543-332f0ac71c83_3938x2805.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p>Originally published March 2017</p></blockquote><div class="pullquote"><p><em>You can't meet expectations and exceed expectations at the same time</em></p><p><em>--my tweet</em></p></div><p>I wrote this over the weekend, thought, &#8220;Yeah, that&#8217;s exactly right,&#8221; then thought, &#8220;But what the hell does it mean?&#8221; Upon consideration, here&#8217;s what it means. To me. So far.</p><p>One strategy for playing the performance review game is to lay down some solid wins early in the review period. With those in place, you can afford to take some chances. If you&#8217;re worried about your rating, this is a reasonable way to reduce your anxiety. It retards your growth as an engineer, however.</p><div><hr></div><p><em>Thanks to this week&#8217;s sponsor, Screenshot Bot. Arnold Noronha, the founder, was a student of mine at Facebook.</em></p><h2>Screenshot tests for mobile apps (and more)</h2><p>Want to know when something has accidentally changed in your mobile app? Screenshot tests occupy a unique point in the space of tests&#8212;easy to write, predictive, &amp; automated.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SLzh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0c984fb-89d8-42eb-a543-332f0ac71c83_3938x2805.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SLzh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0c984fb-89d8-42eb-a543-332f0ac71c83_3938x2805.png 424w, https://substackcdn.com/image/fetch/$s_!SLzh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0c984fb-89d8-42eb-a543-332f0ac71c83_3938x2805.png 848w, https://substackcdn.com/image/fetch/$s_!SLzh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0c984fb-89d8-42eb-a543-332f0ac71c83_3938x2805.png 1272w, https://substackcdn.com/image/fetch/$s_!SLzh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0c984fb-89d8-42eb-a543-332f0ac71c83_3938x2805.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SLzh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0c984fb-89d8-42eb-a543-332f0ac71c83_3938x2805.png" width="1456" height="1037" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d0c984fb-89d8-42eb-a543-332f0ac71c83_3938x2805.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1037,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1492556,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!SLzh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0c984fb-89d8-42eb-a543-332f0ac71c83_3938x2805.png 424w, https://substackcdn.com/image/fetch/$s_!SLzh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0c984fb-89d8-42eb-a543-332f0ac71c83_3938x2805.png 848w, https://substackcdn.com/image/fetch/$s_!SLzh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0c984fb-89d8-42eb-a543-332f0ac71c83_3938x2805.png 1272w, https://substackcdn.com/image/fetch/$s_!SLzh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0c984fb-89d8-42eb-a543-332f0ac71c83_3938x2805.png 1456w" sizes="100vw" loading="lazy" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Use <a href="https://screenshotbot.io/tidyfirst">https://screenshotbot.io/tidyfirst</a> to signup to get 20% off your first year.</p><div><hr></div><p>Being a &#8220;senior engineer&#8221; requires growth in many areas, and two important ones are risk management and initiative. You have to get good at thinking your own thoughts and then acting on them prudently. (What you consider prudent and what others consider prudent can be wildly different, which is why you first need to learn to think your own thoughts.)</p><p>The only way to learn prudent initiative is practice. You will fail. You will realize, &#8220;Hey, that roadblock I found after six months I really could have found after one month. Or week. Or day.&#8221; You will realize, &#8220;I should have finished that one thought before I started another.&#8221; Or, &#8220;I should have dropped this idea to start on that idea.&#8221;</p><p>Here&#8217;s where meeting expectations clashes with exceeding expectations. If you are working to meet someone else&#8217;s expectations, you don&#8217;t have time to exercise your own. It&#8217;s only when you draw your own map that you can arrive somewhere others don&#8217;t expect.</p><p>Meeting someone else&#8217;s expectations only results in the expectations going up next time. Trying to meet your own expectations, even if it is a futile exercise, gives you the chance to arrive somewhere that&#8217;s unexpected by others. The more you set your own expectations, the better you get at drawing your map and spotting the landmarks along the way.</p>]]></content:encoded></item><item><title><![CDATA[Moving On]]></title><description><![CDATA[The Sunk Cost Fallacy Fallacy]]></description><link>https://tidyfirst.substack.com/p/moving-on</link><guid isPermaLink="false">https://tidyfirst.substack.com/p/moving-on</guid><dc:creator><![CDATA[Kent Beck]]></dc:creator><pubDate>Fri, 10 Jan 2025 14:23:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!SLzh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0c984fb-89d8-42eb-a543-332f0ac71c83_3938x2805.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p>Originally published March 2017</p><p>This is me reminding myself that I don&#8217;t need rigid rules to make myself safe. I can experiment &amp; get really excited. I won&#8217;t just continue pursuing a failing experiment forever because I have so many other things I could be working on. One of them will tug me. </p></blockquote><div class="pullquote"><p><em>Our biggest costs are opportunity costs</em></p></div><p>One of the joys of exploring a new idea like 3X is that you get reminded, over and over, just how wrong you usually are. A colleague offered me one of these enlightenment gifts the other day and I wanted to share.</p><p>One of the challenges in Exploring is simultaneously:</p><ul><li><p>Treating your experiments seriously, as if they are going to yield the desired hypergrowth, and </p></li><li><p>Treating them as experiments, likely to &#8220;fail&#8221; and worth limited investment.</p></li></ul><p>You may feel certain that people are going to love love love this next feature, but if they don&#8217;t, you are better off dropping it and moving on to the next feature.</p><p>This is a genuine dilemma. The next little tweak might start a wildfire, but there is always a next little tweak. At the same time, there are hundred other things you could be working on, any one of which might be huge. At the time you decide to persevere or punt, the information simply doesn&#8217;t exist to make a correct, rational decision.</p><p>So, how do you decide?</p><div><hr></div><p><em>Thanks to this week&#8217;s sponsor, Screenshot Bot. Arnold Noronha, the founder, was a student of mine at Facebook.</em></p><h2>Screen shot tests for mobile apps (and more)</h2><p>Want to know when something has accidentally changed in your mobile app? Screenshot tests occupy a unique point in the space of tests&#8212;easy to write, predictive, &amp; automated.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SLzh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0c984fb-89d8-42eb-a543-332f0ac71c83_3938x2805.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SLzh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0c984fb-89d8-42eb-a543-332f0ac71c83_3938x2805.png 424w, https://substackcdn.com/image/fetch/$s_!SLzh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0c984fb-89d8-42eb-a543-332f0ac71c83_3938x2805.png 848w, https://substackcdn.com/image/fetch/$s_!SLzh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0c984fb-89d8-42eb-a543-332f0ac71c83_3938x2805.png 1272w, https://substackcdn.com/image/fetch/$s_!SLzh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0c984fb-89d8-42eb-a543-332f0ac71c83_3938x2805.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SLzh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0c984fb-89d8-42eb-a543-332f0ac71c83_3938x2805.png" width="1456" height="1037" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d0c984fb-89d8-42eb-a543-332f0ac71c83_3938x2805.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1037,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1492556,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SLzh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0c984fb-89d8-42eb-a543-332f0ac71c83_3938x2805.png 424w, https://substackcdn.com/image/fetch/$s_!SLzh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0c984fb-89d8-42eb-a543-332f0ac71c83_3938x2805.png 848w, https://substackcdn.com/image/fetch/$s_!SLzh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0c984fb-89d8-42eb-a543-332f0ac71c83_3938x2805.png 1272w, https://substackcdn.com/image/fetch/$s_!SLzh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0c984fb-89d8-42eb-a543-332f0ac71c83_3938x2805.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Use <a href="https://screenshotbot.io/tidyfirst">https://screenshotbot.io/tidyfirst</a> to signup to get 20% off your first year.</p><div><hr></div><p>My answer so far in discussing 3X has been timeboxing. Before you start an experiment, you specify how much time or money you&#8217;re going to spend on it. When the timer <em>ding</em>s, you put your pencil down, roll back from your desk, heave a big sigh, maybe shed a tear, and then roll up and get started on the next thing.</p><p>Timeboxing is based on the sunk cost fallacy, the cognitive bias where we assign too large a value or too great a chance of success to an activity that has already cost us a lot. The end of the timebox is intended to give rational thought a chance to intervene, to evaluate more accurately the chance of success.</p><p>My friend pointed out that there another rationalizing force at work: FOMO. Every day you spend in <em>this</em> project is a day you aren&#8217;t spending on <em>that.</em> And <em>that</em>. And <em>that</em>. If a project isn&#8217;t going well, pretty soon you&#8217;re going to reach the margin where another project starts looking mighty tasty.</p>]]></content:encoded></item><item><title><![CDATA[Complain & Propose]]></title><description><![CDATA[Republished from July 2014.]]></description><link>https://tidyfirst.substack.com/p/complain-and-propose</link><guid isPermaLink="false">https://tidyfirst.substack.com/p/complain-and-propose</guid><dc:creator><![CDATA[Kent Beck]]></dc:creator><pubDate>Fri, 27 Dec 2024 14:41:52 GMT</pubDate><content:encoded><![CDATA[<blockquote><p>Republished from July 2014.</p></blockquote><p>"Jean-Louis wants to see you in his office." My boss Eagle Burns' bald head disappeared from the door to my office. Something about his tone suggested that righteous indignation, which I had been nursing for several days, was not the right attitude to pack for my trip. I started getting scared.</p><p>It was Apple 1988.</p><p><span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Jean-Louis Gass&#233;e&quot;,&quot;id&quot;:46808,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/90c69eb4-a5c0-4167-bc91-b6347d8634f3_144x144.png&quot;,&quot;uuid&quot;:&quot;3549e3d3-e4df-44fc-93b8-36ca39a56357&quot;}" data-component-name="MentionToDOM"></span> was head of engineering. He had a reputation as a fire-eater, someone who chewed fools up and spit them out. I had been foolish, it suddenly occurred to me. Do the math.</p><p>I was a young, cocky engineer. I was sure I knew better than anyone what needed to be done. When a decision came down that I disagreed with, I shot off an email to JLG that made it clear just how stupid the decision was. A day later, I was summoned.</p><p>JLG's office was on the same floor as mine, but I had never approached the sanctum. He was at least four levels up from me in hierarchy. Rumor had it that decorating his office had cost $100K, which was a fortune since everybody else was stuffed in cubes.</p><p>When his admin passed me in, though, JLG was avuncular. "I read your message. I'd like you to think about it from my perspective for a moment. What am I going to do if I agree with you?"</p><p>No idea. He must have been used to dumb silence.</p><p>"I'm going to ask my report for a proposal. He's going to ask his report and so on [yes, completely male. Plus ca change...]. Eventually Eagle is going to ask you what to do. In all those layers, who knows what's going to happen to the question.</p><p>"Here's what I want you to do. Rewrite your message and make a proposal for what we should do about it. That way you'll save us a week and you'll get to solve the problem you want to solve."</p><p>I did. I don't remember what the issue was or what I wanted to happen or what actually happened. That was lesson number one&#8212;it's really not that big a deal, or at least hardly ever.</p><div class="pullquote"><p>always bundle a proposal with a complaint</p></div><p>Lesson number two was to always bundle a proposal with a complaint. I've used that style daily in the intervening quarter century. If I need to vent or I need to think something through, I do it in private. If I'm going increase the scope of a communication, I always say what I would like to happen.</p><p>Lesson three was the most important. Those words, "Think about it from my perspective," were a revelation. You mean you have a point of view and it's just as valid as mine and it might be different? I've spent that same quarter century trying to absorb and apply that lesson. Communicating begins by putting myself in the place of my reader, not demanding that they put themself in my place.</p><p>Complain <em>and</em> propose.</p><p>Bonus lesson for when I was the old guy: don't get caught up in young hotshots' emotions. Assume good intentions and lack of skills. Thanks, JLG.</p>]]></content:encoded></item><item><title><![CDATA[Different Bests in Different Contexts]]></title><description><![CDATA[Another take on 3X: Explore/Expand/Extract]]></description><link>https://tidyfirst.substack.com/p/different-bests-in-different-contexts</link><guid isPermaLink="false">https://tidyfirst.substack.com/p/different-bests-in-different-contexts</guid><dc:creator><![CDATA[Kent Beck]]></dc:creator><pubDate>Fri, 20 Dec 2024 15:45:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!-eZ8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39a09d5-7b6a-4c5c-817a-354f2ef61c81_330x331.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p>First published April 2017. I used to travel with a bag containing the three balls. It was such a pain inflating &amp; deflating them that I gave up on the metaphor.</p></blockquote><h2><strong>Heart-Tugging Childhood Reminiscence</strong></h2><p>A sea of shouting, running, jostling, and playing. My first day of first grade was overwhelming. I watched, back to a stucco wall, and tried to figure out what was going on. (This was at the old Miramonte school on Villa near Shoreline which was called Bailey back then but I digress.)</p><p><em>The</em> game on the playground was kickball, a kind of baseball-but-with-kicking. I watched the whole first recess then spent the time until lunch trying to figure out the rules. At after-lunch recess (why don&#8217;t we have recess at work?), I was sure I understood. I wandered onto the field.The next time the ball came my way I picked it up and started running the bases.</p><p>Wrong. The kids told me, in unmistakable terms, that what I was doing was against the rules. Someone grabbed the ball. Someone else pushed me. I went back and leaned up against the wall, humiliated and angry and confused.</p><p>I eventually got good at kickball, moving up the pecking order until I was one of the people choosing teams. What never left me was that feeling of wanting to see the patterns, wanting to understand the rules, and fearing that I hadn&#8217;t really got it yet.</p><div><hr></div><p><em>Thanks to today&#8217;s sponsor&#8212;me!</em></p><p>Reach this community of 100K brilliant readers. This could be your ad! With a picture, even.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.amazon.com/Sheriff-Yrnameer-Novel-Vintage-Contemporaries-ebook/dp/B002IPZBR2/ref=sr_1_5?crid=3DY954R5V54GZ&amp;dib=eyJ2IjoiMSJ9.I5Zh8Sxe9BKUkK7PJdYLsB3fsgentl4W_r5yYv4hRQzourlm0eSq-GFaTwwyrDTZR211_UWx-e-v7BXlwyH3-Z8IjUTN-zXPaX6ugmEzZg3RQszz4WfKFkZXx2uQC4zRSk6NCkxCOJ82hglX_IGMokLpAm2vH199NSeZKxxTKbFt9rwDTsgN7ZWd7LR_UuGDDdUirqP1iDfuOgYqMxJ3bz0tiyrWRgnXeypGDo8DvB-UfkmPcvr6Nbvkvr35HrxWo_upD7pMeYd5ji2M2RD4TkZWXAszyV8t1eoAAE5uCE3W4LIiv26jiwuC__pBkq2r84b9iG-Xo0y_AAr2UaWz6a4kFekDFrAU8vjjjc_-BOqBhEpRqCv0S9YaoS5Koa0oNx0OsV7IZ9FXuy1KL1VhZRF0Ee_fdcu70YC6VDaYzes.RAMDjP2BS53xISaOHMieu4H4tQHQ31cOB2wOKb3DuK8&amp;dib_tag=se&amp;keywords=sheriff+of+yrnameer&amp;qid=1734709507&amp;sprefix=sherrif+of+yrn%2Caps%2C208&amp;sr=8-5" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!y5Gt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e60d4f-7111-49f1-94e4-34641ebe175c_299x450.jpeg 424w, https://substackcdn.com/image/fetch/$s_!y5Gt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e60d4f-7111-49f1-94e4-34641ebe175c_299x450.jpeg 848w, https://substackcdn.com/image/fetch/$s_!y5Gt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e60d4f-7111-49f1-94e4-34641ebe175c_299x450.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!y5Gt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e60d4f-7111-49f1-94e4-34641ebe175c_299x450.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!y5Gt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e60d4f-7111-49f1-94e4-34641ebe175c_299x450.jpeg" width="299" height="450" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c3e60d4f-7111-49f1-94e4-34641ebe175c_299x450.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:450,&quot;width&quot;:299,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.amazon.com/Sheriff-Yrnameer-Novel-Vintage-Contemporaries-ebook/dp/B002IPZBR2/ref=sr_1_5?crid=3DY954R5V54GZ&amp;dib=eyJ2IjoiMSJ9.I5Zh8Sxe9BKUkK7PJdYLsB3fsgentl4W_r5yYv4hRQzourlm0eSq-GFaTwwyrDTZR211_UWx-e-v7BXlwyH3-Z8IjUTN-zXPaX6ugmEzZg3RQszz4WfKFkZXx2uQC4zRSk6NCkxCOJ82hglX_IGMokLpAm2vH199NSeZKxxTKbFt9rwDTsgN7ZWd7LR_UuGDDdUirqP1iDfuOgYqMxJ3bz0tiyrWRgnXeypGDo8DvB-UfkmPcvr6Nbvkvr35HrxWo_upD7pMeYd5ji2M2RD4TkZWXAszyV8t1eoAAE5uCE3W4LIiv26jiwuC__pBkq2r84b9iG-Xo0y_AAr2UaWz6a4kFekDFrAU8vjjjc_-BOqBhEpRqCv0S9YaoS5Koa0oNx0OsV7IZ9FXuy1KL1VhZRF0Ee_fdcu70YC6VDaYzes.RAMDjP2BS53xISaOHMieu4H4tQHQ31cOB2wOKb3DuK8&amp;dib_tag=se&amp;keywords=sheriff+of+yrnameer&amp;qid=1734709507&amp;sprefix=sherrif+of+yrn%2Caps%2C208&amp;sr=8-5&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!y5Gt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e60d4f-7111-49f1-94e4-34641ebe175c_299x450.jpeg 424w, https://substackcdn.com/image/fetch/$s_!y5Gt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e60d4f-7111-49f1-94e4-34641ebe175c_299x450.jpeg 848w, https://substackcdn.com/image/fetch/$s_!y5Gt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e60d4f-7111-49f1-94e4-34641ebe175c_299x450.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!y5Gt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3e60d4f-7111-49f1-94e4-34641ebe175c_299x450.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Contact me for a media kit &amp; pricing. Brought to you by the Make Content Sustainable League.</p><div class="directMessage button" data-attrs="{&quot;userId&quot;:24333739,&quot;userName&quot;:&quot;Kent Beck&quot;,&quot;canDm&quot;:null,&quot;dmUpgradeOptions&quot;:null,&quot;isEditorNode&quot;:true}" data-component-name="DirectMessageToDOM"></div><div><hr></div><h2><strong>Seemingly Unrelated Scenario</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-eZ8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39a09d5-7b6a-4c5c-817a-354f2ef61c81_330x331.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-eZ8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39a09d5-7b6a-4c5c-817a-354f2ef61c81_330x331.png 424w, https://substackcdn.com/image/fetch/$s_!-eZ8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39a09d5-7b6a-4c5c-817a-354f2ef61c81_330x331.png 848w, https://substackcdn.com/image/fetch/$s_!-eZ8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39a09d5-7b6a-4c5c-817a-354f2ef61c81_330x331.png 1272w, https://substackcdn.com/image/fetch/$s_!-eZ8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39a09d5-7b6a-4c5c-817a-354f2ef61c81_330x331.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-eZ8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39a09d5-7b6a-4c5c-817a-354f2ef61c81_330x331.png" width="330" height="331" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f39a09d5-7b6a-4c5c-817a-354f2ef61c81_330x331.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:331,&quot;width&quot;:330,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:131360,&quot;alt&quot;:&quot;Football (soccer ball)&quot;,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Football (soccer ball)" title="Football (soccer ball)" srcset="https://substackcdn.com/image/fetch/$s_!-eZ8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39a09d5-7b6a-4c5c-817a-354f2ef61c81_330x331.png 424w, https://substackcdn.com/image/fetch/$s_!-eZ8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39a09d5-7b6a-4c5c-817a-354f2ef61c81_330x331.png 848w, https://substackcdn.com/image/fetch/$s_!-eZ8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39a09d5-7b6a-4c5c-817a-354f2ef61c81_330x331.png 1272w, https://substackcdn.com/image/fetch/$s_!-eZ8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39a09d5-7b6a-4c5c-817a-354f2ef61c81_330x331.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Imagine you and your team are on a big grassy field with white lines painted on it. There&#8217;s a ball and an opposing team. You pick up the ball.&#8220;Fweet!&#8221; goes the umpire in the striped shirt. You can&#8217;t touch it with your hands, you have to kick it.</p><p>&#8220;Fweet!&#8221; you can&#8217;t stand there. &#8220;Fweet!&#8221; now you have to throw it. &#8220;Fweet!&#8221; not like that. Eventually, through trial and error and fweet you figure it out&#8212;the rules, the strategy, the scoring. You start to win.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2Jlh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fc45a5e-4aeb-4602-838d-0f539e890be4_368x322.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2Jlh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fc45a5e-4aeb-4602-838d-0f539e890be4_368x322.png 424w, https://substackcdn.com/image/fetch/$s_!2Jlh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fc45a5e-4aeb-4602-838d-0f539e890be4_368x322.png 848w, https://substackcdn.com/image/fetch/$s_!2Jlh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fc45a5e-4aeb-4602-838d-0f539e890be4_368x322.png 1272w, https://substackcdn.com/image/fetch/$s_!2Jlh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fc45a5e-4aeb-4602-838d-0f539e890be4_368x322.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2Jlh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fc45a5e-4aeb-4602-838d-0f539e890be4_368x322.png" width="368" height="322" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9fc45a5e-4aeb-4602-838d-0f539e890be4_368x322.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:322,&quot;width&quot;:368,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:162691,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2Jlh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fc45a5e-4aeb-4602-838d-0f539e890be4_368x322.png 424w, https://substackcdn.com/image/fetch/$s_!2Jlh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fc45a5e-4aeb-4602-838d-0f539e890be4_368x322.png 848w, https://substackcdn.com/image/fetch/$s_!2Jlh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fc45a5e-4aeb-4602-838d-0f539e890be4_368x322.png 1272w, https://substackcdn.com/image/fetch/$s_!2Jlh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9fc45a5e-4aeb-4602-838d-0f539e890be4_368x322.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#8220;Fweet! Fweet!&#8221; the umpire takes you to another part of the field. There is another ball and another opposing team. You kick it, like you just did. &#8220;Fweet!&#8221; gotta throw it first. &#8220;Fweet!&#8221; &#8220;Fweet!&#8221; &#8220;Fweet!&#8221; you&#8217;re back to losing. You&#8217;re not even good enough to be losing. You&#8217;re just thrashing around.</p><p>Eventually you figure out this set of rules. You figure out basic strategy. Some of the people who were great at the first game can&#8217;t contribute to this game. You need some new people. You start winning.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JUQs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facc6df7d-0ee8-43b2-ba5a-4f41f6eec2d4_418x318.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JUQs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facc6df7d-0ee8-43b2-ba5a-4f41f6eec2d4_418x318.png 424w, https://substackcdn.com/image/fetch/$s_!JUQs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facc6df7d-0ee8-43b2-ba5a-4f41f6eec2d4_418x318.png 848w, https://substackcdn.com/image/fetch/$s_!JUQs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facc6df7d-0ee8-43b2-ba5a-4f41f6eec2d4_418x318.png 1272w, https://substackcdn.com/image/fetch/$s_!JUQs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facc6df7d-0ee8-43b2-ba5a-4f41f6eec2d4_418x318.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JUQs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facc6df7d-0ee8-43b2-ba5a-4f41f6eec2d4_418x318.png" width="418" height="318" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/acc6df7d-0ee8-43b2-ba5a-4f41f6eec2d4_418x318.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:318,&quot;width&quot;:418,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:207290,&quot;alt&quot;:&quot;Antique American football&quot;,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Antique American football" title="Antique American football" srcset="https://substackcdn.com/image/fetch/$s_!JUQs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facc6df7d-0ee8-43b2-ba5a-4f41f6eec2d4_418x318.png 424w, https://substackcdn.com/image/fetch/$s_!JUQs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facc6df7d-0ee8-43b2-ba5a-4f41f6eec2d4_418x318.png 848w, https://substackcdn.com/image/fetch/$s_!JUQs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facc6df7d-0ee8-43b2-ba5a-4f41f6eec2d4_418x318.png 1272w, https://substackcdn.com/image/fetch/$s_!JUQs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facc6df7d-0ee8-43b2-ba5a-4f41f6eec2d4_418x318.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#8220;Fweet! Fweet!&#8221; new part of the field, new opposing team, new ball. Same deal. Constant rule violations. Constant attempts to figure out the actualrules. And eventually, yes, understanding and strategy and success. It begins, though, with attempts to use what you learned from the previousgame. Those rules just don&#8217;t apply, except at the most basic level: there&#8217;s a ball, there&#8217;s a score, there&#8217;s opposition.</p><p>Now things get interesting. You and your team are playing all three games at once on different parts of the field. Players move back and forth according to their preferences, switching rules and strategy as they move.</p><h2><strong>Surprising Connection of Both to Work</strong></h2><p>Good advice or best advice? Or recipe for disaster? It depends. &#8220;Move Fast and Break Things&#8221; is a rule that makes sense in one game. So does &#8220;Ruthless Execution&#8221;. Just not in the same game.</p><p>It took me five years of participating and observing at Facebook to realize that they really had three games, three games with rules as different as rugby, football, and American football. Each game had &#8220;rules&#8221;, a &#8220;score&#8221;, and an &#8220;opponent&#8221;.</p><ul><li><p>Explore&#8212;The opponent in the Explore game is indifference. The strategy/feature/tiny twist that overcomes indifference is likely to be a surprise. The optimal strategy is to experiment quickly, informing each round of experiments with what you learned from the previous round.</p></li><li><p>Expand&#8212;The opponent in the Expand game is scale. Bottlenecks are surprises. You can&#8217;t plan for them, you can only shine your headlights far enough forward that you see the next bottleneck in time.</p></li><li><p>Extract&#8212;The opponent in the Extract game is inefficiency. You&#8217;ve scaled now. You need to extract &#8220;profits&#8221; (could be engagement, attention, or actual money) to fund the next round of explorations.</p></li></ul><h2><strong>Call to Action</strong></h2><p>Development works best when we acknowledge the three games. We have ways of the games informally&#8212;hackathon &amp; hackamonth are for exploring, lockdown is for expanding, roadmaps are for extracting&#8212;but we don&#8217;t consistently apply different strategies to different games. We have ruthless executors trying to get first releases just right. We have break-thingers breaking things we can&#8217;t afford to break. We have wild experimenters blind to bottlenecks until it&#8217;s too late.</p>]]></content:encoded></item><item><title><![CDATA[“Best” Practices Ain’t...]]></title><description><![CDATA[First published April 17, 2017]]></description><link>https://tidyfirst.substack.com/p/best-practices-aint</link><guid isPermaLink="false">https://tidyfirst.substack.com/p/best-practices-aint</guid><dc:creator><![CDATA[Kent Beck]]></dc:creator><pubDate>Fri, 13 Dec 2024 14:16:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!8JvW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82e58307-3998-45d6-a8cc-cb994f8730c0_2750x1250.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p>First published April 17, 2017</p><p>For the first 20 years of my career I was obsessed with the set of rules that would guarantee success. What I was <em>really</em> seeking was absolution. I did The Rulez right, it&#8217;s not my fault. Doesn&#8217;t work like that.</p></blockquote><p>...usually. Mea culpa: I once published a book with &#8220;Best Practice&#8221; in the title. Most uses of the phrase, though, are distracting at best, confusing and misleading at worst. Given the increasing use of the phrase (at one employer, 19 Slack channels include it in their title, more data needed), here&#8217;s some perspective for &#8220;best practice&#8221;.</p><div><hr></div><p>Quick thank you to my first sponsor, <a href="https://tuple.app/?utm_source=newsletter&amp;utm_medium=email&amp;utm_campaign=kent+beck+1">Tuple</a></p><h1><a href="https://tuple.app/?utm_source=newsletter&amp;utm_medium=email&amp;utm_campaign=kent+beck+1">Tuple</a>&#8212;Fun Collaboration Now</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8JvW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82e58307-3998-45d6-a8cc-cb994f8730c0_2750x1250.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8JvW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82e58307-3998-45d6-a8cc-cb994f8730c0_2750x1250.png 424w, https://substackcdn.com/image/fetch/$s_!8JvW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82e58307-3998-45d6-a8cc-cb994f8730c0_2750x1250.png 848w, https://substackcdn.com/image/fetch/$s_!8JvW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82e58307-3998-45d6-a8cc-cb994f8730c0_2750x1250.png 1272w, https://substackcdn.com/image/fetch/$s_!8JvW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82e58307-3998-45d6-a8cc-cb994f8730c0_2750x1250.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8JvW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82e58307-3998-45d6-a8cc-cb994f8730c0_2750x1250.png" width="1456" height="662" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/82e58307-3998-45d6-a8cc-cb994f8730c0_2750x1250.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:662,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:244103,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8JvW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82e58307-3998-45d6-a8cc-cb994f8730c0_2750x1250.png 424w, https://substackcdn.com/image/fetch/$s_!8JvW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82e58307-3998-45d6-a8cc-cb994f8730c0_2750x1250.png 848w, https://substackcdn.com/image/fetch/$s_!8JvW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82e58307-3998-45d6-a8cc-cb994f8730c0_2750x1250.png 1272w, https://substackcdn.com/image/fetch/$s_!8JvW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F82e58307-3998-45d6-a8cc-cb994f8730c0_2750x1250.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Collaboration enhances focus. But what if you get distracted on the way to collaborating? Tuple's 2 engineering pillars are:</p><ul><li><p>Make it easy to start a session</p></li><li><p>Make pairing fun</p></li></ul><p>Invite collaboration with 2 clicks with <a href="https://tuple.app/?utm_source=newsletter&amp;utm_medium=email&amp;utm_campaign=kent+beck+1">Tuple</a>. Use code KB1 to get 33% off your team's first year.</p><div><hr></div><h2><strong>Use</strong></h2><p>To understand how &#8220;best practice&#8221; is used productively, we need to step back and realize that all problem domains are not alike (analysis stolen from Cynefin):</p><ol><li><p><em>Chaotic</em> problems have no clear link between action and effect. Best practices are expected to have predictable effects, so they fail when applied to chaotic problems. Better to act first and analyze later. With a chaotic problem, almost any action will produce useful feedback.</p></li><li><p><em>Complex</em> problems display a connection between action and effect, but only in retrospect. Applying a best practice will not get you what you expect. Instead, your best strategy is to invent an action based on first principles (like &#8220;move fast and break things&#8221; or &#8220;make decisions reversible&#8221;), and observe the results.</p></li><li><p><em>Complicated</em> problems have a, well, complicated connection between action and effect, but at least they are predictable. <em>A</em> best practice is not effective, but choosing among a pallette of known-good practices is.</p></li><li><p><em>Simple</em> problems have a clear, linear connection between action and effect. When solving simple problems, effort used to invent or choose between actions is a waste of time. Applying the best practice is efficient.</p></li></ol><h2><strong>Misuse</strong></h2><p>Having been through a few &#8220;best practice&#8221; wars, I have seen two dysfunctions with the phrase. Sometimes advice givers use it to mask lack of confidence. &#8220;Do what I say because it is a best practice.&#8221; Sometimes advice takers use it to try to duck responsibility. &#8220;But I was using a best practice.&#8221; Neither is consistent with effective development.</p><h2><strong>Conclusion</strong></h2><p>When you have a simple problem, by all means seek out and refine the best practice. For problems where the connection between action and effect are still coming into focus, derive actions from first principles or choose from among known-goods. But don&#8217;t call it &#8220;best&#8221; practice if it ain&#8217;t.</p>]]></content:encoded></item><item><title><![CDATA[One Hand On The Yoke]]></title><description><![CDATA[This is from a new archival source&#8212;the original WikiWikiWeb.]]></description><link>https://tidyfirst.substack.com/p/one-hand-on-the-yoke</link><guid isPermaLink="false">https://tidyfirst.substack.com/p/one-hand-on-the-yoke</guid><dc:creator><![CDATA[Kent Beck]]></dc:creator><pubDate>Wed, 20 Nov 2024 16:40:06 GMT</pubDate><content:encoded><![CDATA[<blockquote><p>This is from a new archival source&#8212;the original WikiWikiWeb. The page doesn&#8217;t have a creation date that I could find but it would be around 2000.</p><p>The topic seems apropos to The Forest &amp; The Desert. In The Desert you don&#8217;t dare let go of the yoke because you already don&#8217;t have enough control. In The Forest, you can need less steering &amp; it turns out that less steering leads to greater satisfaction all around.</p></blockquote><p>An airplane's direction and altitude is controlled primarily by a 2D steering wheel called a "yoke" (plus other inputs like the rudder pedals, which don't bear on this story). When my ex-father-in-law first showed me how to fly, I immediately grabbed the yoke with both hands. We bounced around a bit. Then he showed me how much smoother I could fly straight and level with only one hand on the yoke.</p><p>An airplane is much more sensitive to controls than a car. Small inputs create large changes. Coordinating the pressure of two hands generates many, many small inputs. Counter-intuitive as it feels at the time, 10,000 feet up in a tiny little cigar tube, letting one hand go is the right way to solve the problem.</p><p>Now, when you do a maneuver, you do hold the yoke with both hands. Then you need the power provided by both armsful of muscles. At least you want that power available, and you are willing to pay the price in a little wiggliness, at least for the duration of the turn.</p><p>An <a href="https://wiki.c2.com/?ExtremeTeam">ExtremeTeam</a> is sensitive to small inputs. Much better to let one hand go and trust the self-organizing culture they have developed. Most of the time.</p><div><hr></div><p>Another example of this is my rolling suitcase. The wheels are too close together, so it often starts oscillating between the wheels, eventually falling over. I tried grabbing tighter, which started the oscillation sooner and toppled the suitcase sooner. The solution is to pull the dang thing with one finger. Occasionally (but much less often) it still begins to wobble. I slow down until it stops.</p><blockquote><p>I replaced the suitcase with a 4-wheeled Tumi. Problem solved.</p></blockquote>]]></content:encoded></item><item><title><![CDATA[The Captain Class]]></title><description><![CDATA[Book review]]></description><link>https://tidyfirst.substack.com/p/the-captain-class</link><guid isPermaLink="false">https://tidyfirst.substack.com/p/the-captain-class</guid><dc:creator><![CDATA[Kent Beck]]></dc:creator><pubDate>Fri, 01 Nov 2024 18:37:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!clep!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb229cf0-4eba-4693-b23a-561dc72743ab_618x338.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p>First published May 2017. The book continues to shape my thinking around leadership.</p></blockquote><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!clep!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb229cf0-4eba-4693-b23a-561dc72743ab_618x338.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!clep!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb229cf0-4eba-4693-b23a-561dc72743ab_618x338.png 424w, https://substackcdn.com/image/fetch/$s_!clep!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb229cf0-4eba-4693-b23a-561dc72743ab_618x338.png 848w, https://substackcdn.com/image/fetch/$s_!clep!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb229cf0-4eba-4693-b23a-561dc72743ab_618x338.png 1272w, https://substackcdn.com/image/fetch/$s_!clep!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb229cf0-4eba-4693-b23a-561dc72743ab_618x338.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!clep!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb229cf0-4eba-4693-b23a-561dc72743ab_618x338.png" width="618" height="338" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fb229cf0-4eba-4693-b23a-561dc72743ab_618x338.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:338,&quot;width&quot;:618,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:287692,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!clep!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb229cf0-4eba-4693-b23a-561dc72743ab_618x338.png 424w, https://substackcdn.com/image/fetch/$s_!clep!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb229cf0-4eba-4693-b23a-561dc72743ab_618x338.png 848w, https://substackcdn.com/image/fetch/$s_!clep!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb229cf0-4eba-4693-b23a-561dc72743ab_618x338.png 1272w, https://substackcdn.com/image/fetch/$s_!clep!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb229cf0-4eba-4693-b23a-561dc72743ab_618x338.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>The Captain Class </em>is a meditation on leadership by the founding editor of WSJ&#8217;s sports page, Sam Walker. The book started as a classic bar bet&#8212;what was the greatest sports team of all time. He surveyed teams in the past hundred years who were outrageously more successful than their peers. Looking at these teams, he was struck that each and every one of them had a string of success that precisely mirrored the tenure of a captain. These captains, in turn, shared traits (some of which we don&#8217;t always associate with leadership). The traits are:</p><ul><li><p>Doggedness. Captains just keep coming. Their example causes the rest of the team to raise their effort level to match.</p></li><li><p>Edges. Captains play right to the edge of the rules. (This is why he says Derek Jeter didn&#8217;t see many World Series trophies&#8211;too law-abiding.)</p></li><li><p>Carrying water. Captains do the dirty work nobody else wants to do. Many are not the most skilled player. Even if they are (like Tim Duncan), they don&#8217;t show their skills unless it is necessary.</p></li><li><p>Communicate. Captains communicate with everyone on the team. Sometimes this is vocal, sometimes eye contact, sometimes physical contact.</p></li><li><p>Displays. Captains make gestures for the team to see, like committing a hard foul.</p></li><li><p>Uncomfortable truths. Captains communicate things no one else dares communicate, in whatever way, in whatever medium necessary.</p></li><li><p>Regulate emotions. Captains play with emotion but they know how and when to keep a lid on it.</p></li></ul><p>As I was reading I thought about how many of these traits organizations actively encourage and reward, how many they are prepared to recognize as impact. As organizations move into &#8220;it takes a team&#8221; scale they need to encourage (or at least not discourage) behavior that creates great teams. Teams can be good without a captain who displays all these qualities. Great teamwork, though, requires the strongest glue.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://tidyfirst.substack.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">Paying subscribers fund the writing in Tidy First? Please consider becoming a subscriber &amp; receiving draft book chapters &amp; a weekly Thinkie.</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><h2><strong>P.S. My Score</strong></h2><p>I also, as is my habit, rated myself as I was reading. Here&#8217;s how I see me: doggedness: C, edges: A-, carrying water: B+, communicate: B-, displays: A, uncomfortable truth: A for effort and C for execution, regulate emotions: B. </p><p>I&#8217;d appreciate feedback if you see me differently.</p><blockquote><p>In the 7 years since I graded myself, I would say that my communication skills have improved as has my execution of telling uncomfortable truths. Regulating my own emotions has also improved. Again, I&#8217;d appreciate informed feedback.</p></blockquote>]]></content:encoded></item><item><title><![CDATA[Background Work]]></title><description><![CDATA[First published Dec 8, 2021.]]></description><link>https://tidyfirst.substack.com/p/background-work</link><guid isPermaLink="false">https://tidyfirst.substack.com/p/background-work</guid><dc:creator><![CDATA[Kent Beck]]></dc:creator><pubDate>Mon, 28 Oct 2024 13:40:50 GMT</pubDate><content:encoded><![CDATA[<blockquote><p>First published Dec 8, 2021. The topic of background work came up in the context of the way LLMs make such work so much cheaper than it used to be. The same rabbit hole that would have taken a week to explore can now be excavated in an hour or a minute. Background work should become more prevalent.</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3Cv5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7429fc0a-1776-4fe5-9284-c8082dbdc617_300x200.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3Cv5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7429fc0a-1776-4fe5-9284-c8082dbdc617_300x200.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3Cv5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7429fc0a-1776-4fe5-9284-c8082dbdc617_300x200.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3Cv5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7429fc0a-1776-4fe5-9284-c8082dbdc617_300x200.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3Cv5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7429fc0a-1776-4fe5-9284-c8082dbdc617_300x200.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3Cv5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7429fc0a-1776-4fe5-9284-c8082dbdc617_300x200.jpeg" width="300" height="200" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7429fc0a-1776-4fe5-9284-c8082dbdc617_300x200.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:200,&quot;width&quot;:300,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Archaeologist working carefully&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Archaeologist working carefully" title="Archaeologist working carefully" srcset="https://substackcdn.com/image/fetch/$s_!3Cv5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7429fc0a-1776-4fe5-9284-c8082dbdc617_300x200.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3Cv5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7429fc0a-1776-4fe5-9284-c8082dbdc617_300x200.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3Cv5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7429fc0a-1776-4fe5-9284-c8082dbdc617_300x200.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3Cv5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7429fc0a-1776-4fe5-9284-c8082dbdc617_300x200.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>A student had a code review where the reviewer said, &#8220;This variable needs to be explicitly initialized to nil.&#8221; The usual course for a junior engineer would be to change the code. Instead, the student did some research, then responded, &#8220;According to the language spec, the variable is initialized automatically.&#8221; That research was more work than strictly called for but it created value for both parties.</p><p>&#8220;Background Work&#8221; is the work you do over and above what is strictly required to complete a task. It may be done for learning, to satisfy curiosity, or just because you forgot to stop working when you were done. I&#8217;ve noticed that the most accomplished programmers make a habit of background work.</p><p>When I saw the exchange above it brought to mind times when I have seen engineers I admire dig into the background of a topic. &#8220;I wrote a little prototype PHP-to-JavaScript translator and here&#8217;s the performance data,&#8221; &#8220;I thought this might come up, so I re-read Knuth on the topic,&#8221; &#8220;I wasn&#8217;t sure what I thought so I wrote this essay.&#8221;</p><p>At first I was going to call this, &#8220;extra work,&#8221; conjuring visions of late nights and weekends, but on reflection that&#8217;s a misleading name. First, leaders seem good at managing their energy, so if they do some background work &#8220;off the clock&#8221;, they find ways to recharge. Background work also has a habit of paying off quickly, so that the leader accomplishes more in the ensuing day or week or month.</p><p>My own experience of background work, though, is that sometimes my curiosity gets the best of me at inopportune times, like 4 AM, and I need to just go do the work. Greek rhetoric teaches that persuasion comes from a combination of ethos, logos, and pathos, appealing to listeners on the basis of personal credibility, logic, and emotion. Background work levels up logos but I think its biggest effect is in establishing credibility, ethos. Someone who habitually digs deeper than strictly necessary is worth listening to. When they know, they will speak with authority. When they don&#8217;t know, they&#8217;ll say so and then, if they are curious, go do the work to find out.</p>]]></content:encoded></item><item><title><![CDATA[Slow Deployment Causes Meetings]]></title><description><![CDATA[First published 2016.]]></description><link>https://tidyfirst.substack.com/p/slow-deployment-causes-meetings</link><guid isPermaLink="false">https://tidyfirst.substack.com/p/slow-deployment-causes-meetings</guid><dc:creator><![CDATA[Kent Beck]]></dc:creator><pubDate>Fri, 04 Oct 2024 05:50:54 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3uV4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22d3f693-f2f5-4ea7-86bb-e01ef2f613dd_1268x877.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p>First published 2016.</p></blockquote><p>&#8220;I can&#8217;t get any code out with all these meetings.&#8221; What if this perennial engineer complaint has causation backwards? Adding and removing organizational overhead is relatively easy compared to increasing an organization&#8217;s capacity to deploy code. What if meetings and reviews are an organization&#8217;s adaptive response to avoid overloading deployment?</p><p>Chuck Rossi&nbsp;[ed: legendary release manager at early-to-middle Facebook] made the observation that there seem to be a fixed number of changes Facebook can handle in one deployment. If we want more changes, we need more deployments. This has led to a steady increase in deployment pace over the past five years, from weekly to daily to thrice daily deployments of our PHP code and from six to four to two week cycles for deploying our mobile apps. This improvement has been driven primarily by the release engineering team (I&#8217;m a fan, can you tell?)</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3uV4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22d3f693-f2f5-4ea7-86bb-e01ef2f613dd_1268x877.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3uV4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22d3f693-f2f5-4ea7-86bb-e01ef2f613dd_1268x877.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3uV4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22d3f693-f2f5-4ea7-86bb-e01ef2f613dd_1268x877.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3uV4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22d3f693-f2f5-4ea7-86bb-e01ef2f613dd_1268x877.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3uV4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22d3f693-f2f5-4ea7-86bb-e01ef2f613dd_1268x877.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3uV4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22d3f693-f2f5-4ea7-86bb-e01ef2f613dd_1268x877.jpeg" width="1268" height="877" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/22d3f693-f2f5-4ea7-86bb-e01ef2f613dd_1268x877.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:877,&quot;width&quot;:1268,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:641969,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3uV4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22d3f693-f2f5-4ea7-86bb-e01ef2f613dd_1268x877.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3uV4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22d3f693-f2f5-4ea7-86bb-e01ef2f613dd_1268x877.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3uV4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22d3f693-f2f5-4ea7-86bb-e01ef2f613dd_1268x877.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3uV4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22d3f693-f2f5-4ea7-86bb-e01ef2f613dd_1268x877.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Approaching maximum changes/deployment triggers more frequent deployments</em></figcaption></figure></div><p>As I was drifting off to sleep yesterday, I visualized the sawtooth-shaped &#8220;changes per deployment&#8221; graph and it struck me that maybe we had organizational overhead all wrong. &#8220;Changes per deployment&#8221; seems like an inelastic metric. It&#8217;s possible to improve, but only with great effort over time. What happens when the number of changes produced exceeds the current threshold? Changes per deployment doesn&#8217;t change. The number of changes has to go down.</p><p>How? By increasing overhead&#8212;meetings, reviews, handoffs, overhead and eventually by killing enthusiasm and initiative. Nobody is going to own up to doing it on purpose, but perhaps the organization&#8217;s emergent response is locally optimal&#8212;change the thing that is easiest to change that will relieve the pressure.</p><p>Increasing overhead initiates a positive feedback loop: less getting done -&gt; more pressure -&gt; more mistakes -&gt; even fewer changes per deployment -&gt; more overhead -&gt; less getting done. Isolated efforts to reduce overhead increase pressure and increase overhead.</p><p>If you want more changes to get through, you need to expand the far end of the hose, to increase deployment capacity. You can do this the hard way, by reducing the deployment cycle and dealing with the ensuing chaos, or the harder way, by increasing the number of changes per deployment (better tests, better monitoring, better isolation between elements, better social relationships on the team). But don&#8217;t try to reduce overhead. That&#8217;ll just lead inevitably to a series of meetings on how to reduce meetings. At least that will keep you from trying to ship too much code, though.</p><blockquote><p>This essay is an example of the Thinkie Reverse Causality. It&#8217;s one of the most fun Thinkies to deploy because they ideas seem just so wrong at first.</p></blockquote>]]></content:encoded></item><item><title><![CDATA[Authority & Responsibility]]></title><description><![CDATA[First published May 2017.]]></description><link>https://tidyfirst.substack.com/p/authority-and-responsibility</link><guid isPermaLink="false">https://tidyfirst.substack.com/p/authority-and-responsibility</guid><dc:creator><![CDATA[Kent Beck]]></dc:creator><pubDate>Fri, 27 Sep 2024 13:47:40 GMT</pubDate><content:encoded><![CDATA[<blockquote><p>First published May 2017. I&#8217;ve been trying to write about authority, responsibility, accountability, &amp; other properties of productive, functional relationships for a couple of decades. I hope I&#8217;m getting close, because there&#8217;s a chapter in the new book labelled &#8220;Authority &amp; Responsibility&#8221;.</p><p>Just before writing this I had been on a teaching trip in central &amp; southern Africa. Met some life-long (well, the remainder of it anyway) friends, made some music, &amp; learned about my narrow understanding of people &amp; culture.</p></blockquote><p>I was terrified much of the time I was walking in Lagos. Traffic was chaotic. Drivers were hyperaggressive. Roads were narrow.</p><p>There was one time I wasn&#8217;t worried: bareheaded on the back of a motorcycle, dodging and weaving through that self-same traffic.</p><p>Partly it was because the first thing I did on arriving in Lagos was go to church (a whole other story), which I figured improved my chances of surviving and at least got me into a desirable afterlife should things go sideways. Partly, though, it was because of principles that I find both useful when followed and frequently violated in organizations as they scale.</p><h2><strong>Thought Experiment</strong></h2><p>Staying on a motorcycle for the moment, let&#8217;s say I ask you to take my bike to the pizza place to pick us up some deep dish. I&#8217;m in a hurry, though, so while you can steer, I&#8217;m going to control the accelerator from here on the couch. How do you feel about this arrangement?</p><p>Okay, little tweak. I&#8217;m still going to control the throttle, but I&#8217;m going to ride the bike with you. Feel different? Now you get to control both steering and throttle. Different?</p><h2><strong>Authority and Responsibility</strong></h2><p>If you work for yourself, by yourself, you don&#8217;t even need concepts for authority and responsibility. You make the decisions and do the work and there&#8217;s no one else who possibly could. You experience the consequences, all of them, and there&#8217;s no one else who possibly could. Becoming aware of authority and responsibility results from scale.</p><div class="pullquote"><p><em>Authority: the right and obligation to make decisions and take action in a given scope<br>Responsibility: the obligation to accept consequences, good and bad</em></p></div><h2><strong>Two Principles</strong></h2><p>The problem comes because people are people. We are all subject to loss aversion (where losing $1 feels worse than gaining $1 feels good [ed: see also ergodicity for more perspective]). We are all tempted to free ride (let others do the work while accruing the benefit ourselves). At the same, we all want to be significant, to do important work and be recognized for it.</p><p>Two organizational principles reduce the chaos caused by our natural human tendencies:</p><ul><li><p>Responsibility aligns with authority. If I have the authority to make a decision, then I experience the consequences of that decision.</p></li><li><p>Responsibility comes as a package. If I get the benefits of a good outcome, I also feel the pain of a bad outcome.</p></li></ul><p>A friend called me the other day. She&#8217;d been asked to lead a big project to convert the company&#8217;s CRM. &#8220;Okay, what are the business goals? I&#8217;ll be glad to get to work on this.&#8221; &#8220;No, no, you have to use Microsoft Dynamics CRM.&#8221; Bzzzzt.</p><p>This situation violates alignment of authority and responsibility. My friend will certainly be punished if the project goes badly, but the single most consequential decision has already been made. Also, this smells like a case where if the project goes well the executive sponsor will get the kudos/bonus/promotion but my friend will get fired if the project goes badly.</p><p>She pushed back, pointed out that she was in a no-win position, and told them that without authority to match her responsibility, she wasn&#8217;t going to do it. After whining about her not being &#8220;a team player&#8221;, they gave her the authority.</p><h2><strong>Steering and Throttle</strong></h2><p>Now let&#8217;s put you back on that crazy remote control motorcycle. When I control the throttle from the couch, I have authority without responsibility. I can make decisions and take action, I benefit from the upside (pizza sooner), but I don&#8217;t share in the pain if you crash. Put me on the bike with you and at least we both suffer road rash together. You&#8217;d rather control steering and throttle yourself, but it&#8217;s better if we share a fate than if we don&#8217;t.</p><p>That was my thinking in Lagos. If I&#8217;m walking on the side of traffic, the worst that could happen to the person who hits me is that they&#8217;ll have to repair a dent. On the back of a bike, though, I&#8217;m guaranteed that there is one person in the world as interested in my safety as I am.</p><h2><strong>Followup</strong></h2><p>Organizational alignment is a huge topic. I&#8217;ve only chipped the paint here. More topics for future notes:</p><ul><li><p>How to realign authority and responsibility</p></li><li><p>My shaky relationship with responsibility</p></li><li><p>Accountability is a good thing and it&#8217;s not the same as blame</p></li></ul>]]></content:encoded></item><item><title><![CDATA[Old & Single & Unready to Mingle]]></title><description><![CDATA[First published August 2016.]]></description><link>https://tidyfirst.substack.com/p/old-and-single-and-unready-to-mingle</link><guid isPermaLink="false">https://tidyfirst.substack.com/p/old-and-single-and-unready-to-mingle</guid><dc:creator><![CDATA[Kent Beck]]></dc:creator><pubDate>Fri, 20 Sep 2024 14:09:05 GMT</pubDate><content:encoded><![CDATA[<blockquote><p>First published August 2016. Content warning: divorce &amp; raw emotion.</p><p>I pick pieces to pull out of the archives on impulse. If I remember something I said, or if I point someone else to it for whatever reason, then the piece goes in the queue to be republished. I recently passed the eighth anniversary of rebooting my life &amp; remembered this essay.</p></blockquote><p>I&#8217;m flying to Menlo Park with two guitars, a big suitcase, and the backpack I got in Facebook Bootcamp five years ago. The rest of my stuff forlornly occupies a third of a 10x10 storage unit. The nest empty, I am flying the coop (to nearly mix a metaphor).</p><p>I&#8217;m writing about my divorce here because I need to write and I&#8217;m not comfortable going public public. I&#8217;m sure I&#8217;ll have lessons learned, cautionary stories, and sage advice later. Right now all I have is an emotional grab bag. Stick my hand in, pull it out, and see what&#8217;s there. Fury. Sadness. Elation. Fury again. It&#8217;s like eating a sadistic ice cream sundae blindfolded.</p><p>Okay, one lesson: presence. I spent the last week doing things for the last time: my last Wild River Brewing root beer, my last pat of the old farm dog Patch, my last whiff of the Rogue River, a smell that carries me instantly, effortlessly back a half century.</p><p>Here&#8217;s the thing. Doing these things (and a hundred like them) <em>the last time </em>is exhausting. I&#8217;d tear up, blubber, and eventually let the feeling pass and move on. About the tenth time in an hour, though, and the energy tank is dry dry. I have to truncate.</p><p>I&#8217;m not drinking Wild River root beer <em>for the last time</em>, I&#8217;m just drinking root beer. And it&#8217;s damn good. I&#8217;m patting my dog. I&#8217;m feeling the river caress my fingers. Call it &#8220;insight by exhaustion&#8221;. Too tired to continue living in a future where I&#8217;m no longer doing things I love, I live in the present moment because I have exhausted (literally) all the other possibilities.</p><p>At first I was afraid I&#8217;d be missing something. This is the <em>last time</em>, dammit. No. Turns out tears and self-pity spoil the flavor of root beer. It tastes better straight.</p><p>I still float back to the future sometimes, like just now as I was writing and got all watery. However, I&#8217;ve had moments of the joy of pure experience. Right now, Lamy in hand, I&#8217;m enjoying the hospitality of United Airlines.</p><p>What&#8217;s next for me? If you&#8217;re asking that, apparently you didn&#8217;t read the rest of the note. If I&#8217;m answering it, apparently neither did I. I&#8217;m going to spend two months in NYC finding out if I&#8217;m a coach, a team coach, a manager, a product manager, a corporate shill, or something else I haven&#8217;t thought of. But for now, one moment at a time.</p><blockquote><p>I heard a comedian joke that the correct response to, &#8220;I&#8217;m getting divorced,&#8221; should be, &#8220;Congratulations!&#8221; However bad it is, it must be better than what went before. And so it was for me. I had wild mood swings but the average was much, &amp; remains much, better than before.</p><p>And to those asking why I didn&#8217;t leave sooner if it was really that bad, you don&#8217;t leave when it gets bad, you leave when you&#8217;re ready to leave.</p></blockquote>]]></content:encoded></item><item><title><![CDATA[The Life-Changing Magic of Tidying Up Code]]></title><description><![CDATA[First published June 2017.]]></description><link>https://tidyfirst.substack.com/p/the-life-changing-magic-of-tidying</link><guid isPermaLink="false">https://tidyfirst.substack.com/p/the-life-changing-magic-of-tidying</guid><dc:creator><![CDATA[Kent Beck]]></dc:creator><pubDate>Fri, 13 Sep 2024 12:20:57 GMT</pubDate><content:encoded><![CDATA[<blockquote><p>First published June 2017. Apparently I was already toying with the tidying metaphor, even if I could have sworn I didn&#8217;t start using it for another 4 years. Memory is a funny thing.</p></blockquote><p>I have been tidying up server code and loving it. I&#8217;ve tidied up for thousands of hours over my career, and I have some rules for making this style of cleanup safe, fun, and efficient.</p><p>Tidying up works through a series of small, safe steps. In fact, Rule #1 is If it&#8217;s hard, don&#8217;t do it. I used to do crossword puzzles at night. If I got stuck and went to sleep, the next night those same clues were often easy. Instead of stressing about the big effects I want to create, I am better off just stopping when I encounter resistance.</p><p>Tidying up is concave [ed: this was also when I was digging in to 3X: Explore/Expand/Extract] in the sense that you have a lot more to lose by a mistake than you have to win by any individual success (more on that later). Rule #2 is Start when you&#8217;re fresh and stop when you&#8217;re tired. Get up and walk around. If I don&#8217;t come back refreshed, I&#8217;m done for the day.</p><p>Tidying up can happen in parallel with development, but only if you carefully track other changes (I messed this up with my latest diff). Rule #3 is Land each session&#8217;s work immediately (after review, natch). Unlike feature development, where it sometimes makes sense to land only when a chunk of work is done, tidying up is time based.</p><p>Tidying up requires little effort for any step, so I am willing to discard any step at the first sign of trouble. For example, Rule #4 is Two reds is a revert. If I tidy, run the tests, and encounter a failed test, then if I can fix it immediately I do. If I try to fix it and fail, I immediately revert to the last known good state.</p><p>Tidying up works even without a vision of the shiny new design. However, sometimes I want to see how things might play out, so Rule #5 is Practice. Perform a sequence of tidyings and revert. The second time will go much faster and you&#8217;ll be more familiar with which bumpy spots to avoid.</p><p>Try it. Move the declaration of a temp adjacent to its first use. Simplify a boolean expression (&#8220;return expression == True&#8221; anyone?). Extract a helper. Reduce the scope of logic or state to where it is actually used.</p><h2><strong>The Rules</strong></h2><ol><li><p>If it&#8217;s hard, don&#8217;t do it</p></li><li><p>Start when you&#8217;re fresh and stop when you&#8217;re tired</p></li><li><p>Land each session&#8217;s work immediately</p></li><li><p>Two reds is a revert</p></li><li><p>Practice</p></li></ol><h2><strong>Coda</strong></h2><p>I&#8217;ve made architectural changes strictly by tidying. I&#8217;ve extracted frameworks strictly by tidying. You can make big changes safely in this style. I think this is because, while the cost of each tidying is constant, the payoff is power-law distributed. I need both data and a model to explain this hypothesis.</p><blockquote><p>Is your business looking to juice the value they get from software development. Consider my new workshop&#8212;Lead Geeks With Purpose. It makes an excellent holiday gift for the CEO who has everything. </p><div class="embedded-publication-wrap" data-attrs="{&quot;id&quot;:2975268,&quot;name&quot;:&quot;Leading Geeks with Purpose&quot;,&quot;logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F000da410-0ed6-4a25-80b1-6a46e964ae0b_242x242.jpeg&quot;,&quot;base_url&quot;:&quot;https://leadgeekswithpurpose.substack.com&quot;,&quot;hero_text&quot;:&quot;Leading Geeks with Purpose: The Brass Ring Approach is a one-day workshop for non-technical executives who want to get the full returns from their technology investment.&quot;,&quot;author_name&quot;:&quot;Kent Beck&quot;,&quot;show_subscribe&quot;:true,&quot;logo_bg_color&quot;:null,&quot;language&quot;:&quot;en&quot;}" data-component-name="EmbeddedPublicationToDOMWithSubscribe"><div class="embedded-publication show-subscribe"><a class="embedded-publication-link-part" native="true" href="https://leadgeekswithpurpose.substack.com?utm_source=substack&amp;utm_campaign=publication_embed&amp;utm_medium=web"><img class="embedded-publication-logo" src="https://substackcdn.com/image/fetch/$s_!az8b!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F000da410-0ed6-4a25-80b1-6a46e964ae0b_242x242.jpeg" width="56" height="56"><span class="embedded-publication-name">Leading Geeks with Purpose</span><div class="embedded-publication-hero-text">Leading Geeks with Purpose: The Brass Ring Approach is a one-day workshop for non-technical executives who want to get the full returns from their technology investment.</div><div class="embedded-publication-author-name">By Kent Beck</div></a><form class="embedded-publication-subscribe" method="GET" action="https://leadgeekswithpurpose.substack.com/subscribe?"><input type="hidden" name="source" value="publication-embed"><input type="hidden" name="autoSubmit" value="true"><input type="email" class="email-input" name="email" placeholder="Type your email..."><input type="submit" class="button primary" value="Subscribe"></form></div></div></blockquote>]]></content:encoded></item><item><title><![CDATA[The Impossibility of Making an Elite Engineer]]></title><description><![CDATA[First published June 2017.]]></description><link>https://tidyfirst.substack.com/p/the-impossibility-of-making-an-elite</link><guid isPermaLink="false">https://tidyfirst.substack.com/p/the-impossibility-of-making-an-elite</guid><dc:creator><![CDATA[Kent Beck]]></dc:creator><pubDate>Fri, 06 Sep 2024 14:23:24 GMT</pubDate><content:encoded><![CDATA[<blockquote><p>First published June 2017. I had been coaching at Facebook for 6 years at this point. I wanted to reflect on how the most effective people got to where they were.</p></blockquote><p>After coaching hundreds of engineers, I got to thinking about why more people don&#8217;t reach the top levels. Part of it is the curve&#8212;the top 3% is always going to be the top 3%. Part is bias&#8212;from childhood through education through a career some talent is repressed based on gender, melanin, or just the vagaries of geography.</p><p>Even with all the privileges, most folks don&#8217;t make it to the elite level. Some folks do make it, though, but to get there they have to pass through the Gates of Paradox:</p><ul><li><p>Longevity/diversity. Elite engineers stick with projects long enough to see the consequences of their decisions. Insight is best mined deep in maintenance. At the same time, elite engineers have enough diversity of projects to separate context-dependent lessons from more general ones.</p></li><li><p>Success/failure. Elite engineers need to succeed enough to maintain confidence and initiative but they also need to fail enough to question themselves and their assumptions when doing so is valuable.</p></li><li><p>Mentored/self-directed. Most elite engineers can point to one or more mentors who changed the trajectory of their career. Elite engineers are also self-directed learners, trusting their curiosity as a compass pointing towards future growth.</p></li><li><p>Urgency/slack. Elite engineers work hard, but lots of folks work hard. Elite engineers have the habit of investing the margin in personal growth. When that odd hour or two isn&#8217;t likely to yield a great new feature, it can still yield useful learning.</p></li></ul><p>While all elite engineers face these contradictions, there are as many paths through them as there are engineers. In conversation, some patterns emerge:</p><ul><li><p>Longevity/diversity. Pick projects with a short Time to Production Feedback (T2PF). Structure existing projects to slash T2PF. Once you&#8217;ve learned your lessons, move on to a contrasting project.</p></li><li><p>Success/failure. Cut your losses but learn your lessons. Focus on what <em>you </em>could have done differently.</p></li><li><p>Mentored/self-directed. Build and maintain relationships with engineers you admire. Trust your curiosity as a compass pointing to your future growth.</p></li><li><p>Urgency/slack. Work hard on your main responsibility, but take time to learn when that&#8217;s the best use of marginal effort. You&#8217;re worth it.</p></li></ul>]]></content:encoded></item><item><title><![CDATA[Ad Hoc Infrastructure]]></title><description><![CDATA[First published in 2017.]]></description><link>https://tidyfirst.substack.com/p/ad-hoc-infrastructure</link><guid isPermaLink="false">https://tidyfirst.substack.com/p/ad-hoc-infrastructure</guid><dc:creator><![CDATA[Kent Beck]]></dc:creator><pubDate>Fri, 30 Aug 2024 12:22:01 GMT</pubDate><content:encoded><![CDATA[<blockquote><p>First published in 2017. I was already wrestling with the question of &#8220;when&#8221; as the critical design decision. Also, you can see the roots of the &#8220;empirical&#8221; in Empirical Software Design here.</p><p>Commission me to deliver <a href="mailto:kentlbeck@gmail.com">a custom talk</a> to your development organization. Your choice of format, topic, &amp; location.</p></blockquote><p>My intention in this note is to reclaim the phrase <em>ad hoc </em>from those who use it as a pejorative, especially as applied to infrastructure. Instead, building infrastructure <em>ad hoc </em>is the safest, most efficient strategy. It carefully balances the risks inherent in creating infrastructure, stages investment, and realizes economies of scale.</p><h2><strong>&#8220;Infrastructure&#8221;?</strong></h2><p>Imagine we have lots of code like this:</p><pre><code>value = memcache.get(key)
if (! value) {
  value = database.get(key)
  memcache.put(key, value)
}
...value...</code></pre><p>This code requires three network calls in the case of a cache miss, <em>expensive</em> network calls going from the front end servers to the data storage servers. Suppose we replace these 3 calls with a single call:</p><pre><code>value = cache.get(key)</code></pre><p>(Assuming we set up the cache to know how to fetch its underlying data.)</p><p>The front end no longer has to care about how to fill the cache. The cache machines can be located close (in the network sense) to the database machines, so a cache miss no longer incurs as much of a penalty.</p><p>Once the cache is in place, we can continually improve cache hit rates, reduce latency on misses, and improve behavior for &#8220;hot&#8221; keys all without changing the front end code at all. A small improvement to the cache&#8217;s behavior results in a large return on investment because of scale.</p><p>That&#8217;s what infrastructure is: a (mostly) isolated bundle of related functionality achieving economies of scale. Those economies may come from reduced capital expenditure (fewer servers needed for the same data) or reduced operating expenditure (shorter mean time to repair because the functionality can be economically refined).</p><p>So far I haven&#8217;t said anything controversial (I hope). But&#8230;</p><p>When should such infrastructure be built? What goes into the infrastructure? These are questions that provoke furious debate.</p><h2><strong>The Myth</strong></h2><p>The myth is &#8220;build the infrastructure and then build the apps on top of it&#8221;.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dd-I!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e001263-fb0d-4ead-825b-71b6ac488078_570x182.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dd-I!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e001263-fb0d-4ead-825b-71b6ac488078_570x182.png 424w, https://substackcdn.com/image/fetch/$s_!dd-I!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e001263-fb0d-4ead-825b-71b6ac488078_570x182.png 848w, https://substackcdn.com/image/fetch/$s_!dd-I!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e001263-fb0d-4ead-825b-71b6ac488078_570x182.png 1272w, https://substackcdn.com/image/fetch/$s_!dd-I!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e001263-fb0d-4ead-825b-71b6ac488078_570x182.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dd-I!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e001263-fb0d-4ead-825b-71b6ac488078_570x182.png" width="570" height="182" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3e001263-fb0d-4ead-825b-71b6ac488078_570x182.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:182,&quot;width&quot;:570,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:151362,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dd-I!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e001263-fb0d-4ead-825b-71b6ac488078_570x182.png 424w, https://substackcdn.com/image/fetch/$s_!dd-I!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e001263-fb0d-4ead-825b-71b6ac488078_570x182.png 848w, https://substackcdn.com/image/fetch/$s_!dd-I!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e001263-fb0d-4ead-825b-71b6ac488078_570x182.png 1272w, https://substackcdn.com/image/fetch/$s_!dd-I!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e001263-fb0d-4ead-825b-71b6ac488078_570x182.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>This trick never works (for some value of &#8220;never&#8221;). Building the infrastructure is a never-ending project. When is it good enough for apps? Tomorrow. Always tomorrow. What should go into the infrastructure? More. Always more.</p><p>Infrastructure is supposed to be built more carefully than apps. Apps gain value from exploration &amp; thus emphasize latency of experiments. Infrastructure gains value from scale. Mistakes or inefficiencies scale too. However, infrastructure is not built with perfect knowledge. Infrastructure needs to grow &amp; adapt.</p><p>&#8220;When?&#8221; should, then, be answered with &#8220;some sooner, some later&#8221;.</p><h2><strong>Ad Hoc Infrastructure</strong></h2><p>I&#8217;ve heard people critique as system as &#8220;ad hoc&#8221;. Hang on! </p><blockquote><p>ad hoc /&#716;ad &#712;h&#228;k/<br>adverb<br>    when necessary or needed.<br>adjective<br>    created or done for a particular purpose as necessary.</p></blockquote><p>I <em>like</em> both those definitions. Why would you create infrastructure before it is necessary? Why would you create infrastructure that&#8217;s not needed?</p><p>The &#8220;ad hoc&#8221; answers to the infrastructure question:</p><ul><li><p>When? After an application already has the functionality, but in a clearly inferior form.</p></li><li><p>How much? Just as much as will let the application return to only doing its job.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0yJ0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901fabe0-4446-4d64-b465-a8f17d3f3358_559x176.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0yJ0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901fabe0-4446-4d64-b465-a8f17d3f3358_559x176.png 424w, https://substackcdn.com/image/fetch/$s_!0yJ0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901fabe0-4446-4d64-b465-a8f17d3f3358_559x176.png 848w, https://substackcdn.com/image/fetch/$s_!0yJ0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901fabe0-4446-4d64-b465-a8f17d3f3358_559x176.png 1272w, https://substackcdn.com/image/fetch/$s_!0yJ0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901fabe0-4446-4d64-b465-a8f17d3f3358_559x176.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0yJ0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901fabe0-4446-4d64-b465-a8f17d3f3358_559x176.png" width="559" height="176" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/901fabe0-4446-4d64-b465-a8f17d3f3358_559x176.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:176,&quot;width&quot;:559,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:141616,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0yJ0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901fabe0-4446-4d64-b465-a8f17d3f3358_559x176.png 424w, https://substackcdn.com/image/fetch/$s_!0yJ0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901fabe0-4446-4d64-b465-a8f17d3f3358_559x176.png 848w, https://substackcdn.com/image/fetch/$s_!0yJ0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901fabe0-4446-4d64-b465-a8f17d3f3358_559x176.png 1272w, https://substackcdn.com/image/fetch/$s_!0yJ0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F901fabe0-4446-4d64-b465-a8f17d3f3358_559x176.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Infrastructure derived from experience</figcaption></figure></div><p>Ad hoc infrastructure achieves economies of scale by using regret as the primary motivation. &#8220;I wish we had built this a different way...&#8221; leads to building a small part of the application in a better way, a way that just so happens to be useful for other apps after a bit of tweaking.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://tidyfirst.substack.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://tidyfirst.substack.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Scrape Then Paint]]></title><description><![CDATA[What Needs to Happen Before Test Coverage Matters]]></description><link>https://tidyfirst.substack.com/p/scrape-then-paint</link><guid isPermaLink="false">https://tidyfirst.substack.com/p/scrape-then-paint</guid><dc:creator><![CDATA[Kent Beck]]></dc:creator><pubDate>Fri, 23 Aug 2024 13:10:01 GMT</pubDate><content:encoded><![CDATA[<blockquote><p>First published July 2017</p></blockquote><p>I was twelve the first time I got paid to work. I was helping renovate a house, out in the burning sun, a wooden-handled scraper/wire brush heavy in my hands.</p><p>My first target was an outdoor bannister. I gave it a few swipes, got hot, and went inside to find a cooler job. Dick called me back out. &#8220;You need to scrape and brush until all the loose paint chips are gone. Otherwise, we&#8217;ll paint it, it&#8217;ll look good, but next spring it&#8217;ll start flaking and we&#8217;ll have to do it again.&#8221;</p><p>I got back to work, finding, despite the heat and the sweat, satisfaction in doing a job that would last.</p><h2><strong>Test Coverage</strong></h2><p>Studying better engineering is based on a collective realization that we (sometimes, more on that later) need to shift our development efforts towards the long term. Quality matters. But how, with a measurement-oriented culture, do you measure quality?</p><p>The consequences of code quality are either hard to measure or lag far behind changes of quality:</p><ul><li><p>How easy is it to add features?</p></li><li><p>How many SEVs did it cause?</p></li><li><p>How quickly can people learn it?</p></li><li><p>(Ultimately) How much community does it build?</p></li></ul><p>Test coverage, on the other hand, is easy to measure and measurable today. In the absence of changes to design practices, however, test coverage is at best worthless and at worst a distraction from more important issues.</p><h2><strong>Production Predictor</strong></h2><p>The ideal test suite is an instant <a href="https://kentbeck.github.io/TestDesiderata/">production predictor</a>. If the tests run, production will be fine if you push. If the tests fail, a production push would fail. The test suite will never be a perfect production predictor, but you can continually make it better.</p><p>The problem is that by the time we get to the test suite, it&#8217;s already too late because of the Universal Law of Testing:</p><div class="pullquote"><p><em>The number of defects leaving a feedback loop is proportional to the number of defects entering</em></p></div><p>The code is composed of large elements (functions, classes, files, modules), unnecessarily-shared mutable state, complex control structures, vestigial code, duplicated code, and implicit coupling. You don&#8217;t have bugs because you don&#8217;t have tests. You have bugs because you write code that makes it easy to have bugs. You have a design problem, not a testing problem.</p><h2><strong>Prescription</strong></h2><ul><li><p>Improve cohesion by reducing the size of elements</p></li><li><p>Unify duplicated logic</p></li><li><p>Replace duplicated conditionals with polymorphism</p></li><li><p>Use immutable data structures where feasible to eliminate aliasing errors</p></li><li><p>Eliminate dead code</p></li><li><p>Rationalize naming so the right names are likelier to be guessed</p></li><li><p>Simplify control flows where possible</p></li></ul><p>Once the system is closer to being composed out of cohesive, loosely coupled elements, then and only then does test coverage begin to correlate with the predictive power of the test suite. As long as changing a line has a significant chance of unexpected consequences, whether that line is covered or not doesn&#8217;t really matter.</p><h2><strong>Priorities</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XlE2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b0ca7cf-70b2-4496-a32d-48a29dccde54_591x277.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XlE2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b0ca7cf-70b2-4496-a32d-48a29dccde54_591x277.png 424w, https://substackcdn.com/image/fetch/$s_!XlE2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b0ca7cf-70b2-4496-a32d-48a29dccde54_591x277.png 848w, https://substackcdn.com/image/fetch/$s_!XlE2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b0ca7cf-70b2-4496-a32d-48a29dccde54_591x277.png 1272w, https://substackcdn.com/image/fetch/$s_!XlE2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b0ca7cf-70b2-4496-a32d-48a29dccde54_591x277.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XlE2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b0ca7cf-70b2-4496-a32d-48a29dccde54_591x277.png" width="591" height="277" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7b0ca7cf-70b2-4496-a32d-48a29dccde54_591x277.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:277,&quot;width&quot;:591,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:208878,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XlE2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b0ca7cf-70b2-4496-a32d-48a29dccde54_591x277.png 424w, https://substackcdn.com/image/fetch/$s_!XlE2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b0ca7cf-70b2-4496-a32d-48a29dccde54_591x277.png 848w, https://substackcdn.com/image/fetch/$s_!XlE2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b0ca7cf-70b2-4496-a32d-48a29dccde54_591x277.png 1272w, https://substackcdn.com/image/fetch/$s_!XlE2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b0ca7cf-70b2-4496-a32d-48a29dccde54_591x277.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The relative cost of de-coupling code versus dealing with coupling changes as the code lives longer</figcaption></figure></div><p>Another way of interpreting efforts to improve engineering is that they recognize that parts of the code base have made this shift to longer half-lives. The cultural challenge is that de-coupling is hard work, provides no immediate payoff, can disconnect from actual progress, and is hard to measure. Test coverage, on the other hand, is easy to measure, easy to make progress on, and easy to justify short-term.</p><p>I&#8217;m 100% in favor of slowing down to speed up, where we know code will be valuable long-term. I&#8217;m in favor of better test coverage. But you have some hard, sweaty, unglamorous work to do first. Otherwise, you risk testing the hell out of error-prone code, only to have to test the hell out of tomorrow&#8217;s error-prone code. And the next day&#8217;s. And the next.</p><h2><strong>P.S. One Exception</strong></h2><p>One scenario where test coverage provides value today is answering the question, &#8220;You know this line I just changed? Is it being exercised?&#8221; If it isn&#8217;t, it&#8217;s time to ask, &#8220;Am I comfortable with this change first being executed outside of my direct control when it&#8217;s in production?&#8221; Maybe yes, maybe no, but test coverage eliminates a class of errors where you accidentally didn&#8217;t even check.</p>]]></content:encoded></item></channel></rss>