<?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[Craft Better Software]]></title><description><![CDATA[Write quality software with AI and Extreme Programming.]]></description><link>https://craftbettersoftware.com</link><image><url>https://substackcdn.com/image/fetch/$s_!jIo-!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e94fecb-99dd-4a4c-99ee-8b66ffc29f19_512x512.png</url><title>Craft Better Software</title><link>https://craftbettersoftware.com</link></image><generator>Substack</generator><lastBuildDate>Fri, 17 Apr 2026 13:06:06 GMT</lastBuildDate><atom:link href="https://craftbettersoftware.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Daniel Moka]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[danielmoka@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[danielmoka@substack.com]]></itunes:email><itunes:name><![CDATA[Daniel Moka]]></itunes:name></itunes:owner><itunes:author><![CDATA[Daniel Moka]]></itunes:author><googleplay:owner><![CDATA[danielmoka@substack.com]]></googleplay:owner><googleplay:email><![CDATA[danielmoka@substack.com]]></googleplay:email><googleplay:author><![CDATA[Daniel Moka]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Master Claude Code Skills in 5 Minutes]]></title><description><![CDATA[Skills aren't markdown files. Here's what they actually are.]]></description><link>https://craftbettersoftware.com/p/master-claude-code-skills-in-5-minutes</link><guid isPermaLink="false">https://craftbettersoftware.com/p/master-claude-code-skills-in-5-minutes</guid><dc:creator><![CDATA[Daniel Moka]]></dc:creator><pubDate>Mon, 30 Mar 2026 05:02:24 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/36f56525-e188-421e-9825-760b9f4ba38b_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1><strong>Bad Data Architecture = Bad AI Outputs (Sponsor)</strong></h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://tsdb.co/danielm-nl" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!l6oW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc96fd626-9a05-4f42-82bf-31ba4f6c8c33_828x466.jpeg 424w, https://substackcdn.com/image/fetch/$s_!l6oW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc96fd626-9a05-4f42-82bf-31ba4f6c8c33_828x466.jpeg 848w, https://substackcdn.com/image/fetch/$s_!l6oW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc96fd626-9a05-4f42-82bf-31ba4f6c8c33_828x466.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!l6oW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc96fd626-9a05-4f42-82bf-31ba4f6c8c33_828x466.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!l6oW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc96fd626-9a05-4f42-82bf-31ba4f6c8c33_828x466.jpeg" width="602" height="338.80676328502415" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c96fd626-9a05-4f42-82bf-31ba4f6c8c33_828x466.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:466,&quot;width&quot;:828,&quot;resizeWidth&quot;:602,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://tsdb.co/danielm-nl&quot;,&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_!l6oW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc96fd626-9a05-4f42-82bf-31ba4f6c8c33_828x466.jpeg 424w, https://substackcdn.com/image/fetch/$s_!l6oW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc96fd626-9a05-4f42-82bf-31ba4f6c8c33_828x466.jpeg 848w, https://substackcdn.com/image/fetch/$s_!l6oW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc96fd626-9a05-4f42-82bf-31ba4f6c8c33_828x466.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!l6oW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc96fd626-9a05-4f42-82bf-31ba4f6c8c33_828x466.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></figure></div><p>POV: You connected an AI agent to your industrial ops data and it gave wrong answers to even the most basic questions.</p><p>Why?</p><p>AI needs context. Your database architecture matters, and split data won&#8217;t cut it.</p><p>TigerData puts everything in one PostgreSQL + TimescaleDB instance for you, and lets the schema do the work.</p><p>Close the AI agent readiness gap by querying through MCP.</p><p><a href="https://tsdb.co/danielm-nl">Learn more.</a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://tsdb.co/danielm-li&quot;,&quot;text&quot;:&quot;Click Here to Read More&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://tsdb.co/danielm-li"><span>Click Here to Read More</span></a></p><h1><strong>Motivation</strong></h1><p>Claude Code has a feature that 90% of developers either ignore or use wrong.</p><p>It&#8217;s called <strong>Skills.</strong></p><p>And it&#8217;s the difference between a $200/month autocomplete and an autonomous teammate that actually knows your codebase, your conventions, and your deployment process.</p><p>I&#8217;ve built dozens of skills across my projects. Most of them started as a single markdown file. That was the mistake. In this article I will tell you exactly what really works.</p><p>Let&#8217;s start.</p><div><hr></div><h2><strong>Skills Are Folders, Not Files</strong></h2><p>This is the #1 misconception.</p><p>Most devs create a SKILL.md, write 20 lines of instructions, and call it a day. That&#8217;s like writing a README and calling it a codebase.</p><p>A skill is a <strong>directory.</strong> SKILL.md is just the entry point.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!napK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7ff9930-9fb6-4e08-95c7-65372d50aab9_1400x747.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!napK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7ff9930-9fb6-4e08-95c7-65372d50aab9_1400x747.png 424w, https://substackcdn.com/image/fetch/$s_!napK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7ff9930-9fb6-4e08-95c7-65372d50aab9_1400x747.png 848w, https://substackcdn.com/image/fetch/$s_!napK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7ff9930-9fb6-4e08-95c7-65372d50aab9_1400x747.png 1272w, https://substackcdn.com/image/fetch/$s_!napK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7ff9930-9fb6-4e08-95c7-65372d50aab9_1400x747.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!napK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7ff9930-9fb6-4e08-95c7-65372d50aab9_1400x747.png" width="1400" height="747" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a7ff9930-9fb6-4e08-95c7-65372d50aab9_1400x747.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:747,&quot;width&quot;:1400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Claude Code Agent Skills 2.0: From Custom Instructions to Programmable  Agents | by Rick Hightower | Mar, 2026 | Towards AI&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="Claude Code Agent Skills 2.0: From Custom Instructions to Programmable  Agents | by Rick Hightower | Mar, 2026 | Towards AI" title="Claude Code Agent Skills 2.0: From Custom Instructions to Programmable  Agents | by Rick Hightower | Mar, 2026 | Towards AI" srcset="https://substackcdn.com/image/fetch/$s_!napK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7ff9930-9fb6-4e08-95c7-65372d50aab9_1400x747.png 424w, https://substackcdn.com/image/fetch/$s_!napK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7ff9930-9fb6-4e08-95c7-65372d50aab9_1400x747.png 848w, https://substackcdn.com/image/fetch/$s_!napK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7ff9930-9fb6-4e08-95c7-65372d50aab9_1400x747.png 1272w, https://substackcdn.com/image/fetch/$s_!napK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa7ff9930-9fb6-4e08-95c7-65372d50aab9_1400x747.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>The real power is in the supporting files. Scripts Claude can execute. Reference docs it reads on demand. Templates it fills in. Config files it checks.</p><p><strong>Claude only loads supporting files when it needs them.</strong> This is called progressive disclosure. Your main prompt stays lean. The details live in files Claude discovers as it works.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rPL8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc7a1a93-9e56-4f21-9cd2-30350e65a0ce_2752x1120.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rPL8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc7a1a93-9e56-4f21-9cd2-30350e65a0ce_2752x1120.png 424w, https://substackcdn.com/image/fetch/$s_!rPL8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc7a1a93-9e56-4f21-9cd2-30350e65a0ce_2752x1120.png 848w, https://substackcdn.com/image/fetch/$s_!rPL8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc7a1a93-9e56-4f21-9cd2-30350e65a0ce_2752x1120.png 1272w, https://substackcdn.com/image/fetch/$s_!rPL8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc7a1a93-9e56-4f21-9cd2-30350e65a0ce_2752x1120.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rPL8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc7a1a93-9e56-4f21-9cd2-30350e65a0ce_2752x1120.png" width="1456" height="593" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fc7a1a93-9e56-4f21-9cd2-30350e65a0ce_2752x1120.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:593,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:612840,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/192129783?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc7a1a93-9e56-4f21-9cd2-30350e65a0ce_2752x1120.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rPL8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc7a1a93-9e56-4f21-9cd2-30350e65a0ce_2752x1120.png 424w, https://substackcdn.com/image/fetch/$s_!rPL8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc7a1a93-9e56-4f21-9cd2-30350e65a0ce_2752x1120.png 848w, https://substackcdn.com/image/fetch/$s_!rPL8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc7a1a93-9e56-4f21-9cd2-30350e65a0ce_2752x1120.png 1272w, https://substackcdn.com/image/fetch/$s_!rPL8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc7a1a93-9e56-4f21-9cd2-30350e65a0ce_2752x1120.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><div><hr></div><h2><strong>The Frontmatter Controls Everything</strong></h2><p>Every SKILL.md starts with YAML frontmatter between <code>---</code> markers. This is where you configure how the skill behaves.</p><p>Here&#8217;s a real example:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!z1wP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21321bfa-7632-4908-b598-0f3fa38abe12_2752x1680.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!z1wP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21321bfa-7632-4908-b598-0f3fa38abe12_2752x1680.png 424w, https://substackcdn.com/image/fetch/$s_!z1wP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21321bfa-7632-4908-b598-0f3fa38abe12_2752x1680.png 848w, https://substackcdn.com/image/fetch/$s_!z1wP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21321bfa-7632-4908-b598-0f3fa38abe12_2752x1680.png 1272w, https://substackcdn.com/image/fetch/$s_!z1wP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21321bfa-7632-4908-b598-0f3fa38abe12_2752x1680.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!z1wP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21321bfa-7632-4908-b598-0f3fa38abe12_2752x1680.png" width="1456" height="889" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/21321bfa-7632-4908-b598-0f3fa38abe12_2752x1680.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:889,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:827188,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/192129783?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21321bfa-7632-4908-b598-0f3fa38abe12_2752x1680.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!z1wP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21321bfa-7632-4908-b598-0f3fa38abe12_2752x1680.png 424w, https://substackcdn.com/image/fetch/$s_!z1wP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21321bfa-7632-4908-b598-0f3fa38abe12_2752x1680.png 848w, https://substackcdn.com/image/fetch/$s_!z1wP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21321bfa-7632-4908-b598-0f3fa38abe12_2752x1680.png 1272w, https://substackcdn.com/image/fetch/$s_!z1wP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F21321bfa-7632-4908-b598-0f3fa38abe12_2752x1680.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>This skill only runs when you type <code>/deploy</code>. It runs in an isolated subagent so it doesn&#8217;t pollute your conversation. And Claude can only use Bash and Read without asking permission. Total control.</p><p>Here&#8217;s the full reference of the available fields:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!E2M6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4167ff51-e408-4d2b-bf09-af5999d70f1b_2334x1246.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!E2M6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4167ff51-e408-4d2b-bf09-af5999d70f1b_2334x1246.png 424w, https://substackcdn.com/image/fetch/$s_!E2M6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4167ff51-e408-4d2b-bf09-af5999d70f1b_2334x1246.png 848w, https://substackcdn.com/image/fetch/$s_!E2M6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4167ff51-e408-4d2b-bf09-af5999d70f1b_2334x1246.png 1272w, https://substackcdn.com/image/fetch/$s_!E2M6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4167ff51-e408-4d2b-bf09-af5999d70f1b_2334x1246.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!E2M6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4167ff51-e408-4d2b-bf09-af5999d70f1b_2334x1246.png" width="1456" height="777" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4167ff51-e408-4d2b-bf09-af5999d70f1b_2334x1246.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:777,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:376459,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/192129783?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4167ff51-e408-4d2b-bf09-af5999d70f1b_2334x1246.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!E2M6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4167ff51-e408-4d2b-bf09-af5999d70f1b_2334x1246.png 424w, https://substackcdn.com/image/fetch/$s_!E2M6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4167ff51-e408-4d2b-bf09-af5999d70f1b_2334x1246.png 848w, https://substackcdn.com/image/fetch/$s_!E2M6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4167ff51-e408-4d2b-bf09-af5999d70f1b_2334x1246.png 1272w, https://substackcdn.com/image/fetch/$s_!E2M6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4167ff51-e408-4d2b-bf09-af5999d70f1b_2334x1246.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>The three invocation modes:</p><ul><li><p><strong>Default</strong> (no flags): Both you and Claude can invoke it. Description is always in Claude&#8217;s context.</p></li><li><p><code>disable-model-invocation: true</code>: Manual only via <code>/name</code>. Description is hidden from Claude&#8217;s context. Use for deploy, send-email, anything with side effects.</p></li><li><p><code>user-invocable: false</code>: Hidden from the <code>/</code> menu, but Claude can still invoke it automatically. Use for background knowledge like style guides and conventions.</p></li></ul><p></p><h2><strong>Your Description Is the Trigger</strong></h2><p>This one cost me hours of debugging.</p><p>I had a skill that worked perfectly when I invoked it manually with <code>/deploy</code>. But Claude never picked it up on its own. I&#8217;d say &#8220;deploy this to staging&#8221; and Claude would just... wing it.</p><p>The problem was my description.</p><p>When Claude starts a session, it scans every skill&#8217;s <code>description</code> field to build a map of what&#8217;s available. <strong>Vague descriptions = invisible skills.</strong> Your brilliant skill just sits there, unused.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!f6u5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03b8f5e4-ea39-49b9-9a98-c58bd6e7f695_2752x880.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!f6u5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03b8f5e4-ea39-49b9-9a98-c58bd6e7f695_2752x880.png 424w, https://substackcdn.com/image/fetch/$s_!f6u5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03b8f5e4-ea39-49b9-9a98-c58bd6e7f695_2752x880.png 848w, https://substackcdn.com/image/fetch/$s_!f6u5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03b8f5e4-ea39-49b9-9a98-c58bd6e7f695_2752x880.png 1272w, https://substackcdn.com/image/fetch/$s_!f6u5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03b8f5e4-ea39-49b9-9a98-c58bd6e7f695_2752x880.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!f6u5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03b8f5e4-ea39-49b9-9a98-c58bd6e7f695_2752x880.png" width="1456" height="466" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/03b8f5e4-ea39-49b9-9a98-c58bd6e7f695_2752x880.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:466,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:491036,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/192129783?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03b8f5e4-ea39-49b9-9a98-c58bd6e7f695_2752x880.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!f6u5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03b8f5e4-ea39-49b9-9a98-c58bd6e7f695_2752x880.png 424w, https://substackcdn.com/image/fetch/$s_!f6u5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03b8f5e4-ea39-49b9-9a98-c58bd6e7f695_2752x880.png 848w, https://substackcdn.com/image/fetch/$s_!f6u5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03b8f5e4-ea39-49b9-9a98-c58bd6e7f695_2752x880.png 1272w, https://substackcdn.com/image/fetch/$s_!f6u5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03b8f5e4-ea39-49b9-9a98-c58bd6e7f695_2752x880.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>The fix is simple: <strong>Write your description for the model, not for humans. Include the trigger words someone would actually say.</strong> Be specific about WHEN to use it.</p><p>One line. That&#8217;s the difference between discoverable and disabled skills.</p><h2><strong>Three Biggest Mistakes In Skills</strong></h2><p><strong>Stating the obvious.</strong></p><p>Claude already knows how to code. If your skill just says &#8220;write clean functions and use meaningful variable names,&#8221; you&#8217;re wasting tokens.</p><p>Focus on what pushes Claude <strong>out of its defaults.</strong> The frontend-design skill exists because Claude defaults to Inter font and purple gradients every single time. That&#8217;s the kind of thing worth correcting.</p><p><strong>No Gotchas section.</strong></p><p>This is the highest-signal content in any skill. Period.</p><p>Every time Claude makes a mistake using your skill, add it to the Gotchas section. Over time, this section becomes incredibly valuable.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3xYc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ed56249-59d0-4aad-a839-ca1a1c8d39e4_2752x880.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3xYc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ed56249-59d0-4aad-a839-ca1a1c8d39e4_2752x880.png 424w, https://substackcdn.com/image/fetch/$s_!3xYc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ed56249-59d0-4aad-a839-ca1a1c8d39e4_2752x880.png 848w, https://substackcdn.com/image/fetch/$s_!3xYc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ed56249-59d0-4aad-a839-ca1a1c8d39e4_2752x880.png 1272w, https://substackcdn.com/image/fetch/$s_!3xYc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ed56249-59d0-4aad-a839-ca1a1c8d39e4_2752x880.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3xYc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ed56249-59d0-4aad-a839-ca1a1c8d39e4_2752x880.png" width="1456" height="466" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9ed56249-59d0-4aad-a839-ca1a1c8d39e4_2752x880.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:466,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:473300,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/192129783?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ed56249-59d0-4aad-a839-ca1a1c8d39e4_2752x880.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3xYc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ed56249-59d0-4aad-a839-ca1a1c8d39e4_2752x880.png 424w, https://substackcdn.com/image/fetch/$s_!3xYc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ed56249-59d0-4aad-a839-ca1a1c8d39e4_2752x880.png 848w, https://substackcdn.com/image/fetch/$s_!3xYc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ed56249-59d0-4aad-a839-ca1a1c8d39e4_2752x880.png 1272w, https://substackcdn.com/image/fetch/$s_!3xYc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ed56249-59d0-4aad-a839-ca1a1c8d39e4_2752x880.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><strong>Instructions instead of scripts.</strong></p><p>When I started giving Claude actual scripts to compose instead of prose instructions to follow, everything changed.</p><p>Without scripts, Claude reconstructs boilerplate every single turn. With scripts, it orchestrates. It calls your deploy script, your test runner, your healthcheck. It spends its intelligence on decisions, not on remembering how your CI pipeline works.</p><div><hr></div><h2><strong>CLAUDE.md vs Subagents vs Skills</strong></h2><p>These three get confused all the time. Here&#8217;s how they&#8217;re different:</p><p><strong>CLAUDE.md</strong> is your project&#8217;s always-on context. Conventions, rules, preferences. It loads into every session automatically. The downside: it&#8217;s always in your context window, eating tokens whether you need it or not.</p><p><strong>Subagents</strong> are specialized workers that run in their own context window. They have custom system prompts, restricted tool access, and can even use a different model. When Claude delegates to a subagent, the work happens in a separate context. Your main conversation stays clean.</p><p><strong>Skills</strong> are the sweet spot. They load on demand based on the description trigger. They&#8217;re folders with progressive disclosure. And they can run in a subagent context with <code>context: fork</code> if you want isolation.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6zJ0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fece650c4-b8d8-4ec6-94c3-5cbc174623dd_1138x558.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6zJ0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fece650c4-b8d8-4ec6-94c3-5cbc174623dd_1138x558.png 424w, https://substackcdn.com/image/fetch/$s_!6zJ0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fece650c4-b8d8-4ec6-94c3-5cbc174623dd_1138x558.png 848w, https://substackcdn.com/image/fetch/$s_!6zJ0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fece650c4-b8d8-4ec6-94c3-5cbc174623dd_1138x558.png 1272w, https://substackcdn.com/image/fetch/$s_!6zJ0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fece650c4-b8d8-4ec6-94c3-5cbc174623dd_1138x558.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6zJ0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fece650c4-b8d8-4ec6-94c3-5cbc174623dd_1138x558.png" width="654" height="320.67838312829525" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ece650c4-b8d8-4ec6-94c3-5cbc174623dd_1138x558.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:558,&quot;width&quot;:1138,&quot;resizeWidth&quot;:654,&quot;bytes&quot;:90766,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/192129783?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fece650c4-b8d8-4ec6-94c3-5cbc174623dd_1138x558.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6zJ0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fece650c4-b8d8-4ec6-94c3-5cbc174623dd_1138x558.png 424w, https://substackcdn.com/image/fetch/$s_!6zJ0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fece650c4-b8d8-4ec6-94c3-5cbc174623dd_1138x558.png 848w, https://substackcdn.com/image/fetch/$s_!6zJ0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fece650c4-b8d8-4ec6-94c3-5cbc174623dd_1138x558.png 1272w, https://substackcdn.com/image/fetch/$s_!6zJ0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fece650c4-b8d8-4ec6-94c3-5cbc174623dd_1138x558.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><strong>When to use what:</strong></p><ul><li><p><strong>CLAUDE.md</strong>: Rules that apply to EVERY conversation. Keep it lean.</p></li><li><p><strong>Subagents</strong>: Heavy, isolated tasks. Code review that shouldn&#8217;t pollute your main context. Research across a large codebase.</p></li><li><p><strong>Skills</strong>: Everything else. Reusable capabilities with their own files, scripts, and configuration.</p></li></ul><p></p><h2><strong>Make Your Skills Portable</strong></h2><p>Where you store a skill determines who can use it:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!taUt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b6e03ee-26cc-40aa-bd85-425738199a45_1488x460.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!taUt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b6e03ee-26cc-40aa-bd85-425738199a45_1488x460.png 424w, https://substackcdn.com/image/fetch/$s_!taUt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b6e03ee-26cc-40aa-bd85-425738199a45_1488x460.png 848w, https://substackcdn.com/image/fetch/$s_!taUt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b6e03ee-26cc-40aa-bd85-425738199a45_1488x460.png 1272w, https://substackcdn.com/image/fetch/$s_!taUt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b6e03ee-26cc-40aa-bd85-425738199a45_1488x460.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!taUt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b6e03ee-26cc-40aa-bd85-425738199a45_1488x460.png" width="1456" height="450" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2b6e03ee-26cc-40aa-bd85-425738199a45_1488x460.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:450,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:98728,&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;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/192129783?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b6e03ee-26cc-40aa-bd85-425738199a45_1488x460.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!taUt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b6e03ee-26cc-40aa-bd85-425738199a45_1488x460.png 424w, https://substackcdn.com/image/fetch/$s_!taUt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b6e03ee-26cc-40aa-bd85-425738199a45_1488x460.png 848w, https://substackcdn.com/image/fetch/$s_!taUt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b6e03ee-26cc-40aa-bd85-425738199a45_1488x460.png 1272w, https://substackcdn.com/image/fetch/$s_!taUt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b6e03ee-26cc-40aa-bd85-425738199a45_1488x460.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><strong>Personal skills</strong> (<code>~/.claude/skills/</code>) follow you across every project on your machine. Most people don&#8217;t know this exists. Anything you use across repos belongs here.</p><p><strong>Team sharing</strong>: check skills into <code>.claude/skills/</code> in your repo. Everyone gets them via git pull.</p><p><strong>Cross-tool portability</strong>: Claude Code skills follow the <strong>Agent Skills open standard</strong> (agentskills.io). The same SKILL.md works in Cursor, Gemini CLI, JetBrains Junie, Amp, and 10+ other tools. Write once, use everywhere.</p><p>&#128161; Working across multiple machines? Symlink <code>~/.claude/skills/</code> to a git-synced dotfiles repo.</p><h2><strong>Where to Find Skills</strong></h2><p>You don&#8217;t have to build everything from scratch. Here&#8217;s where to find production-ready skills:</p><p><strong><a href="http://github.com/anthropics/skills">Anthropic&#8217;s Official Skills Repo</a></strong></p><p>The skills that power Claude&#8217;s document capabilities (PowerPoint, Excel, Word, PDF) are open-sourced here. Plus creative, dev, and enterprise examples. You can register the entire repo as a Claude Code plugin marketplace and install skills directly.</p><p><strong><a href="http://clawhub.com">ClawHub</a></strong> </p><p>Community marketplace for Agent Skills. Browse what others have built, install with one command, publish your own. Works with Claude Code directly.</p><p><strong><a href="http://github.com/travisvn/awesome-claude-skills">Awesome Claude Skills</a></strong></p><p>Curated list of community skills, organized by category. Good starting point to see what&#8217;s possible.</p><p><strong><a href="http://github.com/ComposioHQ/awesome-claude-skills">Awesome Claude Skills (Composio)</a></strong></p><p>Another solid collection with a focus on integrations and automation skills.</p><p><strong><a href="http://agentskills.io">Agent Skills Spec</a></strong></p><p>The open standard itself. If you want to understand the format deeply or build skills that work across Claude Code, Cursor, Gemini CLI, and other tools.</p><h2><strong>Bonus: Let Claude Build Your Skills</strong></h2><p>Don&#8217;t want to write skills from scratch? Anthropic built a <strong>Skill Creator</strong> skill that does it for you.</p><p>It&#8217;s in their official skills repo (<code>github.com/anthropics/skills</code>). Install it, then tell Claude what you want: &#8220;I need a skill that deploys to staging.&#8221; It will:</p><ol><li><p>Interview you about what the skill should do</p></li><li><p>Write the SKILL.md with proper frontmatter</p></li><li><p>Create test prompts and run them</p></li><li><p>Show you the results for evaluation</p></li><li><p>Iterate until the skill works reliably</p></li><li><p>Optimize the description field for better triggering</p></li></ol><p></p><p>It even runs benchmarks to measure how well your skill performs across different prompts. And it optimizes descriptions to combat &#8220;undertriggering,&#8221; which is Claude&#8217;s tendency to not use skills even when they&#8217;d be useful.</p><p>This is the fastest way to go from &#8220;I want a skill for X&#8221; to a production-ready skill.</p><h1>Summing up</h1><p>Your first skill doesn&#8217;t need to be perfect.</p><p>Start with a folder. Write a specific description. Add one gotcha.</p><p>Then grow it every time Claude gets something wrong.</p><p>That&#8217;s how every great skill starts. And that&#8217;s how you turn Claude from a smart autocomplete into a teammate that actually knows how you work.</p><p><strong>Craft Better Software with Skills.</strong></p><div><hr></div><p><em>What&#8217;s your Claude Code setup? Reply and let me know. I read every response.</em></p><div><hr></div><p><a href="https://craftbettersoftware.com/p/sponsorship">Promote Yourself to 36,000+ subscribers</a> by sponsoring this newsletter.</p>]]></content:encoded></item><item><title><![CDATA[Stop Using Claude Code Like a Chatbot]]></title><description><![CDATA[5 Claude Features That 10x Your Productivity]]></description><link>https://craftbettersoftware.com/p/stop-using-claude-code-like-a-chatbot</link><guid isPermaLink="false">https://craftbettersoftware.com/p/stop-using-claude-code-like-a-chatbot</guid><dc:creator><![CDATA[Daniel Moka]]></dc:creator><pubDate>Mon, 23 Mar 2026 06:44:01 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a52f1a70-df94-41bd-a4b6-f6dcc9151ade_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1><strong>The Best Way To Build Any App (Sponsor)</strong></h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://orchidsapp.link/dm" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!S8mL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f6d297e-ca40-4202-9984-1712dc8b413b_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!S8mL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f6d297e-ca40-4202-9984-1712dc8b413b_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!S8mL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f6d297e-ca40-4202-9984-1712dc8b413b_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!S8mL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f6d297e-ca40-4202-9984-1712dc8b413b_1600x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!S8mL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f6d297e-ca40-4202-9984-1712dc8b413b_1600x900.png" width="564" height="317.25" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3f6d297e-ca40-4202-9984-1712dc8b413b_1600x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:564,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://orchidsapp.link/dm&quot;,&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="" title="" srcset="https://substackcdn.com/image/fetch/$s_!S8mL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f6d297e-ca40-4202-9984-1712dc8b413b_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!S8mL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f6d297e-ca40-4202-9984-1712dc8b413b_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!S8mL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f6d297e-ca40-4202-9984-1712dc8b413b_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!S8mL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f6d297e-ca40-4202-9984-1712dc8b413b_1600x900.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>Treat your app like an <a href="https://orchidsapp.link/dm">Orchid</a>: A beautiful flower that needs sunlight and a bit of water &#127800;.</p><p>Most &#8220;AI builders&#8221; make you grow your app in their pot. Same stack. Same limits. Same rules. And on their databases. Orchids is different:</p><ul><li><p>It&#8217;s your build space, set up your way.</p></li><li><p>Build anything, Web app, mobile app, Slack bot, Chrome extension, Python script, whatever.</p></li><li><p>Bring your own AI subscriptions so you&#8217;re not paying twice.</p></li><li><p>Plug in the database you already use and trust.</p></li><li><p>Use any payment infra you want.</p></li></ul><p></p><p>Try <a href="https://orchidsapp.link/dm">Orchids.app</a> and build it the way you were meant to</p><p><a href="https://orchidsapp.link/dm">Get Started Today!</a></p><h1><strong>Motivation</strong></h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wDHP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c7a58c-8d57-4297-8531-f877a3662b09_1280x737.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wDHP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c7a58c-8d57-4297-8531-f877a3662b09_1280x737.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wDHP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c7a58c-8d57-4297-8531-f877a3662b09_1280x737.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wDHP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c7a58c-8d57-4297-8531-f877a3662b09_1280x737.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wDHP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c7a58c-8d57-4297-8531-f877a3662b09_1280x737.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wDHP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c7a58c-8d57-4297-8531-f877a3662b09_1280x737.jpeg" width="566" height="325.8921875" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/01c7a58c-8d57-4297-8531-f877a3662b09_1280x737.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:737,&quot;width&quot;:1280,&quot;resizeWidth&quot;:566,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Claude Code makes it easy to trigger a code check now with this simple  command | ZDNET&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="Claude Code makes it easy to trigger a code check now with this simple  command | ZDNET" title="Claude Code makes it easy to trigger a code check now with this simple  command | ZDNET" srcset="https://substackcdn.com/image/fetch/$s_!wDHP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c7a58c-8d57-4297-8531-f877a3662b09_1280x737.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wDHP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c7a58c-8d57-4297-8531-f877a3662b09_1280x737.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wDHP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c7a58c-8d57-4297-8531-f877a3662b09_1280x737.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wDHP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c7a58c-8d57-4297-8531-f877a3662b09_1280x737.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>Most developers use Claude Code like a chatbot. They type a prompt, it changes their code, then that&#8217;s it.</p><p>That&#8217;s 10% of what it can do.</p><p>I've been using Claude Code daily on production Rust, Python and JavaScript codebases across several repositories with millions of lines of code. After months of trial and error, I found 5 features that completely changed how I work with it.</p><p>Let&#8217;s start.</p><div><hr></div><h2><strong>1. Nested CLAUDE.MD Files</strong></h2><p>Most developers create one CLAUDE.md and forget about it. But Claude Code has a loading system that&#8217;s way smarter than that.</p><p>When you start a session, Claude walks <strong>UP</strong> the directory tree and loads every CLAUDE.md it finds. Then it <strong>lazily</strong> loads CLAUDE.md files in subdirectories only when you touch files there.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!e3Hy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa232edf-8d1d-452d-8167-1dd27ea74f68_2720x1200.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!e3Hy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa232edf-8d1d-452d-8167-1dd27ea74f68_2720x1200.png 424w, https://substackcdn.com/image/fetch/$s_!e3Hy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa232edf-8d1d-452d-8167-1dd27ea74f68_2720x1200.png 848w, https://substackcdn.com/image/fetch/$s_!e3Hy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa232edf-8d1d-452d-8167-1dd27ea74f68_2720x1200.png 1272w, https://substackcdn.com/image/fetch/$s_!e3Hy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa232edf-8d1d-452d-8167-1dd27ea74f68_2720x1200.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!e3Hy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa232edf-8d1d-452d-8167-1dd27ea74f68_2720x1200.png" width="1456" height="642" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fa232edf-8d1d-452d-8167-1dd27ea74f68_2720x1200.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:642,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:630150,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/191655933?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa232edf-8d1d-452d-8167-1dd27ea74f68_2720x1200.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!e3Hy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa232edf-8d1d-452d-8167-1dd27ea74f68_2720x1200.png 424w, https://substackcdn.com/image/fetch/$s_!e3Hy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa232edf-8d1d-452d-8167-1dd27ea74f68_2720x1200.png 848w, https://substackcdn.com/image/fetch/$s_!e3Hy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa232edf-8d1d-452d-8167-1dd27ea74f68_2720x1200.png 1272w, https://substackcdn.com/image/fetch/$s_!e3Hy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa232edf-8d1d-452d-8167-1dd27ea74f68_2720x1200.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><strong>Why this matters:</strong> In a monorepo, if you&#8217;re working in <code>frontend/</code>, you get the root-level conventions plus the frontend-specific rules. You never get <code>backend/CLAUDE.md</code> polluting your context.</p><p>Context is precious. Claude&#8217;s loading system protects it automatically.</p><p><strong>Here&#8217;s what to put in each level:</strong></p><ul><li><p>&#128073; <strong>Root CLAUDE.md</strong> &#8212; coding standards, commit format, architecture overview, common gotchas</p></li><li><p>&#128073; <strong>Component CLAUDE.md</strong> &#8212; framework-specific patterns, testing setup, naming conventions for that area</p></li><li><p>&#128073; <strong>CLAUDE.local.md</strong> &#8212; your personal preferences. Add it to <code>.gitignore</code> so teammates don&#8217;t inherit your quirks.</p></li></ul><p></p><p>Here are a few lines as example from a Claude.MD file for a project i work on:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8O4l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51004c7f-4c8e-4200-8b7c-e2022b55e5c5_2720x1680.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8O4l!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51004c7f-4c8e-4200-8b7c-e2022b55e5c5_2720x1680.png 424w, https://substackcdn.com/image/fetch/$s_!8O4l!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51004c7f-4c8e-4200-8b7c-e2022b55e5c5_2720x1680.png 848w, https://substackcdn.com/image/fetch/$s_!8O4l!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51004c7f-4c8e-4200-8b7c-e2022b55e5c5_2720x1680.png 1272w, https://substackcdn.com/image/fetch/$s_!8O4l!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51004c7f-4c8e-4200-8b7c-e2022b55e5c5_2720x1680.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8O4l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51004c7f-4c8e-4200-8b7c-e2022b55e5c5_2720x1680.png" width="1456" height="899" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/51004c7f-4c8e-4200-8b7c-e2022b55e5c5_2720x1680.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:899,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:848891,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/191655933?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51004c7f-4c8e-4200-8b7c-e2022b55e5c5_2720x1680.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8O4l!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51004c7f-4c8e-4200-8b7c-e2022b55e5c5_2720x1680.png 424w, https://substackcdn.com/image/fetch/$s_!8O4l!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51004c7f-4c8e-4200-8b7c-e2022b55e5c5_2720x1680.png 848w, https://substackcdn.com/image/fetch/$s_!8O4l!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51004c7f-4c8e-4200-8b7c-e2022b55e5c5_2720x1680.png 1272w, https://substackcdn.com/image/fetch/$s_!8O4l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51004c7f-4c8e-4200-8b7c-e2022b55e5c5_2720x1680.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>The secret is simple: short, opinionated and actionable Claude.MD files.</p><h2><strong>2. Skills Turn Repetitive Work Into One-Slash Triggers</strong></h2><p>Every developer has workflows they repeat. Reviewing PRs. Running debug steps. Generating tests.</p><p>Claude Code lets you save these as <strong>skills</strong>. They are markdown files that you trigger with a <code>/</code> slash.</p><blockquote><p>If you&#8217;ve seen older tutorials mention <code>.claude/commands/</code>, that still works. But Claude recently merged commands into skills. </p></blockquote><p>Skills are the recommended path going forward because they support things commands couldn&#8217;t: <strong>supporting files (templates, scripts, examples), auto-discovery by Claude, and control over who can invoke them.</strong></p><p>Here&#8217;s one I use constantly:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fuxk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a060177-31bc-44df-a808-924800e3f865_2720x1680.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fuxk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a060177-31bc-44df-a808-924800e3f865_2720x1680.png 424w, https://substackcdn.com/image/fetch/$s_!fuxk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a060177-31bc-44df-a808-924800e3f865_2720x1680.png 848w, https://substackcdn.com/image/fetch/$s_!fuxk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a060177-31bc-44df-a808-924800e3f865_2720x1680.png 1272w, https://substackcdn.com/image/fetch/$s_!fuxk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a060177-31bc-44df-a808-924800e3f865_2720x1680.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fuxk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a060177-31bc-44df-a808-924800e3f865_2720x1680.png" width="1456" height="899" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5a060177-31bc-44df-a808-924800e3f865_2720x1680.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:899,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:846170,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/191655933?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a060177-31bc-44df-a808-924800e3f865_2720x1680.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fuxk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a060177-31bc-44df-a808-924800e3f865_2720x1680.png 424w, https://substackcdn.com/image/fetch/$s_!fuxk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a060177-31bc-44df-a808-924800e3f865_2720x1680.png 848w, https://substackcdn.com/image/fetch/$s_!fuxk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a060177-31bc-44df-a808-924800e3f865_2720x1680.png 1272w, https://substackcdn.com/image/fetch/$s_!fuxk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a060177-31bc-44df-a808-924800e3f865_2720x1680.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>Save it. Now <code>/security-review</code> gives you a full security audit. Every time.</p><p>The key advantage of skills: Claude can <strong>auto-discover</strong> them. If the description matches what you're asking, Claude loads the skill automatically.</p><p>&#128161; <strong>Pro tip:</strong> Add <code>context: fork</code> to the frontmatter (block between <code>---</code> markers). This runs the command in an isolated context, so it doesn&#8217;t pollute your main conversation:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!A4Dj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaf219eb-5159-4e0d-ae22-4ab177a92fc5_2720x1040.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!A4Dj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaf219eb-5159-4e0d-ae22-4ab177a92fc5_2720x1040.png 424w, https://substackcdn.com/image/fetch/$s_!A4Dj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaf219eb-5159-4e0d-ae22-4ab177a92fc5_2720x1040.png 848w, https://substackcdn.com/image/fetch/$s_!A4Dj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaf219eb-5159-4e0d-ae22-4ab177a92fc5_2720x1040.png 1272w, https://substackcdn.com/image/fetch/$s_!A4Dj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaf219eb-5159-4e0d-ae22-4ab177a92fc5_2720x1040.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!A4Dj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaf219eb-5159-4e0d-ae22-4ab177a92fc5_2720x1040.png" width="1456" height="557" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/daf219eb-5159-4e0d-ae22-4ab177a92fc5_2720x1040.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:557,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:502544,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/191655933?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaf219eb-5159-4e0d-ae22-4ab177a92fc5_2720x1040.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!A4Dj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaf219eb-5159-4e0d-ae22-4ab177a92fc5_2720x1040.png 424w, https://substackcdn.com/image/fetch/$s_!A4Dj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaf219eb-5159-4e0d-ae22-4ab177a92fc5_2720x1040.png 848w, https://substackcdn.com/image/fetch/$s_!A4Dj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaf219eb-5159-4e0d-ae22-4ab177a92fc5_2720x1040.png 1272w, https://substackcdn.com/image/fetch/$s_!A4Dj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaf219eb-5159-4e0d-ae22-4ab177a92fc5_2720x1040.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>To create new skills use the <a href="https://github.com/anthropics/skills/blob/main/skills/skill-creator/SKILL.md">skill creator</a> skill. It also helps iteratively improving them.</p><p>You can build skills for anything:</p><ul><li><p>Analyzing server logs</p></li><li><p>Generating test suites</p></li><li><p>Running common debug steps</p></li><li><p>Creating documentation</p></li></ul><p></p><p>One file. One slash. Done.</p><h2><strong>3. Subagents Give You Parallel Brains</strong></h2><p>This is where Claude Code gets seriously powerful.</p><p>A <strong>subagent</strong> runs in a completely fresh context. Separate memory. Separate tools. Separate conversation. It&#8217;s like having a second engineer working alongside you.</p><p>Claude Code ships with built-in agents:</p><ul><li><p><strong>Explore</strong>: uses Haiku (fast + cheap), read-only. Perfect for codebase research</p></li><li><p><strong>Plan</strong>: read-only research mode. Designs before coding</p></li><li><p><strong>Bash</strong>: runs terminal commands in isolation</p></li></ul><p></p><p>But the real power is building your own:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NSRv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facd1c6f7-54df-4e0c-bd16-fb7cba696317_2720x1360.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NSRv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facd1c6f7-54df-4e0c-bd16-fb7cba696317_2720x1360.png 424w, https://substackcdn.com/image/fetch/$s_!NSRv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facd1c6f7-54df-4e0c-bd16-fb7cba696317_2720x1360.png 848w, https://substackcdn.com/image/fetch/$s_!NSRv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facd1c6f7-54df-4e0c-bd16-fb7cba696317_2720x1360.png 1272w, https://substackcdn.com/image/fetch/$s_!NSRv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facd1c6f7-54df-4e0c-bd16-fb7cba696317_2720x1360.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NSRv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facd1c6f7-54df-4e0c-bd16-fb7cba696317_2720x1360.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/acd1c6f7-54df-4e0c-bd16-fb7cba696317_2720x1360.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:662909,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/191655933?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facd1c6f7-54df-4e0c-bd16-fb7cba696317_2720x1360.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NSRv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facd1c6f7-54df-4e0c-bd16-fb7cba696317_2720x1360.png 424w, https://substackcdn.com/image/fetch/$s_!NSRv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facd1c6f7-54df-4e0c-bd16-fb7cba696317_2720x1360.png 848w, https://substackcdn.com/image/fetch/$s_!NSRv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facd1c6f7-54df-4e0c-bd16-fb7cba696317_2720x1360.png 1272w, https://substackcdn.com/image/fetch/$s_!NSRv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facd1c6f7-54df-4e0c-bd16-fb7cba696317_2720x1360.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>The word <code>"PROACTIVELY"</code> in the description is key. It tells Claude to <strong>automatically spawn this agent</strong> when it needs to explore code. No manual trigger needed.</p><p>Here&#8217;s what happens:</p><ol><li><p>You ask Claude to implement a feature</p></li><li><p>It spawns the researcher agent (Haiku, read-only, cheap)</p></li><li><p>Researcher explores the codebase and reports back</p></li><li><p>Main agent writes code with full context</p></li></ol><p></p><p>Fast model for research. Smart model for writing. Right brain for the right job.</p><h2><strong>4. Install 3 MCP Servers, Not 15</strong></h2><p>MCP (Model Context Protocol) servers connect Claude Code to external tools. Databases. Browsers. Documentation APIs.</p><p>The temptation is to install everything. Don&#8217;t.</p><p>A Reddit thread with 682 upvotes said it best:</p><blockquote><p>&#8220;Went overboard with 15 MCP servers thinking more = better. Ended up using only 4 daily.&#8221;</p></blockquote><p>Every MCP server eats context. More servers = more tool descriptions loaded = less room for your actual code.</p><p>Here are the 3 that actually earn their context cost:</p><p>&#128073; <strong>Context7</strong> : fetches up-to-date library docs. Prevents Claude from hallucinating APIs that were deprecated two versions ago.</p><p>&#128073; <strong>Playwright</strong> : browser automation. Claude can screenshot, click, fill forms, and verify UI changes actually work.</p><p>&#128073; <strong>Chrome DevTools</strong> : connects to your real Chrome browser. Claude sees the actual console errors and DOM your users see.</p><p>Configuration is simple. Put <code>.mcp.json</code> in your project root and commit it:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jafu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb89497ce-806b-4243-8d4a-c752d81705d6_2752x1760.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jafu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb89497ce-806b-4243-8d4a-c752d81705d6_2752x1760.png 424w, https://substackcdn.com/image/fetch/$s_!jafu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb89497ce-806b-4243-8d4a-c752d81705d6_2752x1760.png 848w, https://substackcdn.com/image/fetch/$s_!jafu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb89497ce-806b-4243-8d4a-c752d81705d6_2752x1760.png 1272w, https://substackcdn.com/image/fetch/$s_!jafu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb89497ce-806b-4243-8d4a-c752d81705d6_2752x1760.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jafu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb89497ce-806b-4243-8d4a-c752d81705d6_2752x1760.png" width="1456" height="931" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b89497ce-806b-4243-8d4a-c752d81705d6_2752x1760.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:931,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:793186,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/191655933?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb89497ce-806b-4243-8d4a-c752d81705d6_2752x1760.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jafu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb89497ce-806b-4243-8d4a-c752d81705d6_2752x1760.png 424w, https://substackcdn.com/image/fetch/$s_!jafu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb89497ce-806b-4243-8d4a-c752d81705d6_2752x1760.png 848w, https://substackcdn.com/image/fetch/$s_!jafu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb89497ce-806b-4243-8d4a-c752d81705d6_2752x1760.png 1272w, https://substackcdn.com/image/fetch/$s_!jafu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb89497ce-806b-4243-8d4a-c752d81705d6_2752x1760.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>&#9989; Pro tip: Auto-approve trusted servers in settings to skip the permission prompt every session.</p><p>Less servers. More focus. Better output.</p><h2><strong>5. Putting It All Together</strong></h2><p>Skills can spawn agents. Agents can carry their own preloaded knowledge. When you combine these two ideas, you get safe, parallel, fully autonomous workflows.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xU6z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75f39835-fefb-4b05-8354-1d3c3f0fa190_1024x1367.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xU6z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75f39835-fefb-4b05-8354-1d3c3f0fa190_1024x1367.jpeg 424w, https://substackcdn.com/image/fetch/$s_!xU6z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75f39835-fefb-4b05-8354-1d3c3f0fa190_1024x1367.jpeg 848w, https://substackcdn.com/image/fetch/$s_!xU6z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75f39835-fefb-4b05-8354-1d3c3f0fa190_1024x1367.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!xU6z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75f39835-fefb-4b05-8354-1d3c3f0fa190_1024x1367.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xU6z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75f39835-fefb-4b05-8354-1d3c3f0fa190_1024x1367.jpeg" width="602" height="803.646484375" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/75f39835-fefb-4b05-8354-1d3c3f0fa190_1024x1367.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1367,&quot;width&quot;:1024,&quot;resizeWidth&quot;:602,&quot;bytes&quot;:238062,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/191655933?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75f39835-fefb-4b05-8354-1d3c3f0fa190_1024x1367.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xU6z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75f39835-fefb-4b05-8354-1d3c3f0fa190_1024x1367.jpeg 424w, https://substackcdn.com/image/fetch/$s_!xU6z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75f39835-fefb-4b05-8354-1d3c3f0fa190_1024x1367.jpeg 848w, https://substackcdn.com/image/fetch/$s_!xU6z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75f39835-fefb-4b05-8354-1d3c3f0fa190_1024x1367.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!xU6z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75f39835-fefb-4b05-8354-1d3c3f0fa190_1024x1367.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>Here&#8217;s what it looks like in an example. Two files:</p><p>The skill:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GxUe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454795e9-b5be-4ba9-8469-137db999bc09_2752x1520.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GxUe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454795e9-b5be-4ba9-8469-137db999bc09_2752x1520.png 424w, https://substackcdn.com/image/fetch/$s_!GxUe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454795e9-b5be-4ba9-8469-137db999bc09_2752x1520.png 848w, https://substackcdn.com/image/fetch/$s_!GxUe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454795e9-b5be-4ba9-8469-137db999bc09_2752x1520.png 1272w, https://substackcdn.com/image/fetch/$s_!GxUe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454795e9-b5be-4ba9-8469-137db999bc09_2752x1520.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GxUe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454795e9-b5be-4ba9-8469-137db999bc09_2752x1520.png" width="647" height="357.27197802197804" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/454795e9-b5be-4ba9-8469-137db999bc09_2752x1520.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:804,&quot;width&quot;:1456,&quot;resizeWidth&quot;:647,&quot;bytes&quot;:731534,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/191655933?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454795e9-b5be-4ba9-8469-137db999bc09_2752x1520.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GxUe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454795e9-b5be-4ba9-8469-137db999bc09_2752x1520.png 424w, https://substackcdn.com/image/fetch/$s_!GxUe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454795e9-b5be-4ba9-8469-137db999bc09_2752x1520.png 848w, https://substackcdn.com/image/fetch/$s_!GxUe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454795e9-b5be-4ba9-8469-137db999bc09_2752x1520.png 1272w, https://substackcdn.com/image/fetch/$s_!GxUe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F454795e9-b5be-4ba9-8469-137db999bc09_2752x1520.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>The agent:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CXYZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e590aa2-a1e1-49eb-b166-df068f4d6bca_2752x2000.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CXYZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e590aa2-a1e1-49eb-b166-df068f4d6bca_2752x2000.png 424w, https://substackcdn.com/image/fetch/$s_!CXYZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e590aa2-a1e1-49eb-b166-df068f4d6bca_2752x2000.png 848w, https://substackcdn.com/image/fetch/$s_!CXYZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e590aa2-a1e1-49eb-b166-df068f4d6bca_2752x2000.png 1272w, https://substackcdn.com/image/fetch/$s_!CXYZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e590aa2-a1e1-49eb-b166-df068f4d6bca_2752x2000.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CXYZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e590aa2-a1e1-49eb-b166-df068f4d6bca_2752x2000.png" width="623" height="452.7019230769231" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1e590aa2-a1e1-49eb-b166-df068f4d6bca_2752x2000.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1058,&quot;width&quot;:1456,&quot;resizeWidth&quot;:623,&quot;bytes&quot;:976674,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/191655933?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e590aa2-a1e1-49eb-b166-df068f4d6bca_2752x2000.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CXYZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e590aa2-a1e1-49eb-b166-df068f4d6bca_2752x2000.png 424w, https://substackcdn.com/image/fetch/$s_!CXYZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e590aa2-a1e1-49eb-b166-df068f4d6bca_2752x2000.png 848w, https://substackcdn.com/image/fetch/$s_!CXYZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e590aa2-a1e1-49eb-b166-df068f4d6bca_2752x2000.png 1272w, https://substackcdn.com/image/fetch/$s_!CXYZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e590aa2-a1e1-49eb-b166-df068f4d6bca_2752x2000.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>Here&#8217;s why this combo matters:</p><ul><li><p><strong>isolation: worktree</strong> : the agent works in its own isolated copy of the repo. Your working directory stays clean. You can run multiple /implement in parallel on different features.</p></li><li><p><strong>permissionMode: acceptEdits</strong> : the agent auto-approves file edits. No clicking &#8220;allow&#8221; 50 times.</p></li><li><p><strong>disable-model-invocation: true</strong> : Claude never triggers this on its own. You control when a full implementation kicks off.</p></li><li><p><strong>skills: [coding-standards, testing-patterns]</strong> : the agent gets your coding standards injected into its context at startup. Every implementation follows your conventions without you repeating them.</p></li><li><p><strong>maxTurns: 50</strong> : the agent stops if it spirals. No infinite loops burning tokens.</p></li></ul><p></p><p>The skill is the trigger with safety rails. The agent is the worker with execution config.</p><p>Now <code>/implement "add CSV export for users"</code> spawns an agent in its own isolated directory that researches, codes, tests, and commits. Autonomously.</p><p>This is the difference between using Claude Code as a chatbot and using it as an engineering system.</p><h2><strong>Stop Using Claude Code at 10%</strong></h2><p>None of these features are hidden. They&#8217;re all documented. But most developers never set them up.</p><p>Here&#8217;s my challenge: <strong>start with CLAUDE.md today.</strong> Even a 10-line file with your project&#8217;s conventions will change what Claude Code produces.</p><p>Then add one skill. Then one subagent. Layer it up.</p><p>The developers who treat Claude Code as a configurable system, not a chat window, will Craft Better Software.</p><div><hr></div><p><em>What&#8217;s your Claude Code setup? Reply and let me know. I read every response.</em></p><div><hr></div><p><a href="https://craftbettersoftware.com/p/sponsorship">Promote Yourself to 36,000+ subscribers</a> by sponsoring this newsletter.</p>]]></content:encoded></item><item><title><![CDATA[Build Your AI Agent the Right Way]]></title><description><![CDATA[Setting Up Your AI Assistant of OpenClaw Correctly for Real Work]]></description><link>https://craftbettersoftware.com/p/build-your-ai-agent-the-right-way</link><guid isPermaLink="false">https://craftbettersoftware.com/p/build-your-ai-agent-the-right-way</guid><dc:creator><![CDATA[Daniel Moka]]></dc:creator><pubDate>Mon, 02 Mar 2026 06:20:17 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a57eaa2a-d958-43ba-b2ba-39f70819827b_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>The Best Way To Build Any App (Sponsor)</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://orchidsapp.link/dm" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!S8mL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f6d297e-ca40-4202-9984-1712dc8b413b_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!S8mL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f6d297e-ca40-4202-9984-1712dc8b413b_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!S8mL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f6d297e-ca40-4202-9984-1712dc8b413b_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!S8mL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f6d297e-ca40-4202-9984-1712dc8b413b_1600x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!S8mL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f6d297e-ca40-4202-9984-1712dc8b413b_1600x900.png" width="564" height="317.25" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3f6d297e-ca40-4202-9984-1712dc8b413b_1600x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:564,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://orchidsapp.link/dm&quot;,&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_!S8mL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f6d297e-ca40-4202-9984-1712dc8b413b_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!S8mL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f6d297e-ca40-4202-9984-1712dc8b413b_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!S8mL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f6d297e-ca40-4202-9984-1712dc8b413b_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!S8mL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f6d297e-ca40-4202-9984-1712dc8b413b_1600x900.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>Treat your app like an <a href="https://orchidsapp.link/dm">Orchid</a>: A beautiful flower that needs sunlight and a bit of water &#127800;.</p><p>Most &#8220;AI builders&#8221; make you grow your app in their pot. Same stack. Same limits. Same rules. And on their databases. Orchids is different:</p><ul><li><p>It&#8217;s your build space, set up your way.</p></li><li><p>Build anything, Web app, mobile app, Slack bot, Chrome extension, Python script, whatever.</p></li><li><p>Bring your own AI subscriptions so you&#8217;re not paying twice.</p></li><li><p>Plug in the database you already use and trust.</p></li><li><p>Use any payment infra you want.</p></li></ul><p></p><p>Try <a href="https://orchidsapp.link/dm">Orchids.app</a> and build it the way you were meant to</p><p><a href="https://orchidsapp.link/dm">Get Started Today!</a></p><h1>Motivation</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8Pz8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61b687ff-420a-4d7c-980b-003af8050b91_3664x2648.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8Pz8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61b687ff-420a-4d7c-980b-003af8050b91_3664x2648.png 424w, https://substackcdn.com/image/fetch/$s_!8Pz8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61b687ff-420a-4d7c-980b-003af8050b91_3664x2648.png 848w, https://substackcdn.com/image/fetch/$s_!8Pz8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61b687ff-420a-4d7c-980b-003af8050b91_3664x2648.png 1272w, https://substackcdn.com/image/fetch/$s_!8Pz8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61b687ff-420a-4d7c-980b-003af8050b91_3664x2648.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8Pz8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61b687ff-420a-4d7c-980b-003af8050b91_3664x2648.png" width="498" height="359.81868131868134" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/61b687ff-420a-4d7c-980b-003af8050b91_3664x2648.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1052,&quot;width&quot;:1456,&quot;resizeWidth&quot;:498,&quot;bytes&quot;:414946,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/188773959?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61b687ff-420a-4d7c-980b-003af8050b91_3664x2648.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8Pz8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61b687ff-420a-4d7c-980b-003af8050b91_3664x2648.png 424w, https://substackcdn.com/image/fetch/$s_!8Pz8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61b687ff-420a-4d7c-980b-003af8050b91_3664x2648.png 848w, https://substackcdn.com/image/fetch/$s_!8Pz8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61b687ff-420a-4d7c-980b-003af8050b91_3664x2648.png 1272w, https://substackcdn.com/image/fetch/$s_!8Pz8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61b687ff-420a-4d7c-980b-003af8050b91_3664x2648.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>OpenClaw hit <strong>200k users in 1 month</strong>.</p><p>That&#8217;s insane.</p><p>For comparison: React needed <strong>more than 10 years</strong> to reach similar adoption.</p><p>This alone tells you OpenClaw isn&#8217;t &#8220;just another tool&#8221;.</p><p>It&#8217;s a new <strong>computing primitive</strong>: an AI assistant that can research markets, write code, analyze data, and orchestrate real workflows.</p><p>Yet most people don&#8217;t know how to set one up and run it properly in a secure, persistent, and deterministic way.</p><p>Here&#8217;s how I use OpenClaw in practice:</p><h2>Installing OpenClaw</h2><p>Start with the official guide and keep it simple: <a href="https://docs.openclaw.ai/start/getting-started">Getting Started</a></p><p>A <strong>Mac mini</strong> is a great always-on local setup, but a <strong>VPS works just as well</strong>. Hetzner is a solid option, though most providers are fine.</p><p>I strongly recommend running OpenClaw in <strong>Docker</strong>. It keeps instances isolated, makes scaling easier, and lets you rebuild instead of debug when something breaks.</p><p>Once it&#8217;s running, stop tuning. The real gains come from configuration, not installation.</p><h2>Identity: Fix The &#8220;Agreeable AI&#8221; Problem First</h2><p>Most LLMs are annoying. They constantly agree, apologize and tell you <em>&#8220;you&#8217;re absolutely right&#8221;</em>, even when you&#8217;re clearly wrong.</p><p>That&#8217;s not intelligence. That&#8217;s flattery.</p><p>This is why <strong>identity is the very first thing I set up</strong>. I use the identity principles shared by the creator of OpenClaw. They force your agent to:</p><ul><li><p>challenge your assumptions</p></li><li><p>push back</p></li><li><p>optimize for correctness instead of politeness</p></li></ul><p></p><p>Copy the text below and tell your OpenClaw. It will make a hell of a difference:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KQ8m!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F204b3b10-c966-496d-a9d8-0318d067da41_1194x1272.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KQ8m!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F204b3b10-c966-496d-a9d8-0318d067da41_1194x1272.png 424w, https://substackcdn.com/image/fetch/$s_!KQ8m!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F204b3b10-c966-496d-a9d8-0318d067da41_1194x1272.png 848w, https://substackcdn.com/image/fetch/$s_!KQ8m!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F204b3b10-c966-496d-a9d8-0318d067da41_1194x1272.png 1272w, https://substackcdn.com/image/fetch/$s_!KQ8m!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F204b3b10-c966-496d-a9d8-0318d067da41_1194x1272.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KQ8m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F204b3b10-c966-496d-a9d8-0318d067da41_1194x1272.png" width="520" height="553.9698492462312" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/204b3b10-c966-496d-a9d8-0318d067da41_1194x1272.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1272,&quot;width&quot;:1194,&quot;resizeWidth&quot;:520,&quot;bytes&quot;:343796,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/188773959?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F204b3b10-c966-496d-a9d8-0318d067da41_1194x1272.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KQ8m!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F204b3b10-c966-496d-a9d8-0318d067da41_1194x1272.png 424w, https://substackcdn.com/image/fetch/$s_!KQ8m!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F204b3b10-c966-496d-a9d8-0318d067da41_1194x1272.png 848w, https://substackcdn.com/image/fetch/$s_!KQ8m!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F204b3b10-c966-496d-a9d8-0318d067da41_1194x1272.png 1272w, https://substackcdn.com/image/fetch/$s_!KQ8m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F204b3b10-c966-496d-a9d8-0318d067da41_1194x1272.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><h2>Security: Treat It Like Production Code</h2><p>OpenClaw moves fast. There are more than 4k issues and 5k PRs, and a lot of contributions are AI-generated. That&#8217;s normal at this speed, but it increases risk.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aNAB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75103b05-756f-44b5-9746-f565f269abbf_1172x502.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aNAB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75103b05-756f-44b5-9746-f565f269abbf_1172x502.png 424w, https://substackcdn.com/image/fetch/$s_!aNAB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75103b05-756f-44b5-9746-f565f269abbf_1172x502.png 848w, https://substackcdn.com/image/fetch/$s_!aNAB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75103b05-756f-44b5-9746-f565f269abbf_1172x502.png 1272w, https://substackcdn.com/image/fetch/$s_!aNAB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75103b05-756f-44b5-9746-f565f269abbf_1172x502.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aNAB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75103b05-756f-44b5-9746-f565f269abbf_1172x502.png" width="1172" height="502" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/75103b05-756f-44b5-9746-f565f269abbf_1172x502.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:502,&quot;width&quot;:1172,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:72768,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/188773959?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75103b05-756f-44b5-9746-f565f269abbf_1172x502.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!aNAB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75103b05-756f-44b5-9746-f565f269abbf_1172x502.png 424w, https://substackcdn.com/image/fetch/$s_!aNAB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75103b05-756f-44b5-9746-f565f269abbf_1172x502.png 848w, https://substackcdn.com/image/fetch/$s_!aNAB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75103b05-756f-44b5-9746-f565f269abbf_1172x502.png 1272w, https://substackcdn.com/image/fetch/$s_!aNAB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75103b05-756f-44b5-9746-f565f269abbf_1172x502.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>This doesn&#8217;t mean &#8220;don&#8217;t use OpenClaw&#8221;. It means <strong>wrap it in hard boundaries</strong>.</p><p>Here is my ultimate OpenClaw security checklist:</p><ul><li><p><strong>Don&#8217;t make the gateway public</strong></p></li><li><p><strong>Pairing is required </strong>to avoid anonym access</p></li><li><p><strong>Use scoped filesystem (</strong>no root access<strong>)</strong></p></li><li><p>Set up a <strong>private VPN with Tailscale</strong> for secure access</p></li><li><p>Run command &#8220;<strong>openclaw security audit</strong>&#8220; regularly</p></li></ul><p></p><p>&#128161;Bonus tip: Ask your bot <strong>to daily audit its own security.</strong> It will set up a cron job checking for configuration drift and reports it. Self-auditing agents catch mistakes <strong>before attackers do</strong>.</p><h2>Memory Persistence with ClawVault</h2><p>By default, OpenClaw stores memory as markdown: MEMORY.md for long-term context, daily logs for session notes. It also vector-searches these files and prompts the agent to save important context before conversations get compacted.</p><p>Out of the box, this already works, but only enough to get started.</p><p>The key discipline I follow: <strong>if it&#8217;s not written down, it doesn&#8217;t exist.</strong> </p><p>To achieve it, I use <strong>ClawVault</strong>, a local memory system that adds:</p><ul><li><p><strong>Hybrid search</strong> (keyword + semantic) over all stored memories</p></li><li><p><strong>Typed memory buckets</strong> (decisions, preferences, lessons, facts)</p></li><li><p><strong>A wake/sleep lifecycle</strong> where each session hands off context to the next, so the agent never starts blind</p></li><li><p><strong>Periodic reflection passes</strong> that turn raw notes into durable insight</p></li></ul><p></p><p>Result: memory compounds instead of decaying.</p><h2>Backup: Assume Failure, Don&#8217;t Hope For Stability</h2><p>My <strong>OpenClaw backs itself up to GitHub every 2 hours</strong>. Server dies? Spin up a new one, full memory restored. Want to migrate to a stronger machine? Spin up a new server, copy the memory, fully restored. Generated junk in memory along the way? Roll back to a clean snapshot. </p><p>Here is how it works:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SB_D!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f7122d1-4608-480d-b51a-bfb7aa2693a9_1024x559.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SB_D!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f7122d1-4608-480d-b51a-bfb7aa2693a9_1024x559.jpeg 424w, https://substackcdn.com/image/fetch/$s_!SB_D!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f7122d1-4608-480d-b51a-bfb7aa2693a9_1024x559.jpeg 848w, https://substackcdn.com/image/fetch/$s_!SB_D!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f7122d1-4608-480d-b51a-bfb7aa2693a9_1024x559.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!SB_D!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f7122d1-4608-480d-b51a-bfb7aa2693a9_1024x559.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SB_D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f7122d1-4608-480d-b51a-bfb7aa2693a9_1024x559.jpeg" width="1024" height="559" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4f7122d1-4608-480d-b51a-bfb7aa2693a9_1024x559.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:559,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:97046,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/188773959?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f7122d1-4608-480d-b51a-bfb7aa2693a9_1024x559.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SB_D!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f7122d1-4608-480d-b51a-bfb7aa2693a9_1024x559.jpeg 424w, https://substackcdn.com/image/fetch/$s_!SB_D!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f7122d1-4608-480d-b51a-bfb7aa2693a9_1024x559.jpeg 848w, https://substackcdn.com/image/fetch/$s_!SB_D!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f7122d1-4608-480d-b51a-bfb7aa2693a9_1024x559.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!SB_D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f7122d1-4608-480d-b51a-bfb7aa2693a9_1024x559.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>How to do it? It&#8217;s easy! Just create a GitHub repo and tell this to your OpenClaw instance:</p><div class="pullquote"><p>I want to setup a cronjob every 2 hours where you back everything important your GitHub bakup repo &lt;link-to-repo&gt;. This way if anything ever happens to our server or i want to move you to different place we won&#8217;t have to start from 0.</p></div><p>Do this from day one!</p><h2>Models: Specialisation Beats Loyalty</h2><p>Not all models are good at the same things.</p><p>I use <strong>Claude</strong> <strong>Opus 4.6</strong> as my daily driver because it&#8217;s strong at reasoning, tool use, and coding.</p><p>For specialised work, I let OpenClaw spawn sub-agents using other models like <strong>Gemini 3.1 Pro or Kimi k2.5.</strong></p><p>To reduce costs, and if you have a powerful server, you can run LLMs locally, for example <strong>Qwen</strong> or other models via <strong>Ollama</strong>.</p><p>The key idea is simple: use the <strong>right brain for the right job</strong>.</p><h2>Skills: Where OpenClaw Becomes Leverage</h2><p>OpenClaw skills are <strong>markdown files that contain instructional code to help agents perform specific tasks</strong>. Most skills can be found at ClawHub, and I highly recommend you to create skills for your own contexts too.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CtPf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa164c8d-ad95-483d-bb9d-ee0f36543c94_2502x1246.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CtPf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa164c8d-ad95-483d-bb9d-ee0f36543c94_2502x1246.png 424w, https://substackcdn.com/image/fetch/$s_!CtPf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa164c8d-ad95-483d-bb9d-ee0f36543c94_2502x1246.png 848w, https://substackcdn.com/image/fetch/$s_!CtPf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa164c8d-ad95-483d-bb9d-ee0f36543c94_2502x1246.png 1272w, https://substackcdn.com/image/fetch/$s_!CtPf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa164c8d-ad95-483d-bb9d-ee0f36543c94_2502x1246.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CtPf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa164c8d-ad95-483d-bb9d-ee0f36543c94_2502x1246.png" width="1456" height="725" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fa164c8d-ad95-483d-bb9d-ee0f36543c94_2502x1246.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:725,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:642559,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/188773959?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa164c8d-ad95-483d-bb9d-ee0f36543c94_2502x1246.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CtPf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa164c8d-ad95-483d-bb9d-ee0f36543c94_2502x1246.png 424w, https://substackcdn.com/image/fetch/$s_!CtPf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa164c8d-ad95-483d-bb9d-ee0f36543c94_2502x1246.png 848w, https://substackcdn.com/image/fetch/$s_!CtPf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa164c8d-ad95-483d-bb9d-ee0f36543c94_2502x1246.png 1272w, https://substackcdn.com/image/fetch/$s_!CtPf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa164c8d-ad95-483d-bb9d-ee0f36543c94_2502x1246.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>Here are one of the most useful skills I use daily:</p><ul><li><p><strong>GitHub skill</strong> &#8211; repos, issues, PRs, code search from OpenClaw</p></li><li><p><strong>Exa Web Search</strong> &#8211; structured web / code search</p></li><li><p><strong>Playwright Scraper</strong> &#8211; scraping complex sites</p></li><li><p><strong>Playwright MCP</strong> &#8211; full browser automation</p></li><li><p><strong>SuperDesign</strong> - full high quality web app design</p></li><li><p><strong>YouTube Watcher</strong> - Get full transcription from youtube video</p></li><li><p><strong>Skill Creator</strong> - to make custom skills for your specific tasks</p></li></ul><p></p><p>Skills are what turn OpenClaw from a chatbot into an smart AI assistant.</p><h1>Conclusion</h1><p>OpenClaw isn&#8217;t magic. But if you define identity, enforce security, structure memory, automate backups, choose models intentionally and invest in skills, then it becomes something far more interesting than an AI tool. </p><p>It becomes a system, a <strong>24/7 working, never-tired, always-motivated</strong> AI assistant.</p><p>2026 is the year of AI agents and all great developers already leveraging it to Craft Better Software. </p>]]></content:encoded></item><item><title><![CDATA[The Vibe Coding Stack for 2026]]></title><description><![CDATA[How Top Developers Supervise AI to Craft Better Software]]></description><link>https://craftbettersoftware.com/p/the-vibe-coding-stack-for-2026</link><guid isPermaLink="false">https://craftbettersoftware.com/p/the-vibe-coding-stack-for-2026</guid><dc:creator><![CDATA[Daniel Moka]]></dc:creator><pubDate>Sat, 13 Dec 2025 06:01:36 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6aaddb7b-81ae-4eb3-aa56-73659779759a_1456x1048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>Professional Headshots In Seconds (sponsor)</h1><p><strong>Turn any selfie into a professional photoshoot, in seconds. </strong>Upload your photos, choose your styles, and receive dozens of high-quality headshots.</p><p>Perfect for CVs, LinkedIn, business portfolios, and all your social media profiles.</p><p><a href="https://www.shotlyai.com/">Subscribe now</a> and <strong>get 12 FREE Christmas-style photos</strong>, just in time for the holidays.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.shotlyai.com/&quot;,&quot;text&quot;:&quot;Start Now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.shotlyai.com/"><span>Start Now</span></a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.shotlyai.com/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9m7M!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd6e8cea-b94c-4975-97e7-5d54483099ed_1155x711.png 424w, https://substackcdn.com/image/fetch/$s_!9m7M!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd6e8cea-b94c-4975-97e7-5d54483099ed_1155x711.png 848w, https://substackcdn.com/image/fetch/$s_!9m7M!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd6e8cea-b94c-4975-97e7-5d54483099ed_1155x711.png 1272w, https://substackcdn.com/image/fetch/$s_!9m7M!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd6e8cea-b94c-4975-97e7-5d54483099ed_1155x711.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9m7M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd6e8cea-b94c-4975-97e7-5d54483099ed_1155x711.png" width="632" height="389.04935064935063" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cd6e8cea-b94c-4975-97e7-5d54483099ed_1155x711.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:711,&quot;width&quot;:1155,&quot;resizeWidth&quot;:632,&quot;bytes&quot;:523598,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.shotlyai.com/&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/178785780?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd6e8cea-b94c-4975-97e7-5d54483099ed_1155x711.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9m7M!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd6e8cea-b94c-4975-97e7-5d54483099ed_1155x711.png 424w, https://substackcdn.com/image/fetch/$s_!9m7M!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd6e8cea-b94c-4975-97e7-5d54483099ed_1155x711.png 848w, https://substackcdn.com/image/fetch/$s_!9m7M!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd6e8cea-b94c-4975-97e7-5d54483099ed_1155x711.png 1272w, https://substackcdn.com/image/fetch/$s_!9m7M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd6e8cea-b94c-4975-97e7-5d54483099ed_1155x711.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><figcaption class="image-caption"><a href="https://www.shotlyai.com/">Start For FREE</a></figcaption></figure></div><h1>Motivation</h1><p><strong>Coding as we knew it is dead. </strong>Two years ago, AI helped me name variables. Today, it writes <strong>90% of my code</strong>.</p><p>If you&#8217;re still against AI at this point, you&#8217;re falling behind.</p><p>Top developers don&#8217;t use AI as fancy autocomplete. They use <strong>agents, clear specs, and modern models</strong> to solve real problems fast.</p><p>That mindset shift is already non-negotiable.</p><p>In this issue, I&#8217;ll show you the <strong>Vibe Coding Stack for 2026</strong>. Practical tools. Clear use cases. Pro-level tactics.</p><p>And at the end, I&#8217;ll show you one <strong>bonus tool</strong> that cuts deployments and CI effort to <em>almost zero</em>.</p><p>Let&#8217;s start.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3Vka!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd44928bd-6ee6-4e54-a5b3-f933046c1296_1080x957.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3Vka!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd44928bd-6ee6-4e54-a5b3-f933046c1296_1080x957.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3Vka!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd44928bd-6ee6-4e54-a5b3-f933046c1296_1080x957.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3Vka!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd44928bd-6ee6-4e54-a5b3-f933046c1296_1080x957.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3Vka!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd44928bd-6ee6-4e54-a5b3-f933046c1296_1080x957.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3Vka!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd44928bd-6ee6-4e54-a5b3-f933046c1296_1080x957.jpeg" width="464" height="411.15555555555557" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d44928bd-6ee6-4e54-a5b3-f933046c1296_1080x957.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:957,&quot;width&quot;:1080,&quot;resizeWidth&quot;:464,&quot;bytes&quot;:691543,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/178785780?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd44928bd-6ee6-4e54-a5b3-f933046c1296_1080x957.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3Vka!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd44928bd-6ee6-4e54-a5b3-f933046c1296_1080x957.jpeg 424w, https://substackcdn.com/image/fetch/$s_!3Vka!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd44928bd-6ee6-4e54-a5b3-f933046c1296_1080x957.jpeg 848w, https://substackcdn.com/image/fetch/$s_!3Vka!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd44928bd-6ee6-4e54-a5b3-f933046c1296_1080x957.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!3Vka!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd44928bd-6ee6-4e54-a5b3-f933046c1296_1080x957.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><h1>Claude Code</h1><p>I tried Copilot, Cursor, Windsurf, Tabnine, Codeium, everything. Claude Code is the one that makes me feel like I actually have an engineering partner.</p><h3>6 Ways to Get the Most Out of Claude</h3><h4><strong>1. Use the VS Code extension</strong></h4><p>Install the Claude Code extension and open separate windows for different parts of your project. It gives Claude direct context from the actual code you&#8217;re editing.</p><h4><strong>2. Create a </strong><code>Claude.md</code><strong> file</strong></h4><p>This acts as Claude&#8217;s onboarding sheet for AI. Include project goal, tech stack, repo layout, conventions &amp; rules like TDD, naming or commit style.</p><p>By using a Claude.md file, you will stop repeating instructions.</p><p>&#128161; Pro tip: Consider <strong>using nested Claude.md files</strong> so Claude can navigate your codebase and pull in richer context as it works.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GKBk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469a830-ec0e-4d2a-8e3e-8afbe6d8307f_1412x434.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GKBk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469a830-ec0e-4d2a-8e3e-8afbe6d8307f_1412x434.png 424w, https://substackcdn.com/image/fetch/$s_!GKBk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469a830-ec0e-4d2a-8e3e-8afbe6d8307f_1412x434.png 848w, https://substackcdn.com/image/fetch/$s_!GKBk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469a830-ec0e-4d2a-8e3e-8afbe6d8307f_1412x434.png 1272w, https://substackcdn.com/image/fetch/$s_!GKBk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469a830-ec0e-4d2a-8e3e-8afbe6d8307f_1412x434.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GKBk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469a830-ec0e-4d2a-8e3e-8afbe6d8307f_1412x434.png" width="1412" height="434" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e469a830-ec0e-4d2a-8e3e-8afbe6d8307f_1412x434.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:434,&quot;width&quot;:1412,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;: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_!GKBk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469a830-ec0e-4d2a-8e3e-8afbe6d8307f_1412x434.png 424w, https://substackcdn.com/image/fetch/$s_!GKBk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469a830-ec0e-4d2a-8e3e-8afbe6d8307f_1412x434.png 848w, https://substackcdn.com/image/fetch/$s_!GKBk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469a830-ec0e-4d2a-8e3e-8afbe6d8307f_1412x434.png 1272w, https://substackcdn.com/image/fetch/$s_!GKBk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469a830-ec0e-4d2a-8e3e-8afbe6d8307f_1412x434.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><h4><strong>3. Use the flow: Explore &#8594; Plan &#8594; Code</strong></h4><p>Instead of saying this to AI:</p><blockquote><p>&#8220;Implement X&#8221;</p></blockquote><p>Say this:</p><blockquote><p>&#8220;Explore existing solution &#8594; make a plan &#8594; implement.&#8221;</p></blockquote><p>This leads to fewer mistakes, cleaner code and better architecture decisions. AI starts behaving like a senior engineer thinking before typing.</p><p><strong>You should also switch on Plan Mode (Shift+tab) before starting a bigger task.</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_!Gqy-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b5c5d9-af3c-4d40-afea-73781af71483_1142x954.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Gqy-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b5c5d9-af3c-4d40-afea-73781af71483_1142x954.png 424w, https://substackcdn.com/image/fetch/$s_!Gqy-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b5c5d9-af3c-4d40-afea-73781af71483_1142x954.png 848w, https://substackcdn.com/image/fetch/$s_!Gqy-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b5c5d9-af3c-4d40-afea-73781af71483_1142x954.png 1272w, https://substackcdn.com/image/fetch/$s_!Gqy-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b5c5d9-af3c-4d40-afea-73781af71483_1142x954.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Gqy-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b5c5d9-af3c-4d40-afea-73781af71483_1142x954.png" width="562" height="469.4816112084063" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b9b5c5d9-af3c-4d40-afea-73781af71483_1142x954.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:954,&quot;width&quot;:1142,&quot;resizeWidth&quot;:562,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!Gqy-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b5c5d9-af3c-4d40-afea-73781af71483_1142x954.png 424w, https://substackcdn.com/image/fetch/$s_!Gqy-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b5c5d9-af3c-4d40-afea-73781af71483_1142x954.png 848w, https://substackcdn.com/image/fetch/$s_!Gqy-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b5c5d9-af3c-4d40-afea-73781af71483_1142x954.png 1272w, https://substackcdn.com/image/fetch/$s_!Gqy-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b5c5d9-af3c-4d40-afea-73781af71483_1142x954.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><h4>4. Use <code>/clear</code> often</h4><p>Context is Claude&#8217;s strength, but also its weakness. Over time, conversations drift. Details blur. Costs go up.</p><p>The &#8220;/clear&#8221; command acts as a reset button, refreshes context, reduces hallucinations and <strong>saves a big amount of tokens.</strong></p><h4>5. Build custom slash commands</h4><p>Store reusable workflows inside <code>.claude/commands/</code>.</p><p>Examples:</p><ul><li><p>&#8220;Generate tests for this module&#8221;</p></li><li><p>&#8220;Analyze logs and summarize errors&#8221;</p></li><li><p>&#8220;Rewrite this according to our style guide&#8221;</p></li></ul><p></p><p>You turn repeated tasks into one-word triggers. That&#8217;s how real leverage compounds.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!x9lc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74748df7-38b5-4182-9488-9cd2fe3bf549_1608x990.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!x9lc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74748df7-38b5-4182-9488-9cd2fe3bf549_1608x990.png 424w, https://substackcdn.com/image/fetch/$s_!x9lc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74748df7-38b5-4182-9488-9cd2fe3bf549_1608x990.png 848w, https://substackcdn.com/image/fetch/$s_!x9lc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74748df7-38b5-4182-9488-9cd2fe3bf549_1608x990.png 1272w, https://substackcdn.com/image/fetch/$s_!x9lc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74748df7-38b5-4182-9488-9cd2fe3bf549_1608x990.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!x9lc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74748df7-38b5-4182-9488-9cd2fe3bf549_1608x990.png" width="1456" height="896" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/74748df7-38b5-4182-9488-9cd2fe3bf549_1608x990.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:896,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;: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_!x9lc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74748df7-38b5-4182-9488-9cd2fe3bf549_1608x990.png 424w, https://substackcdn.com/image/fetch/$s_!x9lc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74748df7-38b5-4182-9488-9cd2fe3bf549_1608x990.png 848w, https://substackcdn.com/image/fetch/$s_!x9lc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74748df7-38b5-4182-9488-9cd2fe3bf549_1608x990.png 1272w, https://substackcdn.com/image/fetch/$s_!x9lc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74748df7-38b5-4182-9488-9cd2fe3bf549_1608x990.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><h3>6. Give Claude screenshots</h3><p><strong>A picture says more than 1000 words. </strong>Paste UI bugs, logs, diagrams and console errors. Claude interprets visuals instantly.</p><p>Less explaining. Better insight. Faster fixes.</p><h1>Cursor</h1><p>I use Claude and Cursor side-by-side, but for different purposes.</p><p>Claude Code is perfect when <strong>I need a one-shot solution</strong>: spinning up multiple terminal sessions, running commands in parallel, or analyzing a full codebase quickly.</p><p>Cursor is the opposite, it&#8217;s <strong>built for working in small, iterative increments</strong>. It helps you refine code gradually, one change at a time.</p><p>In 2025, developers don&#8217;t get paid for writing code anymore. AI writes code. <strong>Your real job now is reviewing, improving, and ensuring correctness.</strong></p><p>Cursor is the best review-centric AI tool available today.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!79Db!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ea20bd2-125f-4e76-8555-b24b7b5d5019_1920x1080.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!79Db!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ea20bd2-125f-4e76-8555-b24b7b5d5019_1920x1080.webp 424w, https://substackcdn.com/image/fetch/$s_!79Db!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ea20bd2-125f-4e76-8555-b24b7b5d5019_1920x1080.webp 848w, https://substackcdn.com/image/fetch/$s_!79Db!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ea20bd2-125f-4e76-8555-b24b7b5d5019_1920x1080.webp 1272w, https://substackcdn.com/image/fetch/$s_!79Db!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ea20bd2-125f-4e76-8555-b24b7b5d5019_1920x1080.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!79Db!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ea20bd2-125f-4e76-8555-b24b7b5d5019_1920x1080.webp" width="538" height="302.625" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8ea20bd2-125f-4e76-8555-b24b7b5d5019_1920x1080.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:538,&quot;bytes&quot;:138466,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/178785780?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ea20bd2-125f-4e76-8555-b24b7b5d5019_1920x1080.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!79Db!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ea20bd2-125f-4e76-8555-b24b7b5d5019_1920x1080.webp 424w, https://substackcdn.com/image/fetch/$s_!79Db!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ea20bd2-125f-4e76-8555-b24b7b5d5019_1920x1080.webp 848w, https://substackcdn.com/image/fetch/$s_!79Db!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ea20bd2-125f-4e76-8555-b24b7b5d5019_1920x1080.webp 1272w, https://substackcdn.com/image/fetch/$s_!79Db!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8ea20bd2-125f-4e76-8555-b24b7b5d5019_1920x1080.webp 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><h3>Tips to Get Maximum Leverage</h3><h4><strong>Configure rules</strong></h4><p>Rules provide system-level instructions to Cursor agents. They are persistent context, preferences, or workflows for your projects.</p><p>You can easily create them by <strong>using &#8220;New Cursor Rule&#8220; command.</strong> </p><p>Optionally, you can also nest them. Nested rules automatically attach when files in their directory are referenced.</p><p>Example:</p><pre><code><code>---
alwaysApply: true
---

# Function Design Rules
- Prefer pure function with no side effects
- Use intention-revealing names relating to the business domain  
- Limit the number of params in functions
- Reduce nesting with a return early
- Avoid boolean flag parameters
- Use comments sparingly

@productService.ts</code></code></pre><p>Best practices to write great rules:</p><ul><li><p>Keep rules under 500 lines</p></li><li><p>For each rule, configure rule type about when to apply</p></li><li><p><strong>Provide concrete examples or referenced files</strong></p></li><li><p>Avoid vague guidance. Write rules like clear internal docs</p></li><li><p>Reuse rules when repeating prompts in chat</p></li></ul><p></p><h4><strong>Use .cursorignore + cursorIndexing</strong></h4><p>What you hide matters more than what you show to AI.</p><ul><li><p>generated code</p></li><li><p>node_modules</p></li><li><p>API clients</p></li><li><p>build artifacts</p></li></ul><p></p><p>Why? Because Cursor <em>reads everything</em> and tries to be consistent with everything.</p><p>The smaller the context, the better its judgment.</p><h4><strong>Terminal AI Is Insanely Good</strong></h4><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5yDl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F022252b6-2144-492b-a321-58dece21a47e_1860x321.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5yDl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F022252b6-2144-492b-a321-58dece21a47e_1860x321.png 424w, https://substackcdn.com/image/fetch/$s_!5yDl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F022252b6-2144-492b-a321-58dece21a47e_1860x321.png 848w, https://substackcdn.com/image/fetch/$s_!5yDl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F022252b6-2144-492b-a321-58dece21a47e_1860x321.png 1272w, https://substackcdn.com/image/fetch/$s_!5yDl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F022252b6-2144-492b-a321-58dece21a47e_1860x321.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5yDl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F022252b6-2144-492b-a321-58dece21a47e_1860x321.png" width="1456" height="251" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/022252b6-2144-492b-a321-58dece21a47e_1860x321.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:251,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:85406,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/178785780?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F022252b6-2144-492b-a321-58dece21a47e_1860x321.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5yDl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F022252b6-2144-492b-a321-58dece21a47e_1860x321.png 424w, https://substackcdn.com/image/fetch/$s_!5yDl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F022252b6-2144-492b-a321-58dece21a47e_1860x321.png 848w, https://substackcdn.com/image/fetch/$s_!5yDl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F022252b6-2144-492b-a321-58dece21a47e_1860x321.png 1272w, https://substackcdn.com/image/fetch/$s_!5yDl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F022252b6-2144-492b-a321-58dece21a47e_1860x321.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>You <strong>don&#8217;t need to memorize</strong> complex CLI and Git commands anymore. The built-in terminal AI is my favorite.</p><p>You can ask AI for CLI commands like</p><ul><li><p>List my five most recent git branches</p></li><li><p>Show me which processes are using port 3000</p></li><li><p>Check logs of the most recently started docker container</p></li><li><p>Git stash only the staged files</p></li></ul><p></p><p>It feels like magic. Try it!</p><h4><strong>Command-K for surgical edits</strong></h4><p>This is Cursor&#8217;s secret weapon. Use it when you know <strong>exactly what needs to change</strong>.</p><p>How to use:</p><ol><li><p>Select the code snippet</p></li><li><p>Press <strong>Command + K</strong></p></li><li><p>Tell Cursor what to change</p></li></ol><p></p><p>Example:</p><blockquote><p>&#8220;Make all fonts smaller except the main paragraph.&#8221;</p></blockquote><p>No searching. No grepping. No scrolling through 50 files.</p><p>Just one precise modification.</p><h4>BugBot</h4><p>Bugbot is an LLM-based review tool, to review pull requests and identify bugs, security issues, and code quality problems. So far it helped me to find missed null checks, detect wrong iteration boundaries or fix wrongly handled async code.</p><p>BugBot is powerful, but for real code review, I use something even better.</p><p>Let&#8217;s jump to that next.</p><h1>CodeRabbit</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://coderabbit.link/danielmokahttps://coderabbit.link/danielmoka" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!khWo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89d2a85f-a7b5-4d6c-abae-6cf9c329d86b_1640x828.png 424w, https://substackcdn.com/image/fetch/$s_!khWo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89d2a85f-a7b5-4d6c-abae-6cf9c329d86b_1640x828.png 848w, https://substackcdn.com/image/fetch/$s_!khWo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89d2a85f-a7b5-4d6c-abae-6cf9c329d86b_1640x828.png 1272w, https://substackcdn.com/image/fetch/$s_!khWo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89d2a85f-a7b5-4d6c-abae-6cf9c329d86b_1640x828.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!khWo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89d2a85f-a7b5-4d6c-abae-6cf9c329d86b_1640x828.png" width="600" height="302.88461538461536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/89d2a85f-a7b5-4d6c-abae-6cf9c329d86b_1640x828.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:735,&quot;width&quot;:1456,&quot;resizeWidth&quot;:600,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;https://coderabbit.link/danny&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://coderabbit.link/danielmokahttps://coderabbit.link/danielmoka&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="https://coderabbit.link/danny" title="https://coderabbit.link/danny" srcset="https://substackcdn.com/image/fetch/$s_!khWo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89d2a85f-a7b5-4d6c-abae-6cf9c329d86b_1640x828.png 424w, https://substackcdn.com/image/fetch/$s_!khWo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89d2a85f-a7b5-4d6c-abae-6cf9c329d86b_1640x828.png 848w, https://substackcdn.com/image/fetch/$s_!khWo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89d2a85f-a7b5-4d6c-abae-6cf9c329d86b_1640x828.png 1272w, https://substackcdn.com/image/fetch/$s_!khWo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89d2a85f-a7b5-4d6c-abae-6cf9c329d86b_1640x828.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>Everyone is building the next AI review tool. Most are sloppy. But my absolute favourite is CodeRabbit.</p><p>Tips to get the most out of <a href="https://coderabbit.link/danielmoka">CodeRabbit</a>:</p><ul><li><p>Talk to CodeRabbit via GitHub PRs</p></li><li><p>Install VS Code extension for quick one-click fixes</p></li><li><p>Use the CLI version to make it work with Claude Code</p></li><li><p>Use MCP servers to connect to Figma, Confluence and internal wikis</p></li><li><p>Create custom review instructions</p></li></ul><p></p><p>And the cool thing is that the basic review features of CodeRabbit are free to use.</p><p><a href="https://coderabbit.link/danielmoka">Start using CodeRabbit for FREE</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://coderabbit.link/danielmokahttps://coderabbit.link/danielmoka" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mVbo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe52c0f24-9edd-41c3-8e39-80f27770b156_1166x572.png 424w, https://substackcdn.com/image/fetch/$s_!mVbo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe52c0f24-9edd-41c3-8e39-80f27770b156_1166x572.png 848w, https://substackcdn.com/image/fetch/$s_!mVbo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe52c0f24-9edd-41c3-8e39-80f27770b156_1166x572.png 1272w, https://substackcdn.com/image/fetch/$s_!mVbo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe52c0f24-9edd-41c3-8e39-80f27770b156_1166x572.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mVbo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe52c0f24-9edd-41c3-8e39-80f27770b156_1166x572.png" width="1166" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e52c0f24-9edd-41c3-8e39-80f27770b156_1166x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:1166,&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://coderabbit.link/danielmokahttps://coderabbit.link/danielmoka&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_!mVbo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe52c0f24-9edd-41c3-8e39-80f27770b156_1166x572.png 424w, https://substackcdn.com/image/fetch/$s_!mVbo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe52c0f24-9edd-41c3-8e39-80f27770b156_1166x572.png 848w, https://substackcdn.com/image/fetch/$s_!mVbo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe52c0f24-9edd-41c3-8e39-80f27770b156_1166x572.png 1272w, https://substackcdn.com/image/fetch/$s_!mVbo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe52c0f24-9edd-41c3-8e39-80f27770b156_1166x572.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><h1>The Ultimate Vibe Coding Flow</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EAer!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b860d7a-3eba-4269-b8ae-19e5f3b298b0_1080x810.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EAer!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b860d7a-3eba-4269-b8ae-19e5f3b298b0_1080x810.jpeg 424w, https://substackcdn.com/image/fetch/$s_!EAer!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b860d7a-3eba-4269-b8ae-19e5f3b298b0_1080x810.jpeg 848w, https://substackcdn.com/image/fetch/$s_!EAer!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b860d7a-3eba-4269-b8ae-19e5f3b298b0_1080x810.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!EAer!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b860d7a-3eba-4269-b8ae-19e5f3b298b0_1080x810.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EAer!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b860d7a-3eba-4269-b8ae-19e5f3b298b0_1080x810.jpeg" width="510" height="382.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9b860d7a-3eba-4269-b8ae-19e5f3b298b0_1080x810.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:810,&quot;width&quot;:1080,&quot;resizeWidth&quot;:510,&quot;bytes&quot;:513186,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/178785780?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b860d7a-3eba-4269-b8ae-19e5f3b298b0_1080x810.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EAer!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b860d7a-3eba-4269-b8ae-19e5f3b298b0_1080x810.jpeg 424w, https://substackcdn.com/image/fetch/$s_!EAer!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b860d7a-3eba-4269-b8ae-19e5f3b298b0_1080x810.jpeg 848w, https://substackcdn.com/image/fetch/$s_!EAer!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b860d7a-3eba-4269-b8ae-19e5f3b298b0_1080x810.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!EAer!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b860d7a-3eba-4269-b8ae-19e5f3b298b0_1080x810.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>AI won&#8217;t work. Unless you know how to use it.</p><p>This is how we vibe code in 2025 in nine steps:</p><ol><li><p>Draft a prompt</p></li><li><p>Let Claude Code refine it with context</p></li><li><p>Feed the new prompt back in</p></li><li><p>Say: &#8220;Analyze. Make a plan. Then implement.&#8221;</p></li><li><p>Review with <a href="https://coderabbit.link/danielmoka">CodeRabbit</a> CLI</p></li><li><p>Apply fixes provided by <a href="https://coderabbit.link/danielmoka">CodeRabbit</a></p></li><li><p>Review code yourself</p></li><li><p>Test the hell out of it</p></li><li><p>Ship. Iterate.</p></li></ol><p></p><p><strong>AI won&#8217;t replace software engineers.</strong></p><p><strong>But an engineer using AI will.</strong></p><h1><strong>The Vibe Coding Tech Stack</strong></h1><p>I use these AI-powered tools across all languages (f.e.: Rust, C#, JS/TS, Bash), but my preferred tech stack is the following:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ALiK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55c39e28-eedd-4e7d-8a09-1cb41dda911f_1200x1010.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ALiK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55c39e28-eedd-4e7d-8a09-1cb41dda911f_1200x1010.png 424w, https://substackcdn.com/image/fetch/$s_!ALiK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55c39e28-eedd-4e7d-8a09-1cb41dda911f_1200x1010.png 848w, https://substackcdn.com/image/fetch/$s_!ALiK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55c39e28-eedd-4e7d-8a09-1cb41dda911f_1200x1010.png 1272w, https://substackcdn.com/image/fetch/$s_!ALiK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55c39e28-eedd-4e7d-8a09-1cb41dda911f_1200x1010.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ALiK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55c39e28-eedd-4e7d-8a09-1cb41dda911f_1200x1010.png" width="1200" height="1010" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/55c39e28-eedd-4e7d-8a09-1cb41dda911f_1200x1010.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1010,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:95678,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/178785780?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55c39e28-eedd-4e7d-8a09-1cb41dda911f_1200x1010.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ALiK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55c39e28-eedd-4e7d-8a09-1cb41dda911f_1200x1010.png 424w, https://substackcdn.com/image/fetch/$s_!ALiK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55c39e28-eedd-4e7d-8a09-1cb41dda911f_1200x1010.png 848w, https://substackcdn.com/image/fetch/$s_!ALiK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55c39e28-eedd-4e7d-8a09-1cb41dda911f_1200x1010.png 1272w, https://substackcdn.com/image/fetch/$s_!ALiK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55c39e28-eedd-4e7d-8a09-1cb41dda911f_1200x1010.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>AI performs best on this stack, because it&#8217;s trained on it more than anything else.</p><p>One prompt can add a full feature: UI &#8594; backend &#8594; DB &#8594; tests.</p><p>Deployment takes <strong>under 1 minute</strong> with Vercel. Environments are <strong>one-click</strong>. CI is <strong>automatic</strong>, no setup, no YAML hell.</p><p>And Vercel gives you <strong>built-in visual reviews</strong>, so every UI change can be reviewed before shipping.</p><p>This stack removes 90% of traditional DevOps.</p><p>You focus on shipping. AI handles the rest.</p><h1>Conclusion</h1><p>In 2025, the work of writing code is automated. The real advantage is knowing how to review, refine, and guide code creation.</p><p>Claude, Cursor, and CodeRabbit are bleeding-edge AI tools that turn you from an &#8220;AI user&#8221; into an &#8220;AI supervisor.&#8221;</p><p>Once you master that shift, y<strong>ou move from writing code to shaping systems, and Craft Better Software.</strong></p>]]></content:encoded></item><item><title><![CDATA[Code Review with AI: Best Practices]]></title><description><![CDATA[Practical tips to use the best AI-powered code review assistant]]></description><link>https://craftbettersoftware.com/p/code-review-with-ai-best-practices</link><guid isPermaLink="false">https://craftbettersoftware.com/p/code-review-with-ai-best-practices</guid><dc:creator><![CDATA[Daniel Moka]]></dc:creator><pubDate>Sat, 11 Oct 2025 05:01:22 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/0469ce38-a264-4898-9eb2-6deb82acdd80_1456x1048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>Motivation</h1><p>Code reviews are essential. But they&#8217;re also slow, inconsistent, and time-consuming.</p><p>That&#8217;s why I use CodeRabbit: <strong>an AI-powered assistant that reviews your pull requests automatically.</strong> It leaves meaningful comments like a real teammate would, catching common issues and improving overall software quality.</p><p>But like any tool, <strong>its impact depends on </strong><em><strong>how</strong></em><strong> you use it.</strong></p><p>Here are the best tips to turn CodeRabbit into a real productivity booster for your team:</p><h1>How CodeRabbit works</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://coderabbit.link/danny" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!khWo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89d2a85f-a7b5-4d6c-abae-6cf9c329d86b_1640x828.png 424w, https://substackcdn.com/image/fetch/$s_!khWo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89d2a85f-a7b5-4d6c-abae-6cf9c329d86b_1640x828.png 848w, https://substackcdn.com/image/fetch/$s_!khWo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89d2a85f-a7b5-4d6c-abae-6cf9c329d86b_1640x828.png 1272w, https://substackcdn.com/image/fetch/$s_!khWo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89d2a85f-a7b5-4d6c-abae-6cf9c329d86b_1640x828.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!khWo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89d2a85f-a7b5-4d6c-abae-6cf9c329d86b_1640x828.png" width="1456" height="735" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/89d2a85f-a7b5-4d6c-abae-6cf9c329d86b_1640x828.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:735,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;https://coderabbit.link/danny&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://coderabbit.link/danny&quot;,&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="https://coderabbit.link/danny" title="https://coderabbit.link/danny" srcset="https://substackcdn.com/image/fetch/$s_!khWo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89d2a85f-a7b5-4d6c-abae-6cf9c329d86b_1640x828.png 424w, https://substackcdn.com/image/fetch/$s_!khWo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89d2a85f-a7b5-4d6c-abae-6cf9c329d86b_1640x828.png 848w, https://substackcdn.com/image/fetch/$s_!khWo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89d2a85f-a7b5-4d6c-abae-6cf9c329d86b_1640x828.png 1272w, https://substackcdn.com/image/fetch/$s_!khWo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89d2a85f-a7b5-4d6c-abae-6cf9c329d86b_1640x828.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><figcaption class="image-caption"><a href="https://coderabbit.link/danny">Try CodeRabbit CLI for FREE</a></figcaption></figure></div><p>As a saying goes: &#8220;To use a tool better, understand it better.&#8220;</p><p>With CodeRabbit, internally, every review starts <strong>cloning your repo</strong> into a secure, sandboxed environment. It builds full codebase awareness, understanding dependencies, structure, and cross-file patterns, so reviews feel context-aware instead of &#8220;out of the blue.&#8221;</p><p>It even looks at <strong>past PRs and linked issues</strong> (from Jira, Linear, GitHub, or GitLab) to infer the WHY behind a change, not just the WHAT. This extra layer of understanding helps CodeRabbit write more meaningful, relevant review comments.</p><h1>Configure CodeRabbit</h1><p>Most teams just install CodeRabbit and leave defaults on.</p><p>That&#8217;s fine, <strong>but if you want to maximize it, you need to configure it.</strong></p><p>Create a &#8220;<strong>.coderabbit.yaml</strong>&#8220; in your repo and customize:</p><ul><li><p>Ignore WIP and draft branches to reduce noise</p></li><li><p>Set review tone (chill or assertive) for better communication style</p></li><li><p>Add path_filters to exclude files like generated code or test snapshots</p></li><li><p>Integrate with famous projet managers like Jira or Linear, so CodeRabbit understands the intent behind each PR</p></li><li><p>Enable chat &amp; knowledge base for richer discussions</p></li></ul><p></p><p>Here you can find the docs for the config: <a href="https://docs.coderabbit.ai/reference/yaml-template">CodeRabbit YAML template</a></p><p>&#128161; - Another powerful feature is to <strong>set custom review instructions based on path patterns.</strong> By doing so you can set different instructions based on different parts of your app, such as APIs, tests or business domain layer.</p><p>You can do it under the <strong>path_instructions </strong>field in <strong>coderabbit.yaml</strong> file:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://coderabbit.link/danny" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mVbo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe52c0f24-9edd-41c3-8e39-80f27770b156_1166x572.png 424w, https://substackcdn.com/image/fetch/$s_!mVbo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe52c0f24-9edd-41c3-8e39-80f27770b156_1166x572.png 848w, https://substackcdn.com/image/fetch/$s_!mVbo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe52c0f24-9edd-41c3-8e39-80f27770b156_1166x572.png 1272w, https://substackcdn.com/image/fetch/$s_!mVbo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe52c0f24-9edd-41c3-8e39-80f27770b156_1166x572.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mVbo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe52c0f24-9edd-41c3-8e39-80f27770b156_1166x572.png" width="1166" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e52c0f24-9edd-41c3-8e39-80f27770b156_1166x572.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:1166,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:140641,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://coderabbit.link/danny&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/175597507?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe52c0f24-9edd-41c3-8e39-80f27770b156_1166x572.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mVbo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe52c0f24-9edd-41c3-8e39-80f27770b156_1166x572.png 424w, https://substackcdn.com/image/fetch/$s_!mVbo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe52c0f24-9edd-41c3-8e39-80f27770b156_1166x572.png 848w, https://substackcdn.com/image/fetch/$s_!mVbo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe52c0f24-9edd-41c3-8e39-80f27770b156_1166x572.png 1272w, https://substackcdn.com/image/fetch/$s_!mVbo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe52c0f24-9edd-41c3-8e39-80f27770b156_1166x572.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><h1>Avoid Big Pull Requests</h1><p>The bigger the context, the higher the chance of missing bugs, slowing reviews, or getting irrelevant AI comments.</p><p>Small PRs are clarity. They&#8217;re focus. <strong>They help humans reason better, and make CodeRabbit&#8217;s AI analysis </strong><em><strong>sharper</strong></em><strong>.</strong></p><p>If your PRs read like a novel, split your work into smaller chunks!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oxfW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593f5d84-d671-43a5-a619-b6b683bfed00_557x351.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oxfW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593f5d84-d671-43a5-a619-b6b683bfed00_557x351.png 424w, https://substackcdn.com/image/fetch/$s_!oxfW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593f5d84-d671-43a5-a619-b6b683bfed00_557x351.png 848w, https://substackcdn.com/image/fetch/$s_!oxfW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593f5d84-d671-43a5-a619-b6b683bfed00_557x351.png 1272w, https://substackcdn.com/image/fetch/$s_!oxfW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593f5d84-d671-43a5-a619-b6b683bfed00_557x351.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oxfW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593f5d84-d671-43a5-a619-b6b683bfed00_557x351.png" width="557" height="351" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/593f5d84-d671-43a5-a619-b6b683bfed00_557x351.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:351,&quot;width&quot;:557,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Matt Blodgett: Small Diffs and Code Reviews&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="Matt Blodgett: Small Diffs and Code Reviews" title="Matt Blodgett: Small Diffs and Code Reviews" srcset="https://substackcdn.com/image/fetch/$s_!oxfW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593f5d84-d671-43a5-a619-b6b683bfed00_557x351.png 424w, https://substackcdn.com/image/fetch/$s_!oxfW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593f5d84-d671-43a5-a619-b6b683bfed00_557x351.png 848w, https://substackcdn.com/image/fetch/$s_!oxfW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593f5d84-d671-43a5-a619-b6b683bfed00_557x351.png 1272w, https://substackcdn.com/image/fetch/$s_!oxfW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593f5d84-d671-43a5-a619-b6b683bfed00_557x351.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><h1><strong>Get AI Review Your Code Before PR</strong></h1><p>AI reviews shouldn&#8217;t start only after a PR is created.</p><p>You can use CodeRabbit directly <strong>inside your IDE (</strong>like in <a href="https://www.coderabbit.ai/ide">VS Code</a><strong>)</strong>  to review code before committing. This gives you early feedback on logic, style, and structure, without waiting for CI.</p><p>You use Claude Code in terminal?! There&#8217;s also a <strong><a href="https://coderabbit.link/danny">CodeRabbit CLI</a></strong> for that.</p><p>The good thing is that CodeRabbit offers one-click fixes by using AI.</p><p>Catch issues <em>before</em> your teammates do.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://coderabbit.link/danny" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!w7Yz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87404c29-e0e4-482b-8ca7-34dbeb9d2e13_1146x1082.png 424w, https://substackcdn.com/image/fetch/$s_!w7Yz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87404c29-e0e4-482b-8ca7-34dbeb9d2e13_1146x1082.png 848w, https://substackcdn.com/image/fetch/$s_!w7Yz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87404c29-e0e4-482b-8ca7-34dbeb9d2e13_1146x1082.png 1272w, https://substackcdn.com/image/fetch/$s_!w7Yz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87404c29-e0e4-482b-8ca7-34dbeb9d2e13_1146x1082.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!w7Yz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87404c29-e0e4-482b-8ca7-34dbeb9d2e13_1146x1082.png" width="657" height="620.3089005235602" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/87404c29-e0e4-482b-8ca7-34dbeb9d2e13_1146x1082.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1082,&quot;width&quot;:1146,&quot;resizeWidth&quot;:657,&quot;bytes&quot;:287190,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://coderabbit.link/danny&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/175597507?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87404c29-e0e4-482b-8ca7-34dbeb9d2e13_1146x1082.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!w7Yz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87404c29-e0e4-482b-8ca7-34dbeb9d2e13_1146x1082.png 424w, https://substackcdn.com/image/fetch/$s_!w7Yz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87404c29-e0e4-482b-8ca7-34dbeb9d2e13_1146x1082.png 848w, https://substackcdn.com/image/fetch/$s_!w7Yz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87404c29-e0e4-482b-8ca7-34dbeb9d2e13_1146x1082.png 1272w, https://substackcdn.com/image/fetch/$s_!w7Yz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87404c29-e0e4-482b-8ca7-34dbeb9d2e13_1146x1082.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><h1>Talk to CodeRabbit via PRs</h1><p>Most developers miss this feature: <strong>you can chat with CodeRabbit.</strong></p><p>Don&#8217;t like a suggestion? Ask it to explain, adjust, or rewrite.</p><p>Need a fix but not ready to commit? Ask CodeRabbit to create a GitHub or Jira issue.</p><p>You can even <strong>teach it</strong> your organization&#8217;s standards over time, it learns and improves, just like a real teammate.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://coderabbit.link/danny" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!60OH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F944e816e-cfda-471d-b4a3-ec6635d87967_590x736.png 424w, https://substackcdn.com/image/fetch/$s_!60OH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F944e816e-cfda-471d-b4a3-ec6635d87967_590x736.png 848w, https://substackcdn.com/image/fetch/$s_!60OH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F944e816e-cfda-471d-b4a3-ec6635d87967_590x736.png 1272w, https://substackcdn.com/image/fetch/$s_!60OH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F944e816e-cfda-471d-b4a3-ec6635d87967_590x736.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!60OH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F944e816e-cfda-471d-b4a3-ec6635d87967_590x736.png" width="516" height="643.6881355932203" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/944e816e-cfda-471d-b4a3-ec6635d87967_590x736.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:736,&quot;width&quot;:590,&quot;resizeWidth&quot;:516,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;AI Code Reviews | CodeRabbit | Try for Free&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://coderabbit.link/danny&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="AI Code Reviews | CodeRabbit | Try for Free" title="AI Code Reviews | CodeRabbit | Try for Free" srcset="https://substackcdn.com/image/fetch/$s_!60OH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F944e816e-cfda-471d-b4a3-ec6635d87967_590x736.png 424w, https://substackcdn.com/image/fetch/$s_!60OH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F944e816e-cfda-471d-b4a3-ec6635d87967_590x736.png 848w, https://substackcdn.com/image/fetch/$s_!60OH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F944e816e-cfda-471d-b4a3-ec6635d87967_590x736.png 1272w, https://substackcdn.com/image/fetch/$s_!60OH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F944e816e-cfda-471d-b4a3-ec6635d87967_590x736.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><h1>Integrate to MCP servers</h1><p>Connect CodeRabbit to your existing tools using the <strong>Model Context Protocol (MCP)</strong> to make reviews smarter and more context-aware.</p><p>CodeRabbit automatically calls relevant MCP tools during analysis to gather context and enrich its comments.</p><p>For example:</p><ul><li><p>Requirements live in <strong>Linear</strong></p></li><li><p>Design specs live in <strong>Figma</strong></p></li><li><p>Architecture decisions stored in <strong>Confluence</strong></p></li><li><p>Security standards in <strong>internal wikis</strong></p></li></ul><p></p><p>This way, CodeRabbit doesn&#8217;t just review code, it understands the bigger picture behind every change.</p><h1>Use Your Critical Thinking</h1><p>CodeRabbit is <em>fast</em>, not <em>infallible</em>.</p><p>Use it as a <strong>first-pass reviewer</strong>, it catches common issues like null checks, naming, or code smells.</p><p>Then have humans focus on <strong>architecture, readability, and intent</strong>.</p><p>The best practice is use your critical thinking:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://coderabbit.link/danny" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pVEj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c4d7ef6-66f5-4cb1-ab2d-884f2bac7820_1160x852.png 424w, https://substackcdn.com/image/fetch/$s_!pVEj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c4d7ef6-66f5-4cb1-ab2d-884f2bac7820_1160x852.png 848w, https://substackcdn.com/image/fetch/$s_!pVEj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c4d7ef6-66f5-4cb1-ab2d-884f2bac7820_1160x852.png 1272w, https://substackcdn.com/image/fetch/$s_!pVEj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c4d7ef6-66f5-4cb1-ab2d-884f2bac7820_1160x852.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pVEj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c4d7ef6-66f5-4cb1-ab2d-884f2bac7820_1160x852.png" width="656" height="481.82068965517243" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3c4d7ef6-66f5-4cb1-ab2d-884f2bac7820_1160x852.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:852,&quot;width&quot;:1160,&quot;resizeWidth&quot;:656,&quot;bytes&quot;:286553,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://coderabbit.link/danny&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/175597507?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c4d7ef6-66f5-4cb1-ab2d-884f2bac7820_1160x852.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pVEj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c4d7ef6-66f5-4cb1-ab2d-884f2bac7820_1160x852.png 424w, https://substackcdn.com/image/fetch/$s_!pVEj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c4d7ef6-66f5-4cb1-ab2d-884f2bac7820_1160x852.png 848w, https://substackcdn.com/image/fetch/$s_!pVEj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c4d7ef6-66f5-4cb1-ab2d-884f2bac7820_1160x852.png 1272w, https://substackcdn.com/image/fetch/$s_!pVEj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c4d7ef6-66f5-4cb1-ab2d-884f2bac7820_1160x852.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><h1>Final Thoughts</h1><p>CodeRabbit turns code reviews from a chore into a competitive advantage.<br>It&#8217;s fast, consistent, and learns your project over time.</p><p>If you want to try it out, there&#8217;s a free version and a Pro tier (free for open-source projects).</p><p><strong>It works very well with Claude Code CLI too</strong> &#8594; <a href="https://coderabbit.link/danny">Link</a></p><p>Once configured properly, CodeRabbit doesn&#8217;t just review code. <strong>It also helps you craft better software.</strong></p>]]></content:encoded></item><item><title><![CDATA[Debug like a PRO]]></title><description><![CDATA[5 proven practices to master your debugging skills.]]></description><link>https://craftbettersoftware.com/p/debug-like-a-pro</link><guid isPermaLink="false">https://craftbettersoftware.com/p/debug-like-a-pro</guid><dc:creator><![CDATA[Daniel Moka]]></dc:creator><pubDate>Sat, 04 Oct 2025 05:01:09 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!205G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5649a5a1-ad3d-4bab-a64a-42a1944d31a3_640x496.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1><strong>CodeRabbit: Free AI Code Reviews in CLI (Sponsor)</strong></h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://coderabbit.link/danny" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!H56n!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7eac4f3-ab45-40a1-9efd-12c28ec343e1_1116x604.png 424w, https://substackcdn.com/image/fetch/$s_!H56n!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7eac4f3-ab45-40a1-9efd-12c28ec343e1_1116x604.png 848w, https://substackcdn.com/image/fetch/$s_!H56n!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7eac4f3-ab45-40a1-9efd-12c28ec343e1_1116x604.png 1272w, https://substackcdn.com/image/fetch/$s_!H56n!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7eac4f3-ab45-40a1-9efd-12c28ec343e1_1116x604.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!H56n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7eac4f3-ab45-40a1-9efd-12c28ec343e1_1116x604.png" width="1116" height="604" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b7eac4f3-ab45-40a1-9efd-12c28ec343e1_1116x604.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:604,&quot;width&quot;:1116,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;https://coderabbit.link/danny&quot;,&quot;title&quot;:&quot;https://coderabbit.link/danny&quot;,&quot;type&quot;:null,&quot;href&quot;:&quot;https://coderabbit.link/danny&quot;,&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="https://coderabbit.link/danny" title="https://coderabbit.link/danny" srcset="https://substackcdn.com/image/fetch/$s_!H56n!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7eac4f3-ab45-40a1-9efd-12c28ec343e1_1116x604.png 424w, https://substackcdn.com/image/fetch/$s_!H56n!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7eac4f3-ab45-40a1-9efd-12c28ec343e1_1116x604.png 848w, https://substackcdn.com/image/fetch/$s_!H56n!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7eac4f3-ab45-40a1-9efd-12c28ec343e1_1116x604.png 1272w, https://substackcdn.com/image/fetch/$s_!H56n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7eac4f3-ab45-40a1-9efd-12c28ec343e1_1116x604.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><figcaption class="image-caption"><a href="https://coderabbit.link/danny">Get Started Today</a></figcaption></figure></div><p>CodeRabbit CLI is an AI code review tool that runs directly in your terminal. It provides intelligent code analysis, catches issues early, and integrates seamlessly with AI coding agents like Claude Code, Codex CLI, Cursor CLI, and Gemini to ensure your code is production-ready before it ships.</p><ul><li><p>Enables pre-commit reviews of both staged and unstaged changes, creating a multi-layered review process.</p></li><li><p>Fits into existing Git workflows. Review uncommitted changes, staged files, specific commits, or entire branches without disrupting your current development process.</p></li><li><p>Reviews specific files, directories, uncommitted changes, staged changes, or entire commits based on your needs.</p></li><li><p>Supports programming languages including JavaScript, TypeScript, Python, Java, C#, C++, Ruby, Rust, Go, PHP, and more.</p></li><li><p>Offers free AI code reviews with rate limits so developers can experience senior-level reviews at no cost.</p></li><li><p>Flags hallucinations, code smells, security issues, and performance problems.</p></li></ul><p></p><p>Supports guidelines for other AI generators, AST Grep rules, and path-based instructions.</p><p><a href="https://coderabbit.link/danny">Get Started Today</a></p><h1>Motivation</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kUe1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd97d0fb7-429b-473b-ad94-2a0a81497b69_720x358.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kUe1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd97d0fb7-429b-473b-ad94-2a0a81497b69_720x358.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kUe1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd97d0fb7-429b-473b-ad94-2a0a81497b69_720x358.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kUe1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd97d0fb7-429b-473b-ad94-2a0a81497b69_720x358.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kUe1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd97d0fb7-429b-473b-ad94-2a0a81497b69_720x358.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kUe1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd97d0fb7-429b-473b-ad94-2a0a81497b69_720x358.jpeg" width="612" height="304.3" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d97d0fb7-429b-473b-ad94-2a0a81497b69_720x358.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:358,&quot;width&quot;:720,&quot;resizeWidth&quot;:612,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;AI-Powered Debugging: The Future of Fixing Your Code&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="AI-Powered Debugging: The Future of Fixing Your Code" title="AI-Powered Debugging: The Future of Fixing Your Code" srcset="https://substackcdn.com/image/fetch/$s_!kUe1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd97d0fb7-429b-473b-ad94-2a0a81497b69_720x358.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kUe1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd97d0fb7-429b-473b-ad94-2a0a81497b69_720x358.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kUe1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd97d0fb7-429b-473b-ad94-2a0a81497b69_720x358.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kUe1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd97d0fb7-429b-473b-ad94-2a0a81497b69_720x358.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><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>Most engineers waste hours with poor debugging practices. Endless usage of &#8220;console.log&#8221; and guesswork.</p><p>But debugging is where real engineering happens.</p><p>It&#8217;s not just about killing bugs. <strong>It&#8217;s about thinking clearly, questioning assumptions, and preventing future defects.</strong></p><p>When done right, debugging makes you sharper, faster, and more creative as a developer.</p><p>Today I collected my favorite 5 practices to master debugging:</p><h1>1. Write Clean Bug Reports</h1><p>Fixing bugs starts with a clean bug report. Yet 99% of developers don&#8217;t know how to write one.</p><p>But it&#8217;s the best way to speed up debugging.</p><p>Here&#8217;s the difference:</p><p>&#10060; Bad bug report:</p><div class="pullquote"><p>I found a bug on UI, the flight booking doesn&#8217;t work for one-way route.</p></div><p>&#9989; The template I use in my team:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fndn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf98b335-669d-40ee-a845-44d9896e8076_1318x1472.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fndn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf98b335-669d-40ee-a845-44d9896e8076_1318x1472.png 424w, https://substackcdn.com/image/fetch/$s_!fndn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf98b335-669d-40ee-a845-44d9896e8076_1318x1472.png 848w, https://substackcdn.com/image/fetch/$s_!fndn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf98b335-669d-40ee-a845-44d9896e8076_1318x1472.png 1272w, https://substackcdn.com/image/fetch/$s_!fndn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf98b335-669d-40ee-a845-44d9896e8076_1318x1472.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fndn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf98b335-669d-40ee-a845-44d9896e8076_1318x1472.png" width="1318" height="1472" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cf98b335-669d-40ee-a845-44d9896e8076_1318x1472.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1472,&quot;width&quot;:1318,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:191258,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/162273201?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf98b335-669d-40ee-a845-44d9896e8076_1318x1472.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fndn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf98b335-669d-40ee-a845-44d9896e8076_1318x1472.png 424w, https://substackcdn.com/image/fetch/$s_!fndn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf98b335-669d-40ee-a845-44d9896e8076_1318x1472.png 848w, https://substackcdn.com/image/fetch/$s_!fndn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf98b335-669d-40ee-a845-44d9896e8076_1318x1472.png 1272w, https://substackcdn.com/image/fetch/$s_!fndn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf98b335-669d-40ee-a845-44d9896e8076_1318x1472.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>When you create a bug report, the goal is simple<strong>: make the bug easily reproducible.</strong></p><h1>2. Prompt AI smartly</h1><p>Have you ever struggled with AI fixing your code? Most developers just throw endless prompts like &#8220;Fix this bug&#8221;.</p><p>But as the saying goes: <em>Garbage in, garbage out.</em></p><p>If you struggle with AI fixing your code, try this prompt instead:</p><p><strong>&#8220;Reflect on 5&#8211;7 different possible sources of the problem, narrow it down to the 1&#8211;2 most likely ones, and add logs to validate the assumptions before moving on to the actual code fix.&#8221;</strong></p><p>Works like magic.</p><h1>3. Write a Failing Test for the Bug</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mi7L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660b1c64-8405-403d-a664-2ed7e159a386_1173x587.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mi7L!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660b1c64-8405-403d-a664-2ed7e159a386_1173x587.png 424w, https://substackcdn.com/image/fetch/$s_!mi7L!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660b1c64-8405-403d-a664-2ed7e159a386_1173x587.png 848w, https://substackcdn.com/image/fetch/$s_!mi7L!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660b1c64-8405-403d-a664-2ed7e159a386_1173x587.png 1272w, https://substackcdn.com/image/fetch/$s_!mi7L!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660b1c64-8405-403d-a664-2ed7e159a386_1173x587.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mi7L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660b1c64-8405-403d-a664-2ed7e159a386_1173x587.png" width="1173" height="587" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/660b1c64-8405-403d-a664-2ed7e159a386_1173x587.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:587,&quot;width&quot;:1173,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:43262,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/162273201?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660b1c64-8405-403d-a664-2ed7e159a386_1173x587.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mi7L!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660b1c64-8405-403d-a664-2ed7e159a386_1173x587.png 424w, https://substackcdn.com/image/fetch/$s_!mi7L!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660b1c64-8405-403d-a664-2ed7e159a386_1173x587.png 848w, https://substackcdn.com/image/fetch/$s_!mi7L!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660b1c64-8405-403d-a664-2ed7e159a386_1173x587.png 1272w, https://substackcdn.com/image/fetch/$s_!mi7L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F660b1c64-8405-403d-a664-2ed7e159a386_1173x587.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>My favorite way to fix a bug is to use Test-Driven Development.</p><p>If you find a bug, do the following:</p><ul><li><p>Write a failing test to reproduce the bug</p></li><li><p>Find the bug in the code by debugging your test</p></li><li><p>Make the failing test pass by fixing the bug</p></li><li><p>Clean up the code if needed</p></li></ul><p></p><p>This practice will force you to pinpoint what exactly the bug is and it&#8217;s also easy to tell when you fixed it since you have a passing test.</p><p>As a bonus, <strong>your bug won&#8217;t come back again as you covered with a test.</strong></p><h1>4. Take a 20-minute Walk</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9eBZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6f3e2d6-75c7-48bc-a773-8daa3abffead_1080x520.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9eBZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6f3e2d6-75c7-48bc-a773-8daa3abffead_1080x520.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9eBZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6f3e2d6-75c7-48bc-a773-8daa3abffead_1080x520.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9eBZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6f3e2d6-75c7-48bc-a773-8daa3abffead_1080x520.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9eBZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6f3e2d6-75c7-48bc-a773-8daa3abffead_1080x520.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9eBZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6f3e2d6-75c7-48bc-a773-8daa3abffead_1080x520.jpeg" width="1080" height="520" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b6f3e2d6-75c7-48bc-a773-8daa3abffead_1080x520.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:520,&quot;width&quot;:1080,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:267302,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/162273201?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6f3e2d6-75c7-48bc-a773-8daa3abffead_1080x520.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9eBZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6f3e2d6-75c7-48bc-a773-8daa3abffead_1080x520.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9eBZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6f3e2d6-75c7-48bc-a773-8daa3abffead_1080x520.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9eBZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6f3e2d6-75c7-48bc-a773-8daa3abffead_1080x520.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9eBZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6f3e2d6-75c7-48bc-a773-8daa3abffead_1080x520.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>Taking a short walk is one of the most underrated yet powerful ways to fix a bug.</p><p>Why? </p><p>Because walking is <strong>scientifically proven to improve problem-solving and creativity.</strong> It resets your brain and lets you see the issue with a fresh perspective.</p><p>Magically, this works almost every time. Try it.</p><h1>5. Use Git Bisect</h1><p>Git Bisect is a standard GIT tool that helps you <strong>find the commit that introduced a bug</strong>. It works by performing a binary search between a known good commit and a known bad commit.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4o_B!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc88fdcaa-6854-4cf9-b9b7-5b3279c57d3b_1132x748.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4o_B!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc88fdcaa-6854-4cf9-b9b7-5b3279c57d3b_1132x748.png 424w, https://substackcdn.com/image/fetch/$s_!4o_B!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc88fdcaa-6854-4cf9-b9b7-5b3279c57d3b_1132x748.png 848w, https://substackcdn.com/image/fetch/$s_!4o_B!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc88fdcaa-6854-4cf9-b9b7-5b3279c57d3b_1132x748.png 1272w, https://substackcdn.com/image/fetch/$s_!4o_B!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc88fdcaa-6854-4cf9-b9b7-5b3279c57d3b_1132x748.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4o_B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc88fdcaa-6854-4cf9-b9b7-5b3279c57d3b_1132x748.png" width="1132" height="748" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c88fdcaa-6854-4cf9-b9b7-5b3279c57d3b_1132x748.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:748,&quot;width&quot;:1132,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:200754,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/162273201?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc88fdcaa-6854-4cf9-b9b7-5b3279c57d3b_1132x748.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4o_B!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc88fdcaa-6854-4cf9-b9b7-5b3279c57d3b_1132x748.png 424w, https://substackcdn.com/image/fetch/$s_!4o_B!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc88fdcaa-6854-4cf9-b9b7-5b3279c57d3b_1132x748.png 848w, https://substackcdn.com/image/fetch/$s_!4o_B!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc88fdcaa-6854-4cf9-b9b7-5b3279c57d3b_1132x748.png 1272w, https://substackcdn.com/image/fetch/$s_!4o_B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc88fdcaa-6854-4cf9-b9b7-5b3279c57d3b_1132x748.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>Git Bisect requires only two pieces of information before it can start the bug hunt:</p><ul><li><p>A commit where the behavior is definitely <strong>good</strong></p></li><li><p>A commit where the <strong>bug is present</strong></p></li></ul><p></p><p>Here&#8217;s how to use and automate it</p><ol><li><p>Put your test in a script. The script must exit 0 when the bug is absent (good), and non-zero when the bug is present (bad).</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4BzK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81ab88aa-0bf0-4f19-9a88-8ec02c3885f4_1096x460.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4BzK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81ab88aa-0bf0-4f19-9a88-8ec02c3885f4_1096x460.png 424w, https://substackcdn.com/image/fetch/$s_!4BzK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81ab88aa-0bf0-4f19-9a88-8ec02c3885f4_1096x460.png 848w, https://substackcdn.com/image/fetch/$s_!4BzK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81ab88aa-0bf0-4f19-9a88-8ec02c3885f4_1096x460.png 1272w, https://substackcdn.com/image/fetch/$s_!4BzK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81ab88aa-0bf0-4f19-9a88-8ec02c3885f4_1096x460.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4BzK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81ab88aa-0bf0-4f19-9a88-8ec02c3885f4_1096x460.png" width="637" height="267.3540145985401" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/81ab88aa-0bf0-4f19-9a88-8ec02c3885f4_1096x460.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:460,&quot;width&quot;:1096,&quot;resizeWidth&quot;:637,&quot;bytes&quot;:91660,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/162273201?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81ab88aa-0bf0-4f19-9a88-8ec02c3885f4_1096x460.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4BzK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81ab88aa-0bf0-4f19-9a88-8ec02c3885f4_1096x460.png 424w, https://substackcdn.com/image/fetch/$s_!4BzK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81ab88aa-0bf0-4f19-9a88-8ec02c3885f4_1096x460.png 848w, https://substackcdn.com/image/fetch/$s_!4BzK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81ab88aa-0bf0-4f19-9a88-8ec02c3885f4_1096x460.png 1272w, https://substackcdn.com/image/fetch/$s_!4BzK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81ab88aa-0bf0-4f19-9a88-8ec02c3885f4_1096x460.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><ol start="2"><li><p>Make it executable:</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UJmU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059facb9-9613-4dca-b425-c874c1938a6e_640x200.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UJmU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059facb9-9613-4dca-b425-c874c1938a6e_640x200.png 424w, https://substackcdn.com/image/fetch/$s_!UJmU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059facb9-9613-4dca-b425-c874c1938a6e_640x200.png 848w, https://substackcdn.com/image/fetch/$s_!UJmU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059facb9-9613-4dca-b425-c874c1938a6e_640x200.png 1272w, https://substackcdn.com/image/fetch/$s_!UJmU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059facb9-9613-4dca-b425-c874c1938a6e_640x200.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UJmU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059facb9-9613-4dca-b425-c874c1938a6e_640x200.png" width="356" height="111.25" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/059facb9-9613-4dca-b425-c874c1938a6e_640x200.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:200,&quot;width&quot;:640,&quot;resizeWidth&quot;:356,&quot;bytes&quot;:30323,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/162273201?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059facb9-9613-4dca-b425-c874c1938a6e_640x200.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UJmU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059facb9-9613-4dca-b425-c874c1938a6e_640x200.png 424w, https://substackcdn.com/image/fetch/$s_!UJmU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059facb9-9613-4dca-b425-c874c1938a6e_640x200.png 848w, https://substackcdn.com/image/fetch/$s_!UJmU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059facb9-9613-4dca-b425-c874c1938a6e_640x200.png 1272w, https://substackcdn.com/image/fetch/$s_!UJmU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F059facb9-9613-4dca-b425-c874c1938a6e_640x200.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><ol start="3"><li><p>Run bisect with your script:</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Lxy4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F547869ab-54e0-4635-aeb6-a7e23ec25c07_1220x348.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Lxy4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F547869ab-54e0-4635-aeb6-a7e23ec25c07_1220x348.png 424w, https://substackcdn.com/image/fetch/$s_!Lxy4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F547869ab-54e0-4635-aeb6-a7e23ec25c07_1220x348.png 848w, https://substackcdn.com/image/fetch/$s_!Lxy4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F547869ab-54e0-4635-aeb6-a7e23ec25c07_1220x348.png 1272w, https://substackcdn.com/image/fetch/$s_!Lxy4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F547869ab-54e0-4635-aeb6-a7e23ec25c07_1220x348.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Lxy4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F547869ab-54e0-4635-aeb6-a7e23ec25c07_1220x348.png" width="1220" height="348" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/547869ab-54e0-4635-aeb6-a7e23ec25c07_1220x348.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:348,&quot;width&quot;:1220,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:95204,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/162273201?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F547869ab-54e0-4635-aeb6-a7e23ec25c07_1220x348.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Lxy4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F547869ab-54e0-4635-aeb6-a7e23ec25c07_1220x348.png 424w, https://substackcdn.com/image/fetch/$s_!Lxy4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F547869ab-54e0-4635-aeb6-a7e23ec25c07_1220x348.png 848w, https://substackcdn.com/image/fetch/$s_!Lxy4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F547869ab-54e0-4635-aeb6-a7e23ec25c07_1220x348.png 1272w, https://substackcdn.com/image/fetch/$s_!Lxy4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F547869ab-54e0-4635-aeb6-a7e23ec25c07_1220x348.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>Git will checkout each candidate commit, run your script, and stop on the first bad commit.</p><p>As a result: you have the commit that introduced the bug. Cool isn&#8217;t it?</p><h1>Conclusion</h1><p>Bugs aren&#8217;t obstacles. They&#8217;re signals. They show you where to think deeper, where to get sharper, where to grow. </p><p>Master debugging, and you won&#8217;t just ship cleaner code, <strong>but you&#8217;ll build the mindset of a true software crafter.</strong></p>]]></content:encoded></item><item><title><![CDATA[100 Tips to Write Clean Code]]></title><description><![CDATA[Clean Functions, Classes, Comments, Commits and everything you need to write Clean Code]]></description><link>https://craftbettersoftware.com/p/100-tips-to-write-clean-code</link><guid isPermaLink="false">https://craftbettersoftware.com/p/100-tips-to-write-clean-code</guid><dc:creator><![CDATA[Daniel Moka]]></dc:creator><pubDate>Wed, 17 Sep 2025 05:03:43 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/67fb3f3b-08ba-4ea6-b227-b6b984a125d5_1456x1048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>CodeRabbit: Free AI Code Reviews in CLI (Sponsor)</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://coderabbit.link/danny" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!H56n!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7eac4f3-ab45-40a1-9efd-12c28ec343e1_1116x604.png 424w, https://substackcdn.com/image/fetch/$s_!H56n!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7eac4f3-ab45-40a1-9efd-12c28ec343e1_1116x604.png 848w, https://substackcdn.com/image/fetch/$s_!H56n!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7eac4f3-ab45-40a1-9efd-12c28ec343e1_1116x604.png 1272w, https://substackcdn.com/image/fetch/$s_!H56n!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7eac4f3-ab45-40a1-9efd-12c28ec343e1_1116x604.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!H56n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7eac4f3-ab45-40a1-9efd-12c28ec343e1_1116x604.png" width="1116" height="604" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b7eac4f3-ab45-40a1-9efd-12c28ec343e1_1116x604.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:604,&quot;width&quot;:1116,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;https://coderabbit.link/danny&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://coderabbit.link/danny&quot;,&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="https://coderabbit.link/danny" title="https://coderabbit.link/danny" srcset="https://substackcdn.com/image/fetch/$s_!H56n!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7eac4f3-ab45-40a1-9efd-12c28ec343e1_1116x604.png 424w, https://substackcdn.com/image/fetch/$s_!H56n!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7eac4f3-ab45-40a1-9efd-12c28ec343e1_1116x604.png 848w, https://substackcdn.com/image/fetch/$s_!H56n!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7eac4f3-ab45-40a1-9efd-12c28ec343e1_1116x604.png 1272w, https://substackcdn.com/image/fetch/$s_!H56n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb7eac4f3-ab45-40a1-9efd-12c28ec343e1_1116x604.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><figcaption class="image-caption"><a href="https://coderabbit.link/danny">Get Started Today</a></figcaption></figure></div><p>CodeRabbit CLI is an AI code review tool that runs directly in your terminal. It provides intelligent code analysis, catches issues early, and integrates seamlessly with AI coding agents like Claude Code, Codex CLI, Cursor CLI, and Gemini to ensure your code is production-ready before it ships.</p><ul><li><p>Enables pre-commit reviews of both staged and unstaged changes, creating a multi-layered review process.</p></li><li><p>Fits into existing Git workflows. Review uncommitted changes, staged files, specific commits, or entire branches without disrupting your current development process.</p></li><li><p>Reviews specific files, directories, uncommitted changes, staged changes, or entire commits based on your needs.</p></li><li><p>Supports programming languages including JavaScript, TypeScript, Python, Java, C#, C++, Ruby, Rust, Go, PHP, and more.</p></li><li><p>Offers free AI code reviews with rate limits so developers can experience senior-level reviews at no cost.</p></li><li><p>Flags hallucinations, code smells, security issues, and performance problems.</p></li></ul><p></p><p>Supports guidelines for other AI generators, AST Grep rules, and path-based instructions.</p><p><a href="https://coderabbit.link/danny">Get Started Today</a></p><h1>Motivation</h1><p>Every developer can write working code.<br>But not every developer can write <strong>clean code</strong>.</p><p>Clean code is code that:</p><ul><li><p>tells the story of the business,</p></li><li><p>can be read like prose,</p></li><li><p>and can be changed with confidence.</p></li></ul><p></p><p>Over the years, I&#8217;ve collected<strong> 100 practical tips that help you craft better software</strong> that doesn&#8217;t just work today, but stays readable, testable, and maintainable for years.</p><p>Here&#8217;s the full list &#128071;</p><h2>&#10024; Clean Namings</h2><ol><li><p>Use intention-revealing names</p></li><li><p>Capture business knowledge</p></li><li><p>Avoid encoding and technical details</p></li><li><p>Use pronounceable names</p></li><li><p>Use searchable names</p></li><li><p>Avoid noise and redundant words</p></li><li><p>Use strong words</p></li><li><p>Don&#8217;t use abbreviations</p></li><li><p>Be consistent with concepts and vocabulary</p></li><li><p>Use <code>is/has/should/can</code> prefix for booleans</p></li><li><p>Avoid negative names for booleans</p></li><li><p>Use naming conventions within your project</p></li><li><p>Boolean names should be adjectives</p></li><li><p>Class names should be nouns or noun-phrases</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FEb2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff662f22-e02a-4ab5-a390-29d6eda23578_1202x525.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FEb2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff662f22-e02a-4ab5-a390-29d6eda23578_1202x525.png 424w, https://substackcdn.com/image/fetch/$s_!FEb2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff662f22-e02a-4ab5-a390-29d6eda23578_1202x525.png 848w, https://substackcdn.com/image/fetch/$s_!FEb2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff662f22-e02a-4ab5-a390-29d6eda23578_1202x525.png 1272w, https://substackcdn.com/image/fetch/$s_!FEb2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff662f22-e02a-4ab5-a390-29d6eda23578_1202x525.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FEb2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff662f22-e02a-4ab5-a390-29d6eda23578_1202x525.png" width="1202" height="525" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ff662f22-e02a-4ab5-a390-29d6eda23578_1202x525.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:525,&quot;width&quot;:1202,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:51949,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/172078543?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff662f22-e02a-4ab5-a390-29d6eda23578_1202x525.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FEb2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff662f22-e02a-4ab5-a390-29d6eda23578_1202x525.png 424w, https://substackcdn.com/image/fetch/$s_!FEb2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff662f22-e02a-4ab5-a390-29d6eda23578_1202x525.png 848w, https://substackcdn.com/image/fetch/$s_!FEb2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff662f22-e02a-4ab5-a390-29d6eda23578_1202x525.png 1272w, https://substackcdn.com/image/fetch/$s_!FEb2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff662f22-e02a-4ab5-a390-29d6eda23578_1202x525.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></li></ol><h2>&#9889; Clean Functions</h2><ol start="15"><li><p>Function names should be verbs or verb-phrases</p></li><li><p>Keep functions small and concise</p></li><li><p>Avoid too many function arguments</p></li><li><p>Max number of lines in a function: 8&#8211;10</p></li><li><p>Avoid passing booleans as parameters</p></li><li><p>Strive for no side effects</p></li><li><p>Use enums as flags</p></li><li><p>Use empty lines to separate logic</p></li><li><p>If it takes more than 3 seconds to figure out what a function does, refactor it</p></li></ol><h2>&#127959; Clean Classes</h2><ol start="24"><li><p>A class should have only one main responsibility</p></li><li><p>Avoid large classes (~100+ lines can be a smell)</p></li><li><p>Strive for one public function per class</p></li><li><p>Create small private functions for single tasks</p></li><li><p>Order functions based on execution flow</p></li></ol><h2>&#128172; Clean Comments</h2><ol start="29"><li><p>Avoid comments as much as possible</p></li><li><p>Don&#8217;t state the obvious</p></li><li><p>Don&#8217;t use them extensively (nobody will read them)</p></li><li><p>Replace comments with good naming</p></li><li><p>Use comments only for explaining <em>why</em></p></li><li><p>Use comments for revealing implicit behavior</p></li><li><p>Use comments for API doc generation\</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jjyQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05419075-f2f0-40f2-b166-d0a88bcfef59_1200x1200.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jjyQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05419075-f2f0-40f2-b166-d0a88bcfef59_1200x1200.png 424w, https://substackcdn.com/image/fetch/$s_!jjyQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05419075-f2f0-40f2-b166-d0a88bcfef59_1200x1200.png 848w, https://substackcdn.com/image/fetch/$s_!jjyQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05419075-f2f0-40f2-b166-d0a88bcfef59_1200x1200.png 1272w, https://substackcdn.com/image/fetch/$s_!jjyQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05419075-f2f0-40f2-b166-d0a88bcfef59_1200x1200.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jjyQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05419075-f2f0-40f2-b166-d0a88bcfef59_1200x1200.png" width="1200" height="1200" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/05419075-f2f0-40f2-b166-d0a88bcfef59_1200x1200.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1200,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:367509,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/172078543?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05419075-f2f0-40f2-b166-d0a88bcfef59_1200x1200.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jjyQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05419075-f2f0-40f2-b166-d0a88bcfef59_1200x1200.png 424w, https://substackcdn.com/image/fetch/$s_!jjyQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05419075-f2f0-40f2-b166-d0a88bcfef59_1200x1200.png 848w, https://substackcdn.com/image/fetch/$s_!jjyQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05419075-f2f0-40f2-b166-d0a88bcfef59_1200x1200.png 1272w, https://substackcdn.com/image/fetch/$s_!jjyQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F05419075-f2f0-40f2-b166-d0a88bcfef59_1200x1200.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><h2>&#9989; Clean Tests</h2><ol start="36"><li><p>Use descriptive test names (scenario-based)</p></li><li><p>Use Given/When/Then or Should/When templates</p></li><li><p>Structure tests with Arrange / Act / Assert</p></li><li><p>Avoid logic (if, for, while) in tests</p></li><li><p>Couple a test with one behavior</p></li><li><p>Use meaningful test data</p></li><li><p>Hide irrelevant test data</p></li><li><p>Write clean assertions that describe domain behaviors</p></li><li><p>Create deterministic tests</p></li><li><p>Remove duplication with parameterized tests</p></li><li><p>Prefer fakes for mocking out 3rd party code</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2LY5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a823cc2-f017-4d6a-9912-7d0fc129826e_1200x1200.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2LY5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a823cc2-f017-4d6a-9912-7d0fc129826e_1200x1200.png 424w, https://substackcdn.com/image/fetch/$s_!2LY5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a823cc2-f017-4d6a-9912-7d0fc129826e_1200x1200.png 848w, https://substackcdn.com/image/fetch/$s_!2LY5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a823cc2-f017-4d6a-9912-7d0fc129826e_1200x1200.png 1272w, https://substackcdn.com/image/fetch/$s_!2LY5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a823cc2-f017-4d6a-9912-7d0fc129826e_1200x1200.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2LY5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a823cc2-f017-4d6a-9912-7d0fc129826e_1200x1200.png" width="1200" height="1200" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3a823cc2-f017-4d6a-9912-7d0fc129826e_1200x1200.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1200,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:216192,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/172078543?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a823cc2-f017-4d6a-9912-7d0fc129826e_1200x1200.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2LY5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a823cc2-f017-4d6a-9912-7d0fc129826e_1200x1200.png 424w, https://substackcdn.com/image/fetch/$s_!2LY5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a823cc2-f017-4d6a-9912-7d0fc129826e_1200x1200.png 848w, https://substackcdn.com/image/fetch/$s_!2LY5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a823cc2-f017-4d6a-9912-7d0fc129826e_1200x1200.png 1272w, https://substackcdn.com/image/fetch/$s_!2LY5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a823cc2-f017-4d6a-9912-7d0fc129826e_1200x1200.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><h2>&#128273; F.I.R.S.T Principle for Tests</h2><ol start="47"><li><p>Tests should be fast</p></li><li><p>Tests should be independent</p></li><li><p>Tests should be repeatable</p></li><li><p>Tests should be self-validating</p></li><li><p>Tests should be thorough (happy paths, edge cases, negative cases, security, illegal input)</p></li></ol><h2>&#128256; Git Commits</h2><ol start="52"><li><p>Commit early &amp; push often</p></li><li><p>Write meaningful commit messages explaining the reason</p></li><li><p>Use the imperative mood in commit messages</p></li><li><p>Use present tense</p></li><li><p>Add a link reference to the related story, task, or bug</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!txNc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be79889-f03e-4f6f-8efd-e39d5502e72c_934x1034.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!txNc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be79889-f03e-4f6f-8efd-e39d5502e72c_934x1034.png 424w, https://substackcdn.com/image/fetch/$s_!txNc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be79889-f03e-4f6f-8efd-e39d5502e72c_934x1034.png 848w, https://substackcdn.com/image/fetch/$s_!txNc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be79889-f03e-4f6f-8efd-e39d5502e72c_934x1034.png 1272w, https://substackcdn.com/image/fetch/$s_!txNc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be79889-f03e-4f6f-8efd-e39d5502e72c_934x1034.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!txNc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be79889-f03e-4f6f-8efd-e39d5502e72c_934x1034.png" width="934" height="1034" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4be79889-f03e-4f6f-8efd-e39d5502e72c_934x1034.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1034,&quot;width&quot;:934,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:78451,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/172078543?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be79889-f03e-4f6f-8efd-e39d5502e72c_934x1034.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!txNc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be79889-f03e-4f6f-8efd-e39d5502e72c_934x1034.png 424w, https://substackcdn.com/image/fetch/$s_!txNc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be79889-f03e-4f6f-8efd-e39d5502e72c_934x1034.png 848w, https://substackcdn.com/image/fetch/$s_!txNc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be79889-f03e-4f6f-8efd-e39d5502e72c_934x1034.png 1272w, https://substackcdn.com/image/fetch/$s_!txNc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4be79889-f03e-4f6f-8efd-e39d5502e72c_934x1034.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><h2>&#128371; Code Smells</h2><ol start="57"><li><p>Avoid magic numbers</p></li><li><p>Avoid magic strings</p></li><li><p>Avoid long conditions</p></li><li><p>Avoid global variables</p></li><li><p>Avoid long parameter lists</p></li><li><p>Don&#8217;t overuse primitives &#8212; model your domain with rich types</p></li><li><p>Avoid deeply nested logic</p></li><li><p>Reduce cyclomatic complexity</p></li><li><p>Hard-to-test logic is a smell to fix</p></li></ol><h2>&#127912; Formatting</h2><ol start="66"><li><p>Set up team standards</p></li><li><p>Use automated formatters</p></li><li><p>Set a max width for lines</p></li><li><p>Don&#8217;t use horizontal alignment</p></li><li><p>Don&#8217;t break indentation</p></li><li><p>Declare variables close to their usage</p></li></ol><h2>&#128208; Core Principles</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-FVm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff112482a-b6cd-4c86-9f2e-b24f509853ff_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-FVm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff112482a-b6cd-4c86-9f2e-b24f509853ff_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!-FVm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff112482a-b6cd-4c86-9f2e-b24f509853ff_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!-FVm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff112482a-b6cd-4c86-9f2e-b24f509853ff_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!-FVm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff112482a-b6cd-4c86-9f2e-b24f509853ff_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-FVm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff112482a-b6cd-4c86-9f2e-b24f509853ff_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f112482a-b6cd-4c86-9f2e-b24f509853ff_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;SOLID Principles: A Guide to Better Software Design with Code Examples&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="SOLID Principles: A Guide to Better Software Design with Code Examples" title="SOLID Principles: A Guide to Better Software Design with Code Examples" srcset="https://substackcdn.com/image/fetch/$s_!-FVm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff112482a-b6cd-4c86-9f2e-b24f509853ff_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!-FVm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff112482a-b6cd-4c86-9f2e-b24f509853ff_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!-FVm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff112482a-b6cd-4c86-9f2e-b24f509853ff_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!-FVm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff112482a-b6cd-4c86-9f2e-b24f509853ff_1280x720.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>72. <strong>Don't repeat yourself (DRY)</strong>: remove knowledge duplication</p><p>73. <strong>Keep it simple (KISS)</strong>: simple code beats both complex and clever code</p><p>74. <strong>You ain't gonna need it (YAGNI)</strong>: don't produce code that is not needed in your current context</p><p>75. <strong>Tell, don't ask:</strong> bundle data and functions together</p><p>76. <strong>Single Responsibility Principle (SRP)</strong>: organize logic into modules with one reason to change</p><p>77. <strong>Liskov Substitution Principle (LSP)</strong>: a subtype should be able to replace its base type without altering the program</p><p>78. <strong>Interface Segregation Principle (ISP)</strong>: split large interfaces into small and more specific ones</p><p>79. <strong>Dependency Inversion Principle (DIP)</strong>: high-level modules should not depend on low-level modules. Both should depend on abstractions.</p><p>80. <strong>Favor composition over inheritance:</strong> inheritance leads to tight coupling, composition gives more flexibility</p><p>81. <strong>Divide and Conquer:</strong> break down a problem into smaller sizes to manage complexity</p><p>82. <strong>High cohesion:</strong> group related code together. It helps you to find logic easier and makes your code easy to maintain</p><p>83. <strong>Low coupling:</strong> your modules should independent of other modules. By doing so, you can easier make changes to internals without breaking other modules</p><h2>&#128736; Extra Tips</h2><ol start="84"><li><p>Use a solid IDE with refactoring tools</p></li><li><p>Master your IDE hotkeys</p></li><li><p>Use feature-based folder structure</p></li><li><p>Pair programming helps keep code clean</p></li><li><p>Delete unused code &#8212; it&#8217;s a liability</p></li><li><p>Write code for humans, not just machines</p></li><li><p>Readability &gt; cleverness</p></li><li><p>Favor readability over efficiency</p></li><li><p>Always leave the code cleaner than you found it</p></li><li><p>Test early, test often</p></li><li><p>Refactor early, refactor often</p></li><li><p>Do real-time code reviews instead of just PR reviews</p></li><li><p>Use the &#8220;rule of three&#8221; to remove duplication</p></li><li><p>Avoid using <code>NULL</code> &#8212; it&#8217;s a code smell</p></li><li><p>Working code &#8800; clean code</p></li><li><p>You can&#8217;t have clean code without tests</p></li><li><p>Write code that reads like well-written prose</p></li></ol><h1>Conclusion</h1><p>Clean code is not a checklist. It&#8217;s a mindset.</p><p>It&#8217;s the discipline of choosing clarity over cleverness.<br>It&#8217;s the habit of leaving the codebase better than you found it.<br>It&#8217;s the commitment to future teammates, and to your future self.</p><p>Because in the end:</p><p><strong>Working code delivers features. </strong></p><p><strong>Clean Code builds lasting software.</strong></p>]]></content:encoded></item><item><title><![CDATA[Claude Code AI best practices]]></title><description><![CDATA[The future of coding isn&#8217;t autocomplete of AI. It&#8217;s collaboration with AI.]]></description><link>https://craftbettersoftware.com/p/claude-code-ai-best-practices</link><guid isPermaLink="false">https://craftbettersoftware.com/p/claude-code-ai-best-practices</guid><dc:creator><![CDATA[Daniel Moka]]></dc:creator><pubDate>Sat, 23 Aug 2025 05:00:29 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/b87d4aa7-c54f-4e98-bb31-e58543e6f0ea_1456x1048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1><strong>Cut Code Review Time &amp; Bugs in Half with CodeRabbit (Sponsor)</strong></h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.coderabbit.ai/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2elX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.png 424w, https://substackcdn.com/image/fetch/$s_!2elX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.png 848w, https://substackcdn.com/image/fetch/$s_!2elX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.png 1272w, https://substackcdn.com/image/fetch/$s_!2elX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2elX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.coderabbit.ai/&quot;,&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="" title="" srcset="https://substackcdn.com/image/fetch/$s_!2elX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.png 424w, https://substackcdn.com/image/fetch/$s_!2elX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.png 848w, https://substackcdn.com/image/fetch/$s_!2elX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.png 1272w, https://substackcdn.com/image/fetch/$s_!2elX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.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><figcaption class="image-caption"><a href="https://coderabbit.link/daniel">Get Started Today</a></figcaption></figure></div><p>Code reviews are critical but time-consuming. CodeRabbit acts as your AI co-pilot, providing instant Code review comments and potential impacts of every pull request.</p><p>Beyond just flagging issues, CodeRabbit provides one-click fix suggestions and lets you define custom code quality rules using AST Grep patterns, catching subtle issues that traditional static analysis tools might miss.</p><p>CodeRabbit has so far reviewed more than 10 million PRs, installed on 1 million repositories, and used by 70 thousand Open-source projects. CodeRabbit is free for all open-source repo's.</p><p><a href="https://coderabbit.link/daniel">Get Started Today</a></p><h1>Motivation</h1><p>I stopped using Cursor. I moved fully to Claude Code. </p><p>After trying both side by side with my team, the conclusion was clear:</p><p>&#128073; Claude Code feels <strong>10x better</strong> for real development work.</p><p>It&#8217;s not just about faster results. Claude Code has many useful features I am a big fan of. It&#8217;s like pairing with a senior engineer who never gets tired.</p><p>Here are <strong>6 practical tips</strong> we use in my team to get the most out of Claude Code:</p><h2><strong>1. Use the VS Code extension</strong></h2><p>First of all, install the Claude Code extension. It works with VS Code, Cursor, and Windsurf too. The extension itself is very simple, but it helps you start Claude Code quickly. The nice part is that you can open several windows at once in your IDE, each can be focused on a different part of your project.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!T6x-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7c3b2e-6aa9-4c77-83dd-f9df8da6a07d_1926x1022.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!T6x-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7c3b2e-6aa9-4c77-83dd-f9df8da6a07d_1926x1022.png 424w, https://substackcdn.com/image/fetch/$s_!T6x-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7c3b2e-6aa9-4c77-83dd-f9df8da6a07d_1926x1022.png 848w, https://substackcdn.com/image/fetch/$s_!T6x-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7c3b2e-6aa9-4c77-83dd-f9df8da6a07d_1926x1022.png 1272w, https://substackcdn.com/image/fetch/$s_!T6x-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7c3b2e-6aa9-4c77-83dd-f9df8da6a07d_1926x1022.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!T6x-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7c3b2e-6aa9-4c77-83dd-f9df8da6a07d_1926x1022.png" width="1456" height="773" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3e7c3b2e-6aa9-4c77-83dd-f9df8da6a07d_1926x1022.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:773,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:234037,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/171488003?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7c3b2e-6aa9-4c77-83dd-f9df8da6a07d_1926x1022.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!T6x-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7c3b2e-6aa9-4c77-83dd-f9df8da6a07d_1926x1022.png 424w, https://substackcdn.com/image/fetch/$s_!T6x-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7c3b2e-6aa9-4c77-83dd-f9df8da6a07d_1926x1022.png 848w, https://substackcdn.com/image/fetch/$s_!T6x-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7c3b2e-6aa9-4c77-83dd-f9df8da6a07d_1926x1022.png 1272w, https://substackcdn.com/image/fetch/$s_!T6x-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7c3b2e-6aa9-4c77-83dd-f9df8da6a07d_1926x1022.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><h2>2. Create a <code>Claude.md</code> file</h2><p>Give Claude a foundation by creating a Claude.md file in your repo.</p><p><strong>Think of Claude.md as onboarding docs for your AI teammate. </strong>Instead of repeating yourself in every prompt, Claude stays aligned and consistent. The result: fewer misunderstandings, more consistent code, and smoother collaboration.</p><p>Add the following details:</p><ul><li><p>The project&#8217;s main goal</p></li><li><p>The tech stack you use</p></li><li><p>Folder structures</p></li><li><p>The software practices you follow (TDD, clean code, commit rules, etc.)</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TSqz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F386695f2-51d1-4c0e-a155-3420db543b44_1382x794.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TSqz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F386695f2-51d1-4c0e-a155-3420db543b44_1382x794.png 424w, https://substackcdn.com/image/fetch/$s_!TSqz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F386695f2-51d1-4c0e-a155-3420db543b44_1382x794.png 848w, https://substackcdn.com/image/fetch/$s_!TSqz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F386695f2-51d1-4c0e-a155-3420db543b44_1382x794.png 1272w, https://substackcdn.com/image/fetch/$s_!TSqz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F386695f2-51d1-4c0e-a155-3420db543b44_1382x794.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TSqz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F386695f2-51d1-4c0e-a155-3420db543b44_1382x794.png" width="1382" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/386695f2-51d1-4c0e-a155-3420db543b44_1382x794.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1382,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:153374,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/171488003?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F386695f2-51d1-4c0e-a155-3420db543b44_1382x794.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!TSqz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F386695f2-51d1-4c0e-a155-3420db543b44_1382x794.png 424w, https://substackcdn.com/image/fetch/$s_!TSqz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F386695f2-51d1-4c0e-a155-3420db543b44_1382x794.png 848w, https://substackcdn.com/image/fetch/$s_!TSqz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F386695f2-51d1-4c0e-a155-3420db543b44_1382x794.png 1272w, https://substackcdn.com/image/fetch/$s_!TSqz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F386695f2-51d1-4c0e-a155-3420db543b44_1382x794.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>&#128161; Pro tip: Consider using nested Claude.md files so Claude can navigate your codebase and pull in richer context as it works.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GKBk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469a830-ec0e-4d2a-8e3e-8afbe6d8307f_1412x434.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GKBk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469a830-ec0e-4d2a-8e3e-8afbe6d8307f_1412x434.png 424w, https://substackcdn.com/image/fetch/$s_!GKBk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469a830-ec0e-4d2a-8e3e-8afbe6d8307f_1412x434.png 848w, https://substackcdn.com/image/fetch/$s_!GKBk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469a830-ec0e-4d2a-8e3e-8afbe6d8307f_1412x434.png 1272w, https://substackcdn.com/image/fetch/$s_!GKBk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469a830-ec0e-4d2a-8e3e-8afbe6d8307f_1412x434.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GKBk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469a830-ec0e-4d2a-8e3e-8afbe6d8307f_1412x434.png" width="1412" height="434" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e469a830-ec0e-4d2a-8e3e-8afbe6d8307f_1412x434.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:434,&quot;width&quot;:1412,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:49941,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/171488003?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469a830-ec0e-4d2a-8e3e-8afbe6d8307f_1412x434.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GKBk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469a830-ec0e-4d2a-8e3e-8afbe6d8307f_1412x434.png 424w, https://substackcdn.com/image/fetch/$s_!GKBk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469a830-ec0e-4d2a-8e3e-8afbe6d8307f_1412x434.png 848w, https://substackcdn.com/image/fetch/$s_!GKBk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469a830-ec0e-4d2a-8e3e-8afbe6d8307f_1412x434.png 1272w, https://substackcdn.com/image/fetch/$s_!GKBk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe469a830-ec0e-4d2a-8e3e-8afbe6d8307f_1412x434.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><h2>3. <strong>Explore &#10141; Plan &#10141; Code</strong></h2><p>Most devs jump straight to &#8220;Hey Claude, implement this feature&#8221; </p><p>That works, but it&#8217;s shallow. I found a better rhythm:</p><ul><li><p>Ask Claude to <strong>explore</strong> the existing solution first.</p></li><li><p>Then have it <strong>plan</strong> the change.</p></li><li><p>Finally, let it <strong>implement</strong>.</p></li></ul><p></p><p>This layered approach produces code that&#8217;s better thought-out, easier to maintain, and often catches edge cases you didn&#8217;t think of.</p><p>It genuinely feels like working with an engineer who pauses, thinks, and then writes. That&#8217;s why I call it the closest thing to <strong>AGI coding</strong> right now.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Gqy-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b5c5d9-af3c-4d40-afea-73781af71483_1142x954.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Gqy-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b5c5d9-af3c-4d40-afea-73781af71483_1142x954.png 424w, https://substackcdn.com/image/fetch/$s_!Gqy-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b5c5d9-af3c-4d40-afea-73781af71483_1142x954.png 848w, https://substackcdn.com/image/fetch/$s_!Gqy-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b5c5d9-af3c-4d40-afea-73781af71483_1142x954.png 1272w, https://substackcdn.com/image/fetch/$s_!Gqy-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b5c5d9-af3c-4d40-afea-73781af71483_1142x954.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Gqy-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b5c5d9-af3c-4d40-afea-73781af71483_1142x954.png" width="608" height="507.9089316987741" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b9b5c5d9-af3c-4d40-afea-73781af71483_1142x954.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:954,&quot;width&quot;:1142,&quot;resizeWidth&quot;:608,&quot;bytes&quot;:1055084,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/171488003?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b5c5d9-af3c-4d40-afea-73781af71483_1142x954.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Gqy-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b5c5d9-af3c-4d40-afea-73781af71483_1142x954.png 424w, https://substackcdn.com/image/fetch/$s_!Gqy-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b5c5d9-af3c-4d40-afea-73781af71483_1142x954.png 848w, https://substackcdn.com/image/fetch/$s_!Gqy-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b5c5d9-af3c-4d40-afea-73781af71483_1142x954.png 1272w, https://substackcdn.com/image/fetch/$s_!Gqy-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9b5c5d9-af3c-4d40-afea-73781af71483_1142x954.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><h2>4. Use <code>/clear</code> often</h2><p>Context is Claude&#8217;s strength, but also its weakness. Over time, conversations drift. Details blur. Costs go up.</p><p><strong>That&#8217;s when </strong><code>/clear</code><strong> becomes your friend.</strong></p><p>I use it like hitting the reset button:</p><ul><li><p>It sharpens Claude&#8217;s focus</p></li><li><p>Reduces hallucinations</p></li><li><p>And saves a surprising amount of tokens</p></li></ul><p></p><p>It&#8217;s like closing and reopening your IDE when things feel &#8220;stale.&#8221;</p><p>Simple habit, huge difference in output quality.</p><h2>5. Build custom slash commands</h2><p><strong>One of Claude&#8217;s hidden superpowers: custom commands.</strong></p><p>They let you create repeatable workflows for things like:</p><ul><li><p>analyzing server logs</p></li><li><p>running common debug steps</p></li><li><p>generating test and documentation</p></li></ul><p></p><p>You define them once inside <code>.claude/commands/</code>. After that, you can trigger them instantly with a simple slash command.</p><p>Think of it as reusable macros for your AI teammate. Productivity on autopilot.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!x9lc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74748df7-38b5-4182-9488-9cd2fe3bf549_1608x990.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!x9lc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74748df7-38b5-4182-9488-9cd2fe3bf549_1608x990.png 424w, https://substackcdn.com/image/fetch/$s_!x9lc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74748df7-38b5-4182-9488-9cd2fe3bf549_1608x990.png 848w, https://substackcdn.com/image/fetch/$s_!x9lc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74748df7-38b5-4182-9488-9cd2fe3bf549_1608x990.png 1272w, https://substackcdn.com/image/fetch/$s_!x9lc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74748df7-38b5-4182-9488-9cd2fe3bf549_1608x990.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!x9lc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74748df7-38b5-4182-9488-9cd2fe3bf549_1608x990.png" width="1456" height="896" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/74748df7-38b5-4182-9488-9cd2fe3bf549_1608x990.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:896,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:315653,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/171488003?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74748df7-38b5-4182-9488-9cd2fe3bf549_1608x990.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!x9lc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74748df7-38b5-4182-9488-9cd2fe3bf549_1608x990.png 424w, https://substackcdn.com/image/fetch/$s_!x9lc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74748df7-38b5-4182-9488-9cd2fe3bf549_1608x990.png 848w, https://substackcdn.com/image/fetch/$s_!x9lc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74748df7-38b5-4182-9488-9cd2fe3bf549_1608x990.png 1272w, https://substackcdn.com/image/fetch/$s_!x9lc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74748df7-38b5-4182-9488-9cd2fe3bf549_1608x990.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><h2>6. Give Claude screenshots</h2><p><strong>A picture says more than 1000 words.</strong> </p><p>I am continuously pasting screenshots into Claude: error messages, diagrams, even UI snippets. Claude reads and interprets them with surprising accuracy.</p><p>Suddenly, you don&#8217;t waste time describing the shape of a bug or the layout of a system. You just show it.</p><p>Better input = better output.</p><h1>Final Thought</h1><p>Claude Code isn&#8217;t just another coding assistant. It is the cutting edge of AI.</p><p>Once you start treating Claude like a real teammate - giving it onboarding, resetting when needed, and letting it think in steps - the results feel like magic, <strong>helping you to craft better software.</strong></p><p>AI won't replace software engineers, but an engineer using AI will.</p>]]></content:encoded></item><item><title><![CDATA[The #1 Mistake in Unit Testing (and How to Fix It)]]></title><description><![CDATA[Best practices to nail the most important part of your unit test]]></description><link>https://craftbettersoftware.com/p/the-1-mistake-in-unit-testing-and</link><guid isPermaLink="false">https://craftbettersoftware.com/p/the-1-mistake-in-unit-testing-and</guid><dc:creator><![CDATA[Daniel Moka]]></dc:creator><pubDate>Sat, 24 May 2025 05:01:11 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/79635e1d-ea6c-4dce-bea7-1264841ca2a4_1456x1048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1><strong>CodeRabbit &#8211; AI Code Reviews That Actually Help </strong><em><strong>(Sponsor)</strong></em></h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.coderabbit.ai/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2elX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.png 424w, https://substackcdn.com/image/fetch/$s_!2elX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.png 848w, https://substackcdn.com/image/fetch/$s_!2elX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.png 1272w, https://substackcdn.com/image/fetch/$s_!2elX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2elX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.coderabbit.ai/&quot;,&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="" title="" srcset="https://substackcdn.com/image/fetch/$s_!2elX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.png 424w, https://substackcdn.com/image/fetch/$s_!2elX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.png 848w, https://substackcdn.com/image/fetch/$s_!2elX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.png 1272w, https://substackcdn.com/image/fetch/$s_!2elX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.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><figcaption class="image-caption"><a href="https://www.coderabbit.ai/">CodeRabbit AI code reviews</a></figcaption></figure></div><p>As someone who&#8217;s reviewed thousands of pull requests, I can confidently say that <strong>CodeRabbit gets it right</strong>.</p><p>It doesn&#8217;t just flag lint rules. It understands your code structure using AST, explains the &#8220;why&#8221; behind each suggestion, and summarizes complex changes clearly for both reviewers and authors.</p><p>Top 5 reasons why you should try CodeRabbit and use it every day:</p><ul><li><p><strong>Context-aware reviews</strong>: It knows how your changes impact the full system, not just the diff.</p></li><li><p><strong>Security and performance insights</strong>: Detects issues like vulnerabilities and slow patterns (e.g. sequential DB calls).</p></li><li><p><strong>Custom team learning</strong>: Learns from your feedback and adapts reviews to your team's coding standards.</p></li><li><p><strong>PR summaries and diagrams</strong>: Generates clear explanations, changelogs, and sequence diagrams.</p></li></ul><p></p><p><strong>Open source friendly</strong>: Free forever for public repos. No catch. CodeRabbit Pro is free forever.</p><p><a href="https://www.coderabbit.ai/">Try CodeRabbit on your next PR</a> -&gt; no card needed, no BS. Just better reviews.</p><h1>Motivation</h1><p>Clean code isn't just for production code. Your tests deserve the same care. And when it comes to tests, <strong>nothing matters more than assertions.</strong> They&#8217;re the most important part of your tests. The final word, the &#8220;proof&#8221; that your system works.</p><p>Yet in many codebases, I see poorly written assertions. Sloppy assertions kill readability, bury bugs, and make tests hard to maintain.</p><p>Here are 5 tips for writing clean, expressive assertions that future-you and your teammates will thank you for.</p><h1>Assert One Behaviour Per Test</h1><p>Every test should verify a single, observable behavior. That doesn&#8217;t mean one physical assertion. <strong>It means one logical assertion.</strong> Sometimes, confirming one behavior might require multiple assertion lines, and that&#8217;s totally fine.</p><p>But if your test is checking multiple unrelated outcomes, it's doing too much. This hides intent and makes failures harder to diagnose. Keep each test focused on one behavior. </p><p><strong>Rule of thumb: When in doubt, split your tests into multiple test cases.</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_!2jff!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9b2721b-e34f-45ac-adee-61ae1e664322_1154x988.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2jff!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9b2721b-e34f-45ac-adee-61ae1e664322_1154x988.png 424w, https://substackcdn.com/image/fetch/$s_!2jff!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9b2721b-e34f-45ac-adee-61ae1e664322_1154x988.png 848w, https://substackcdn.com/image/fetch/$s_!2jff!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9b2721b-e34f-45ac-adee-61ae1e664322_1154x988.png 1272w, https://substackcdn.com/image/fetch/$s_!2jff!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9b2721b-e34f-45ac-adee-61ae1e664322_1154x988.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2jff!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9b2721b-e34f-45ac-adee-61ae1e664322_1154x988.png" width="1154" height="988" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e9b2721b-e34f-45ac-adee-61ae1e664322_1154x988.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:988,&quot;width&quot;:1154,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:156641,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/163324124?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9b2721b-e34f-45ac-adee-61ae1e664322_1154x988.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2jff!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9b2721b-e34f-45ac-adee-61ae1e664322_1154x988.png 424w, https://substackcdn.com/image/fetch/$s_!2jff!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9b2721b-e34f-45ac-adee-61ae1e664322_1154x988.png 848w, https://substackcdn.com/image/fetch/$s_!2jff!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9b2721b-e34f-45ac-adee-61ae1e664322_1154x988.png 1272w, https://substackcdn.com/image/fetch/$s_!2jff!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9b2721b-e34f-45ac-adee-61ae1e664322_1154x988.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></p><h1>Capture Domain Knowledge with Extract Method</h1><p>Tests can teach, but only if they speak the language of your domain. One of my favorite techniques is to extract logic-heavy conditions into well-named helper functions.</p><p>Software is ultimately about solving problems in a specific business domain. Capturing that domain makes your code more expressive and meaningful. </p><p>Let each test tell a story:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LDEs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2401c969-4b0c-4272-8d99-09ccaecaae06_657x559.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LDEs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2401c969-4b0c-4272-8d99-09ccaecaae06_657x559.png 424w, https://substackcdn.com/image/fetch/$s_!LDEs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2401c969-4b0c-4272-8d99-09ccaecaae06_657x559.png 848w, https://substackcdn.com/image/fetch/$s_!LDEs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2401c969-4b0c-4272-8d99-09ccaecaae06_657x559.png 1272w, https://substackcdn.com/image/fetch/$s_!LDEs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2401c969-4b0c-4272-8d99-09ccaecaae06_657x559.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LDEs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2401c969-4b0c-4272-8d99-09ccaecaae06_657x559.png" width="657" height="559" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2401c969-4b0c-4272-8d99-09ccaecaae06_657x559.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:559,&quot;width&quot;:657,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:125664,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/163324124?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2401c969-4b0c-4272-8d99-09ccaecaae06_657x559.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LDEs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2401c969-4b0c-4272-8d99-09ccaecaae06_657x559.png 424w, https://substackcdn.com/image/fetch/$s_!LDEs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2401c969-4b0c-4272-8d99-09ccaecaae06_657x559.png 848w, https://substackcdn.com/image/fetch/$s_!LDEs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2401c969-4b0c-4272-8d99-09ccaecaae06_657x559.png 1272w, https://substackcdn.com/image/fetch/$s_!LDEs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2401c969-4b0c-4272-8d99-09ccaecaae06_657x559.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><h1>Use Fluent Assertion Libraries</h1><p>Think of your tests as documentation. They must be clear, readable, and concise. If your assertions are not fluently readable English sentences, then you are doing it wrong.</p><p>Fluent assertion libraries like <strong>FluentAssertions</strong> or <strong>AssertJ</strong> help you write tests that read like natural language.  This not only improves readability but also helps express intent more clearly.</p><p>For example, the following assertion is hard to read and leads to a generic failure message:</p><pre><code><code>&#10060; Assert.True(orders.contains(orderWithId(42)))</code></code></pre><p>But the following assertion reads like plain English, and expresses exactly what you're checking:</p><pre><code><code>&#9989; orders.shouldContain(orderWithId(42));</code></code></pre><p>Fluent assertions also make debugging faster by showing meaningful output when tests fail.</p><h1>Avoid Logic In Assertions</h1><p>Avoid logic in your test code!</p><ul><li><p>if-else statements</p></li><li><p>for and while loops</p></li><li><p>switch cases</p></li></ul><p></p><p>They can lead to bugs in your tests.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hBJE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11f42cb7-d3e4-4c32-bda2-a0ef3895cf91_1282x944.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hBJE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11f42cb7-d3e4-4c32-bda2-a0ef3895cf91_1282x944.png 424w, https://substackcdn.com/image/fetch/$s_!hBJE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11f42cb7-d3e4-4c32-bda2-a0ef3895cf91_1282x944.png 848w, https://substackcdn.com/image/fetch/$s_!hBJE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11f42cb7-d3e4-4c32-bda2-a0ef3895cf91_1282x944.png 1272w, https://substackcdn.com/image/fetch/$s_!hBJE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11f42cb7-d3e4-4c32-bda2-a0ef3895cf91_1282x944.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hBJE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11f42cb7-d3e4-4c32-bda2-a0ef3895cf91_1282x944.png" width="1282" height="944" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/11f42cb7-d3e4-4c32-bda2-a0ef3895cf91_1282x944.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:944,&quot;width&quot;:1282,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:248248,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/163324124?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11f42cb7-d3e4-4c32-bda2-a0ef3895cf91_1282x944.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hBJE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11f42cb7-d3e4-4c32-bda2-a0ef3895cf91_1282x944.png 424w, https://substackcdn.com/image/fetch/$s_!hBJE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11f42cb7-d3e4-4c32-bda2-a0ef3895cf91_1282x944.png 848w, https://substackcdn.com/image/fetch/$s_!hBJE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11f42cb7-d3e4-4c32-bda2-a0ef3895cf91_1282x944.png 1272w, https://substackcdn.com/image/fetch/$s_!hBJE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11f42cb7-d3e4-4c32-bda2-a0ef3895cf91_1282x944.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><strong>Once you feel the need for logic, it's a smell that you test more than one thing.</strong> You can get rid of test logic by splitting up your test into multiple test cases. Tests should be the simplest part of your code base.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!n184!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4a6a72-7d77-40df-8903-562d69c2d297_1114x646.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!n184!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4a6a72-7d77-40df-8903-562d69c2d297_1114x646.png 424w, https://substackcdn.com/image/fetch/$s_!n184!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4a6a72-7d77-40df-8903-562d69c2d297_1114x646.png 848w, https://substackcdn.com/image/fetch/$s_!n184!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4a6a72-7d77-40df-8903-562d69c2d297_1114x646.png 1272w, https://substackcdn.com/image/fetch/$s_!n184!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4a6a72-7d77-40df-8903-562d69c2d297_1114x646.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!n184!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4a6a72-7d77-40df-8903-562d69c2d297_1114x646.png" width="1114" height="646" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c4a6a72-7d77-40df-8903-562d69c2d297_1114x646.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:646,&quot;width&quot;:1114,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:171616,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/163324124?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4a6a72-7d77-40df-8903-562d69c2d297_1114x646.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!n184!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4a6a72-7d77-40df-8903-562d69c2d297_1114x646.png 424w, https://substackcdn.com/image/fetch/$s_!n184!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4a6a72-7d77-40df-8903-562d69c2d297_1114x646.png 848w, https://substackcdn.com/image/fetch/$s_!n184!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4a6a72-7d77-40df-8903-562d69c2d297_1114x646.png 1272w, https://substackcdn.com/image/fetch/$s_!n184!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4a6a72-7d77-40df-8903-562d69c2d297_1114x646.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><h1>Assert Outcomes, Not Implementation</h1><p><strong>Focus on what the system does, not how it does it.</strong> When tests are tightly coupled to implementation details, they become fragile. Every internal refactor risks breaking tests, even when the behavior hasn't changed. That&#8217;s a maintenance nightmare.</p><p>Instead, write tests that assert observable outcomes. <strong>Focus on what happens, not how it happens.</strong></p><p>Bad example - asserting implementation:</p><pre><code>&#10060; mockRepo.Verify(r =&gt; r.Save(It.IsAny&lt;Order&gt;()), Times.Once);</code></pre><p>Good example - asserting outcome:</p><pre><code>&#9989; order.Status.Should().Be(OrderStatus.Confirmed);</code></pre><p>If your implementation changes but the behavior stays the same, your tests should still pass. That&#8217;s how you build confidence.</p><h1>Conclusion</h1><p>Assertions are the heartbeat of your tests. They prove and document if your system works. Clear, focused assertions make your tests readable, reliable, and resilient to change. </p><p>Avoid testing internals, skip the logic, and speak the language of your domain.</p><p>Sloppy assertions = unreadable tests</p><p>Clean assertions = living documentation</p><p>Write code for humans to read, not just for machines to execute.</p><h1>Sponsorships</h1><p>There are still a few sponsorship slots available for the coming months. If you want to sponsor this newsletter, <a href="https://craftbettersoftware.com/p/sponsorship">apply here</a>:</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://craftbettersoftware.com/p/sponsorship&quot;,&quot;text&quot;:&quot;Apply for Sponsorship&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://craftbettersoftware.com/p/sponsorship"><span>Apply for Sponsorship</span></a></p>]]></content:encoded></item><item><title><![CDATA[The Best AI Tool For Clean Code]]></title><description><![CDATA[How AI became my favorite code review partner]]></description><link>https://craftbettersoftware.com/p/the-best-ai-tool-for-clean-code</link><guid isPermaLink="false">https://craftbettersoftware.com/p/the-best-ai-tool-for-clean-code</guid><dc:creator><![CDATA[Daniel Moka]]></dc:creator><pubDate>Sat, 17 May 2025 05:00:44 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/cfe5bfd5-e59b-429a-8d2d-7c3f0edeafde_1456x1048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>Motivation</h1><p>I was always skeptical about AI&#8217;s impact on code quality. When the AI hype took off in 2023, I tried a few tools, but most gave low-quality suggestions, often worse than a junior developer.</p><p>Fast forward to 2025, things have significantly changed. AI can now catch bugs, suggest improvements, and help you write cleaner, safer, more maintainable code. </p><p>One tool that truly stands out is <strong>CodeRabbit</strong>, the AI code reviewer.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.coderabbit.ai/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_3rw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c283f7a-e848-4624-b7fc-9525565c0bc9_2400x1446.png 424w, https://substackcdn.com/image/fetch/$s_!_3rw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c283f7a-e848-4624-b7fc-9525565c0bc9_2400x1446.png 848w, https://substackcdn.com/image/fetch/$s_!_3rw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c283f7a-e848-4624-b7fc-9525565c0bc9_2400x1446.png 1272w, https://substackcdn.com/image/fetch/$s_!_3rw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c283f7a-e848-4624-b7fc-9525565c0bc9_2400x1446.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_3rw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c283f7a-e848-4624-b7fc-9525565c0bc9_2400x1446.png" width="1456" height="877" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c283f7a-e848-4624-b7fc-9525565c0bc9_2400x1446.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:877,&quot;width&quot;:1456,&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.coderabbit.ai/&quot;,&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_!_3rw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c283f7a-e848-4624-b7fc-9525565c0bc9_2400x1446.png 424w, https://substackcdn.com/image/fetch/$s_!_3rw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c283f7a-e848-4624-b7fc-9525565c0bc9_2400x1446.png 848w, https://substackcdn.com/image/fetch/$s_!_3rw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c283f7a-e848-4624-b7fc-9525565c0bc9_2400x1446.png 1272w, https://substackcdn.com/image/fetch/$s_!_3rw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c283f7a-e848-4624-b7fc-9525565c0bc9_2400x1446.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><h1>How to Use CodeRabbit</h1><p>CodeRabbit's usage is dead simple. You open a PR. Wait a few seconds. Then you get a full code review with:</p><ul><li><p>&#9989; A detailed PR summary</p></li><li><p>&#9989; Auto-generated sequence diagrams</p></li><li><p>&#9989; Smart comments: from nitpicks to security flags</p></li><li><p>&#9989; Clean code suggestions for best practices</p></li></ul><p></p><p><strong>Code Rabbit also explains why different issues matter, helping you grow as a developer while improving your code.</strong></p><p>Here are 5 real examples of how CodeRabbit helped me apply clean code principles in action. And at the end of the article, I&#8217;ll share a few bonus features that made me a real fan of it.</p><p>Let&#8217;s dive in. &#128071;</p><h1>Inconsistent Naming</h1><p>Don't use different terms for the same concept.</p><ul><li><p>&#10060; getUser</p></li><li><p>&#10060; fetchOrder</p></li><li><p>&#10060; retrieveProduct</p></li></ul><p></p><p>It makes your code inconsistent, confusing yourself and your colleagues. <strong>Instead, use one word per concept in the entire codebase:</strong></p><p></p><ul><li><p>&#9989; getUser</p></li><li><p>&#9989; getOrder</p></li><li><p>&#9989; getProduct</p></li></ul><p></p><p>CodeRabbit flags inconsistent code to keep your codebase cohesive:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.coderabbit.ai/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7GLr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb9a9e7b-a285-4496-b021-7b7a957d893f_817x456.png 424w, https://substackcdn.com/image/fetch/$s_!7GLr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb9a9e7b-a285-4496-b021-7b7a957d893f_817x456.png 848w, https://substackcdn.com/image/fetch/$s_!7GLr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb9a9e7b-a285-4496-b021-7b7a957d893f_817x456.png 1272w, https://substackcdn.com/image/fetch/$s_!7GLr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb9a9e7b-a285-4496-b021-7b7a957d893f_817x456.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7GLr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb9a9e7b-a285-4496-b021-7b7a957d893f_817x456.png" width="817" height="456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fb9a9e7b-a285-4496-b021-7b7a957d893f_817x456.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:456,&quot;width&quot;:817,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:50454,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.coderabbit.ai/&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/162321003?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb9a9e7b-a285-4496-b021-7b7a957d893f_817x456.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7GLr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb9a9e7b-a285-4496-b021-7b7a957d893f_817x456.png 424w, https://substackcdn.com/image/fetch/$s_!7GLr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb9a9e7b-a285-4496-b021-7b7a957d893f_817x456.png 848w, https://substackcdn.com/image/fetch/$s_!7GLr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb9a9e7b-a285-4496-b021-7b7a957d893f_817x456.png 1272w, https://substackcdn.com/image/fetch/$s_!7GLr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb9a9e7b-a285-4496-b021-7b7a957d893f_817x456.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><h1>SQL Injection Risks</h1><p>SQL injection is one of the most dangerous and most common security flaws in modern applications. It happens when attackers trick your database into executing malicious code.</p><p>The fix: <strong>always use parameterized queries.</strong> But in big codebases, we can easily miss this. Thankfully, CodeRabbit scans for unsafe query patterns and flags potential issues:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.coderabbit.ai/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!To_g!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff866fb34-3184-47fe-b12a-91571eda13c1_912x538.png 424w, https://substackcdn.com/image/fetch/$s_!To_g!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff866fb34-3184-47fe-b12a-91571eda13c1_912x538.png 848w, https://substackcdn.com/image/fetch/$s_!To_g!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff866fb34-3184-47fe-b12a-91571eda13c1_912x538.png 1272w, https://substackcdn.com/image/fetch/$s_!To_g!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff866fb34-3184-47fe-b12a-91571eda13c1_912x538.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!To_g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff866fb34-3184-47fe-b12a-91571eda13c1_912x538.png" width="912" height="538" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f866fb34-3184-47fe-b12a-91571eda13c1_912x538.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:538,&quot;width&quot;:912,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:75191,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.coderabbit.ai/&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/162321003?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff866fb34-3184-47fe-b12a-91571eda13c1_912x538.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!To_g!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff866fb34-3184-47fe-b12a-91571eda13c1_912x538.png 424w, https://substackcdn.com/image/fetch/$s_!To_g!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff866fb34-3184-47fe-b12a-91571eda13c1_912x538.png 848w, https://substackcdn.com/image/fetch/$s_!To_g!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff866fb34-3184-47fe-b12a-91571eda13c1_912x538.png 1272w, https://substackcdn.com/image/fetch/$s_!To_g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff866fb34-3184-47fe-b12a-91571eda13c1_912x538.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><h1>Testing Too Many Things At Once</h1><p>Don't test multiple things in one test. It's called the Eager Test. It's an anti-pattern.</p><p>The problem is, that when the test fails, it's hard to know the reason. To fix it, just split up your test into multiple test cases. <strong>The rule is simple: one single behavior per test.</strong></p><p>CodeRabbit easily recognizes eager tests and proposes how to fix them:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.coderabbit.ai/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!n13Z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93b5a66b-a51c-4b7b-9976-d7dd452f017c_914x579.png 424w, https://substackcdn.com/image/fetch/$s_!n13Z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93b5a66b-a51c-4b7b-9976-d7dd452f017c_914x579.png 848w, https://substackcdn.com/image/fetch/$s_!n13Z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93b5a66b-a51c-4b7b-9976-d7dd452f017c_914x579.png 1272w, https://substackcdn.com/image/fetch/$s_!n13Z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93b5a66b-a51c-4b7b-9976-d7dd452f017c_914x579.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!n13Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93b5a66b-a51c-4b7b-9976-d7dd452f017c_914x579.png" width="914" height="579" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/93b5a66b-a51c-4b7b-9976-d7dd452f017c_914x579.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:579,&quot;width&quot;:914,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:86301,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.coderabbit.ai/&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/162321003?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93b5a66b-a51c-4b7b-9976-d7dd452f017c_914x579.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!n13Z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93b5a66b-a51c-4b7b-9976-d7dd452f017c_914x579.png 424w, https://substackcdn.com/image/fetch/$s_!n13Z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93b5a66b-a51c-4b7b-9976-d7dd452f017c_914x579.png 848w, https://substackcdn.com/image/fetch/$s_!n13Z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93b5a66b-a51c-4b7b-9976-d7dd452f017c_914x579.png 1272w, https://substackcdn.com/image/fetch/$s_!n13Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93b5a66b-a51c-4b7b-9976-d7dd452f017c_914x579.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><h1>Missing Edge Test Cases</h1><p>Many developers write tests only for the happy paths. But the nastiest bugs lie in the edge and corner cases. <strong>CodeRabbit suggests where edge cases are missing and even recommends adding tests. </strong>Optionally, you can reply to CodeRabbit and instruct it to add the missing test.</p><p>It greatly helps to achieve high code and behavior coverage for your projects.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.coderabbit.ai/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OIsn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b2e89ff-80ab-4b5b-ba1b-8f1dd9130893_821x804.png 424w, https://substackcdn.com/image/fetch/$s_!OIsn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b2e89ff-80ab-4b5b-ba1b-8f1dd9130893_821x804.png 848w, https://substackcdn.com/image/fetch/$s_!OIsn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b2e89ff-80ab-4b5b-ba1b-8f1dd9130893_821x804.png 1272w, https://substackcdn.com/image/fetch/$s_!OIsn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b2e89ff-80ab-4b5b-ba1b-8f1dd9130893_821x804.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OIsn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b2e89ff-80ab-4b5b-ba1b-8f1dd9130893_821x804.png" width="821" height="804" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0b2e89ff-80ab-4b5b-ba1b-8f1dd9130893_821x804.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:804,&quot;width&quot;:821,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:114439,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.coderabbit.ai/&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/162321003?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b2e89ff-80ab-4b5b-ba1b-8f1dd9130893_821x804.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!OIsn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b2e89ff-80ab-4b5b-ba1b-8f1dd9130893_821x804.png 424w, https://substackcdn.com/image/fetch/$s_!OIsn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b2e89ff-80ab-4b5b-ba1b-8f1dd9130893_821x804.png 848w, https://substackcdn.com/image/fetch/$s_!OIsn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b2e89ff-80ab-4b5b-ba1b-8f1dd9130893_821x804.png 1272w, https://substackcdn.com/image/fetch/$s_!OIsn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b2e89ff-80ab-4b5b-ba1b-8f1dd9130893_821x804.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><h1>SRP Violation</h1><p>The Single Responsibility Principle (SRP) says that <strong>every piece of code should have only one reason to change.</strong> When a class or function does too many things, any change in one part can break the others, making the code fragile and hard to work with. </p><p>The fix is to split your code so each part does one clear job and only changes for one clear reason. CodeRabbit spots these violations and explains the reasoning clearly:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.coderabbit.ai/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Jxzc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda142709-8eee-4231-a470-80de905404e8_825x513.png 424w, https://substackcdn.com/image/fetch/$s_!Jxzc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda142709-8eee-4231-a470-80de905404e8_825x513.png 848w, https://substackcdn.com/image/fetch/$s_!Jxzc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda142709-8eee-4231-a470-80de905404e8_825x513.png 1272w, https://substackcdn.com/image/fetch/$s_!Jxzc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda142709-8eee-4231-a470-80de905404e8_825x513.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Jxzc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda142709-8eee-4231-a470-80de905404e8_825x513.png" width="825" height="513" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/da142709-8eee-4231-a470-80de905404e8_825x513.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:513,&quot;width&quot;:825,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:70845,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.coderabbit.ai/&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/162321003?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda142709-8eee-4231-a470-80de905404e8_825x513.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Jxzc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda142709-8eee-4231-a470-80de905404e8_825x513.png 424w, https://substackcdn.com/image/fetch/$s_!Jxzc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda142709-8eee-4231-a470-80de905404e8_825x513.png 848w, https://substackcdn.com/image/fetch/$s_!Jxzc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda142709-8eee-4231-a470-80de905404e8_825x513.png 1272w, https://substackcdn.com/image/fetch/$s_!Jxzc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda142709-8eee-4231-a470-80de905404e8_825x513.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><h1>Extra Features I love in CodeRabbit</h1><h3>Smart Summaries by CodeRabbit</h3><p>One of the standout features of CodeRabbit is its <strong>pull request summary generation</strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.coderabbit.ai/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!plM5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e84d367-f5f9-446e-99a0-6136b3dff188_921x705.png 424w, https://substackcdn.com/image/fetch/$s_!plM5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e84d367-f5f9-446e-99a0-6136b3dff188_921x705.png 848w, https://substackcdn.com/image/fetch/$s_!plM5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e84d367-f5f9-446e-99a0-6136b3dff188_921x705.png 1272w, https://substackcdn.com/image/fetch/$s_!plM5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e84d367-f5f9-446e-99a0-6136b3dff188_921x705.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!plM5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e84d367-f5f9-446e-99a0-6136b3dff188_921x705.png" width="921" height="705" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4e84d367-f5f9-446e-99a0-6136b3dff188_921x705.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:705,&quot;width&quot;:921,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:98159,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.coderabbit.ai/&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/162321003?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e84d367-f5f9-446e-99a0-6136b3dff188_921x705.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!plM5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e84d367-f5f9-446e-99a0-6136b3dff188_921x705.png 424w, https://substackcdn.com/image/fetch/$s_!plM5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e84d367-f5f9-446e-99a0-6136b3dff188_921x705.png 848w, https://substackcdn.com/image/fetch/$s_!plM5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e84d367-f5f9-446e-99a0-6136b3dff188_921x705.png 1272w, https://substackcdn.com/image/fetch/$s_!plM5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e84d367-f5f9-446e-99a0-6136b3dff188_921x705.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>It quickly scans the diff and explains what changed in plain English. This is especially helpful <strong>when reviewing large PRs or catching up on a teammate&#8217;s work</strong> after a break. It&#8217;s like having a junior developer summarize the changes for you, instantly.</p><h3>Auto-Generated Sequence Diagrams</h3><p>CodeRabbit will also <strong>auto-generate sequence diagrams </strong>for you, helping you visualize how methods and components interact. This is great for <strong>onboarding new developers or documenting legacy systems</strong> without manually drawing diagrams. It turns abstract logic into a clear, structured visual.</p><p>As a bonus, it generates diagrams as 'Diagram as Code,' so you can easily version and persist them in your repository.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.coderabbit.ai/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4q5I!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c6ad3c2-56d8-4658-b889-ff4c58e7b9a8_1441x461.png 424w, https://substackcdn.com/image/fetch/$s_!4q5I!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c6ad3c2-56d8-4658-b889-ff4c58e7b9a8_1441x461.png 848w, https://substackcdn.com/image/fetch/$s_!4q5I!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c6ad3c2-56d8-4658-b889-ff4c58e7b9a8_1441x461.png 1272w, https://substackcdn.com/image/fetch/$s_!4q5I!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c6ad3c2-56d8-4658-b889-ff4c58e7b9a8_1441x461.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4q5I!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c6ad3c2-56d8-4658-b889-ff4c58e7b9a8_1441x461.png" width="1441" height="461" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3c6ad3c2-56d8-4658-b889-ff4c58e7b9a8_1441x461.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:461,&quot;width&quot;:1441,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:36037,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.coderabbit.ai/&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/162321003?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c6ad3c2-56d8-4658-b889-ff4c58e7b9a8_1441x461.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4q5I!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c6ad3c2-56d8-4658-b889-ff4c58e7b9a8_1441x461.png 424w, https://substackcdn.com/image/fetch/$s_!4q5I!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c6ad3c2-56d8-4658-b889-ff4c58e7b9a8_1441x461.png 848w, https://substackcdn.com/image/fetch/$s_!4q5I!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c6ad3c2-56d8-4658-b889-ff4c58e7b9a8_1441x461.png 1272w, https://substackcdn.com/image/fetch/$s_!4q5I!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c6ad3c2-56d8-4658-b889-ff4c58e7b9a8_1441x461.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><h3>Chats and Learnings</h3><p>One of CodeRabbit&#8217;s most powerful features is its ability to chat. <strong>You can teach it your organization&#8217;s code quality standards, </strong>and if you don&#8217;t like a suggestion,<strong> simply discuss it with CodeRabbit and ask for a better fix.</strong> Not ready to resolve an issue? Ask it to create a GitHub or Jira ticket for later. Over time, it becomes your coding assistant. Smart, helpful, and always in sync with your workflow.</p><h3>20+ Dev Tools Integration</h3><p><strong>CodeRabbit seamlessly integrates with 20+ essential tools</strong>, from linters and formatters to advanced security scanners. It runs them automatically, then enhances the results with AI-powered reasoning for faster, smarter, and more thorough reviews.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://www.coderabbit.ai/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xRLr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02c1db67-a260-4ac7-98fd-4cdc3fc5c720_2622x470.png 424w, https://substackcdn.com/image/fetch/$s_!xRLr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02c1db67-a260-4ac7-98fd-4cdc3fc5c720_2622x470.png 848w, https://substackcdn.com/image/fetch/$s_!xRLr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02c1db67-a260-4ac7-98fd-4cdc3fc5c720_2622x470.png 1272w, https://substackcdn.com/image/fetch/$s_!xRLr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02c1db67-a260-4ac7-98fd-4cdc3fc5c720_2622x470.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xRLr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02c1db67-a260-4ac7-98fd-4cdc3fc5c720_2622x470.png" width="1456" height="261" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/02c1db67-a260-4ac7-98fd-4cdc3fc5c720_2622x470.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:261,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:106192,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.coderabbit.ai/&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/162321003?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02c1db67-a260-4ac7-98fd-4cdc3fc5c720_2622x470.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xRLr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02c1db67-a260-4ac7-98fd-4cdc3fc5c720_2622x470.png 424w, https://substackcdn.com/image/fetch/$s_!xRLr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02c1db67-a260-4ac7-98fd-4cdc3fc5c720_2622x470.png 848w, https://substackcdn.com/image/fetch/$s_!xRLr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02c1db67-a260-4ac7-98fd-4cdc3fc5c720_2622x470.png 1272w, https://substackcdn.com/image/fetch/$s_!xRLr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02c1db67-a260-4ac7-98fd-4cdc3fc5c720_2622x470.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>It also picks up issues from tools like Codacy and Sonar and suggests inline fixes. Best of all, it cuts through the noise, surfacing only what truly needs your attention.</p><h3>Privacy First</h3><p>In the age of AI, data privacy isn&#8217;t optional, especially for enterprises. CodeRabbit treats it as a core value. <strong>Every pull request is reviewed in a secure, ephemeral sandbox environment,</strong> ensuring your code is never stored or retained in the cloud. </p><h3>Augmented Code Reviews</h3><p>If that&#8217;s not enough, you can even augment CodeRabbit&#8217;s code review capabilities using <a href="https://ast-grep.github.io/">AST Grep</a> rules, allowing you to define <strong>custom coding standards and catch common mistakes</strong>. Or if you are not that familiar with creating AST grep rules, you can simply choose from the many <a href="https://github.com/coderabbitai/ast-grep-essentials/tree/main/rules">pre-written rules</a> crafted by the CodeRabbit team.</p><h1>Conclusion</h1><p>CodeRabbit isn&#8217;t just another review bot. It actually helps you write better code, not by spitting out generic advice, <strong>but</strong> <strong>by pointing out real issues and explaining why they matter.</strong></p><p>It&#8217;s helped me write cleaner, more consistent code, avoid security pitfalls like SQL injection, and improve my tests.</p><p>What I like most is that it brings clean code principles into day-to-day work. Using CodeRabbit leads to practical, helpful feedback that makes you a better developer.</p><p><strong><a href="https://www.coderabbit.ai">Try CodeRabbit on your next PR. 14-days FREE trial. No card needed.</a></strong></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.coderabbit.ai/&quot;,&quot;text&quot;:&quot;Try CodeRabbit for FREE&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.coderabbit.ai/"><span>Try CodeRabbit for FREE</span></a></p>]]></content:encoded></item><item><title><![CDATA[How Smart Devs Get Hired in 2025]]></title><description><![CDATA[How to land your dream job in this brutal tech market]]></description><link>https://craftbettersoftware.com/p/how-smart-devs-get-hired-in-2025</link><guid isPermaLink="false">https://craftbettersoftware.com/p/how-smart-devs-get-hired-in-2025</guid><dc:creator><![CDATA[Daniel Moka]]></dc:creator><pubDate>Sat, 26 Apr 2025 05:00:27 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/89f174d0-1c8c-4f85-9a1f-447f72a8ddb6_1456x1048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>CodeRabbit &#8211; AI Code Reviews That Actually Help <em>(Sponsor)</em></h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.coderabbit.ai/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2elX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.png 424w, https://substackcdn.com/image/fetch/$s_!2elX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.png 848w, https://substackcdn.com/image/fetch/$s_!2elX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.png 1272w, https://substackcdn.com/image/fetch/$s_!2elX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2elX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&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.coderabbit.ai/&quot;,&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_!2elX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.png 424w, https://substackcdn.com/image/fetch/$s_!2elX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.png 848w, https://substackcdn.com/image/fetch/$s_!2elX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.png 1272w, https://substackcdn.com/image/fetch/$s_!2elX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c203c5c-f72b-4167-a7cd-f306b6cfea43_1600x800.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><figcaption class="image-caption"><a href="https://www.coderabbit.ai/">CodeRabbit AI code reviews</a></figcaption></figure></div><p>As someone who&#8217;s reviewed thousands of pull requests, I can confidently say that <strong>CodeRabbit gets it right</strong>.</p><p>It doesn&#8217;t just flag lint rules. It understands your code structure using AST, explains the &#8220;why&#8221; behind each suggestion, and summarizes complex changes clearly for both reviewers and authors.</p><p>Top 5 reasons why you should try CodeRabbit and use it every day:</p><ul><li><p><strong>Context-aware reviews</strong>: It knows how your changes impact the full system, not just the diff.</p></li><li><p><strong>Security and performance insights</strong>: Detects issues like vulnerabilities and slow patterns (e.g. sequential DB calls).</p></li><li><p><strong>Custom team learning</strong>: Learns from your feedback and adapts reviews to your team's coding standards.</p></li><li><p><strong>PR summaries and diagrams</strong>: Generates clear explanations, changelogs, and sequence diagrams.</p></li></ul><p></p><p><strong>Open source friendly</strong>: Free forever for public repos. No catch. CodeRabbit Pro is free forever.</p><p><a href="https://www.coderabbit.ai">Try CodeRabbit on your next PR</a> -&gt; no card needed, no BS. Just better reviews.</p><h1>Motivation</h1><p>The software job market in 2025 is brutal. One job post can attract <strong>hundreds</strong> of applicants. Ghosting is the norm. And even highly skilled devs are struggling to land interviews.</p><p>I keep getting the same question from my readers:</p><blockquote><p><em>&#8220;How can I stand out and actually get hired in tech today?&#8221;</em></p></blockquote><p>So I put together this no-fluff guide to help you rise above the noise.</p><p><strong>Here are 6 battle-tested strategies to increase your chances and become the dev companies </strong><em><strong>want</strong></em><strong> to hire.</strong></p><h1>Craft a Banger CV</h1><p>Recruiters spend <strong>5&#8211;7 seconds</strong> skimming your CV. That&#8217;s it. So forget writing your life story. <strong>Your CV should sell you in seconds.</strong></p><p>Here&#8217;s what works:</p><ul><li><p>Keep it <strong>max 2 pages</strong>, clean and easy to read</p></li><li><p><strong>Tailor</strong> it to each job posting</p></li><li><p>Start with a <strong>strong profile summary</strong> (show impact, not fluff)</p></li><li><p>Prioritize <strong>recent</strong> and <strong>relevant</strong> experiences</p></li><li><p>Skip skill bars or percentages, they're meaningless</p></li><li><p>Highlight <strong>impact and results</strong>, not just tasks</p></li><li><p>Mention only unusual hobbies (skip &#8220;reading&#8221; and &#8220;traveling&#8221;)</p></li></ul><p></p><p><strong>Pro tip:</strong> Treat your CV like a landing page. If it doesn&#8217;t hook them fast, it&#8217;s ignored.</p><h1>LinkedIn = Your Digital Interview</h1><p>Companies will Google you. Your LinkedIn is usually the first thing they&#8217;ll see. And guess what? <strong>A weak profile can kill your chances, even if your CV is amazing.</strong></p><p>Here&#8217;s how to make your LinkedIn work <em>for</em> you:</p><ul><li><p>&#9989; Use a clean, professional photo</p></li><li><p>&#9989; Add a compelling headline</p><ul><li><p>F.e.: Senior React Dev | Built scalable UIs at X</p></li></ul></li><li><p>&#9989; Write a short, punchy About section</p></li><li><p>&#9989; Feature top projects or articles</p></li><li><p>&#9989; Get endorsements and referrals</p></li><li><p>&#9989; Comment on posts, share your thoughts, be visible</p></li></ul><p></p><p>And save the rants and memes for Facebook or X. LinkedIn is where hiring happens.</p><h1>Build a Strong Online Presence</h1><p>Would you hire someone who barely exists online? Neither would most companies.</p><p><strong>Your online presence = proof of who you are.</strong></p><ul><li><p>&#127919; A GitHub full of real projects</p></li><li><p>&#127919; A blog or personal site</p></li><li><p>&#127919; A few solid LinkedIn posts</p></li><li><p>&#127919; Contributions to open-source</p></li><li><p>&#127919; A short portfolio reel or case study</p></li></ul><p></p><p>You don&#8217;t need to be famous. You just need to show up.</p><p>Your network is your net worth. Every comment, share, or connection could lead to a job offer.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XlL8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ab34e3e-36ff-44a1-bdb6-cb8c481b106b_1290x1292.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XlL8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ab34e3e-36ff-44a1-bdb6-cb8c481b106b_1290x1292.png 424w, https://substackcdn.com/image/fetch/$s_!XlL8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ab34e3e-36ff-44a1-bdb6-cb8c481b106b_1290x1292.png 848w, https://substackcdn.com/image/fetch/$s_!XlL8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ab34e3e-36ff-44a1-bdb6-cb8c481b106b_1290x1292.png 1272w, https://substackcdn.com/image/fetch/$s_!XlL8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ab34e3e-36ff-44a1-bdb6-cb8c481b106b_1290x1292.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XlL8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ab34e3e-36ff-44a1-bdb6-cb8c481b106b_1290x1292.png" width="570" height="570.8837209302326" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4ab34e3e-36ff-44a1-bdb6-cb8c481b106b_1290x1292.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1292,&quot;width&quot;:1290,&quot;resizeWidth&quot;:570,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&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="" title="" srcset="https://substackcdn.com/image/fetch/$s_!XlL8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ab34e3e-36ff-44a1-bdb6-cb8c481b106b_1290x1292.png 424w, https://substackcdn.com/image/fetch/$s_!XlL8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ab34e3e-36ff-44a1-bdb6-cb8c481b106b_1290x1292.png 848w, https://substackcdn.com/image/fetch/$s_!XlL8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ab34e3e-36ff-44a1-bdb6-cb8c481b106b_1290x1292.png 1272w, https://substackcdn.com/image/fetch/$s_!XlL8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ab34e3e-36ff-44a1-bdb6-cb8c481b106b_1290x1292.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><h1>Learn AI or Get Left Behind</h1><p>AI isn&#8217;t hype anymore. It&#8217;s the new reality. The devs who know how to use AI tools will replace those who don&#8217;t. Period.</p><p>Here&#8217;s why doubling down on AI will boost your job chances:</p><ul><li><p>It 10x&#8217;s your productivity</p></li><li><p>It shows you&#8217;re curious and adaptable</p></li><li><p>It shows humility and you&#8217;re willing to learn new tools</p></li></ul><p></p><p><strong>Don&#8217;t just say you &#8220;know ChatGPT.&#8221; Show how you&#8217;ve used AI in real projects for:</strong></p><ul><li><p>Speeding up debugging</p></li><li><p>Improving test coverage</p></li><li><p>Writing documentation faster</p></li></ul><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_!JEl5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48b2f1c0-3a56-4180-98d4-f4764b0e1f52_1158x806.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JEl5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48b2f1c0-3a56-4180-98d4-f4764b0e1f52_1158x806.png 424w, https://substackcdn.com/image/fetch/$s_!JEl5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48b2f1c0-3a56-4180-98d4-f4764b0e1f52_1158x806.png 848w, https://substackcdn.com/image/fetch/$s_!JEl5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48b2f1c0-3a56-4180-98d4-f4764b0e1f52_1158x806.png 1272w, https://substackcdn.com/image/fetch/$s_!JEl5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48b2f1c0-3a56-4180-98d4-f4764b0e1f52_1158x806.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JEl5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48b2f1c0-3a56-4180-98d4-f4764b0e1f52_1158x806.png" width="1158" height="806" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/48b2f1c0-3a56-4180-98d4-f4764b0e1f52_1158x806.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:806,&quot;width&quot;:1158,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:142260,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/161551117?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48b2f1c0-3a56-4180-98d4-f4764b0e1f52_1158x806.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JEl5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48b2f1c0-3a56-4180-98d4-f4764b0e1f52_1158x806.png 424w, https://substackcdn.com/image/fetch/$s_!JEl5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48b2f1c0-3a56-4180-98d4-f4764b0e1f52_1158x806.png 848w, https://substackcdn.com/image/fetch/$s_!JEl5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48b2f1c0-3a56-4180-98d4-f4764b0e1f52_1158x806.png 1272w, https://substackcdn.com/image/fetch/$s_!JEl5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48b2f1c0-3a56-4180-98d4-f4764b0e1f52_1158x806.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></p><h1>Learn Skills Most Devs Ignore</h1><p>AI gives you code in seconds. But that doesn&#8217;t mean you&#8217;re job-ready. To stand out in 2025, sharpen these 2 underrated but essential skills:</p><h3>Testing</h3><ul><li><p>Understand the <strong>testing pyramid</strong></p></li><li><p>Write <strong>end-to-end tests</strong> that reflect user behavior</p></li><li><p>Embrace <strong>regression testing</strong> and <strong>beta feedback loops</strong></p></li></ul><p></p><p>Great devs test. The best ones test like users.</p><h3>Code Review</h3><p>Code review is the new code writing. With AI spitting out code fast, <strong>reviewing well</strong> becomes a power skill.</p><p>Learn to:</p><ul><li><p>Spot bad patterns</p></li><li><p>Ask the right questions</p></li><li><p>Suggest clear improvements</p></li><li><p>Catch AI hallucinations and silent bugs</p></li></ul><p></p><p><strong>By doing so you will beat all vibe-coders and AI ninjas.</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_!ZLjb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc87015-dd39-4893-bb61-da8d52642697_1134x562.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZLjb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc87015-dd39-4893-bb61-da8d52642697_1134x562.png 424w, https://substackcdn.com/image/fetch/$s_!ZLjb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc87015-dd39-4893-bb61-da8d52642697_1134x562.png 848w, https://substackcdn.com/image/fetch/$s_!ZLjb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc87015-dd39-4893-bb61-da8d52642697_1134x562.png 1272w, https://substackcdn.com/image/fetch/$s_!ZLjb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc87015-dd39-4893-bb61-da8d52642697_1134x562.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZLjb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc87015-dd39-4893-bb61-da8d52642697_1134x562.png" width="1134" height="562" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0cc87015-dd39-4893-bb61-da8d52642697_1134x562.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:562,&quot;width&quot;:1134,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:100874,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/161551117?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc87015-dd39-4893-bb61-da8d52642697_1134x562.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZLjb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc87015-dd39-4893-bb61-da8d52642697_1134x562.png 424w, https://substackcdn.com/image/fetch/$s_!ZLjb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc87015-dd39-4893-bb61-da8d52642697_1134x562.png 848w, https://substackcdn.com/image/fetch/$s_!ZLjb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc87015-dd39-4893-bb61-da8d52642697_1134x562.png 1272w, https://substackcdn.com/image/fetch/$s_!ZLjb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0cc87015-dd39-4893-bb61-da8d52642697_1134x562.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><h1><strong>Prepare Smart, Not Just Hard</strong></h1><p>Don&#8217;t waste months grinding LeetCode if you don&#8217;t even understand the company you&#8217;re applying to.</p><p><strong>Study the company. </strong>Prepare like a pro:</p><ul><li><p>&#9989; Learn their product</p></li><li><p>&#9989; Check their tech stack</p></li><li><p>&#9989; Read recent blog posts</p></li><li><p>&#9989; Prepare questions related to their work</p></li></ul><p></p><p>While others bring textbook questions, you bring <strong>well-prepared curiosity.</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_!mSl-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4586aa68-e833-45b0-96ce-56e5f5cb2f9a_1140x676.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mSl-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4586aa68-e833-45b0-96ce-56e5f5cb2f9a_1140x676.png 424w, https://substackcdn.com/image/fetch/$s_!mSl-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4586aa68-e833-45b0-96ce-56e5f5cb2f9a_1140x676.png 848w, https://substackcdn.com/image/fetch/$s_!mSl-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4586aa68-e833-45b0-96ce-56e5f5cb2f9a_1140x676.png 1272w, https://substackcdn.com/image/fetch/$s_!mSl-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4586aa68-e833-45b0-96ce-56e5f5cb2f9a_1140x676.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mSl-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4586aa68-e833-45b0-96ce-56e5f5cb2f9a_1140x676.png" width="1140" height="676" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4586aa68-e833-45b0-96ce-56e5f5cb2f9a_1140x676.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:676,&quot;width&quot;:1140,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:123654,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/161551117?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4586aa68-e833-45b0-96ce-56e5f5cb2f9a_1140x676.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mSl-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4586aa68-e833-45b0-96ce-56e5f5cb2f9a_1140x676.png 424w, https://substackcdn.com/image/fetch/$s_!mSl-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4586aa68-e833-45b0-96ce-56e5f5cb2f9a_1140x676.png 848w, https://substackcdn.com/image/fetch/$s_!mSl-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4586aa68-e833-45b0-96ce-56e5f5cb2f9a_1140x676.png 1272w, https://substackcdn.com/image/fetch/$s_!mSl-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4586aa68-e833-45b0-96ce-56e5f5cb2f9a_1140x676.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><h1>Final Words</h1><p>Getting hired in 2025 takes more than just skills. You need clarity, strategy, and presence. <strong>It&#8217;s not about being the best dev. It&#8217;s about showing you&#8217;re the right dev for the team.</strong></p><p>If you want to sponsor this newsletter, <a href="https://craftbettersoftware.com/p/sponsorship">apply here</a>:</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://craftbettersoftware.com/p/sponsorship&quot;,&quot;text&quot;:&quot;Apply for Sponsorship&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://craftbettersoftware.com/p/sponsorship"><span>Apply for Sponsorship</span></a></p>]]></content:encoded></item><item><title><![CDATA[Write Clean Classes Like a PRO]]></title><description><![CDATA[7 essential tips to produce maintainable and intention-revealing classes]]></description><link>https://craftbettersoftware.com/p/write-clean-classes-like-a-pro</link><guid isPermaLink="false">https://craftbettersoftware.com/p/write-clean-classes-like-a-pro</guid><dc:creator><![CDATA[Daniel Moka]]></dc:creator><pubDate>Sat, 19 Apr 2025 05:00:55 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/59c93c86-3f68-4945-8dd4-afcb2978a3ba_1456x1048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1><strong>50% OFF - The Complete TDD course</strong></h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cMa_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cMa_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 424w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 848w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 1272w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cMa_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png" width="617" height="305.415" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:594,&quot;width&quot;:1200,&quot;resizeWidth&quot;:617,&quot;bytes&quot;:205765,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&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="" title="" srcset="https://substackcdn.com/image/fetch/$s_!cMa_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 424w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 848w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 1272w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.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>Are you ready to master clean code, testing and Test-Driven Development (TDD)?</p><p>I recently launched a complete <strong>TDD course containing everything you need to craft high-quality software.</strong></p><p>Now there is a 50% OFF for the course</p><p><a href="https://transformyourcraft.com/">Get instant access by clicking here</a>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://transformyourcraft.com/&quot;,&quot;text&quot;:&quot;Get Instant Access&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://transformyourcraft.com/"><span>Get Instant Access</span></a></p><h1>Motivation</h1><p>Writing software is hard. But reading it shouldn&#8217;t be. Clean code isn&#8217;t just prettier. It&#8217;s easier to change, easier to test, and easier to trust.</p><p><strong>When your classes are small, focused, and intention-revealing, your whole codebase becomes easier to work with.</strong> Clean classes lead to clean code.</p><p>Here are 6 quick principles I live by that help write clean classes:</p><h1>Use Nouns for Naming</h1><p>Classes represent things - or things that <em>do</em> things - <strong>so name them using nouns or noun phrases.</strong> Avoid using verbs for classes. This makes it easier for others to quickly understand the responsibilities of your classes.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1YnE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25e87532-8082-43ad-819b-0ae98f259fbf_635x128.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1YnE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25e87532-8082-43ad-819b-0ae98f259fbf_635x128.png 424w, https://substackcdn.com/image/fetch/$s_!1YnE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25e87532-8082-43ad-819b-0ae98f259fbf_635x128.png 848w, https://substackcdn.com/image/fetch/$s_!1YnE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25e87532-8082-43ad-819b-0ae98f259fbf_635x128.png 1272w, https://substackcdn.com/image/fetch/$s_!1YnE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25e87532-8082-43ad-819b-0ae98f259fbf_635x128.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1YnE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25e87532-8082-43ad-819b-0ae98f259fbf_635x128.png" width="635" height="128" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/25e87532-8082-43ad-819b-0ae98f259fbf_635x128.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:128,&quot;width&quot;:635,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:11603,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/161548718?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25e87532-8082-43ad-819b-0ae98f259fbf_635x128.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1YnE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25e87532-8082-43ad-819b-0ae98f259fbf_635x128.png 424w, https://substackcdn.com/image/fetch/$s_!1YnE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25e87532-8082-43ad-819b-0ae98f259fbf_635x128.png 848w, https://substackcdn.com/image/fetch/$s_!1YnE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25e87532-8082-43ad-819b-0ae98f259fbf_635x128.png 1272w, https://substackcdn.com/image/fetch/$s_!1YnE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25e87532-8082-43ad-819b-0ae98f259fbf_635x128.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Write code for humans to read, not just for machines to execute.</p><h1><strong>Avoid Getters and Setters</strong></h1><p>Getters and setters are evil. Period. Here&#8217;s 3 reasons why:</p><ol><li><p>Violate the &#8220;Tell, Don&#8217;t Ask&#8221; principle: Don&#8217;t ask for the information you need to do the work. Ask the object that has the information to do the work for you.</p></li><li><p>Violate the &#8220;Encapsulation&#8221; principle:  Objects should own their behavior and protect their own state.</p></li><li><p>Exposes implementation details: If we want to access one object from inside another, we're depending on how that object is built. If internals change, our code breaks and we have to fix it.</p></li></ol><p></p><p><strong>Hide internal state, and only expose what&#8217;s necessary. Keep fields private, and expose them via clear, intention-revealing methods.</strong></p><p>&#10060; player.setHealth(100)</p><p>&#9989; player.increaseHealth(20)</p><p>The only exceptions are classes that are purely data-transfer objects (DTOs).</p><h1>Expose a Single API</h1><p>If your class isn&#8217;t coordinating others (i.e., it&#8217;s not a service or orchestrator), keep the API tight. A class should act like a tool: one entry point, one clear responsibility. <strong>It means one public method, and optionally many other private methods.</strong></p><p>If you expose multiple public methods that do unrelated things, it's a strong signal that your class is doing too much. It&#8217;s time to split it into smaller, more focused classes.</p><h1>Arrange Methods by Call Order</h1><p>Nothing is worse than scrolling up and down in the code to understand the logic flow. <strong>Order class methods by how they&#8217;re called.</strong> This makes your code read like a story:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9uze!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F626fd5c5-30a2-4290-929a-d4ad7df015ae_1124x607.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9uze!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F626fd5c5-30a2-4290-929a-d4ad7df015ae_1124x607.png 424w, https://substackcdn.com/image/fetch/$s_!9uze!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F626fd5c5-30a2-4290-929a-d4ad7df015ae_1124x607.png 848w, https://substackcdn.com/image/fetch/$s_!9uze!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F626fd5c5-30a2-4290-929a-d4ad7df015ae_1124x607.png 1272w, https://substackcdn.com/image/fetch/$s_!9uze!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F626fd5c5-30a2-4290-929a-d4ad7df015ae_1124x607.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9uze!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F626fd5c5-30a2-4290-929a-d4ad7df015ae_1124x607.png" width="1124" height="607" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/626fd5c5-30a2-4290-929a-d4ad7df015ae_1124x607.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:607,&quot;width&quot;:1124,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:111947,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/161548718?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F626fd5c5-30a2-4290-929a-d4ad7df015ae_1124x607.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!9uze!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F626fd5c5-30a2-4290-929a-d4ad7df015ae_1124x607.png 424w, https://substackcdn.com/image/fetch/$s_!9uze!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F626fd5c5-30a2-4290-929a-d4ad7df015ae_1124x607.png 848w, https://substackcdn.com/image/fetch/$s_!9uze!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F626fd5c5-30a2-4290-929a-d4ad7df015ae_1124x607.png 1272w, https://substackcdn.com/image/fetch/$s_!9uze!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F626fd5c5-30a2-4290-929a-d4ad7df015ae_1124x607.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>Small change, big difference.</p><h1><strong>Favor Composition Over Inheritance</strong></h1><p>Avoid using inheritance for code reuse. When we start learning programming, inheritance seems like a cool way to reuse functions and remove duplications.</p><p>But after a time, we realize it just leads to tight coupling and fragile code bases. <strong>Use composition instead. It will make the design more flexible.</strong></p><p>Only use inheritance if there&#8217;s a clear is-a relationship between your domain objects.</p><h1>Use Functions in JavaScript</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!r7C5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644b1de1-121b-476b-b59c-eb471dbcb3aa_400x277.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!r7C5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644b1de1-121b-476b-b59c-eb471dbcb3aa_400x277.png 424w, https://substackcdn.com/image/fetch/$s_!r7C5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644b1de1-121b-476b-b59c-eb471dbcb3aa_400x277.png 848w, https://substackcdn.com/image/fetch/$s_!r7C5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644b1de1-121b-476b-b59c-eb471dbcb3aa_400x277.png 1272w, https://substackcdn.com/image/fetch/$s_!r7C5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644b1de1-121b-476b-b59c-eb471dbcb3aa_400x277.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!r7C5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644b1de1-121b-476b-b59c-eb471dbcb3aa_400x277.png" width="400" height="277" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/644b1de1-121b-476b-b59c-eb471dbcb3aa_400x277.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:277,&quot;width&quot;:400,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;How do Functions and Variable Environment Work Together in JavaScript?&#128064; |  by Arjun Junna | JavaScript in Plain English&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="How do Functions and Variable Environment Work Together in JavaScript?&#128064; |  by Arjun Junna | JavaScript in Plain English" title="How do Functions and Variable Environment Work Together in JavaScript?&#128064; |  by Arjun Junna | JavaScript in Plain English" srcset="https://substackcdn.com/image/fetch/$s_!r7C5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644b1de1-121b-476b-b59c-eb471dbcb3aa_400x277.png 424w, https://substackcdn.com/image/fetch/$s_!r7C5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644b1de1-121b-476b-b59c-eb471dbcb3aa_400x277.png 848w, https://substackcdn.com/image/fetch/$s_!r7C5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644b1de1-121b-476b-b59c-eb471dbcb3aa_400x277.png 1272w, https://substackcdn.com/image/fetch/$s_!r7C5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F644b1de1-121b-476b-b59c-eb471dbcb3aa_400x277.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>JavaScript is a <strong>functional-first</strong> language at its core. It treats functions as first-class citizens. So try to stick with functions, instead of classes.</p><p>Functions are <strong>lightweight</strong>, <strong>composable</strong>, and <strong>easier to test</strong>. They don't carry hidden state or lifecycle baggage like classes often do.</p><p>For most use cases like data transformation, business logic, or even configuration, simple, pure functions are clearer and more maintainable.</p><h1>Don&#8217;t Create Test for All Classes</h1><p>Avoid creating a test class for each production class:</p><p>&#10060; XTest for XClass</p><p>&#10060; YTest for YClass</p><p>&#10060; ZTest for ZClass</p><p>It couples your tests to the implementation details. It makes them fragile. Fragile tests frequently break during refactoring. If your tests break during refactoring then they don't have much value.</p><p>Instead, you should test your internal classes via the public APIs. By doing so you end up with a robust test suite that aids refactoring.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ULtp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ULtp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png 424w, https://substackcdn.com/image/fetch/$s_!ULtp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png 848w, https://substackcdn.com/image/fetch/$s_!ULtp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png 1272w, https://substackcdn.com/image/fetch/$s_!ULtp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ULtp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png" width="1175" height="530" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:530,&quot;width&quot;:1175,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;: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_!ULtp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png 424w, https://substackcdn.com/image/fetch/$s_!ULtp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png 848w, https://substackcdn.com/image/fetch/$s_!ULtp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png 1272w, https://substackcdn.com/image/fetch/$s_!ULtp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.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><h1>Conclusion</h1><p>Clean classes are the foundation of readable, maintainable software. They make your codebase a joy to work with, and easy to reason about.</p><p>To learn more Clean Code and testing best practices, check out my recently launched TDD course which includes:</p><ul><li><p>The fundamentals of <strong>Test-Driven Development</strong></p></li><li><p><strong>Three real-world TDD examples</strong> in C#, TypeScript and Rust</p></li><li><p>The most essential <strong>Clean Code</strong> tips</p></li><li><p><strong>The two schools</strong> of testing with the <strong>5 types of mocks</strong></p></li><li><p>Using TDD to <strong>design high-quality software</strong></p></li><li><p>Testing <strong>legacy code</strong></p></li><li><p><strong>Refactoring best practices</strong></p></li></ul><p></p><p><a href="https://transformyourcraft.com/">Get instant access by clicking here</a>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://transformyourcraft.com/&quot;,&quot;text&quot;:&quot;Get Instant Access&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://transformyourcraft.com/"><span>Get Instant Access</span></a></p>]]></content:encoded></item><item><title><![CDATA[How To Refactor Legacy Code]]></title><description><![CDATA[The art of making your code testable, testing it effectively, and refactoring it like a pro]]></description><link>https://craftbettersoftware.com/p/how-to-refactor-legacy-code</link><guid isPermaLink="false">https://craftbettersoftware.com/p/how-to-refactor-legacy-code</guid><dc:creator><![CDATA[Daniel Moka]]></dc:creator><pubDate>Sat, 12 Apr 2025 05:01:26 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/99da8269-67e3-4dac-9933-bd9651f3f90d_1456x1048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1><strong>50% OFF - The Complete TDD course</strong></h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cMa_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cMa_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 424w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 848w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 1272w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cMa_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png" width="617" height="305.415" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:594,&quot;width&quot;:1200,&quot;resizeWidth&quot;:617,&quot;bytes&quot;:205765,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&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="" title="" srcset="https://substackcdn.com/image/fetch/$s_!cMa_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 424w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 848w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 1272w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.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>Are you ready to master Clean Code, Testing and Test-Driven Development (TDD)?</p><p>I recently launched a complete <strong>TDD course containing everything you need to craft high-quality software.</strong></p><p>Now there is a 50% OFF for the course</p><p><a href="https://transformyourcraft.com/">Get instant access by clicking here</a>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://transformyourcraft.com/&quot;,&quot;text&quot;:&quot;Get Instant Access&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://transformyourcraft.com/"><span>Get Instant Access</span></a></p><h1>Motivation</h1><blockquote><p><em>&#8220;Legacy code is simply code without tests.&#8221; </em>- Michael C. Feathers</p></blockquote><p>Most legacy code isn&#8217;t bad code. It&#8217;s just untested. Untested code is scary. You can&#8217;t change it with confidence. You fear breaking things. It slows down development.</p><p>But there&#8217;s a way out of this trap. A proven strategy I&#8217;ve used in both startups and corporate environments to turn messy legacy code into clean, testable, and maintainable systems. </p><p>Here&#8217;s my 6-step approach to refactoring legacy code;</p><h1>The Ultimate Refactoring Strategy</h1><ol><li><p>Break Dependencies</p></li><li><p>Characterization testing</p></li><li><p>Approval testing</p></li><li><p>Property-based testing</p></li><li><p>Functional testing to reach 100% coverage</p></li><li><p>Refactor the code</p></li></ol><h1>Step 1: Break Dependencies</h1><p>Legacy code is hard to test. Your first goal isn&#8217;t to add tests everywhere.<br><strong>Your first goal is to make your code testable.</strong> Dependencies are the #1 reason code is hard to test. External calls like APIs, databases, or message queues make testing hard.</p><p>The first step is to look for places in the code where you can change behavior without changing structure. Look at this code:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QOyQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8107cb1b-b9e2-4716-89a2-0d9015e54e6f_998x422.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QOyQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8107cb1b-b9e2-4716-89a2-0d9015e54e6f_998x422.png 424w, https://substackcdn.com/image/fetch/$s_!QOyQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8107cb1b-b9e2-4716-89a2-0d9015e54e6f_998x422.png 848w, https://substackcdn.com/image/fetch/$s_!QOyQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8107cb1b-b9e2-4716-89a2-0d9015e54e6f_998x422.png 1272w, https://substackcdn.com/image/fetch/$s_!QOyQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8107cb1b-b9e2-4716-89a2-0d9015e54e6f_998x422.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QOyQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8107cb1b-b9e2-4716-89a2-0d9015e54e6f_998x422.png" width="998" height="422" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8107cb1b-b9e2-4716-89a2-0d9015e54e6f_998x422.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:422,&quot;width&quot;:998,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:72026,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/145824159?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8107cb1b-b9e2-4716-89a2-0d9015e54e6f_998x422.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!QOyQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8107cb1b-b9e2-4716-89a2-0d9015e54e6f_998x422.png 424w, https://substackcdn.com/image/fetch/$s_!QOyQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8107cb1b-b9e2-4716-89a2-0d9015e54e6f_998x422.png 848w, https://substackcdn.com/image/fetch/$s_!QOyQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8107cb1b-b9e2-4716-89a2-0d9015e54e6f_998x422.png 1272w, https://substackcdn.com/image/fetch/$s_!QOyQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8107cb1b-b9e2-4716-89a2-0d9015e54e6f_998x422.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>It has the <code>FileReader</code> dependency hardly coupled. Our goal is to break this dependency and use test doubles - mocks, stubs, fakes - with dependency injection:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fVao!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffecd5562-d601-45c0-af7b-c3cd861d1bde_942x646.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fVao!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffecd5562-d601-45c0-af7b-c3cd861d1bde_942x646.png 424w, https://substackcdn.com/image/fetch/$s_!fVao!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffecd5562-d601-45c0-af7b-c3cd861d1bde_942x646.png 848w, https://substackcdn.com/image/fetch/$s_!fVao!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffecd5562-d601-45c0-af7b-c3cd861d1bde_942x646.png 1272w, https://substackcdn.com/image/fetch/$s_!fVao!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffecd5562-d601-45c0-af7b-c3cd861d1bde_942x646.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fVao!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffecd5562-d601-45c0-af7b-c3cd861d1bde_942x646.png" width="942" height="646" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fecd5562-d601-45c0-af7b-c3cd861d1bde_942x646.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:646,&quot;width&quot;:942,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:111529,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/145824159?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffecd5562-d601-45c0-af7b-c3cd861d1bde_942x646.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fVao!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffecd5562-d601-45c0-af7b-c3cd861d1bde_942x646.png 424w, https://substackcdn.com/image/fetch/$s_!fVao!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffecd5562-d601-45c0-af7b-c3cd861d1bde_942x646.png 848w, https://substackcdn.com/image/fetch/$s_!fVao!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffecd5562-d601-45c0-af7b-c3cd861d1bde_942x646.png 1272w, https://substackcdn.com/image/fetch/$s_!fVao!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffecd5562-d601-45c0-af7b-c3cd861d1bde_942x646.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>Your goal should be to break all the dependencies in your legacy code, with two important notes:</p><ul><li><p>If the dependency is fast &#8594; use the real one, it leads to more realistic tests</p></li><li><p>If the dependency is essential for testing business logic &#8594; use the real one, it leads to more meaningful tests</p><p></p></li></ul><h1>Step 2: Characterization Testing</h1><p>Before refactoring, you need to understand legacy code. The goal of characterization testing is not about finding bugs. <strong>The goal is to understand behaviors.</strong></p><p>Use characterization tests when:</p><ul><li><p>The code is too complex to reason about</p></li><li><p>There is no documentation</p></li><li><p>There are no existing tests</p></li></ul><p></p><p>Let&#8217;s say you have this code snippet you don&#8217;t know anything about:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yBIP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cbd4c65-9bbc-4b6f-9b4d-18404e2db739_1342x794.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yBIP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cbd4c65-9bbc-4b6f-9b4d-18404e2db739_1342x794.png 424w, https://substackcdn.com/image/fetch/$s_!yBIP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cbd4c65-9bbc-4b6f-9b4d-18404e2db739_1342x794.png 848w, https://substackcdn.com/image/fetch/$s_!yBIP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cbd4c65-9bbc-4b6f-9b4d-18404e2db739_1342x794.png 1272w, https://substackcdn.com/image/fetch/$s_!yBIP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cbd4c65-9bbc-4b6f-9b4d-18404e2db739_1342x794.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yBIP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cbd4c65-9bbc-4b6f-9b4d-18404e2db739_1342x794.png" width="1342" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3cbd4c65-9bbc-4b6f-9b4d-18404e2db739_1342x794.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1342,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:135538,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/145824159?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cbd4c65-9bbc-4b6f-9b4d-18404e2db739_1342x794.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yBIP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cbd4c65-9bbc-4b6f-9b4d-18404e2db739_1342x794.png 424w, https://substackcdn.com/image/fetch/$s_!yBIP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cbd4c65-9bbc-4b6f-9b4d-18404e2db739_1342x794.png 848w, https://substackcdn.com/image/fetch/$s_!yBIP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cbd4c65-9bbc-4b6f-9b4d-18404e2db739_1342x794.png 1272w, https://substackcdn.com/image/fetch/$s_!yBIP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cbd4c65-9bbc-4b6f-9b4d-18404e2db739_1342x794.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>The best way to figure out is to write characterization tests around it.</p><p>Steps:</p><ol><li><p>Write a test that calls the legacy code</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fsBN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d30fcbb-60c5-4092-92ba-47344cd967cc_1042x310.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fsBN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d30fcbb-60c5-4092-92ba-47344cd967cc_1042x310.png 424w, https://substackcdn.com/image/fetch/$s_!fsBN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d30fcbb-60c5-4092-92ba-47344cd967cc_1042x310.png 848w, https://substackcdn.com/image/fetch/$s_!fsBN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d30fcbb-60c5-4092-92ba-47344cd967cc_1042x310.png 1272w, https://substackcdn.com/image/fetch/$s_!fsBN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d30fcbb-60c5-4092-92ba-47344cd967cc_1042x310.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fsBN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d30fcbb-60c5-4092-92ba-47344cd967cc_1042x310.png" width="1042" height="310" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2d30fcbb-60c5-4092-92ba-47344cd967cc_1042x310.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:310,&quot;width&quot;:1042,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:48153,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/145824159?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d30fcbb-60c5-4092-92ba-47344cd967cc_1042x310.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fsBN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d30fcbb-60c5-4092-92ba-47344cd967cc_1042x310.png 424w, https://substackcdn.com/image/fetch/$s_!fsBN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d30fcbb-60c5-4092-92ba-47344cd967cc_1042x310.png 848w, https://substackcdn.com/image/fetch/$s_!fsBN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d30fcbb-60c5-4092-92ba-47344cd967cc_1042x310.png 1272w, https://substackcdn.com/image/fetch/$s_!fsBN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2d30fcbb-60c5-4092-92ba-47344cd967cc_1042x310.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><ol start="2"><li><p>Add an assertion you think should fail.</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!To5C!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93f044ca-f58c-45b1-b3ca-f3b8bf858a94_1042x348.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!To5C!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93f044ca-f58c-45b1-b3ca-f3b8bf858a94_1042x348.png 424w, https://substackcdn.com/image/fetch/$s_!To5C!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93f044ca-f58c-45b1-b3ca-f3b8bf858a94_1042x348.png 848w, https://substackcdn.com/image/fetch/$s_!To5C!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93f044ca-f58c-45b1-b3ca-f3b8bf858a94_1042x348.png 1272w, https://substackcdn.com/image/fetch/$s_!To5C!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93f044ca-f58c-45b1-b3ca-f3b8bf858a94_1042x348.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!To5C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93f044ca-f58c-45b1-b3ca-f3b8bf858a94_1042x348.png" width="1042" height="348" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/93f044ca-f58c-45b1-b3ca-f3b8bf858a94_1042x348.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:348,&quot;width&quot;:1042,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:60788,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/145824159?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93f044ca-f58c-45b1-b3ca-f3b8bf858a94_1042x348.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!To5C!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93f044ca-f58c-45b1-b3ca-f3b8bf858a94_1042x348.png 424w, https://substackcdn.com/image/fetch/$s_!To5C!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93f044ca-f58c-45b1-b3ca-f3b8bf858a94_1042x348.png 848w, https://substackcdn.com/image/fetch/$s_!To5C!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93f044ca-f58c-45b1-b3ca-f3b8bf858a94_1042x348.png 1272w, https://substackcdn.com/image/fetch/$s_!To5C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93f044ca-f58c-45b1-b3ca-f3b8bf858a94_1042x348.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><ol start="3"><li><p>Execute test to observe behavior</p><p><br>It will likely result in an error like:</p></li></ol><pre><code><code>Expected formattedText to be &lt;null&gt;, but found "plain text".</code></code></pre><ol start="4"><li><p>Update the test to capture the behavior</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3mWP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28c29f8d-0031-4f80-bd33-7cd3baa8bee2_1042x348.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3mWP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28c29f8d-0031-4f80-bd33-7cd3baa8bee2_1042x348.png 424w, https://substackcdn.com/image/fetch/$s_!3mWP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28c29f8d-0031-4f80-bd33-7cd3baa8bee2_1042x348.png 848w, https://substackcdn.com/image/fetch/$s_!3mWP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28c29f8d-0031-4f80-bd33-7cd3baa8bee2_1042x348.png 1272w, https://substackcdn.com/image/fetch/$s_!3mWP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28c29f8d-0031-4f80-bd33-7cd3baa8bee2_1042x348.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3mWP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28c29f8d-0031-4f80-bd33-7cd3baa8bee2_1042x348.png" width="1042" height="348" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/28c29f8d-0031-4f80-bd33-7cd3baa8bee2_1042x348.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:348,&quot;width&quot;:1042,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:70171,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/145824159?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28c29f8d-0031-4f80-bd33-7cd3baa8bee2_1042x348.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3mWP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28c29f8d-0031-4f80-bd33-7cd3baa8bee2_1042x348.png 424w, https://substackcdn.com/image/fetch/$s_!3mWP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28c29f8d-0031-4f80-bd33-7cd3baa8bee2_1042x348.png 848w, https://substackcdn.com/image/fetch/$s_!3mWP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28c29f8d-0031-4f80-bd33-7cd3baa8bee2_1042x348.png 1272w, https://substackcdn.com/image/fetch/$s_!3mWP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28c29f8d-0031-4f80-bd33-7cd3baa8bee2_1042x348.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><ol start="5"><li><p>Repeat this cycle with new tests until you fully understand the code.<br><br><strong>By doing so you both learn about the business logic and document behaviours with automated tests.</strong></p></li></ol><h1>Step 3: Approval testing</h1><p>Writing assertions for complex objects is painful. Approval testing makes it easier. <strong>Instead of checking every field manually, you capture the full output once,  then compare future runs against it.</strong></p><p>How it works:</p><ol><li><p>Generate output from your code</p></li><li><p>Approve it as correct (store it in a file)</p></li><li><p>On future runs &#8594; compare new output vs approved</p></li></ol><p></p><p>Example of a normal unit test:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uqRv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20b0c7bd-d8aa-46b7-ab42-95c12820d21a_1178x684.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uqRv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20b0c7bd-d8aa-46b7-ab42-95c12820d21a_1178x684.png 424w, https://substackcdn.com/image/fetch/$s_!uqRv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20b0c7bd-d8aa-46b7-ab42-95c12820d21a_1178x684.png 848w, https://substackcdn.com/image/fetch/$s_!uqRv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20b0c7bd-d8aa-46b7-ab42-95c12820d21a_1178x684.png 1272w, https://substackcdn.com/image/fetch/$s_!uqRv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20b0c7bd-d8aa-46b7-ab42-95c12820d21a_1178x684.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uqRv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20b0c7bd-d8aa-46b7-ab42-95c12820d21a_1178x684.png" width="1178" height="684" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/20b0c7bd-d8aa-46b7-ab42-95c12820d21a_1178x684.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:684,&quot;width&quot;:1178,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:159322,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/145824159?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20b0c7bd-d8aa-46b7-ab42-95c12820d21a_1178x684.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uqRv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20b0c7bd-d8aa-46b7-ab42-95c12820d21a_1178x684.png 424w, https://substackcdn.com/image/fetch/$s_!uqRv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20b0c7bd-d8aa-46b7-ab42-95c12820d21a_1178x684.png 848w, https://substackcdn.com/image/fetch/$s_!uqRv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20b0c7bd-d8aa-46b7-ab42-95c12820d21a_1178x684.png 1272w, https://substackcdn.com/image/fetch/$s_!uqRv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20b0c7bd-d8aa-46b7-ab42-95c12820d21a_1178x684.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>Problems with this test:</p><ul><li><p>Hard to maintain</p></li><li><p>If data structure changes &#8594; 5 places to update.</p></li><li><p>Tiresome to write assertions for large data structure</p></li></ul><p></p><p>Here is the same test with an approval test:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dh_a!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85a3fc92-74b0-4e49-be9f-5f0f39fcebc7_854x460.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dh_a!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85a3fc92-74b0-4e49-be9f-5f0f39fcebc7_854x460.png 424w, https://substackcdn.com/image/fetch/$s_!dh_a!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85a3fc92-74b0-4e49-be9f-5f0f39fcebc7_854x460.png 848w, https://substackcdn.com/image/fetch/$s_!dh_a!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85a3fc92-74b0-4e49-be9f-5f0f39fcebc7_854x460.png 1272w, https://substackcdn.com/image/fetch/$s_!dh_a!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85a3fc92-74b0-4e49-be9f-5f0f39fcebc7_854x460.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dh_a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85a3fc92-74b0-4e49-be9f-5f0f39fcebc7_854x460.png" width="691" height="372.2014051522248" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/85a3fc92-74b0-4e49-be9f-5f0f39fcebc7_854x460.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:460,&quot;width&quot;:854,&quot;resizeWidth&quot;:691,&quot;bytes&quot;:69432,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/145824159?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85a3fc92-74b0-4e49-be9f-5f0f39fcebc7_854x460.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dh_a!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85a3fc92-74b0-4e49-be9f-5f0f39fcebc7_854x460.png 424w, https://substackcdn.com/image/fetch/$s_!dh_a!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85a3fc92-74b0-4e49-be9f-5f0f39fcebc7_854x460.png 848w, https://substackcdn.com/image/fetch/$s_!dh_a!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85a3fc92-74b0-4e49-be9f-5f0f39fcebc7_854x460.png 1272w, https://substackcdn.com/image/fetch/$s_!dh_a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85a3fc92-74b0-4e49-be9f-5f0f39fcebc7_854x460.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></p><p>Just one line. It asserts the whole data structure in a text format. On the first run, it generates a file like this:</p><ul><li><p><code>ExportToXml_Should_Work.received.txt</code></p></li></ul><p></p><p>When you approve it manually, then it becomes:</p><ul><li><p><code>ExportToXml_Should_Work.approved.txt</code></p></li></ul><p></p><p>Then in any future run, you just compare the new received vs approved. If there is a change, you probably broke some functionality.</p><p><strong>This practice works perfectly for outputs like JSON, HTML, or text reports.</strong> You can find approval testing libraries in almost any programming language, check them out!</p><h1> &#9888;&#65039;  A word of caution</h1><p>Approval tests are temporary tools. They often lead to fragile tests. They slow you down in the long run. Once your code is clean, refactored, and covered by solid functional tests, delete most of them without regret.</p><h1>Step 4: Property-based testing</h1><p>This is my favorite type of testing. Why? <strong>Because bugs don&#8217;t  hide in the happy paths. They hide in the edge and corner cases.</strong></p><p>Property-based testing helps you generate a large number of test cases with random inputs, then verifies that certain behaviors always hold true no matter what.</p><p><strong>It&#8217;s super handy because it captures the key behaviors of your app</strong> - the things that should never break when you refactor.</p><p>To learn more about property testing, I wrote a full article on this topic, <a href="https://craftbettersoftware.com/p/how-i-write-1000s-tests-with-little?utm_source=publication-search">click here to read more</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_!nwId!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F418e1a43-fd46-4230-9b67-9aa3d89b08fd_733x449.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nwId!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F418e1a43-fd46-4230-9b67-9aa3d89b08fd_733x449.png 424w, https://substackcdn.com/image/fetch/$s_!nwId!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F418e1a43-fd46-4230-9b67-9aa3d89b08fd_733x449.png 848w, https://substackcdn.com/image/fetch/$s_!nwId!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F418e1a43-fd46-4230-9b67-9aa3d89b08fd_733x449.png 1272w, https://substackcdn.com/image/fetch/$s_!nwId!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F418e1a43-fd46-4230-9b67-9aa3d89b08fd_733x449.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nwId!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F418e1a43-fd46-4230-9b67-9aa3d89b08fd_733x449.png" width="733" height="449" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/418e1a43-fd46-4230-9b67-9aa3d89b08fd_733x449.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:449,&quot;width&quot;:733,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;: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_!nwId!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F418e1a43-fd46-4230-9b67-9aa3d89b08fd_733x449.png 424w, https://substackcdn.com/image/fetch/$s_!nwId!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F418e1a43-fd46-4230-9b67-9aa3d89b08fd_733x449.png 848w, https://substackcdn.com/image/fetch/$s_!nwId!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F418e1a43-fd46-4230-9b67-9aa3d89b08fd_733x449.png 1272w, https://substackcdn.com/image/fetch/$s_!nwId!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F418e1a43-fd46-4230-9b67-9aa3d89b08fd_733x449.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><h1>Step 5: Go for 100% coverage</h1><p>Aim for ~100% code and behavior coverage. Why so strict? <strong>Because anything less leaves room for bugs when you refactor your code.</strong> You want maximum confidence. You want a test suite you fully trust. Sure, 100% coverage is almost impossible. But your goal should be to get as close to that as possible.</p><p>Use tools like:</p><ul><li><p>Code Coverage &#8594; shows what lines of code are uncovered</p></li><li><p>Mutation Testing &#8594; shows what behaviors are untested (even if your code is covered)</p></li></ul><p></p><p>Run these tools iteratively and keep adding functional tests until you maximize the coverage results. To learn more about Mutation Testing, <a href="https://craftbettersoftware.com/p/forget-code-coverage-use-mutation?utm_source=publication-search">check out my recent article about it.</a></p><h1>Step 6: Refactor with Confidence</h1><p>Now the fun part: With a solid test suite in place, you can confidently refactor your code.</p><p>Here are 6 tips you can use to refactor your code: </p><ul><li><p>Do aggressive refactoring at small scales</p></li><li><p>Master the refactoring hotkeys of your IDE</p></li><li><p>Turn comments into well-named components</p></li><li><p>Follow the Rule of Three to remove duplications</p></li><li><p>Don't mix refactoring with changing behavior</p></li><li><p>Use TDD to make refactoring a core part of development</p></li></ul><h1>Conclusion</h1><p>Refactoring legacy code isn&#8217;t hard. It just takes the right techniques and a bit of risk management to do it safely.</p><p>If you want to learn more about Mutation Testing and Test-Driven Development, check out my recently launched <strong>complete TDD course</strong>, which includes:</p><ul><li><p>The fundamentals of <strong>Test-Driven Development</strong></p></li><li><p><strong>Three real-world TDD examples</strong> in C#, TypeScript and Rust</p></li><li><p>The power of <strong>Mutation Testing</strong></p></li><li><p>Using TDD to <strong>design high-quality software</strong></p></li><li><p>Testing <strong>legacy code</strong></p></li><li><p><strong>Refactoring best practices</strong></p></li></ul><p></p><p><a href="https://transformyourcraft.com/">Get instant access by clicking here</a>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://transformyourcraft.com/&quot;,&quot;text&quot;:&quot;Get Instant Access&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://transformyourcraft.com/"><span>Get Instant Access</span></a></p>]]></content:encoded></item><item><title><![CDATA[6 Testing Mistakes You Should Avoid]]></title><description><![CDATA[Each with a simple fix you can apply today]]></description><link>https://craftbettersoftware.com/p/6-testing-mistakes-you-should-avoid</link><guid isPermaLink="false">https://craftbettersoftware.com/p/6-testing-mistakes-you-should-avoid</guid><dc:creator><![CDATA[Daniel Moka]]></dc:creator><pubDate>Sat, 05 Apr 2025 05:00:42 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/c7629a07-057f-457a-9000-6b12ef473b4b_1456x1048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>50% OFF - The Complete TDD course</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cMa_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cMa_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 424w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 848w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 1272w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cMa_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png" width="617" height="305.415" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:594,&quot;width&quot;:1200,&quot;resizeWidth&quot;:617,&quot;bytes&quot;:205765,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&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="" title="" srcset="https://substackcdn.com/image/fetch/$s_!cMa_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 424w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 848w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 1272w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.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>Are you ready to master Clean Code, Testing and Test-Driven Development (TDD)?</p><p>I recently launched a complete <strong>TDD course containing everything you need to craft high-quality software.</strong></p><p>Now there is a 50% OFF for the course</p><p><a href="https://transformyourcraft.com/">Get instant access by clicking here</a>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://transformyourcraft.com/&quot;,&quot;text&quot;:&quot;Get Instant Access&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://transformyourcraft.com/"><span>Get Instant Access</span></a></p><h1>Motivation</h1><p>Most developers are bad at testing. Not because testing is hard, but because they keep making the same mistakes over and over again.</p><p>I&#8217;ve helped many teams and developers, and I&#8217;ve seen the same 6 mistakes pop up every single time.</p><p>The good news? <strong>If you avoid these, I guarantee you will be better than 90% of developers out there.</strong> Let&#8217;s get started!</p><h2>&#10060;  Mistake #1: Testing Too Late</h2><h3><strong>&#9989;  Do shift-left testing instead</strong></h3><p>Tests aren&#8217;t just for verification.<strong> They&#8217;re powerful tools for learning, understanding, and designing software. </strong>This is what shift-left testing is all about: moving testing earlier in the development process.</p><p>The earlier you test, the easier, faster, and cheaper it becomes to fix issues.<br>It leads to higher quality, faster feedback, and more confidence.</p><p>Remember: the earlier you test, the better everything gets.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BHEC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b62f679-1a21-4de2-a76d-af6a270d2f5b_885x627.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BHEC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b62f679-1a21-4de2-a76d-af6a270d2f5b_885x627.png 424w, https://substackcdn.com/image/fetch/$s_!BHEC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b62f679-1a21-4de2-a76d-af6a270d2f5b_885x627.png 848w, https://substackcdn.com/image/fetch/$s_!BHEC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b62f679-1a21-4de2-a76d-af6a270d2f5b_885x627.png 1272w, https://substackcdn.com/image/fetch/$s_!BHEC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b62f679-1a21-4de2-a76d-af6a270d2f5b_885x627.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BHEC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b62f679-1a21-4de2-a76d-af6a270d2f5b_885x627.png" width="625" height="442.79661016949154" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7b62f679-1a21-4de2-a76d-af6a270d2f5b_885x627.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:627,&quot;width&quot;:885,&quot;resizeWidth&quot;:625,&quot;bytes&quot;:27490,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/148459382?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b62f679-1a21-4de2-a76d-af6a270d2f5b_885x627.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BHEC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b62f679-1a21-4de2-a76d-af6a270d2f5b_885x627.png 424w, https://substackcdn.com/image/fetch/$s_!BHEC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b62f679-1a21-4de2-a76d-af6a270d2f5b_885x627.png 848w, https://substackcdn.com/image/fetch/$s_!BHEC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b62f679-1a21-4de2-a76d-af6a270d2f5b_885x627.png 1272w, https://substackcdn.com/image/fetch/$s_!BHEC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7b62f679-1a21-4de2-a76d-af6a270d2f5b_885x627.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><h2>&#10060; Mistake #2: Focusing on Code Coverage</h2><h3>&#9989; Use Mutation Testing instead</h3><p>Code coverage is NOT a quality metric. You can have 100% coverage with terrible tests and zero assertions. Coverage helps detect untested areas of the code, but it doesn't tell anything about the tested areas. It gives you a false sense of security.</p><p>How can we measure the quality of our tests then?</p><p>The answer is: <strong>Mutation Testing. </strong>It is a technique that makes small changes to your code and then runs your tests. It is expected that at least one of your tests will fail. If not, it might indicate that your tests do not fully cover your code.</p><p><strong>Code coverage won&#8217;t tell you how good your tests are. Mutation Testing will.</strong></p><h2>&#10060; Mistake #3: Testing Implementation Details</h2><h3>&#9989; Test behaviors via public APIs</h3><p>I get this question a lot: How do you write tests for private functions?</p><p>Answer: You don't</p><p>They are implementation details. If you couple your tests to implementation details then they become fragile and break during refactoring. If your tests often break, they lose their value.</p><p><strong>Don't couple your tests to code structure.</strong></p><p><strong>Couple them to the behaviors of the public APIs</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_!_gKB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda82affc-f912-462a-8cfc-e4de64d56464_1144x996.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_gKB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda82affc-f912-462a-8cfc-e4de64d56464_1144x996.png 424w, https://substackcdn.com/image/fetch/$s_!_gKB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda82affc-f912-462a-8cfc-e4de64d56464_1144x996.png 848w, https://substackcdn.com/image/fetch/$s_!_gKB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda82affc-f912-462a-8cfc-e4de64d56464_1144x996.png 1272w, https://substackcdn.com/image/fetch/$s_!_gKB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda82affc-f912-462a-8cfc-e4de64d56464_1144x996.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_gKB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda82affc-f912-462a-8cfc-e4de64d56464_1144x996.png" width="1144" height="996" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/da82affc-f912-462a-8cfc-e4de64d56464_1144x996.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:996,&quot;width&quot;:1144,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:156107,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/148459382?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda82affc-f912-462a-8cfc-e4de64d56464_1144x996.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_gKB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda82affc-f912-462a-8cfc-e4de64d56464_1144x996.png 424w, https://substackcdn.com/image/fetch/$s_!_gKB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda82affc-f912-462a-8cfc-e4de64d56464_1144x996.png 848w, https://substackcdn.com/image/fetch/$s_!_gKB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda82affc-f912-462a-8cfc-e4de64d56464_1144x996.png 1272w, https://substackcdn.com/image/fetch/$s_!_gKB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda82affc-f912-462a-8cfc-e4de64d56464_1144x996.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><h2>&#10060; Mistake #4: Focusing Only on Clean Code</h2><h3>&#9989; Focus on Clean Tests as well</h3><p>Most developers obsess over clean production code: naming, structure and SOLID principles.</p><p>But then they treat tests like second-class citizens:</p><ul><li><p>Cryptic method names</p></li><li><p>Copy-pasted setups</p></li><li><p>Insufficient assertions</p></li></ul><p></p><p>The result? Tests become <strong>fragile</strong>, <strong>hard to read</strong>, and <strong>impossible to trust</strong>.</p><p>Clean code dies fast without clean tests. Your test suite should be your safety net, not a trap. Clean tests are simple, readable, and tell a story. They give you confidence to refactor, move fast, and stay in control.</p><p><strong>If your tests feel like a burden, it's time to clean them up.</strong></p><h2>&#10060; Mistake #5: Doing Test-last</h2><h3>&#9989; Do test-first with TDD</h3><p>Test-first beats test-last development every time:</p><ul><li><p>Test-first is fun - test-last feels like a chore</p></li><li><p>Test-first helps you design code - test-last only verifies code</p></li><li><p>Test-first puts your API under pressure - test-last just accepts it</p></li><li><p>Test-first shows if a test is meaningful - test-last can lead to false positives</p></li><li><p>Test-first helps ensure uniqueness - test-last often causes duplication</p></li></ul><p></p><p><strong>Test-Driven Development (TDD)</strong> is the ultimate form of test-first. It lets you <strong>design your code by writing automated tests that shape your software.</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_!y9SQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065b78cd-9312-4609-a2b0-a026f7b5d67d_609x544.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!y9SQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065b78cd-9312-4609-a2b0-a026f7b5d67d_609x544.png 424w, https://substackcdn.com/image/fetch/$s_!y9SQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065b78cd-9312-4609-a2b0-a026f7b5d67d_609x544.png 848w, https://substackcdn.com/image/fetch/$s_!y9SQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065b78cd-9312-4609-a2b0-a026f7b5d67d_609x544.png 1272w, https://substackcdn.com/image/fetch/$s_!y9SQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065b78cd-9312-4609-a2b0-a026f7b5d67d_609x544.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!y9SQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065b78cd-9312-4609-a2b0-a026f7b5d67d_609x544.png" width="477" height="426.0886699507389" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/065b78cd-9312-4609-a2b0-a026f7b5d67d_609x544.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:544,&quot;width&quot;:609,&quot;resizeWidth&quot;:477,&quot;bytes&quot;:35262,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/148459382?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065b78cd-9312-4609-a2b0-a026f7b5d67d_609x544.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!y9SQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065b78cd-9312-4609-a2b0-a026f7b5d67d_609x544.png 424w, https://substackcdn.com/image/fetch/$s_!y9SQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065b78cd-9312-4609-a2b0-a026f7b5d67d_609x544.png 848w, https://substackcdn.com/image/fetch/$s_!y9SQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065b78cd-9312-4609-a2b0-a026f7b5d67d_609x544.png 1272w, https://substackcdn.com/image/fetch/$s_!y9SQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F065b78cd-9312-4609-a2b0-a026f7b5d67d_609x544.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><h2>&#10060; Mistake #6: Testing Only Within Your Team</h2><h3>&#9989; Test together with your users</h3><p>Developers tend to forget the most important testing type. It is not security, integration or performance testing.</p><p>It's beta testing:</p><ul><li><p>It's where your software meets reality</p></li><li><p>It's where your customers interact with your product</p></li><li><p>It's where you get real-time feedback</p></li></ul><p></p><p>It's not about finding bugs. It's about learning the domain and shaping the software with the customer together.</p><p><strong>Clean code helps you build the software right.</strong></p><p><strong>Beta testing helps you build the right software.</strong></p><p>Do it every week.</p><h1>Conclusion</h1><p>The best way to build confidence in your code is to test it well. If you want to master testing, Test-Driven Development and Mutation Testing check out my recently launched <strong>complete TDD course</strong>, which includes:</p><ul><li><p>The fundamentals of <strong>Test-Driven Development</strong></p></li><li><p><strong>Three real-world TDD examples</strong> in C#, TypeScript and Rust</p></li><li><p>The power of <strong>Mutation Testing</strong></p></li><li><p>Using TDD to <strong>design high-quality software</strong></p></li><li><p>Testing <strong>legacy code</strong></p></li><li><p><strong>Refactoring best practices</strong></p></li></ul><p></p><p><a href="https://transformyourcraft.com/">Get instant access by clicking here</a>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://transformyourcraft.com/&quot;,&quot;text&quot;:&quot;Get Instant Access&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://transformyourcraft.com/"><span>Get Instant Access</span></a></p>]]></content:encoded></item><item><title><![CDATA[Code Review Like a PRO]]></title><description><![CDATA[5 Essential Tips for Doing Code Reviews in the Age of AI]]></description><link>https://craftbettersoftware.com/p/code-review-like-a-pro</link><guid isPermaLink="false">https://craftbettersoftware.com/p/code-review-like-a-pro</guid><dc:creator><![CDATA[Daniel Moka]]></dc:creator><pubDate>Sat, 29 Mar 2025 06:01:17 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/c70c9cbb-7816-46e0-869f-26a6f7ad1f49_1456x1048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>50% OFF - The Complete TDD course</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cMa_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cMa_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 424w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 848w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 1272w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cMa_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png" width="617" height="305.415" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:594,&quot;width&quot;:1200,&quot;resizeWidth&quot;:617,&quot;bytes&quot;:205765,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&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="" title="" srcset="https://substackcdn.com/image/fetch/$s_!cMa_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 424w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 848w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 1272w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.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>Are you ready to master Clean Code, Testing and Test-Driven Development (TDD)?</p><p>I recently launched a complete <strong>TDD course containing everything you need to craft high-quality software.</strong></p><p>Now there is a 50% OFF for the course</p><p><a href="https://transformyourcraft.com/">Get instant access by clicking here</a>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://transformyourcraft.com/&quot;,&quot;text&quot;:&quot;Get Instant Access&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://transformyourcraft.com/"><span>Get Instant Access</span></a></p><h1>Motivation</h1><p>AI changes the game. It spits out code in seconds. But that makes your ability to review code more important than ever.</p><p><strong>Our focus often shifts from writing code to reviewing it</strong>. Reviewing code efficiently is the new superpower in the era of AI. </p><p>In this article, I will share 5 tips on how I review code in my team:</p><h1>Drop the Ego, Comment with Kindness</h1><p>The first rule of code reviews is to be kind. Always critique the code itself, never the coder. Be clear about your feedback on the code quality, but gentle and supportive toward the individual. </p><p>Encouragement is also powerful, so <strong>always leave at least one positive comment to boost morale </strong>and foster a culture of continuous improvement.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!u0Y2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e40b30-63a4-4a96-8401-320696734cb9_1146x556.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!u0Y2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e40b30-63a4-4a96-8401-320696734cb9_1146x556.png 424w, https://substackcdn.com/image/fetch/$s_!u0Y2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e40b30-63a4-4a96-8401-320696734cb9_1146x556.png 848w, https://substackcdn.com/image/fetch/$s_!u0Y2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e40b30-63a4-4a96-8401-320696734cb9_1146x556.png 1272w, https://substackcdn.com/image/fetch/$s_!u0Y2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e40b30-63a4-4a96-8401-320696734cb9_1146x556.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!u0Y2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e40b30-63a4-4a96-8401-320696734cb9_1146x556.png" width="1146" height="556" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/53e40b30-63a4-4a96-8401-320696734cb9_1146x556.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:556,&quot;width&quot;:1146,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:104184,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/159241686?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e40b30-63a4-4a96-8401-320696734cb9_1146x556.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!u0Y2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e40b30-63a4-4a96-8401-320696734cb9_1146x556.png 424w, https://substackcdn.com/image/fetch/$s_!u0Y2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e40b30-63a4-4a96-8401-320696734cb9_1146x556.png 848w, https://substackcdn.com/image/fetch/$s_!u0Y2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e40b30-63a4-4a96-8401-320696734cb9_1146x556.png 1272w, https://substackcdn.com/image/fetch/$s_!u0Y2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F53e40b30-63a4-4a96-8401-320696734cb9_1146x556.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><h1>Focus on The Meat </h1><p>When I start reviewing a PR, I immediately look for the most important part of the change. For example, what's the new API endpoint or the core piece of business logic.</p><p>Ask yourself: <em>"Why is this change needed?"</em> <strong>When you know the WHY, reviewing becomes easy. </strong>Never review code in isolation. Always think bigger: Is it easy for users? Is it secure? Will it perform well under load?</p><p>This simple shift in thinking will level up your reviews instantly.</p><h1>Nitpick Like a PRO</h1><p>Most developers hate nitpicks in code reviews. But when done right, they are excellent tools to improve quality. Here are 5 tips on how I nitpick in my team:</p><ul><li><p>Prefix your comment with "Nit:"</p></li><li><p>Use it for small improvements like namings or typos</p></li><li><p>Suggest, never command</p></li><li><p>Offer examples to clarify your point</p></li><li><p>Approve the PR if you have only nitpicks - don't block</p></li></ul><p></p><p>Now compare these two examples:</p><p>&#10060; Change that function name, it's bad</p><p>&#9989; Nit: I would rename that function to express business knowledge. For example: findAvailableFlights</p><p>Small change, big difference.</p><h1>Find Missing Tests with Mutation Testing </h1><p><strong>My favorite part of reviewing my colleagues' code is running mutation tests on their PRs.</strong> I quickly clone their PR branch and do the testing locally. My goal is to find missing tests&#8212;and I always do. That's the power of Mutation Testing.</p><p>Mutation Testing will tell you how good your tests are. It reveals exactly where you're missing tests or assertions.</p><p>This single habit has greatly improved our team's confidence in delivering reliable software.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!X9Dr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1148173-323d-4485-8268-f4d4085918f6_1142x390.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!X9Dr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1148173-323d-4485-8268-f4d4085918f6_1142x390.png 424w, https://substackcdn.com/image/fetch/$s_!X9Dr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1148173-323d-4485-8268-f4d4085918f6_1142x390.png 848w, https://substackcdn.com/image/fetch/$s_!X9Dr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1148173-323d-4485-8268-f4d4085918f6_1142x390.png 1272w, https://substackcdn.com/image/fetch/$s_!X9Dr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1148173-323d-4485-8268-f4d4085918f6_1142x390.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!X9Dr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1148173-323d-4485-8268-f4d4085918f6_1142x390.png" width="1142" height="390" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d1148173-323d-4485-8268-f4d4085918f6_1142x390.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:390,&quot;width&quot;:1142,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:75023,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/159241686?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1148173-323d-4485-8268-f4d4085918f6_1142x390.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!X9Dr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1148173-323d-4485-8268-f4d4085918f6_1142x390.png 424w, https://substackcdn.com/image/fetch/$s_!X9Dr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1148173-323d-4485-8268-f4d4085918f6_1142x390.png 848w, https://substackcdn.com/image/fetch/$s_!X9Dr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1148173-323d-4485-8268-f4d4085918f6_1142x390.png 1272w, https://substackcdn.com/image/fetch/$s_!X9Dr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1148173-323d-4485-8268-f4d4085918f6_1142x390.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><h1>Do Real-Time Review With Pair Programming</h1><p>Real-time feedback always beats delayed code reviews. Pair and Mob programming let your team spot mistakes immediately. You don't need to wait for slow PR reviews. This saves your team lots of time and prevents costly bugs.</p><p>Plus, coding together helps everyone learn faster.<strong> Junior developers level up quickly, and seniors become better mentors.</strong> It's teamwork at its best&#8212;more collaboration, fewer bottlenecks, and a happier, stronger team overall.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!B2t5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F429db268-f268-4f5f-b7e0-986bec0e2935_1136x594.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!B2t5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F429db268-f268-4f5f-b7e0-986bec0e2935_1136x594.png 424w, https://substackcdn.com/image/fetch/$s_!B2t5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F429db268-f268-4f5f-b7e0-986bec0e2935_1136x594.png 848w, https://substackcdn.com/image/fetch/$s_!B2t5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F429db268-f268-4f5f-b7e0-986bec0e2935_1136x594.png 1272w, https://substackcdn.com/image/fetch/$s_!B2t5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F429db268-f268-4f5f-b7e0-986bec0e2935_1136x594.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!B2t5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F429db268-f268-4f5f-b7e0-986bec0e2935_1136x594.png" width="1136" height="594" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/429db268-f268-4f5f-b7e0-986bec0e2935_1136x594.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:594,&quot;width&quot;:1136,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:119285,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/159241686?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F429db268-f268-4f5f-b7e0-986bec0e2935_1136x594.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!B2t5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F429db268-f268-4f5f-b7e0-986bec0e2935_1136x594.png 424w, https://substackcdn.com/image/fetch/$s_!B2t5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F429db268-f268-4f5f-b7e0-986bec0e2935_1136x594.png 848w, https://substackcdn.com/image/fetch/$s_!B2t5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F429db268-f268-4f5f-b7e0-986bec0e2935_1136x594.png 1272w, https://substackcdn.com/image/fetch/$s_!B2t5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F429db268-f268-4f5f-b7e0-986bec0e2935_1136x594.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><h1>Conclusion</h1><p>In the age of AI, code reviews matter more than ever. AI can generate code and tests, but it's still your responsibility to ensure correctness through strong reviews and Mutation Testing.</p><p>If you want to learn Mutation Testing and Test-Driven Development, check out my recently launched <strong>complete TDD course</strong>, which includes:</p><ul><li><p>The fundamentals of <strong>Test-Driven Development</strong></p></li><li><p><strong>Three real-world TDD examples</strong> in C#, TypeScript and Rust</p></li><li><p>The power of <strong>Mutation Testing</strong></p></li><li><p>Using TDD to <strong>design high-quality software</strong></p></li><li><p>Testing <strong>legacy code</strong></p></li><li><p><strong>Refactoring best practices</strong></p></li></ul><p></p><p><a href="https://transformyourcraft.com/">Get instant access by clicking here</a>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://transformyourcraft.com/&quot;,&quot;text&quot;:&quot;Get Instant Access&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://transformyourcraft.com/"><span>Get Instant Access</span></a></p>]]></content:encoded></item><item><title><![CDATA[Clean Code: Focus on WHAT, not HOW]]></title><description><![CDATA[How to create software that speaks the language of the domain]]></description><link>https://craftbettersoftware.com/p/clean-code-focus-on-what-not-how</link><guid isPermaLink="false">https://craftbettersoftware.com/p/clean-code-focus-on-what-not-how</guid><dc:creator><![CDATA[Daniel Moka]]></dc:creator><pubDate>Sat, 22 Mar 2025 06:01:24 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/3a5ade7e-4a67-493d-a78b-dbda3565e481_1456x1048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>50% OFF - The Complete TDD course</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cMa_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cMa_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 424w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 848w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 1272w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cMa_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png" width="617" height="305.415" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:594,&quot;width&quot;:1200,&quot;resizeWidth&quot;:617,&quot;bytes&quot;:205765,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&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="" title="" srcset="https://substackcdn.com/image/fetch/$s_!cMa_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 424w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 848w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 1272w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.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>Are you ready to master clean code, testing and Test-Driven Development (TDD)?</p><p>I recently launched a complete <strong>TDD course containing everything you need to craft high-quality software.</strong></p><p>Now there is a 50% OFF for the course</p><p><a href="https://transformyourcraft.com/">Get instant access by clicking here</a>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://transformyourcraft.com/&quot;,&quot;text&quot;:&quot;Get Instant Access&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://transformyourcraft.com/"><span>Get Instant Access</span></a></p><h1>Motivation</h1><p><strong>You are not paid to write code. You are paid to solve problems.</strong> Half of the solution is understanding the problem. When it comes to producing quality software, you need to focus on two things:</p><ul><li><p>doing the right thing</p></li><li><p>doing the thing right</p></li></ul><p></p><p>In this particular order.</p><p><strong>Our code should reflect the business problem it solves.</strong> When it uses clear names, a clean structure, and focuses on the domain, it&#8217;s easier to discuss, maintain, and improve it.</p><p>In this article, I&#8217;ll share 3 tips on naming, structure, and testing to help you focus on <em>WHAT</em> the code does&#8212;not <em>HOW</em> it does it.</p><h2>Avoid Names With Technical Jargon</h2><p>Avoid using names with technical jargon. DTOs, flags, and records are all related to specific solutions on the computer. </p><p>Instead, use names that speak about the problem. <strong>If a name contains technical terms, it is probably focusing on HOW. </strong></p><p><strong>Clean code focuses on WHAT.</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_!3y7C!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2068eb64-5b54-4aea-8c11-739aa3138af8_1200x463.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3y7C!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2068eb64-5b54-4aea-8c11-739aa3138af8_1200x463.png 424w, https://substackcdn.com/image/fetch/$s_!3y7C!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2068eb64-5b54-4aea-8c11-739aa3138af8_1200x463.png 848w, https://substackcdn.com/image/fetch/$s_!3y7C!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2068eb64-5b54-4aea-8c11-739aa3138af8_1200x463.png 1272w, https://substackcdn.com/image/fetch/$s_!3y7C!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2068eb64-5b54-4aea-8c11-739aa3138af8_1200x463.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3y7C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2068eb64-5b54-4aea-8c11-739aa3138af8_1200x463.png" width="1200" height="463" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2068eb64-5b54-4aea-8c11-739aa3138af8_1200x463.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:463,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:75131,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/138444216?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2068eb64-5b54-4aea-8c11-739aa3138af8_1200x463.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3y7C!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2068eb64-5b54-4aea-8c11-739aa3138af8_1200x463.png 424w, https://substackcdn.com/image/fetch/$s_!3y7C!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2068eb64-5b54-4aea-8c11-739aa3138af8_1200x463.png 848w, https://substackcdn.com/image/fetch/$s_!3y7C!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2068eb64-5b54-4aea-8c11-739aa3138af8_1200x463.png 1272w, https://substackcdn.com/image/fetch/$s_!3y7C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2068eb64-5b54-4aea-8c11-739aa3138af8_1200x463.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><h2>Use Screaming Architecture</h2><p>If you look at your application and you only see folders like these:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nMdr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8996e3d0-790f-414d-ab91-88ed183a8c85_485x470.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nMdr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8996e3d0-790f-414d-ab91-88ed183a8c85_485x470.png 424w, https://substackcdn.com/image/fetch/$s_!nMdr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8996e3d0-790f-414d-ab91-88ed183a8c85_485x470.png 848w, https://substackcdn.com/image/fetch/$s_!nMdr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8996e3d0-790f-414d-ab91-88ed183a8c85_485x470.png 1272w, https://substackcdn.com/image/fetch/$s_!nMdr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8996e3d0-790f-414d-ab91-88ed183a8c85_485x470.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nMdr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8996e3d0-790f-414d-ab91-88ed183a8c85_485x470.png" width="313" height="303.319587628866" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8996e3d0-790f-414d-ab91-88ed183a8c85_485x470.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:470,&quot;width&quot;:485,&quot;resizeWidth&quot;:313,&quot;bytes&quot;:23046,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/138444216?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8996e3d0-790f-414d-ab91-88ed183a8c85_485x470.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nMdr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8996e3d0-790f-414d-ab91-88ed183a8c85_485x470.png 424w, https://substackcdn.com/image/fetch/$s_!nMdr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8996e3d0-790f-414d-ab91-88ed183a8c85_485x470.png 848w, https://substackcdn.com/image/fetch/$s_!nMdr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8996e3d0-790f-414d-ab91-88ed183a8c85_485x470.png 1272w, https://substackcdn.com/image/fetch/$s_!nMdr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8996e3d0-790f-414d-ab91-88ed183a8c85_485x470.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>Then your app doesn't tell anything about the problem it solves. It's driven by technology instead of the domain. If you want to add a new feature, you need to add files to all these places. Features are mixed, leading to maintenance hell.</p><p>Now look at this folder structure:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UgJK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F137a94b7-5d48-4d21-9cac-9a4b79f1fddb_497x469.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UgJK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F137a94b7-5d48-4d21-9cac-9a4b79f1fddb_497x469.png 424w, https://substackcdn.com/image/fetch/$s_!UgJK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F137a94b7-5d48-4d21-9cac-9a4b79f1fddb_497x469.png 848w, https://substackcdn.com/image/fetch/$s_!UgJK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F137a94b7-5d48-4d21-9cac-9a4b79f1fddb_497x469.png 1272w, https://substackcdn.com/image/fetch/$s_!UgJK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F137a94b7-5d48-4d21-9cac-9a4b79f1fddb_497x469.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UgJK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F137a94b7-5d48-4d21-9cac-9a4b79f1fddb_497x469.png" width="345" height="325.5633802816901" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/137a94b7-5d48-4d21-9cac-9a4b79f1fddb_497x469.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:469,&quot;width&quot;:497,&quot;resizeWidth&quot;:345,&quot;bytes&quot;:29793,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/138444216?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F137a94b7-5d48-4d21-9cac-9a4b79f1fddb_497x469.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UgJK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F137a94b7-5d48-4d21-9cac-9a4b79f1fddb_497x469.png 424w, https://substackcdn.com/image/fetch/$s_!UgJK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F137a94b7-5d48-4d21-9cac-9a4b79f1fddb_497x469.png 848w, https://substackcdn.com/image/fetch/$s_!UgJK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F137a94b7-5d48-4d21-9cac-9a4b79f1fddb_497x469.png 1272w, https://substackcdn.com/image/fetch/$s_!UgJK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F137a94b7-5d48-4d21-9cac-9a4b79f1fddb_497x469.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>It is called screaming architecture. It is easy to navigate, with clear domain separations. If you want to add a new feature, you just add a new main directory. It has better discoverability and results in a low entry curve for new developers.</p><p><strong>A clean folder structure is like a well-organized room; everything has its place, and it's easy to find what you need. Your folder structure should communicate the domain, not the technology.</strong></p><h2>Write Behaviour-Driven Tests</h2><p>Many developers get this wrong about Unit Tests:</p><ul><li><p>&#10060; A class is not a unit</p></li><li><p>&#10060; A function is not a unit</p></li><li><p>&#10060; A module is not a unit</p></li></ul><p></p><p>The "unit" does not refer to code structure. It refers to a single, observable business behavior. </p><p>The strength of the Chicago School of <strong>Test-Driven Development</strong> lies in prioritizing behavior over isolated components. It focuses on the WHAT, not the HOW. It leads to robust tests that support refactoring.</p><p>Don't write tests when you create a new class. Write tests when your system has a new behavior.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ULtp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ULtp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png 424w, https://substackcdn.com/image/fetch/$s_!ULtp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png 848w, https://substackcdn.com/image/fetch/$s_!ULtp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png 1272w, https://substackcdn.com/image/fetch/$s_!ULtp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ULtp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png" width="707" height="318.9021276595745" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:530,&quot;width&quot;:1175,&quot;resizeWidth&quot;:707,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!ULtp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png 424w, https://substackcdn.com/image/fetch/$s_!ULtp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png 848w, https://substackcdn.com/image/fetch/$s_!ULtp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png 1272w, https://substackcdn.com/image/fetch/$s_!ULtp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.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><h1>Conclusion</h1><p>Clean code is not focused on implementation details. It is focused on solving the domain with clean naming, expressive folder structure and behavior-driven tests.</p><p>To learn how to write clean code and behavior-driven tests with the Chicago School of TDD, check out my recently launched <strong>complete TDD course</strong>, which includes:</p><ul><li><p>The fundamentals of <strong>Test-Driven Development</strong></p></li><li><p><strong>Three real-world TDD examples</strong> in C#, TypeScript and Rust</p></li><li><p><strong>The two schools</strong> of testing with the <strong>5 types of mocks</strong></p></li><li><p>Using TDD to <strong>design high-quality software</strong></p></li><li><p>Testing <strong>legacy code</strong></p></li><li><p><strong>Refactoring best practices</strong></p></li></ul><p></p><p><a href="https://transformyourcraft.com/">Get instant access by clicking here</a>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://transformyourcraft.com/&quot;,&quot;text&quot;:&quot;Get Instant Access&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://transformyourcraft.com/"><span>Get Instant Access</span></a></p>]]></content:encoded></item><item><title><![CDATA[Top 5 Career Mistakes]]></title><description><![CDATA[Hard Lessons Every Developer Must Learn (Before It's Too Late)]]></description><link>https://craftbettersoftware.com/p/my-top-5-career-mistakes</link><guid isPermaLink="false">https://craftbettersoftware.com/p/my-top-5-career-mistakes</guid><dc:creator><![CDATA[Daniel Moka]]></dc:creator><pubDate>Sat, 15 Mar 2025 06:00:27 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/32c521cc-cd92-4c4c-84a8-50f1bb1760f8_1456x1048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>50% OFF - The Complete TDD Course</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cMa_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cMa_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 424w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 848w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 1272w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cMa_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png" width="1200" height="594" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:594,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cMa_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 424w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 848w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 1272w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.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>Are you ready to master clean code, testing and Test-Driven Development (TDD)?</p><p>I recently launched a complete <strong>TDD course containing everything you need to craft high-quality software.</strong></p><p>Now there is a 50% OFF for the course</p><p><a href="https://transformyourcraft.com/">Get instant access by clicking here</a>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://transformyourcraft.com/&quot;,&quot;text&quot;:&quot;Get Instant Access&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://transformyourcraft.com/"><span>Get Instant Access</span></a></p><h1>Motivation</h1><p>Mistakes are the best teachers. <strong>There is nothing better than the lessons you gain from failures</strong>. Each failure brings disappointment&#8212;but it also leads to invaluable growth.</p><p>If I could, I wouldn't trade any of my failures&#8212;because they've made me a better developer. In this post, I&#8217;ll share my five biggest mistakes and how you can avoid them.</p><h1>Burning Out</h1><p>I used to work 60-70 hours per week for two years until I burned out. It took me another two years to recover. Never again. When you experience burnout, you lose motivation for work, creativity, and even things you once enjoyed.</p><p>Here are 5 things I do to prevent burnout:</p><ul><li><p>&#9989; Ditch alcohol</p></li><li><p>&#9989; Learn to say No</p></li><li><p>&#9989; Sport 5 times per week</p></li><li><p>&#9989; 7-8 hours of sleep at night</p></li><li><p>&#9989; Mandatory rest day on Sundays</p></li></ul><p></p><p>Don't forget that your health is your most important asset. <strong>A healthy person wants 1000 things. An unhealthy person wants only one thing: to be healthy.</strong></p><h1>Ignoring Test-Driven Development</h1><p>Test-Driven Development (TDD) didn&#8217;t click for me from day one. At first, I saw it as a useful but non-essential practice. In retrospect, that was a mistake&#8212;I should have adopted it from the very beginning.</p><p>Now, I can&#8217;t live without TDD. It makes me a better developer in every sense. <strong>It&#8217;s the gold standard way for writing code, incorporating best practices like clean code, continuous refactoring, and confident shipping.</strong></p><p>I don&#8217;t always write code. But when I do, I use TDD.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!w2wM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe630d53a-2858-4f99-b7ed-081d35116a59_569x363.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!w2wM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe630d53a-2858-4f99-b7ed-081d35116a59_569x363.png 424w, https://substackcdn.com/image/fetch/$s_!w2wM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe630d53a-2858-4f99-b7ed-081d35116a59_569x363.png 848w, https://substackcdn.com/image/fetch/$s_!w2wM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe630d53a-2858-4f99-b7ed-081d35116a59_569x363.png 1272w, https://substackcdn.com/image/fetch/$s_!w2wM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe630d53a-2858-4f99-b7ed-081d35116a59_569x363.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!w2wM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe630d53a-2858-4f99-b7ed-081d35116a59_569x363.png" width="569" height="363" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e630d53a-2858-4f99-b7ed-081d35116a59_569x363.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:363,&quot;width&quot;:569,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;: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_!w2wM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe630d53a-2858-4f99-b7ed-081d35116a59_569x363.png 424w, https://substackcdn.com/image/fetch/$s_!w2wM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe630d53a-2858-4f99-b7ed-081d35116a59_569x363.png 848w, https://substackcdn.com/image/fetch/$s_!w2wM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe630d53a-2858-4f99-b7ed-081d35116a59_569x363.png 1272w, https://substackcdn.com/image/fetch/$s_!w2wM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe630d53a-2858-4f99-b7ed-081d35116a59_569x363.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><h1>Avoiding Networking</h1><p>In the digital age, <strong>your network is your net worth</strong>. Success is not a solo journey&#8212;it&#8217;s a team effort. Early in my career, I didn&#8217;t prioritize networking, and looking back, that was a mistake.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fINs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cf20a7b-44c0-4173-aaa2-459e62df7670_1200x675.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fINs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cf20a7b-44c0-4173-aaa2-459e62df7670_1200x675.jpeg 424w, https://substackcdn.com/image/fetch/$s_!fINs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cf20a7b-44c0-4173-aaa2-459e62df7670_1200x675.jpeg 848w, https://substackcdn.com/image/fetch/$s_!fINs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cf20a7b-44c0-4173-aaa2-459e62df7670_1200x675.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!fINs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cf20a7b-44c0-4173-aaa2-459e62df7670_1200x675.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fINs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cf20a7b-44c0-4173-aaa2-459e62df7670_1200x675.jpeg" width="507" height="285.1875" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8cf20a7b-44c0-4173-aaa2-459e62df7670_1200x675.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:675,&quot;width&quot;:1200,&quot;resizeWidth&quot;:507,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;ISO's All About Networking | Elliott School of International Affairs | The  George Washington University&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="ISO's All About Networking | Elliott School of International Affairs | The  George Washington University" title="ISO's All About Networking | Elliott School of International Affairs | The  George Washington University" srcset="https://substackcdn.com/image/fetch/$s_!fINs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cf20a7b-44c0-4173-aaa2-459e62df7670_1200x675.jpeg 424w, https://substackcdn.com/image/fetch/$s_!fINs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cf20a7b-44c0-4173-aaa2-459e62df7670_1200x675.jpeg 848w, https://substackcdn.com/image/fetch/$s_!fINs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cf20a7b-44c0-4173-aaa2-459e62df7670_1200x675.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!fINs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cf20a7b-44c0-4173-aaa2-459e62df7670_1200x675.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>Opportunities don&#8217;t just come to you&#8212;<strong>you create them through networking</strong>. Many of my job offers, conference appearances, and friendships are thanks to the network I built.</p><p><strong>Don&#8217;t forget: A handshake can open more doors than a resume ever will.</strong></p><h1>Chasing The Latest Tech</h1><p>Early in my career, I was emotionally attached to my code. But I&#8217;ve since realized that <strong>code is a liability, not an asset</strong>&#8212;the only bug-free code is the one that doesn&#8217;t exist.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dy21!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81747ab7-2c1e-4752-ab45-f072a61c4562_523x180.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dy21!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81747ab7-2c1e-4752-ab45-f072a61c4562_523x180.png 424w, https://substackcdn.com/image/fetch/$s_!dy21!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81747ab7-2c1e-4752-ab45-f072a61c4562_523x180.png 848w, https://substackcdn.com/image/fetch/$s_!dy21!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81747ab7-2c1e-4752-ab45-f072a61c4562_523x180.png 1272w, https://substackcdn.com/image/fetch/$s_!dy21!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81747ab7-2c1e-4752-ab45-f072a61c4562_523x180.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dy21!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81747ab7-2c1e-4752-ab45-f072a61c4562_523x180.png" width="567" height="195.1434034416826" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/81747ab7-2c1e-4752-ab45-f072a61c4562_523x180.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:180,&quot;width&quot;:523,&quot;resizeWidth&quot;:567,&quot;bytes&quot;:20632,&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;:false,&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_!dy21!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81747ab7-2c1e-4752-ab45-f072a61c4562_523x180.png 424w, https://substackcdn.com/image/fetch/$s_!dy21!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81747ab7-2c1e-4752-ab45-f072a61c4562_523x180.png 848w, https://substackcdn.com/image/fetch/$s_!dy21!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81747ab7-2c1e-4752-ab45-f072a61c4562_523x180.png 1272w, https://substackcdn.com/image/fetch/$s_!dy21!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81747ab7-2c1e-4752-ab45-f072a61c4562_523x180.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Frameworks and languages are just tools. True expertise comes from <strong>timeless, language-agnostic practices</strong> like:</p><ul><li><p>Extreme Programming</p></li><li><p>Continuous Delivery</p></li><li><p>Test-Driven Development and Test-first mindset</p></li><li><p>Pair and Mob programming</p></li><li><p>Clean and Pragmatic Architecture</p></li></ul><p></p><p>Master these, and you&#8217;ll gain far more than by chasing the latest shiny tech.</p><h1>Over-engineering</h1><p><strong>Over-engineering kills momentum.</strong> Engineers love complex solutions, but complexity isn&#8217;t a badge of honor&#8212;it&#8217;s a liability.</p><ul><li><p>If a simple function would work, don&#8217;t overcomplicate it with a Lambda or Azure Function just because you can</p></li><li><p>If WordPress is enough for a simple static site, don&#8217;t build it with React or Angular</p></li></ul><p></p><p>Future-proofing is valuable, but trying to predict every scaling issue and edge case upfront is a waste of time. <strong>Build what&#8217;s needed today, iterate when necessary, and keep shipping fast.</strong></p><h1>Conclusion</h1><p>Mistakes are inevitable&#8212;but they shape us into better developers. You can build a long-lasting engineering career with a healthy lifestyle, language-agnostic skills, and Extreme Programming practices like TDD.</p><p>If you want to master TDD, check out my <strong>newly launched, complete </strong>TDD course, which includes:</p><ul><li><p>The fundamentals of <strong>Test-Driven Development</strong></p></li><li><p><strong>Three real-world TDD examples</strong> in C#, TypeScript and Rust</p></li><li><p><strong>The two schools</strong> of testing with the <strong>five types of mocks</strong></p></li><li><p>How to use TDD to design <strong>high-quality</strong> software</p></li><li><p>How to test legacy code</p></li><li><p><strong>Refactoring best practices</strong></p></li></ul><p></p><p><a href="https://transformyourcraft.com/">Get instant access by clicking here</a>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://transformyourcraft.com/&quot;,&quot;text&quot;:&quot;Get Instant Access&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://transformyourcraft.com/"><span>Get Instant Access</span></a></p>]]></content:encoded></item><item><title><![CDATA[Use Booleans Like a Pro ]]></title><description><![CDATA[6 Essential Tips to Write Clean Booleans]]></description><link>https://craftbettersoftware.com/p/use-booleans-like-a-pro</link><guid isPermaLink="false">https://craftbettersoftware.com/p/use-booleans-like-a-pro</guid><dc:creator><![CDATA[Daniel Moka]]></dc:creator><pubDate>Sat, 08 Mar 2025 06:01:40 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/8d56b851-44a0-43c3-b728-5c2b9d2b19f7_1456x1048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>50% OFF - The Complete TDD course</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cMa_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cMa_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 424w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 848w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 1272w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cMa_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png" width="617" height="305.415" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:594,&quot;width&quot;:1200,&quot;resizeWidth&quot;:617,&quot;bytes&quot;:205765,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&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="" title="" srcset="https://substackcdn.com/image/fetch/$s_!cMa_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 424w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 848w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 1272w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.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>Are you ready to master clean code, testing and Test-Driven Development (TDD)?</p><p>I recently launched a complete <strong>TDD course containing everything you need to craft high-quality software.</strong></p><p>Now there is a 50% OFF for the course</p><p><a href="https://transformyourcraft.com/">Get instant access by clicking here</a>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://transformyourcraft.com/&quot;,&quot;text&quot;:&quot;Get Instant Access&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://transformyourcraft.com/"><span>Get Instant Access</span></a></p><h1>Motivation</h1><p>Booleans are one of the simplest constructs in programming, yet it can often make code more complex and less straightforward. Booleans have only two possible values (true or false), yet I often see them poorly named and misused in many codebases.</p><p><strong>In today&#8217;s article, I&#8217;ve gathered 4 naming and 2 usage tips relating to booleans.</strong> By applying these principles, you can avoid common pitfalls and Craft Better Software.</p><h2>1&#65039;&#8419; Avoid Negative Names</h2><p>Negative boolean variables lead to double negatives, making your code harder to read and understand.</p><p>&#10060; if (!isNotActive)</p><p>&#9989; if (isActive)</p><p>The same happens in natural language: you use only one negative, because a double negative is just an affirmative sentence. Why would it be different with code?</p><p><strong>You should write code that reads like natural language.</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_!dXYi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe366a6-4052-4d58-84aa-ece14598bfee_564x394.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dXYi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe366a6-4052-4d58-84aa-ece14598bfee_564x394.png 424w, https://substackcdn.com/image/fetch/$s_!dXYi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe366a6-4052-4d58-84aa-ece14598bfee_564x394.png 848w, https://substackcdn.com/image/fetch/$s_!dXYi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe366a6-4052-4d58-84aa-ece14598bfee_564x394.png 1272w, https://substackcdn.com/image/fetch/$s_!dXYi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe366a6-4052-4d58-84aa-ece14598bfee_564x394.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dXYi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe366a6-4052-4d58-84aa-ece14598bfee_564x394.png" width="582" height="406.5744680851064" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fbe366a6-4052-4d58-84aa-ece14598bfee_564x394.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:394,&quot;width&quot;:564,&quot;resizeWidth&quot;:582,&quot;bytes&quot;:44891,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/145784958?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe366a6-4052-4d58-84aa-ece14598bfee_564x394.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dXYi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe366a6-4052-4d58-84aa-ece14598bfee_564x394.png 424w, https://substackcdn.com/image/fetch/$s_!dXYi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe366a6-4052-4d58-84aa-ece14598bfee_564x394.png 848w, https://substackcdn.com/image/fetch/$s_!dXYi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe366a6-4052-4d58-84aa-ece14598bfee_564x394.png 1272w, https://substackcdn.com/image/fetch/$s_!dXYi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffbe366a6-4052-4d58-84aa-ece14598bfee_564x394.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><h2>2&#65039;&#8419;  Use Adjectives</h2><p>Don't use verbs or nouns in your boolean variable names. <strong>Booleans represent states, so they should be named with adjectives or short descriptive phrases instead.</strong></p><p>&#10060; if (sendEvent)</p><p>&#9989; if (eventIsSent)</p><h2>3&#65039;&#8419; Use Present Tense</h2><p>Boolean variables should describe the <strong>current</strong> state rather than past states. Using past or perfect tenses adds noise, making boolean variables wordy and less concise.</p><p>&#10060; if (hasBeenPaid)</p><p>&#9989; if (isPaid)</p><h2>4&#65039;&#8419; Use <code>Is</code>/<code>Has</code>/<code>Should</code>/<code>Can</code> Prefixes</h2><p>One of my favorite tricks when naming booleans is to use prefixes. Consider using the following:</p><ul><li><p><strong>is</strong> &#8211; for states (e.g., isActive)</p></li><li><p><strong>has</strong> &#8211; for ownership (e.g., hasSubscription)</p></li><li><p><strong>should</strong> &#8211; for expected behavior (e.g., shouldRetry)</p></li><li><p><strong>can</strong> &#8211; for capabilities (e.g., canEdit)</p></li></ul><p></p><h2>5&#65039;&#8419; Avoid Boolean As Parameters</h2><p>Using boolean flags in function parameters can be confusing and difficult to review. Instead, use enums to make your code self-documenting.</p><p>&#10060; <strong>Bad Examples:</strong></p><pre><code><code>bookFlight(customer, true);
bookFlight(customer, false);</code></code></pre><p>&#9989; <strong>Good Examples:</strong></p><pre><code><code>bookFlight(customer, Discount.Applied);
bookFlight(customer, Discount.NotApplied);</code></code></pre><p>Enums also help make your code open for changes. <strong>By extending the enum type with a new value, you can easily add new functionality without breaking the API.</strong></p><h2>6&#65039;&#8419; Reduce Nesting With a Return Early</h2><p>Using many IF-ELSE statements with booleans can easily lead to unreadable code. Avoid using nested IF statements.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gvMo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d920269-0580-4fe1-ba15-be94e483e273_1218x986.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gvMo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d920269-0580-4fe1-ba15-be94e483e273_1218x986.png 424w, https://substackcdn.com/image/fetch/$s_!gvMo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d920269-0580-4fe1-ba15-be94e483e273_1218x986.png 848w, https://substackcdn.com/image/fetch/$s_!gvMo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d920269-0580-4fe1-ba15-be94e483e273_1218x986.png 1272w, https://substackcdn.com/image/fetch/$s_!gvMo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d920269-0580-4fe1-ba15-be94e483e273_1218x986.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gvMo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d920269-0580-4fe1-ba15-be94e483e273_1218x986.png" width="592" height="479.23809523809524" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d920269-0580-4fe1-ba15-be94e483e273_1218x986.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:986,&quot;width&quot;:1218,&quot;resizeWidth&quot;:592,&quot;bytes&quot;:103583,&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;:false,&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_!gvMo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d920269-0580-4fe1-ba15-be94e483e273_1218x986.png 424w, https://substackcdn.com/image/fetch/$s_!gvMo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d920269-0580-4fe1-ba15-be94e483e273_1218x986.png 848w, https://substackcdn.com/image/fetch/$s_!gvMo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d920269-0580-4fe1-ba15-be94e483e273_1218x986.png 1272w, https://substackcdn.com/image/fetch/$s_!gvMo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d920269-0580-4fe1-ba15-be94e483e273_1218x986.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><strong>Instead, invert the conditions and use guard clauses. </strong>It will make your code easier to follow. As a bonus, you will get rid of the ELSE statements:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dSeK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e64277b-bd00-435f-b2b6-a55380460208_1184x836.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dSeK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e64277b-bd00-435f-b2b6-a55380460208_1184x836.png 424w, https://substackcdn.com/image/fetch/$s_!dSeK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e64277b-bd00-435f-b2b6-a55380460208_1184x836.png 848w, https://substackcdn.com/image/fetch/$s_!dSeK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e64277b-bd00-435f-b2b6-a55380460208_1184x836.png 1272w, https://substackcdn.com/image/fetch/$s_!dSeK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e64277b-bd00-435f-b2b6-a55380460208_1184x836.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dSeK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e64277b-bd00-435f-b2b6-a55380460208_1184x836.png" width="617" height="435.65202702702703" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9e64277b-bd00-435f-b2b6-a55380460208_1184x836.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:836,&quot;width&quot;:1184,&quot;resizeWidth&quot;:617,&quot;bytes&quot;:96620,&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;:false,&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_!dSeK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e64277b-bd00-435f-b2b6-a55380460208_1184x836.png 424w, https://substackcdn.com/image/fetch/$s_!dSeK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e64277b-bd00-435f-b2b6-a55380460208_1184x836.png 848w, https://substackcdn.com/image/fetch/$s_!dSeK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e64277b-bd00-435f-b2b6-a55380460208_1184x836.png 1272w, https://substackcdn.com/image/fetch/$s_!dSeK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e64277b-bd00-435f-b2b6-a55380460208_1184x836.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><h1>Conclusion</h1><p>Booleans are one of the most frequently used variable types. And if they are used right, they can greatly improve code quality.</p><p>To improve code quality further, Test-Driven Development is my favorite tool. If you want to master TDD, check out my recently launched <strong>complete TDD course</strong>, which includes:</p><ul><li><p>The fundamentals of <strong>Test-Driven Development</strong></p></li><li><p><strong>Three real-world TDD examples</strong> in C#, TypeScript and Rust</p></li><li><p><strong>The two schools</strong> of testing with the <strong>5 types of mocks</strong></p></li><li><p>Using TDD to <strong>design high-quality software</strong></p></li><li><p>Testing <strong>legacy code</strong></p></li><li><p><strong>Refactoring best practices</strong></p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://transformyourcraft.com/&quot;,&quot;text&quot;:&quot;Get Instant Access&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://transformyourcraft.com/"><span>Get Instant Access</span></a></p>]]></content:encoded></item><item><title><![CDATA[Unit Testing: What Exactly is a 'Unit'?]]></title><description><![CDATA[Defining the Best Testable Piece of Code]]></description><link>https://craftbettersoftware.com/p/unit-testing-what-exactly-is-a-unit</link><guid isPermaLink="false">https://craftbettersoftware.com/p/unit-testing-what-exactly-is-a-unit</guid><dc:creator><![CDATA[Daniel Moka]]></dc:creator><pubDate>Sat, 01 Mar 2025 06:33:16 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/cac24f33-04d3-4ff8-bf7c-ff1404aa7a06_1456x1048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>50% OFF - The Complete TDD course</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cMa_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cMa_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 424w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 848w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 1272w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cMa_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png" width="617" height="305.415" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:594,&quot;width&quot;:1200,&quot;resizeWidth&quot;:617,&quot;bytes&quot;:205765,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&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="" title="" srcset="https://substackcdn.com/image/fetch/$s_!cMa_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 424w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 848w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 1272w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.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>Are you ready to master clean code, testing and Test-Driven Development (TDD)?</p><p>I recently launched a complete <strong>TDD course containing everything you need to craft high-quality software.</strong></p><p>Now there is a 50% OFF for the course</p><p><a href="https://transformyourcraft.com/">Get instant access by clicking here</a>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://transformyourcraft.com/&quot;,&quot;text&quot;:&quot;Get Instant Access&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://transformyourcraft.com/"><span>Get Instant Access</span></a></p><h1>Class is NOT a Unit</h1><p>Many people believe that a "unit" in unit tests means a single function or class. That&#8217;s a dangerous myth.</p><p><strong>When we define units based on code structure, we create fragile tests that break during refactoring.</strong> When our tests break during refactoring, they don&#8217;t have much value. </p><p>This mindset comes from the London School of TDD, which isolates classes with heavy mocking, often at the cost of test stability.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VssA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed7ed85f-a0dc-4e57-b8b7-2cc8a62eeae1_1142x922.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VssA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed7ed85f-a0dc-4e57-b8b7-2cc8a62eeae1_1142x922.png 424w, https://substackcdn.com/image/fetch/$s_!VssA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed7ed85f-a0dc-4e57-b8b7-2cc8a62eeae1_1142x922.png 848w, https://substackcdn.com/image/fetch/$s_!VssA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed7ed85f-a0dc-4e57-b8b7-2cc8a62eeae1_1142x922.png 1272w, https://substackcdn.com/image/fetch/$s_!VssA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed7ed85f-a0dc-4e57-b8b7-2cc8a62eeae1_1142x922.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VssA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed7ed85f-a0dc-4e57-b8b7-2cc8a62eeae1_1142x922.png" width="631" height="509.4413309982487" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ed7ed85f-a0dc-4e57-b8b7-2cc8a62eeae1_1142x922.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:922,&quot;width&quot;:1142,&quot;resizeWidth&quot;:631,&quot;bytes&quot;:144737,&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;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/148523986?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed7ed85f-a0dc-4e57-b8b7-2cc8a62eeae1_1142x922.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!VssA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed7ed85f-a0dc-4e57-b8b7-2cc8a62eeae1_1142x922.png 424w, https://substackcdn.com/image/fetch/$s_!VssA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed7ed85f-a0dc-4e57-b8b7-2cc8a62eeae1_1142x922.png 848w, https://substackcdn.com/image/fetch/$s_!VssA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed7ed85f-a0dc-4e57-b8b7-2cc8a62eeae1_1142x922.png 1272w, https://substackcdn.com/image/fetch/$s_!VssA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed7ed85f-a0dc-4e57-b8b7-2cc8a62eeae1_1142x922.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><h1>The Problems with Small Units</h1><p>One of the biggest pitfalls in unit testing is thinking smaller is always better. But you end up with:</p><ul><li><p>&#128680; <strong>Excessive test doubles</strong> &#8211; Mocking everything leads to brittle tests</p></li><li><p>&#128680; <strong>Tests per class</strong> &#8211; If your test structure mirrors your code, class changes can often break your tests, even when behavior stays the same</p></li><li><p><strong>&#128680; Encapsulation violations</strong> &#8211; Testing private methods ties tests to implementation details, again leading to fragile tests.</p></li></ul><h1>So What is a UNIT?</h1><p>A unit isn&#8217;t a class or function&#8212;<strong>it&#8217;s a single, observable business behavior exposed through public APIs. </strong>This approach comes from the Chicago School of TDD, which prioritizes testing behavior over isolated components.</p><p>Here are 3 tips on how I write quality unit tests:</p><ul><li><p>&#9989; Focus on <strong>how the system behaves from the outside</strong>, not how it is implemented internally.</p></li><li><p>&#9989; Target public entry points and write tests at the <strong>highest level possible</strong> </p></li><li><p>&#9989; Keep your tests fast by <strong>using mocks and fakes at the edge of your system</strong></p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ULtp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ULtp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png 424w, https://substackcdn.com/image/fetch/$s_!ULtp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png 848w, https://substackcdn.com/image/fetch/$s_!ULtp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png 1272w, https://substackcdn.com/image/fetch/$s_!ULtp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ULtp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png" width="1175" height="530" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:530,&quot;width&quot;:1175,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:43653,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/148523986?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ULtp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png 424w, https://substackcdn.com/image/fetch/$s_!ULtp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png 848w, https://substackcdn.com/image/fetch/$s_!ULtp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.png 1272w, https://substackcdn.com/image/fetch/$s_!ULtp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6a64887-7324-43b1-8acf-9fe69932c2c5_1175x530.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><h1>Public APIs</h1><p><strong>A public API is the set of methods, functions, or interfaces that other parts of the system or external users use to interact with the system.</strong></p><p>For example, in a Web API, the HTTP methods serve as the public interface. I write my unit tests against this public API, while mocking only slow external dependencies.</p><p>By doing so, it doesn&#8217;t matter how I implement my Web API or whether I use CQRS, DDD patterns, or anything else&#8212;these are irrelevant to the tests, and that&#8217;s exactly the goal.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rHRN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb344f8a9-8d19-41b5-a461-3c2013084199_749x433.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rHRN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb344f8a9-8d19-41b5-a461-3c2013084199_749x433.png 424w, https://substackcdn.com/image/fetch/$s_!rHRN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb344f8a9-8d19-41b5-a461-3c2013084199_749x433.png 848w, https://substackcdn.com/image/fetch/$s_!rHRN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb344f8a9-8d19-41b5-a461-3c2013084199_749x433.png 1272w, https://substackcdn.com/image/fetch/$s_!rHRN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb344f8a9-8d19-41b5-a461-3c2013084199_749x433.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rHRN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb344f8a9-8d19-41b5-a461-3c2013084199_749x433.png" width="679" height="392.5327102803738" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b344f8a9-8d19-41b5-a461-3c2013084199_749x433.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:433,&quot;width&quot;:749,&quot;resizeWidth&quot;:679,&quot;bytes&quot;:31077,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/148523986?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb344f8a9-8d19-41b5-a461-3c2013084199_749x433.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rHRN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb344f8a9-8d19-41b5-a461-3c2013084199_749x433.png 424w, https://substackcdn.com/image/fetch/$s_!rHRN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb344f8a9-8d19-41b5-a461-3c2013084199_749x433.png 848w, https://substackcdn.com/image/fetch/$s_!rHRN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb344f8a9-8d19-41b5-a461-3c2013084199_749x433.png 1272w, https://substackcdn.com/image/fetch/$s_!rHRN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb344f8a9-8d19-41b5-a461-3c2013084199_749x433.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><h1>Frameworks Don&#8217;t Define Unit Tests</h1><p>Frameworks and dependencies don&#8217;t define unit tests. There are many misconceptions like:</p><ul><li><p>&#10060; A Cucumber test is not a unit test</p></li><li><p>&#10060; A JUnit or NUnit test is always a unit test</p></li><li><p>&#10060; A test uses external dependencies is not a unit test</p></li></ul><p></p><p>They are all incorrect. </p><ul><li><p>&#9888;&#65039; If you're using JUnit but your tests are slow, they&#8217;re not unit tests.</p></li><li><p>&#9888;&#65039; If you're using Cucumber and your tests are fast, they might be unit tests.</p></li><li><p>&#9888;&#65039; If your app has a stable dependency where you can write fast tests for, they can still be unit tests.</p></li></ul><p></p><p><strong>The framework doesn&#8217;t matter&#8212;only the test&#8217;s speed, scope, and isolation do.</strong></p><h1>Conclusion</h1><p>Unit testing is about verifying behavior, not code structure. Behavior-driven tests lead to a robust test suite that supports refactoring.</p><p>To learn more about writing high-level tests with the Chicago School of TDD, check out my recently launched <strong>complete TDD course</strong>, which includes:</p><ul><li><p>The fundamentals of <strong>Test-Driven Development</strong></p></li><li><p><strong>Three real-world TDD examples</strong> in C#, TypeScript and Rust</p></li><li><p><strong>The two schools</strong> of testing with the <strong>5 types of mocks</strong></p></li><li><p>Using TDD to <strong>design high-quality software</strong></p></li><li><p>Testing <strong>legacy code</strong></p></li><li><p><strong>Refactoring best practices</strong></p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://transformyourcraft.com/&quot;,&quot;text&quot;:&quot;Get Instant Access&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://transformyourcraft.com/"><span>Get Instant Access</span></a></p>]]></content:encoded></item><item><title><![CDATA[Write Clean Commit Messages]]></title><description><![CDATA[5 practical tips to improve your commit messages]]></description><link>https://craftbettersoftware.com/p/write-clean-commit-messages</link><guid isPermaLink="false">https://craftbettersoftware.com/p/write-clean-commit-messages</guid><dc:creator><![CDATA[Daniel Moka]]></dc:creator><pubDate>Sat, 22 Feb 2025 07:02:12 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/f4e26b5f-5b45-40d6-8d89-303cb524fa8e_1456x1048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>50% OFF - The Complete TDD course</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cMa_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cMa_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 424w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 848w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 1272w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cMa_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png" width="617" height="305.415" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:594,&quot;width&quot;:1200,&quot;resizeWidth&quot;:617,&quot;bytes&quot;:205765,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&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="" title="" srcset="https://substackcdn.com/image/fetch/$s_!cMa_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 424w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 848w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.png 1272w, https://substackcdn.com/image/fetch/$s_!cMa_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff6f9c6-4dd3-426c-bcce-81f270a7131e_1200x594.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>Are you ready to master clean code, testing and Test-Driven Development (TDD)?</p><p>I recently launched a complete <strong>TDD course containing everything you need to craft high-quality software.</strong></p><p>Now there is a 50% OFF for the course</p><p><a href="https://transformyourcraft.com/">Get instant access by clicking here</a>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://transformyourcraft.com/&quot;,&quot;text&quot;:&quot;Get Instant Access&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://transformyourcraft.com/"><span>Get Instant Access</span></a></p><h1>Motivation</h1><p>Git has been the backbone of modern software development since 2005, empowering teams to collaborate, track changes, and manage code efficiently.</p><p>But here&#8217;s the truth: A messy commit history makes troubleshooting hard.</p><p><strong>Commit messages are your best tool for documenting the reason for change in your code.</strong> Writing them well saves time, avoids confusion, and keeps your codebase clean. Here are five tips on how I write commits in my team:</p><h2>1. Explain the WHY</h2><p>In a Git commit message, you should specify not only what you have done, <strong>but also WHY you have done that.</strong> It will make it easier to track changes over time and fix issues.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ri2g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4929279-4e93-4bcd-bf60-770e45bb9f95_884x171.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ri2g!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4929279-4e93-4bcd-bf60-770e45bb9f95_884x171.png 424w, https://substackcdn.com/image/fetch/$s_!Ri2g!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4929279-4e93-4bcd-bf60-770e45bb9f95_884x171.png 848w, https://substackcdn.com/image/fetch/$s_!Ri2g!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4929279-4e93-4bcd-bf60-770e45bb9f95_884x171.png 1272w, https://substackcdn.com/image/fetch/$s_!Ri2g!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4929279-4e93-4bcd-bf60-770e45bb9f95_884x171.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ri2g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4929279-4e93-4bcd-bf60-770e45bb9f95_884x171.png" width="884" height="171" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f4929279-4e93-4bcd-bf60-770e45bb9f95_884x171.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:171,&quot;width&quot;:884,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:19297,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/157603557?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4929279-4e93-4bcd-bf60-770e45bb9f95_884x171.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Ri2g!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4929279-4e93-4bcd-bf60-770e45bb9f95_884x171.png 424w, https://substackcdn.com/image/fetch/$s_!Ri2g!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4929279-4e93-4bcd-bf60-770e45bb9f95_884x171.png 848w, https://substackcdn.com/image/fetch/$s_!Ri2g!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4929279-4e93-4bcd-bf60-770e45bb9f95_884x171.png 1272w, https://substackcdn.com/image/fetch/$s_!Ri2g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4929279-4e93-4bcd-bf60-770e45bb9f95_884x171.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h2>2. Use the imperative mood</h2><p>The imperative mood means writing commit messages as if giving a command or instruction. This keeps your commit history clean and consistent:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IJWE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bdb8fa2-8937-430d-84be-b1600a532281_635x189.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IJWE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bdb8fa2-8937-430d-84be-b1600a532281_635x189.png 424w, https://substackcdn.com/image/fetch/$s_!IJWE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bdb8fa2-8937-430d-84be-b1600a532281_635x189.png 848w, https://substackcdn.com/image/fetch/$s_!IJWE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bdb8fa2-8937-430d-84be-b1600a532281_635x189.png 1272w, https://substackcdn.com/image/fetch/$s_!IJWE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bdb8fa2-8937-430d-84be-b1600a532281_635x189.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IJWE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bdb8fa2-8937-430d-84be-b1600a532281_635x189.png" width="557" height="165.78425196850392" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9bdb8fa2-8937-430d-84be-b1600a532281_635x189.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:189,&quot;width&quot;:635,&quot;resizeWidth&quot;:557,&quot;bytes&quot;:14370,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/157603557?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bdb8fa2-8937-430d-84be-b1600a532281_635x189.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IJWE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bdb8fa2-8937-430d-84be-b1600a532281_635x189.png 424w, https://substackcdn.com/image/fetch/$s_!IJWE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bdb8fa2-8937-430d-84be-b1600a532281_635x189.png 848w, https://substackcdn.com/image/fetch/$s_!IJWE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bdb8fa2-8937-430d-84be-b1600a532281_635x189.png 1272w, https://substackcdn.com/image/fetch/$s_!IJWE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bdb8fa2-8937-430d-84be-b1600a532281_635x189.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h2>3. Use present tense</h2><p>Present tense is the right choice because<strong> commits represent changes that are always applicable</strong>&#8212;they can be checked out, merged, reverted, or cherry-picked at any time.</p><p>A properly written Git commit message should complete this sentence:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dAn8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6d569a3-cb34-4e83-ad26-2ac7f98682ab_634x70.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dAn8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6d569a3-cb34-4e83-ad26-2ac7f98682ab_634x70.png 424w, https://substackcdn.com/image/fetch/$s_!dAn8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6d569a3-cb34-4e83-ad26-2ac7f98682ab_634x70.png 848w, https://substackcdn.com/image/fetch/$s_!dAn8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6d569a3-cb34-4e83-ad26-2ac7f98682ab_634x70.png 1272w, https://substackcdn.com/image/fetch/$s_!dAn8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6d569a3-cb34-4e83-ad26-2ac7f98682ab_634x70.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dAn8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6d569a3-cb34-4e83-ad26-2ac7f98682ab_634x70.png" width="518" height="57.19242902208202" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a6d569a3-cb34-4e83-ad26-2ac7f98682ab_634x70.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:70,&quot;width&quot;:634,&quot;resizeWidth&quot;:518,&quot;bytes&quot;:6863,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&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="" title="" srcset="https://substackcdn.com/image/fetch/$s_!dAn8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6d569a3-cb34-4e83-ad26-2ac7f98682ab_634x70.png 424w, https://substackcdn.com/image/fetch/$s_!dAn8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6d569a3-cb34-4e83-ad26-2ac7f98682ab_634x70.png 848w, https://substackcdn.com/image/fetch/$s_!dAn8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6d569a3-cb34-4e83-ad26-2ac7f98682ab_634x70.png 1272w, https://substackcdn.com/image/fetch/$s_!dAn8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6d569a3-cb34-4e83-ad26-2ac7f98682ab_634x70.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h2>4. Add link reference to task</h2><p>If you use project management tools such as Jira, GitLab, or Azure DevOps, consider including the reference ID in your commit message. This links the commit directly to the relevant task, making it easier for your team to understand the broader context of the update.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lAB6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1b9f10d-b9a6-4c05-b326-e8c30fd82996_587x111.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lAB6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1b9f10d-b9a6-4c05-b326-e8c30fd82996_587x111.png 424w, https://substackcdn.com/image/fetch/$s_!lAB6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1b9f10d-b9a6-4c05-b326-e8c30fd82996_587x111.png 848w, https://substackcdn.com/image/fetch/$s_!lAB6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1b9f10d-b9a6-4c05-b326-e8c30fd82996_587x111.png 1272w, https://substackcdn.com/image/fetch/$s_!lAB6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1b9f10d-b9a6-4c05-b326-e8c30fd82996_587x111.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lAB6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1b9f10d-b9a6-4c05-b326-e8c30fd82996_587x111.png" width="503" height="95.11584327086882" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e1b9f10d-b9a6-4c05-b326-e8c30fd82996_587x111.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:111,&quot;width&quot;:587,&quot;resizeWidth&quot;:503,&quot;bytes&quot;:10548,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/157603557?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1b9f10d-b9a6-4c05-b326-e8c30fd82996_587x111.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!lAB6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1b9f10d-b9a6-4c05-b326-e8c30fd82996_587x111.png 424w, https://substackcdn.com/image/fetch/$s_!lAB6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1b9f10d-b9a6-4c05-b326-e8c30fd82996_587x111.png 848w, https://substackcdn.com/image/fetch/$s_!lAB6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1b9f10d-b9a6-4c05-b326-e8c30fd82996_587x111.png 1272w, https://substackcdn.com/image/fetch/$s_!lAB6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1b9f10d-b9a6-4c05-b326-e8c30fd82996_587x111.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h2>5. Summarize the WHAT, not the HOW</h2><p>A commit message should clearly explain WHAT the change does, rather than describing HOW it does it. <strong>The </strong><em><strong>how</strong></em><strong> is already visible in the code diff, but the </strong><em><strong>why</strong></em><strong> and </strong><em><strong>what</strong></em><strong> provide essential context.</strong> </p><p>The same goes for file names&#8212;you don&#8217;t need to include them in the commit message since Git already records them in its history.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HGFS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff87148d-6b37-4490-8e92-fb0c258186fb_920x189.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HGFS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff87148d-6b37-4490-8e92-fb0c258186fb_920x189.png 424w, https://substackcdn.com/image/fetch/$s_!HGFS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff87148d-6b37-4490-8e92-fb0c258186fb_920x189.png 848w, https://substackcdn.com/image/fetch/$s_!HGFS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff87148d-6b37-4490-8e92-fb0c258186fb_920x189.png 1272w, https://substackcdn.com/image/fetch/$s_!HGFS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff87148d-6b37-4490-8e92-fb0c258186fb_920x189.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HGFS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff87148d-6b37-4490-8e92-fb0c258186fb_920x189.png" width="920" height="189" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ff87148d-6b37-4490-8e92-fb0c258186fb_920x189.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:189,&quot;width&quot;:920,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:23588,&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;:false,&quot;internalRedirect&quot;:&quot;https://craftbettersoftware.com/i/157603557?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff87148d-6b37-4490-8e92-fb0c258186fb_920x189.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!HGFS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff87148d-6b37-4490-8e92-fb0c258186fb_920x189.png 424w, https://substackcdn.com/image/fetch/$s_!HGFS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff87148d-6b37-4490-8e92-fb0c258186fb_920x189.png 848w, https://substackcdn.com/image/fetch/$s_!HGFS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff87148d-6b37-4490-8e92-fb0c258186fb_920x189.png 1272w, https://substackcdn.com/image/fetch/$s_!HGFS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff87148d-6b37-4490-8e92-fb0c258186fb_920x189.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h1>Conclusion</h1><p>Clear and structured commit messages are a part of internal software quality. Another powerful way to improve software quality is to apply <strong>Test-Driven Development (TDD). </strong>It helps you write high-quality code, better and faster.</p><p>To master TDD, I recently launched my complete course, including:</p><ul><li><p>The fundamentals of <strong>Test-Driven Development</strong></p></li><li><p><strong>Three real-world TDD examples</strong> in C#, TypeScript and Rust</p></li><li><p>Using TDD to <strong>design high-quality software</strong></p></li><li><p><strong>The two schools</strong> of testing with the <strong>5 test doubles</strong></p></li><li><p>Testing <strong>legacy code</strong></p></li><li><p><strong>Refactoring best practices</strong></p></li></ul><p></p><p><a href="https://transformyourcraft.com/">Get instant access by clicking here</a>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://transformyourcraft.com/&quot;,&quot;text&quot;:&quot;Get Instant Access&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://transformyourcraft.com/"><span>Get Instant Access</span></a></p>]]></content:encoded></item></channel></rss>