<?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[pAIr·prog]]></title><description><![CDATA[Newsletter for the AI-powered developer]]></description><link>https://blog.pairprog.io</link><image><url>https://substackcdn.com/image/fetch/$s_!cfhb!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F375c08a8-9cc5-4b10-a735-8e6986bc3a57_200x200.png</url><title>pAIr·prog</title><link>https://blog.pairprog.io</link></image><generator>Substack</generator><lastBuildDate>Thu, 16 Apr 2026 18:23:04 GMT</lastBuildDate><atom:link href="https://blog.pairprog.io/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Yann Leflour]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[pairprog@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[pairprog@substack.com]]></itunes:email><itunes:name><![CDATA[Yann Leflour]]></itunes:name></itunes:owner><itunes:author><![CDATA[Yann Leflour]]></itunes:author><googleplay:owner><![CDATA[pairprog@substack.com]]></googleplay:owner><googleplay:email><![CDATA[pairprog@substack.com]]></googleplay:email><googleplay:author><![CDATA[Yann Leflour]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[AI Steering]]></title><description><![CDATA[An ideal future for software craftsmanship]]></description><link>https://blog.pairprog.io/p/ai-steering</link><guid isPermaLink="false">https://blog.pairprog.io/p/ai-steering</guid><dc:creator><![CDATA[Yann Leflour]]></dc:creator><pubDate>Thu, 14 Mar 2024 12:01:27 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/dcd2025b-dda1-4cac-9aeb-c5a1b7124ebe_840x600.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>With the recent announcement of <a href="https://www.cognition-labs.com/blog">Devin by Cognition Labs</a>, an &#8220;Autonomous AI Engineer&#8221; donning a name that screams entitlement and overconfidence, I feel it&#8217;s time to re-assert one of my core belief. </p><p>Right now, AI applications should be focused on enhancement instead of replacement.</p><p>It&#8217;s as if, we&#8217;ve learned nothing from the decade long discourse on autonomous vehicles which are <a href="https://qz.com/uc-berkeleys-latest-contribution-to-innovation-is-an-in-1850862676">&#8220;right around the corner&#8221;</a>. And while this white whale has been left to a few outliers, the rest of the industry is already progressing towards full autonomy without trying to jump the shark.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Xnjp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e4769b-1d0e-4ef2-91ab-5786c8b74c4d_1200x550.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Xnjp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e4769b-1d0e-4ef2-91ab-5786c8b74c4d_1200x550.png 424w, https://substackcdn.com/image/fetch/$s_!Xnjp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e4769b-1d0e-4ef2-91ab-5786c8b74c4d_1200x550.png 848w, https://substackcdn.com/image/fetch/$s_!Xnjp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e4769b-1d0e-4ef2-91ab-5786c8b74c4d_1200x550.png 1272w, https://substackcdn.com/image/fetch/$s_!Xnjp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e4769b-1d0e-4ef2-91ab-5786c8b74c4d_1200x550.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Xnjp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e4769b-1d0e-4ef2-91ab-5786c8b74c4d_1200x550.png" width="1200" height="550" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d3e4769b-1d0e-4ef2-91ab-5786c8b74c4d_1200x550.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:550,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Image" title="Image" srcset="https://substackcdn.com/image/fetch/$s_!Xnjp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e4769b-1d0e-4ef2-91ab-5786c8b74c4d_1200x550.png 424w, https://substackcdn.com/image/fetch/$s_!Xnjp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e4769b-1d0e-4ef2-91ab-5786c8b74c4d_1200x550.png 848w, https://substackcdn.com/image/fetch/$s_!Xnjp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e4769b-1d0e-4ef2-91ab-5786c8b74c4d_1200x550.png 1272w, https://substackcdn.com/image/fetch/$s_!Xnjp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3e4769b-1d0e-4ef2-91ab-5786c8b74c4d_1200x550.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>Today, level 2 vehicle autonomy is already widespread, and some constructors are already starting to roll out level 3 under certain conditions. But we are far from the fabled level 5, promised under unrealistic time frames by some.</p><p>And with the recent announcements, software engineering appears to be in a similar bind. Which prompted me to take the time to try and apply this 6 level framework, validated by a century old industry, to my favorite field.</p><h2>The 6 levels of autonomous software development</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XUVw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57eaad24-0970-4011-a8e0-56052b8fba55_1200x550.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XUVw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57eaad24-0970-4011-a8e0-56052b8fba55_1200x550.png 424w, https://substackcdn.com/image/fetch/$s_!XUVw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57eaad24-0970-4011-a8e0-56052b8fba55_1200x550.png 848w, https://substackcdn.com/image/fetch/$s_!XUVw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57eaad24-0970-4011-a8e0-56052b8fba55_1200x550.png 1272w, https://substackcdn.com/image/fetch/$s_!XUVw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57eaad24-0970-4011-a8e0-56052b8fba55_1200x550.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XUVw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57eaad24-0970-4011-a8e0-56052b8fba55_1200x550.png" width="1200" height="550" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/57eaad24-0970-4011-a8e0-56052b8fba55_1200x550.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:550,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Image&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="Image" title="Image" srcset="https://substackcdn.com/image/fetch/$s_!XUVw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57eaad24-0970-4011-a8e0-56052b8fba55_1200x550.png 424w, https://substackcdn.com/image/fetch/$s_!XUVw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57eaad24-0970-4011-a8e0-56052b8fba55_1200x550.png 848w, https://substackcdn.com/image/fetch/$s_!XUVw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57eaad24-0970-4011-a8e0-56052b8fba55_1200x550.png 1272w, https://substackcdn.com/image/fetch/$s_!XUVw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57eaad24-0970-4011-a8e0-56052b8fba55_1200x550.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><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>Level 0:</strong> Coding in a text editor. The environment doesn't provide any assistance.</p><p><strong>Level 1:</strong> Coding in an IDE with auto-complete and linting enabled. The environment provides deterministic assistance and guardrails in well-defined situations.</p><p><strong>Level 2:</strong> Coding with <a href="https://github.com/features/copilot">Github's Copilot</a> or <a href="https://supermaven.com/">Supermaven</a> enabled.  Your IDE is now able to help you code on well known tasks (like highways for cars) all while taking into account a small context window.</p><p><strong>Level 3: </strong>Automating bigger tasks across multiple files. Something that you can start to achieve by mixing multiple infrastructure layers. I've already had success on some of these tasks by <a href="https://github.com/pAIrprogio/gpt-assistant-cli-playground/tree/main">leveraging the Open AI Assistant API</a> which provides chain-of-thought capabilities on top of custom tool calling.</p><p><strong>Level 4:</strong> The software environment is fully autonomous, but its user can intervene at any time and correct the course of action. The "developer" (whatever the role will actually be called at this stage) is also able to revert to any previous level of autonomy whenever he desires.</p><p><strong>Level 5: </strong>Set a destination through prompt and let the AI do the driving.</p><p>This is what projects like AutoGPT or Devin have been trying to do.</p><p>Unfortunately, aside from impressive looking demos, their result mostly feel underwhelming under an expert eye. That's because these products haven't managed the previous levels and are building on top of tools which aren't even able to get them there.</p><p>Enabling Level 5 requires a high level of accuracy in the final result under any situation.</p><h2>What does level 4 look like ?</h2><p>As you may have noticed, I haven't mentioned any level 4 projects but multiple level 5 ones. That's simply because I don't know of any, and for a good reason.</p><p>Level 4 is incredibly difficult to both conceptualize and make. Imagining an autonomous agent is easy, but creating the means to take control at any time and change the configuration of every parameter of autonomy in real time is much harder. Much harder but necessary if we want to make the most out of those new systems.</p><p>And that&#8217;s what I call AI steering. And that&#8217;s also why those &#8220;fully autonomous&#8221; solutions are lazy, only chasing easy money from gullible investors and CEOs who drool at the idea of a cheap and silent workforce. Good thing I&#8217;m not the only one who wishes to preserve the fun in engineering.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!P8mx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff57bcf1d-84ee-4773-b9ce-c57562a65dcd_1090x352.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!P8mx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff57bcf1d-84ee-4773-b9ce-c57562a65dcd_1090x352.png 424w, https://substackcdn.com/image/fetch/$s_!P8mx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff57bcf1d-84ee-4773-b9ce-c57562a65dcd_1090x352.png 848w, https://substackcdn.com/image/fetch/$s_!P8mx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff57bcf1d-84ee-4773-b9ce-c57562a65dcd_1090x352.png 1272w, https://substackcdn.com/image/fetch/$s_!P8mx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff57bcf1d-84ee-4773-b9ce-c57562a65dcd_1090x352.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!P8mx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff57bcf1d-84ee-4773-b9ce-c57562a65dcd_1090x352.png" width="1090" height="352" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f57bcf1d-84ee-4773-b9ce-c57562a65dcd_1090x352.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:352,&quot;width&quot;:1090,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:89599,&quot;alt&quot;:&quot;Tweet from @GergelyOrosz I apologize but won't be amplifying startups whose mission is to fully replace software engineers with \&quot;AI devs.\&quot;  It's clear why VCs &amp; investors love this idea; and why founders as well. Imagine how much money they could make if they succeed!  I hate the idea of that future.&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="Tweet from @GergelyOrosz I apologize but won't be amplifying startups whose mission is to fully replace software engineers with &quot;AI devs.&quot;  It's clear why VCs &amp; investors love this idea; and why founders as well. Imagine how much money they could make if they succeed!  I hate the idea of that future." title="Tweet from @GergelyOrosz I apologize but won't be amplifying startups whose mission is to fully replace software engineers with &quot;AI devs.&quot;  It's clear why VCs &amp; investors love this idea; and why founders as well. Imagine how much money they could make if they succeed!  I hate the idea of that future." srcset="https://substackcdn.com/image/fetch/$s_!P8mx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff57bcf1d-84ee-4773-b9ce-c57562a65dcd_1090x352.png 424w, https://substackcdn.com/image/fetch/$s_!P8mx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff57bcf1d-84ee-4773-b9ce-c57562a65dcd_1090x352.png 848w, https://substackcdn.com/image/fetch/$s_!P8mx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff57bcf1d-84ee-4773-b9ce-c57562a65dcd_1090x352.png 1272w, https://substackcdn.com/image/fetch/$s_!P8mx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff57bcf1d-84ee-4773-b9ce-c57562a65dcd_1090x352.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>Despite this, let&#8217;s end on a positive note, because people from adjacent domains are definitely smarter and making breakthrough in their integration of AI:</p><ul><li><p><a href="https://x.com/MartinNebelong/status/1762413978662195409?s=20">MartinNebelong's work</a> on preserving artistic intent while levering image generation is impressive, and I strongly encourage you to follow his work.</p></li><li><p>I was also wowed by <a href="https://x.com/Mankaran32/status/1746209359225380999?s=20">the following demo</a> from game developers. I love that the controller input perfectly illustrate my vision of Level 4 "AI steering".</p></li></ul><p>And my goal is to share more of these novel practical usages as they come by, instead of focusing on the latest hype from a demo. So if you&#8217;ve heard of such interesting projects, make sure to reach out &#128591;</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.pairprog.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading pAIr&#183;prog! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[2024, the End of Designers?]]></title><description><![CDATA[A teardown of a misled and clickbaity post]]></description><link>https://blog.pairprog.io/p/2024-the-end-of-designers</link><guid isPermaLink="false">https://blog.pairprog.io/p/2024-the-end-of-designers</guid><dc:creator><![CDATA[Yann Leflour]]></dc:creator><pubDate>Mon, 11 Dec 2023 12:55:36 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/cd776c83-c9c0-4c59-a856-32d026f310d5_840x600.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Last Thursday, a friend sent me a LinkedIn post that offended me so much in its lack of understanding and vision that I had to give it a proper response. The original post is in French, so, if you&#8217;re ok with the generated LinkedIn translation, here is the transcript.</p><h2>&#8220;In 2024, there will be no more UX designers.</h2><p>Where will the role of designers be in 2024? With the massive arrival of generative AI, the proliferation of design systems, open-access components, and nocode solutions, where will the role of designers lie?</p><p>Doing only Figma can quickly play tricks on you, because the ability of new AI-based website creation solutions will gradually make this role useless.</p><p>It will be easy for anyone to type in a prompt, and then set up a few styling elements, to generate an interface.</p><p>So what will a UI designer be used for?</p><p>Doing only research will block you more and more from accessing many companies that prefer to pay an interface designer who knows how to do research than a researcher who doesn't know how to do interface.</p><p>But more than that, will research still be necessary when we know that it is now possible to create synthetic testers to evaluate an interface?</p><p>It is therefore likely that UX designers will see their job change profoundly in 2024 and that they will have to add new strings to their bow if they want to continue to be employable:</p><p>1&#65039;&#8419; Know how to properly evaluate and measure the value of the UX and the ROI it brings to a company (and, I admit that this is not easy to do, but yet more and more essential)</p><p>2&#65039;&#8419; Know how to set up the right tools within their organization to produce interfaces faster and by more non-UX collaborators.</p><p>3&#65039;&#8419; Know how to better exploit the possibilities of generative AI to accelerate many research and production processes (which is related to my point 2)</p><p>Am I exaggerating? Not so much. Whether at home, in France, or in the US, the world of UX is going through a serious crisis. Even its role is not to be denied, it must know how to show (unlike the coding professions) again its true value to a company.</p><p>Making mock-ups, yes, but that's not enough.</p><p>Doing research, yes, but it doesn't pay off fast enough! &#8220;</p><div><hr></div><p><a href="https://www.linkedin.com/feed/update/urn:li:activity:7137722042375700480">LinkedIn post</a> by <strong>Olivier Sauvage</strong> published 5th of December 2023</p><h2>My take on a misled one</h2><p>So, is 2024 the end of designers? To make it short, my answer is a resounding &#8220;No&#8221;. And in opposition to this post&#8217;s allegations, I believe that the most at-risk job in tech is being a developer.</p><h3>The duality of designers</h3><p>When we mention designers in tech, we&#8217;re talking about both UI and UX designers.</p><p>The UI is the visual identity of the product, in addition to its objective of ensuring the accessibility and readability of a product, it is often a key element of a brand whose codes are an integral part of the company's image. When it's done well, you can recognize the product and the associated company at a glance. It's no coincidence that Google has spent the last few years harmonizing its consumer products&#8217; design system. The UI is not just a functional factor, but also plays an important role in a company's marketing. Sure, you can generate UI with ChatGPT, but:</p><ul><li><p>This UI is not necessarily in line with the brand image</p></li><li><p>The result is either flashy but non-functional, or bland and uninspired. When I generate interfaces with AI, the model uses what it has been trained on. Which for the most part, is the examples and themes proposed by the different UI libraries. And none of that will help your product stand out.</p></li></ul><p>UX on the other side has a whole different scope. It is about offering the best possible user experience while integrating the company's objectives. A good UX Designer is not just someone "tinkering" with interfaces but a person capable of going out in the field, understanding the uses, needs, and problems of customers, and coming out with innovative solutions. Moreover, advanced designers regularly call on psychology during the analysis of user behavior and when coming up with solutions.</p><p>However, one of the limiting factors of AI today is autonomous context intake. For ChatGPT to come up with a solution, it must be provided with all the required information. In the context of UX research, it is a field with far too scattered, and sometimes difficult to qualify information (how do you define a user's emotion?) to be mastered by an AI. And we won&#8217;t get into the quality of the analysis provided in its responses.</p><h3>The designer&#8217;s ROI</h3><blockquote><p>"Even its role is not to be denied, it must know how to show (unlike the coding professions) again its true value to a company." - Olivier Sauvage (translated from French)</p></blockquote><p>As a matter of fact, it&#8217;s quite the opposite. Unlike designers, development teams are the ones who struggle the most to justify their value in a company. Every company knows that they need developers but none are capable of accurately determining their ROI. It's not for nothing that MacKinsey has positioned itself in the market for estimating development productivity with an article that I won't quote as it outraged me with its absurdities. If you want to understand the complexity of the task, I invite you instead to read <a href="https://newsletter.pragmaticengineer.com/p/measuring-developer-productivity">the response</a> by two tech veterans.</p><p>However, a designer can have a direct product impact. There will always be more UX Designers than devs who can claim to have increased a sales channel's conversion rate by 20%. And there, the ROI is quite easily quantifiable.</p><h3>Design is changing. For the better</h3><p>Rather than diminishing the value of the designer, AI is going to increase it.</p><p>As of writing this, AI models already have an almost expert level in writing functional code on unit tasks. If you want to understand the extent of it, look at <a href="https://www.youtube.com/watch?v=bAticrtpXVE">this video</a> where functional interfaces are being created without a single line of code. For the moment, the limiting factor remains their ability to reason, break down, and combine tasks. But that is already changing fast. Recently, I used the latest OpenAI model with the Assistant API to develop <a href="https://github.com/pAIrprogio/gpt-assistant-cli-playground">a tool</a> capable of adding its own features through multi-step instructions; all without any handwritten code.</p><p>In software engineering, we call this a level of abstraction. It is usually a new development language whose use is simplified and which calls on more complex underlying languages for execution. But this time, the new language is simply the natural language. And since (almost) everyone speaks, anyone can become a "developer".</p><p>So in addition to their irreplaceable job, designers will have tools to:</p><ul><li><p>Do ideation more quickly by discussing with an AI</p></li><li><p>Be more efficient in user needs collection by letting an AI do the processing and aggregation of data. Surely the most boring part with little added value</p></li><li><p>Make their ideas functional without having coding knowledge and without a developer to help them</p></li></ul><h3>Time for change</h3><p>So yes, there will be a paradigm shift. I remain convinced that today's design systems will have to be reinvented for use centered around AI. And, as in any industrial revolution process, there will be different reactions, from promoting these new tools to complete rejection.</p><p>However, the designers who will best apprehend these tools and put them at the service of their craft will see a significant increase in their value in the job market.</p>]]></content:encoded></item><item><title><![CDATA[The Rise of the LLM Ecosystem]]></title><description><![CDATA[What's going on with ChatGPT, and where do we fit]]></description><link>https://blog.pairprog.io/p/the-rise-of-the-llm-ecosystem</link><guid isPermaLink="false">https://blog.pairprog.io/p/the-rise-of-the-llm-ecosystem</guid><dc:creator><![CDATA[Yann Leflour]]></dc:creator><pubDate>Tue, 07 Nov 2023 12:30:41 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/98e74598-c536-4ff2-b69a-960243fa9549_840x600.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Yesterday, during the <a href="https://www.youtube.com/watch?v=U9mJuUkhUzk">OpenAI Dev Days opening keynote</a>, OpenAI dropped their biggest announcements yet, annexing new territory into their ever-growing ecosystem. But as the field accelerates at breakneck speed, it's become too common to feel disoriented and question our own place as tech specialists.</p><p>Personally, I have only one way to deal with such feelings. I take a step back, study the road taken, pinpoint the current context, and chart the most likely trajectory. So that&#8217;s what I&#8217;ll be doing in this post.</p><h2>What&#8217;s up, I&#8217;m ChatGPT</h2><p>In November 2023, OpenAI released ChatGPT, its first B2C product based on GPT-3.5. By fine-tuning GPT-3 to work in a chat context, and releasing it to the public in a user-friendly platform, they&#8217;ve finally sparked interest outside of academia.</p><p>Although it wasn&#8217;t <a href="https://en.wikipedia.org/wiki/ELIZA">the first Chat Model</a>, it certainly was the largest to ever be trained. But the real game changer was about to come with the rollout of GPT-4. By significantly improving the results of ChatGPT, this update sent ripples through the tech world. Within just a couple of months, the spotlight finally shifted away from the toxic and saturated crypto narrative to the potential of AI in everyday use.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a></p><p>Meanwhile, as users delved into ChatGPT&#8217;s capabilities, the initial excitement quickly faded, revealing the limitations. Finite memory, outdated data, lack of context, hallucinations, the cumbersome need for manual input, and the generic default &#8220;persona&#8221; made it highly impractical to handle complex scenarios.</p><p>Because, of course, many eyed AI as a workforce substitute. But as most work often includes executing multiple tasks, thought processes, and planning; expecting a single Chat LLM to do it all with Q&amp;A alone wouldn&#8217;t be cutting it.</p><h2>Dealing with agents</h2><p>As always with software engineering, it&#8217;s not even a recent problem with a new solution. Marvin Minsky wrote about this exact topic in &#8220;<a href="http://aurellem.org/society-of-mind/">The Society of Mind</a>&#8221; which was first published in 1986. He had already tackled part of this issue, pointing to what we now commonly refer to as "agents." Once again, the answer didn&#8217;t change; it was only rebranded.</p><p>And of course, in October 2022, a small library that was soon to become its own ecosystem was released under the name of <a href="https://www.langchain.com/">Langchain</a>. It put a heavy focus on creating pipelines for agents. With a point of entry managing the conversation, and being able to call agents for their expertise, the results became way more satisfying.</p><p>Using Langchain is basically giving LLMs their own phonebook. &#8220;Want to search Google? Ask this guy.&#8221;, &#8220;Need a copywriter for your article? Give it to this one&#8221;</p><p>To build an LLM agent, you need 2 things:</p><ul><li><p>A system prompt to tailor the response format to the requirements, which gave rise to the wonderful world of &#8220;prompt engineering&#8221; <s>hustlers</s> experts due to very unreliable consistency in the responses</p></li><li><p>Optionally, tools to retrieve information to provide up-to-date and context-aware answers by querying data, or asking another agent.</p></li></ul><p>The matter was, even if they could be chained, agents were still basic executants. </p><h2>Artificial General Intelligence</h2><p>After all, most solution-oriented thinking doesn't typically emerge when you're knee-deep in execution. This concept is best explored in Daniel Kahneman&#8217;s <a href="https://en.wikipedia.org/wiki/Thinking,_Fast_and_Slow">Thinking Fast And Slow (2011)</a>, introducing us to the dynamism between System 1 and System 2 thinking. And agents were still operating in the realm of System 1. Fast. Intuitive.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a></p><p>So the response came swiftly under the guise of the badly named &#8220;AGI&#8221;<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a>, with <a href="https://github.com/yoheinakajima/babyagi">BabyAGI</a> and <a href="https://github.com/Significant-Gravitas/AutoGPT">AutoGPT</a> being the most renowned projects at the time. By leveraging chain-of-thought agents that plan, split, and dispatch complex tasks into smaller units; they effectively mimic System 2's logical processing. These planner agents not only delegate tasks but also evaluate the outcomes of other executing or planning agents &#8212; essentially simulating a team of experts.</p><p>Such systems are still gaining traction as can be attested by the release of frameworks such as <a href="https://microsoft.github.io/autogen/docs/Getting-Started">Microsoft AutoGen</a>, the $12 million raised by AutoGPT, or the <a href="https://github.com/jina-ai/dev-gpt">countless</a> projects <a href="https://github.com/101dotxyz/GPTeam">aimed</a> at <a href="https://github.com/eumemic/ai-legion">emulating teams</a>.</p><p>So while these "autonomous" systems currently yield mixed results, they operate on increasingly abstract objectives, foreshadowing near-future capabilities.</p><h2>Chat ecosystem 101</h2><p>After a reminder of the recent history and the current context, we can extrapolate and map the playbook to building a complete LLM ecosystem. A task which all of the previously mentioned projects have been building upon.</p><p><strong>The LLM ecosystem playbook</strong></p><ol><li><p>An entry point for every interaction</p></li><li><p>Leverage a list of executive agents</p></li><li><p>Leverage a list of persona agents</p></li><li><p>Provide instant context intake from sound, image, text, files</p></li><li><p>Access to personal data such as emails, chat, documents</p></li><li><p>Auto-select the appropriate agent</p></li><li><p>Create agents creation on the fly</p><ol><li><p>Agents with code execution</p></li><li><p>Instant personalities for formulating responses based on the question</p></li></ol></li><li><p>Create chain-of-thought agents on the fly to deal with multi-step actions</p></li><li><p>Fine-tune user-specific models </p></li><li><p>Allow payments for 3rd party services through the platform</p></li><li><p>Change the default interface<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-4" href="#footnote-4" target="_self">4</a></p></li><li><p>Automate the creation of recurring tasks</p></li></ol><h2>What&#8217;s the moat?</h2><p>On that matter, OpenAI&#8217;s chat.open.com is certainly the most advanced product of all. An incredible feat, considering it&#8217;s operating as a SaaS, Enterprise product, and Consumer product. With their latest announcements, they are blasting through the few items that were remaining on my list:</p><ul><li><p>They have a Site + App as entry points</p></li><li><p>They are releasing the V2 of their &#8220;app store&#8221; with <a href="https://openai.com/blog/introducing-gpts">GPTs</a></p></li><li><p><a href="https://openai.com/blog/introducing-gpts">GPTs</a> are introducing heavy customization</p></li><li><p>They are introducing revenue-sharing</p></li><li><p>ChatGPT can hear audio, see images, read documents</p></li><li><p>Output isn&#8217;t limited to text, it can now generate images, audio, and other files</p></li><li><p>ChatGPT can create on-the-fly executing agents with &#8220;Advanced data analysis&#8221;</p></li><li><p>It can fetch up-to-date information with &#8220;online search&#8221;</p></li><li><p>Agents are now auto-selected</p></li><li><p>They demoed a <a href="https://www.youtube.com/live/U9mJuUkhUzk?feature=shared&amp;t=1429">GPT working with Zapier</a> meaning countless integrations with your own data</p></li><li><p>They still have the best and most performant model on the market</p></li><li><p>They are working on improving the speed and introducing more chain-of-thought reasoning</p></li><li><p>All of that is becoming available as a SaaS product through their API</p></li></ul><p>Simply put, they are spearheading the paradigm shift from the traditional mobile/web application to a centralized experience with ChatGPT. And, of course, they are crowdsourcing every advancement through it, from training data to the creation of personalized assistants. We are giving them the tools to remain in this leadership position willingly.</p><p>Moreover, by abstracting context fetching, reasoning, and agent selection, they are rendering a lot of startups working as simple wrappers around GPT-4 obsolete. Also, by streamlining the integration of these tools through their API, they are eliminating complexities previously managed by the now-redundant open-source projects.</p><p>But, to me, the defining shift compared to the smartphone revolution is that anyone can create GPTs. Developer skills are a bonus, not a requirement.</p><h2>Sharing the crumbs</h2><p>So you may be like me, trying to position yourself in the current context and work with or around these &#8220;AI&#8221; offerings. If so, you&#8217;re probably wondering &#8220;What&#8217;s left for me?&#8221;</p><p>If you can&#8217;t beat the ecosystem, you might as well join it. And in this regard, there are a couple of ways you can still make it out. </p><ul><li><p>Join the gold rush to create the most popular GPTs</p></li><li><p>Leverage any data you already have to make them</p></li><li><p>Create micro-APIs to fill in the gaps not covered by the advanced data analysis tool or existing agents</p></li><li><p>Become an expert in creating new agents/GPTs as a service</p></li><li><p>Learn to integrate them into products that aren&#8217;t chats, and streamline existing user flows</p></li><li><p>Leverage it to build faster yourself</p></li></ul><p>The custom wrapper you&#8217;ve built or you&#8217;re building around GPT&#8217;s API won&#8217;t cut it anymore. The barrier of entry is being blasted to pieces by OpenAI and you might as well join the assault.</p><p>Where integration once reigned, in a landscape where anyone can create new user experiences, quickly seizing opportunities is the new key to success.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.pairprog.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thank you for reading through, if you&#8217;ve enjoyed this post subscribe for free to support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Also, I&#8217;d love to get your opinion on the matter in the comments &#128521;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.pairprog.io/p/the-rise-of-the-llm-ecosystem/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.pairprog.io/p/the-rise-of-the-llm-ecosystem/comments"><span>Leave a comment</span></a></p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>Unfortunately, the web3 hustlers seeing the wind shift, quickly flocked to the &#8220;AI revolution&#8221;, dooming our social media timelines for a couple of months.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>Funnily enough, prompting an LLM to respond like Daniel Kahneman&#8217;s and lay out step-by-step reasoning before the final response improved the answer quality and boosted my learning through exposure to the reasoning. I&#8217;m currently using a simplified version of <a href="https://twitter.com/nisten/status/1696229059183730833">this prompt</a> in GPT4. It feels more like collaborating with an expert than managing a task-doer.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>AGI stands for Artificial General Intelligence. Unlike narrow AI, which is designed for specific tasks, AGI has the cognitive abilities to understand, learn, and apply knowledge across different domains, reason through problems, and adapt to new situations. Essentially, the full range of human intelligence; which none of these projects exhibited.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-4" href="#footnote-anchor-4" class="footnote-number" contenteditable="false" target="_self">4</a><div class="footnote-content"><p>Is a screen truly the best way to chat?</p></div></div>]]></content:encoded></item><item><title><![CDATA[I prepared an AI hackathon]]></title><description><![CDATA[Here's what I learned from it]]></description><link>https://blog.pairprog.io/p/i-prepared-an-ai-hackathon</link><guid isPermaLink="false">https://blog.pairprog.io/p/i-prepared-an-ai-hackathon</guid><dc:creator><![CDATA[Yann Leflour]]></dc:creator><pubDate>Tue, 13 Jun 2023 06:01:10 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/4473d95a-8c7b-4786-9c32-547e6782054a_840x600.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hello dear reader,</p><p>Sorry for going dark this last month, but I&#8217;m sure you&#8217;ll understand.</p><p>Between a full-time job, family duties, my own AI-related tinkering, Zelda: Tears of the Kingdom&#8217;s release, and the beautiful French weather we&#8217;ve had lately, it&#8217;s been hard to focus on writing. But I haven&#8217;t forgotten you &#128521;.</p><p>Last week I had the pleasure of helping host our company&#8217;s AI-oriented offsite. So just to get things back on track, I'd like to share some recent discoveries I've made through trial and error.</p><h6>Disclaimer: AI tools were used for rephrasing some sentences and for generating the post&#8217;s title image</h6><h2>I changed my PoC setup</h2><p>I&#8217;ve talked about my PoC setup for working with AI before:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;507adc5b-8d8d-4dcb-b441-ae258254f802&quot;,&quot;caption&quot;:&quot;Hey everyone, I&#8217;ve been tinkering a lot with AI in the last few weeks, and I&#8217;m cooking up some really cool stuff &#128513; While working on my projects, I wanted to share my setup to test out new technologie&#8230;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;My PoC setup&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:100643275,&quot;name&quot;:&quot;Yann Leflour&quot;,&quot;bio&quot;:&quot;CTO, problem solver at heart. Writing on AI development, software architecture, engineering and management practices&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/12caf89a-5f20-4248-a464-5cc37329ba81_612x612.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2023-05-03T05:01:02.553Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6609d1e5-605f-46ed-be74-3e2f7051bd56_840x600.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.pairprog.io/p/my-poc-setup&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:117599381,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;pAIr&#183;prog&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F375c08a8-9cc5-4b10-a735-8e6986bc3a57_200x200.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>But this time, I had to get 3 separate teams to iterate fast on topics I didn&#8217;t know in advance. So the stack required a couple of updates:</p><ul><li><p>It needed an easy setup and deployment method</p></li><li><p>It had to provide the most extensive set of tools out of the box</p></li><li><p>I needed both frontend and backend on the same stack</p></li></ul><p>With those in mind, I had to build it back from the ground up</p><h4><strong>I ditched Javascript to focus on Python</strong></h4><p>I like Javascript, okay? I know it&#8217;s the perfect maelstrom of pure chaos of what any language is and could be. But despite all of that, I actually love its quirks and whatnot.</p><p>And I&#8217;ve done wonders with it, be it on the backend or frontend. But when I started working with data on my AI projects, oh boy, what a disaster it was.</p><p>Javascript is great at many things but is terrible at providing fully-fledged frameworks and libraries. In 2020 there were already over 1.3 <strong>million </strong>packages on npm, but to this day, there is still no consensus on what the default backend framework for NodeJS even is. And it&#8217;s worse when working with data, a lot worse&#8230;</p><p>So the obvious choice was Python. And while I loathe its heavily object-oriented syntax without proper typings, the Python packages for working with data are just in a different league. I knew it was the language for data scientists, but I had no idea how far ahead it was from other languages.</p><p>Just a quick sample so you get my point. I&#8217;m building my own AI-assisted tools to monitor news on tech. One of the core features is the ability to send an article&#8217;s URL to feed into my database. In JS, I considered myself lucky with <a href="https://github.com/extractus/article-extractor">@extractus/article-extractor</a>. But in Python, we&#8217;ve got <a href="https://newspaper.readthedocs.io/en/latest/">Newspaper3k</a> which, on top of essential data, gives you:</p><ul><li><p>Summary extraction</p></li><li><p>Keywords extraction</p></li><li><p>Google trending terms extraction</p></li></ul><p>And every data-related library is like this. Even Langchain is leagues better in <a href="https://python.langchain.com/en/latest/use_cases/question_answering.html">Python</a> than in <a href="https://js.langchain.com/docs/">JS</a>. Just compare the amount of integrations between the two.</p><p>So, from now on, I&#8217;m sticking with Python on the backend side.</p><h4>Langchain is great (kind of)</h4><p>I just mentioned Langchain, and I have to discuss it briefly.</p><p>One thing Langchain does well is documenting use cases and making you feel powerful. Open up an integration, copy/paste the code, and voil&#224;! It also thoroughly introduces the essential modules needed to effectively engage with an LLM.</p><p>Unfortunatunately, I can&#8217;t say the same about actually documenting the way it&#8217;s architectured and works inside. Going past the usual &#8220;getting started&#8221; felt incomprehensibly convoluted. I&#8217;m sure focusing on object-oriented instead of functional programming doesn&#8217;t help. Still, I had to implement each module myself without using it to finally get a good grasp of its inner workings.</p><p>However, due to its widespread use and numerous integrations, I had no choice but to use it as the primary framework for interacting with LLMs during the hackathon.</p><p>And it actually went pretty well. Of course, I split my template code into neatly named files to help my teammates understand and iterate quickly. But, since that experience, I&#8217;m considering using more of its parts in my mainline developments.</p><h4>Streamlit is dope</h4><p><strong>(unless you want to go into production)</strong></p><p>Being stuck with Python, I also needed a way for the devs to quickly iterate on features without spending hours on the frontend.</p><p>Fortunately, there is an awesome Python package for that called <a href="https://docs.streamlit.io/">Streamlit</a>. It allows you to build a pretty reactive frontend with a few lines of code. And even better, they offer their own <a href="https://streamlit.io/cloud">push-to-prod hosting solution</a> for the site you&#8217;ve made.</p><p>Here&#8217;s a preview of what I made with a dozen lines of code based on <a href="https://blog.futuresmart.ai/building-an-interactive-chatbot-with-langchain-chatgpt-pinecone-and-streamlit">this article</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_!rdUX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc48fba-f891-4017-8f68-ef072d51a29e_2512x1680.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rdUX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc48fba-f891-4017-8f68-ef072d51a29e_2512x1680.png 424w, https://substackcdn.com/image/fetch/$s_!rdUX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc48fba-f891-4017-8f68-ef072d51a29e_2512x1680.png 848w, https://substackcdn.com/image/fetch/$s_!rdUX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc48fba-f891-4017-8f68-ef072d51a29e_2512x1680.png 1272w, https://substackcdn.com/image/fetch/$s_!rdUX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc48fba-f891-4017-8f68-ef072d51a29e_2512x1680.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rdUX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc48fba-f891-4017-8f68-ef072d51a29e_2512x1680.png" width="454" height="303.70604395604397" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dfc48fba-f891-4017-8f68-ef072d51a29e_2512x1680.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:974,&quot;width&quot;:1456,&quot;resizeWidth&quot;:454,&quot;bytes&quot;:420660,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rdUX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc48fba-f891-4017-8f68-ef072d51a29e_2512x1680.png 424w, https://substackcdn.com/image/fetch/$s_!rdUX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc48fba-f891-4017-8f68-ef072d51a29e_2512x1680.png 848w, https://substackcdn.com/image/fetch/$s_!rdUX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc48fba-f891-4017-8f68-ef072d51a29e_2512x1680.png 1272w, https://substackcdn.com/image/fetch/$s_!rdUX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc48fba-f891-4017-8f68-ef072d51a29e_2512x1680.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>Regrettably, the downside of Streamlit is that while it&#8217;s neat for building demos, such as most of Hugginface&#8217;s model pages, the way it works makes it impossible to use to build a company&#8217;s product.</p><h2>Security is a pain</h2><p>Of the 3 PoCs presented at the end of the offsite, all were terrific demos, but absolutely <strong>none</strong> were safe:</p><ul><li><p>One allowed GPT3.5 to respond, potentially putting the user in danger or engaging the company's liability without any validation.</p></li><li><p>Another ran generated SQL queries directly on our database, making it prone to SQL injections of the worst order (hello <a href="https://owasp.org/Top10/A03_2021-Injection/">OWasp Top 10</a> &#128075;).</p></li><li><p>The last one didn&#8217;t do any of those, but has anyone actually figured out how to prevent prompt injection?</p></li></ul><p>And while most of these can be prevented one way or another, the solutions won&#8217;t come without some severe feature limitations.</p><p>So, for now, the most straightforward use cases are definitely internal tools because I&#8217;m scared to death of releasing a public AI feature using proprietary data. Good thing OWasp has <a href="https://owasp.org/www-project-ai-security-and-privacy-guide/">been branching out to AI</a> lately to help us out.</p><h2>A quick chat on use cases</h2><p>Security aside, I&#8217;m starting to notice a pattern emerge from the many tools and use cases I&#8217;ve encountered lately.</p><h4>Dealing with chaos</h4><p>LLMs are great at dealing with unstructured information: we tried giving statements in an unorganized order, often going back on our words, and as you can imagine, GPT-3.5 dealt well with parsing it, and GPT-4 did even better.</p><p>They are also getting good at structuring said information. But even with GPT-4 and several system prompt iterations, I&#8217;m still getting misses. So we&#8217;re still far from ditching the infamous <code>maybeItsJsonButIfNotRetry</code> function, but I&#8217;m hopeful for Anthropic&#8217;s Claude <a href="https://www.anthropic.com/index/claudes-constitution">&#8220;constitutional AI&#8221;</a>.</p><h4>Killing the ant with a bazooka</h4><p>Another trend I&#8217;m noticing is that because OpenAI&#8217;s GPT is so good at dealing with such varied topics and tasks, it&#8217;s likely way too powerful for most of these tasks.</p><p>One such example I have in mind is that while building my own AI-assisted knowledge base, I wanted to extract both summary and keywords. 2 tasks that, let me remind you, are included by default in <a href="https://newspaper.readthedocs.io/en/latest/">Newspaper3k</a> using much smaller models which can be installed along the rest of your backend.</p><p>Another consequence of heavily relying on top LLMs is that I become dependent on private models and constrained to using APIs which I&#8217;m not really a fan of.</p><h2>So what&#8217;s next</h2><p>Now that I&#8217;m starting to get a good feel for the main tools, I&#8217;m looking forward to trying out and integrating smaller models to deal with specific use cases.</p><p>And, of course, I&#8217;ll keep on sharing my discoveries. So, if you&#8217;re not subscribed already, it&#8217;s only one step away &#128513;</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.pairprog.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading pAIr&#183;prog! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[My PoC setup]]></title><description><![CDATA[Tools I use to test things fast]]></description><link>https://blog.pairprog.io/p/my-poc-setup</link><guid isPermaLink="false">https://blog.pairprog.io/p/my-poc-setup</guid><dc:creator><![CDATA[Yann Leflour]]></dc:creator><pubDate>Wed, 03 May 2023 05:01:02 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/8a1f2d5f-f911-410e-8a71-e5c2068ec926_840x600.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey everyone, I&#8217;ve been tinkering a lot with AI in the last few weeks, and I&#8217;m cooking up some really cool stuff &#128513;</p><p>While working on my projects, I wanted to share my setup to test out new technologies and concepts as quickly as possible.</p><p><em><strong>Disclaimer:</strong> AI was used for image generation and to help rephrase a few sentences.</em></p><h2>What I avoid in a PoC</h2><p>Before we start, let&#8217;s talk about a few time wasters I tend to avoid when dealing with a PoC:</p><ul><li><p><strong>UX/UI:</strong> Even if I talk about it here, UX/UI is my biggest time waster when working on PoCs and is often the last thing I want to work on. Also, as a maker, a good UI is worthless if the feature doesn&#8217;t work.</p></li><li><p><strong>Design systems:</strong> there are dozens out there. You can find my (current) favorite one below, so I don&#8217;t waste time writing mine.</p></li><li><p><strong>Validation:</strong> I know what I can and can&#8217;t do with my code. No need to lock it down at first.</p></li><li><p><strong>Global state management:</strong> Whenever I&#8217;ve used a state management library while working on a PoC, I lose myself in it instead of focusing on features. So now, I stay pure React and use custom providers as much as possible. I even <a href="https://gist.github.com/yleflour/2851b8a12a47288b7553d5a3d6f49aa8">wrote some code</a> I re-use across projects to infer type safety.</p></li></ul><h2>Dev environment</h2><p>While I was used to setting up local projects for developing PoC, I now use <a href="https://replit.com">Replit</a> as much as possible for a few key reasons:</p><ul><li><p><strong>Browser-based IDE:</strong> I can work on my code from anywhere (there is even a mobile app) as long as I have a good-enough internet connection.</p></li><li><p><strong>Env variable handling:</strong> This allows me to easily manage protected environment variables without using extra tools.</p></li><li><p><strong>Cmd+Enter to run and get an HTTPS URL:</strong> I can inspect and share my dev URL in a matter of minutes. It&#8217;s also really helpful when I need to test and develop webhook endpoints.</p></li><li><p><strong>Repl templates:</strong> When looking for a base setup to get started with development in a new language or library, I just select a Repl template, and I&#8217;m ready to run the code instantly.</p></li><li><p><strong>Integrates completion / formaters:</strong> All my usual tools (typescript, prettier, eslint) are available as soon as I install the required dependencies.</p></li><li><p><strong>Ghostwriter:</strong> I enjoy working without Github Copilot, and I was positively surprised when trying out Replit&#8217;s Ghostwriter. On top of auto-complete, it&#8217;s available within a chat window and as a contextualized command when selecting code.</p></li><li><p><strong>Collaborative programming:</strong> For experimental development, it&#8217;s way faster than any git-based workflow.</p></li></ul><p>Regarding pricing, there is a free tier. But I recommend paying the 20$ a month subscription to access private Repls, Ghostwritter, a boosted server, and the ability to keep your dev server up. And no, in case you&#8217;re wondering, I didn&#8217;t get anything from Replit for this article.</p><p>When necessary, I switch to a traditional local git-based setup for projects. However, I've noticed that Replit takes me further every time without having to do so.</p><h2>Data storage</h2><p>Few applications are complete without some kind of data storage. I&#8217;m a huge PostgreSQL fan because it can do almost everything other databases do:</p><ul><li><p>Relational storage</p></li><li><p>Key-value storage</p></li><li><p>On event functions</p></li><li><p><a href="https://js.langchain.com/docs/modules/indexes/vector_stores/integrations/supabase#create-a-table-and-search-function-in-your-database">Vector-based comparison (necessary for embeddings)</a></p></li><li><p>And many more I don&#8217;t even know of</p></li></ul><p>So it shouldn&#8217;t be a surprise that my go-to service to get a project running is <a href="https://supabase.com/">Supabase</a>.</p><ul><li><p>Perfect free tier for tinkering</p></li><li><p>High-level configuration through UI</p></li><li><p>Low-level configuration through SQL scripts</p></li><li><p>Authentication + Row level security when needed</p></li><li><p>Webhooks</p></li><li><p>And a Firebase-like JS SDK with the ability to <a href="https://supabase.com/docs/reference/javascript/typescript-support">generate Typescript typings</a>.</p></li></ul><h2>Stack</h2><p>I&#8217;m still on the edge between a Javascript or Python environment for LLM development. But as I feel that UX/UI will be king for LLM integration, and because I&#8217;m most familiar with it, I&#8217;m sticking to JS only right now.</p><p>Here is the stack I&#8217;m currently using out of order:</p><ul><li><p><a href="https://chat.openai.com/?model=gpt-4">GPT4</a>: Which <a href="https://blog.pairprog.io/p/how-ai-is-impacting-my-productivity">I wrote in length about in the previous article</a></p></li><li><p><a href="https://nextjs.org/docs">NextJS</a>: This React framework handles 80% of my use case. I can write an API or server server-side rendered pages, which allows me to easily combine UX/UI and data.</p></li><li><p><a href="https://vitejs.dev/guide/">ViteJS</a>: Sometimes, building a SPA is required. In that case, I instantly switch to Vite for bundling.</p></li><li><p><a href="https://tailwindcss.com/docs/installation">Tailwind</a> + <a href="https://daisyui.com/docs/install/">DaisyUI</a>: I still hate raw Tailwind with a passion (just look at <a href="https://tailwindui.com/components/marketing/sections/pricing">the code tab of this example</a>), but I always found it the easiest way to get started with styling. Fortunately, DaisyUI was the component library to win me over. It&#8217;s still pure CSS and comes packed with themes and components to make my life easier with just a few readable class names.</p></li><li><p><a href="https://www.typescriptlang.org/docs/handbook/intro.html">Typescript</a>: Type safety and auto-completion is king. Thanks to it, I develop way faster without looking up API specs as often as I used to.</p></li><li><p><a href="https://prettier.io/docs/en/install.html">Prettier</a>: Format on save. Enough said.</p></li><li><p><a href="https://eslint.org/docs/latest/use/getting-started">ESLint</a>: It&#8217;s baked in with NextJS, so I use it, but it tends to slow me down for no good reason when starting up and experimenting, so sometimes I wait a bit before enabling it.</p></li><li><p><a href="https://jestjs.io/docs/getting-started">Jest</a>/<a href="https://vitest.dev/guide/">Vitest</a>: When working on a PoC, I only use it if I plan on going TDD on a particular function.</p></li><li><p><a href="https://moment.github.io/luxon/#/?id=luxon">Luxon</a>: Functional date manipulation. No more date mutation.</p></li><li><p><a href="https://lodash.com/">Lodash</a>: Structures manipulation. Utils for objects, arrays, &#8230;</p></li><li><p><a href="https://axios-http.com/docs/intro">Axios</a>: Easy data fetching for 3rd party APIs</p></li><li><p><a href="https://tanstack.com/query/v3/">TanStack-Query</a>: easy query management with hooks. Combines well with Axios and other async-based APIs.</p></li></ul><div><hr></div><p>I probably missed a few and will update this article accordingly if I remember them. In case you have any recommendations for me to upgrade my PoC stack, I&#8217;m all for it, and the comments are always open.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.pairprog.io/p/my-poc-setup/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.pairprog.io/p/my-poc-setup/comments"><span>Leave a comment</span></a></p><p>So thanks for reading through. If you found this article helpful, I would greatly appreciate it if you could share it with others. See you next time &#128521;</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.pairprog.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading pAIr&#183;prog! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[How AI impacts my productivity]]></title><description><![CDATA[A Lean analysis of the impact of AI in software development]]></description><link>https://blog.pairprog.io/p/how-ai-is-impacting-my-productivity</link><guid isPermaLink="false">https://blog.pairprog.io/p/how-ai-is-impacting-my-productivity</guid><dc:creator><![CDATA[Yann Leflour]]></dc:creator><pubDate>Thu, 20 Apr 2023 06:30:18 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/fb107e19-ba1e-4272-b40a-b08abaf2956f_840x600.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Lean Engineering has provided me with tools I use daily to approach new topics. And developing with the help of AI is such a topic.</p><p>So I want to take a step back and reflect on how AI has changed my approach to software development, where it shines, and where it&#8217;s still lacking. In this context, I will focus on the basic usage of ChatGPT4 without plugins to go through the following tasks:</p><ul><li><p>Research &amp; planning</p></li><li><p>New project setup</p></li><li><p>Writing API-heavy code</p></li><li><p>Writing tests</p></li><li><p>Implementing the function to pass those tests</p></li><li><p>Debugging</p></li><li><p>Upgrading an existing feature</p></li></ul><h5>Disclaimer: AI helped with the header image and enhanced a couple of phrasings</h5><h2>Lean&#8217;s approach to productivity</h2><p><em>Graphics are courtesy of the wonderful Tycho Tatitscheff. Who also taught me about those terms. You can follow him <a href="https://twitter.com/TychoTa">on Twitter</a>.</em></p><p>Let&#8217;s analyze the development process of a new minor feature in terms of time.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aINa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba9b70f9-6e0c-49dd-9e69-d27cba73af1f_2480x531.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aINa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba9b70f9-6e0c-49dd-9e69-d27cba73af1f_2480x531.png 424w, https://substackcdn.com/image/fetch/$s_!aINa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba9b70f9-6e0c-49dd-9e69-d27cba73af1f_2480x531.png 848w, https://substackcdn.com/image/fetch/$s_!aINa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba9b70f9-6e0c-49dd-9e69-d27cba73af1f_2480x531.png 1272w, https://substackcdn.com/image/fetch/$s_!aINa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba9b70f9-6e0c-49dd-9e69-d27cba73af1f_2480x531.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aINa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba9b70f9-6e0c-49dd-9e69-d27cba73af1f_2480x531.png" width="1456" height="312" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ba9b70f9-6e0c-49dd-9e69-d27cba73af1f_2480x531.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:312,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:217833,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!aINa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba9b70f9-6e0c-49dd-9e69-d27cba73af1f_2480x531.png 424w, https://substackcdn.com/image/fetch/$s_!aINa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba9b70f9-6e0c-49dd-9e69-d27cba73af1f_2480x531.png 848w, https://substackcdn.com/image/fetch/$s_!aINa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba9b70f9-6e0c-49dd-9e69-d27cba73af1f_2480x531.png 1272w, https://substackcdn.com/image/fetch/$s_!aINa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba9b70f9-6e0c-49dd-9e69-d27cba73af1f_2480x531.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p><strong>Lead time</strong> in this context is the time taken to deliver value, and it&#8217;s the elapsed time between the start of development and the moment it reaches production.</p><p><strong>Touchtime</strong> is the time spent concentrating on the task. I tend to include time spent understanding the business process, testing out tools, and technical planning, on top of the development process itself.</p><p><strong>Value-added time </strong>is the time spent on producing pure value, and most of it is the time spent coding. And by coding, I mean actively typing code to introduce the feature. You don&#8217;t count refactoring, documentation, or reading, &#8230; This means that this chart is actually pretty optimistic because, as a matter of fact, value-added time, in this case, would probably be around 20 minutes.</p><p>The gray part is <strong>off-time</strong>, it delays the lead time, but it&#8217;s not time spent actively working on this feature.</p><p>And what about the yellow parts? It&#8217;s <strong>waste</strong>, pure waste. It&#8217;s time spent understanding the business, planning things, waiting for the CI to run, (testing)&#8230; Basically, everything you wish you wouldn&#8217;t have to do.</p><p>As a craftsman and maker, increasing my productivity means reducing my <strong>lead time</strong> by:</p><ul><li><p>Reducing <strong>off-time </strong>in between <strong>touch-time</strong></p></li><li><p>Reducing <strong>touch-time</strong> by:</p><ul><li><p>Reducing the required <strong>value-added time</strong></p></li><li><p>Getting <strong>value-added time</strong>/<strong>touch time</strong> ratio as close as possible to 100% by:</p><ul><li><p>Eliminating <strong>waste</strong></p></li></ul></li></ul></li></ul><h2>AI&#8217;s impact</h2><p>Now that we speak the same language, how has ChatGPT4 impacted my productivity? Well, it&#8217;s been an insightful investigation. Of course, the honest answer is &#8220;It depends&#8221;. And for that, I&#8217;ll analyze a couple of everyday tasks.</p><h4>Research and planning</h4><p><em>Remember, research and planning are actually <strong>waste</strong> and should be eliminated as much as possible.</em></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Lemx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a3babae-40dd-4ea7-9974-6557dc920ef4_1834x373.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Lemx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a3babae-40dd-4ea7-9974-6557dc920ef4_1834x373.png 424w, https://substackcdn.com/image/fetch/$s_!Lemx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a3babae-40dd-4ea7-9974-6557dc920ef4_1834x373.png 848w, https://substackcdn.com/image/fetch/$s_!Lemx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a3babae-40dd-4ea7-9974-6557dc920ef4_1834x373.png 1272w, https://substackcdn.com/image/fetch/$s_!Lemx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a3babae-40dd-4ea7-9974-6557dc920ef4_1834x373.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Lemx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a3babae-40dd-4ea7-9974-6557dc920ef4_1834x373.png" width="1456" height="296" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0a3babae-40dd-4ea7-9974-6557dc920ef4_1834x373.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:296,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:120731,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Lemx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a3babae-40dd-4ea7-9974-6557dc920ef4_1834x373.png 424w, https://substackcdn.com/image/fetch/$s_!Lemx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a3babae-40dd-4ea7-9974-6557dc920ef4_1834x373.png 848w, https://substackcdn.com/image/fetch/$s_!Lemx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a3babae-40dd-4ea7-9974-6557dc920ef4_1834x373.png 1272w, https://substackcdn.com/image/fetch/$s_!Lemx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a3babae-40dd-4ea7-9974-6557dc920ef4_1834x373.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Research &amp; planning without AI</figcaption></figure></div><p>ChatGPT4 has been a massive help for me when dealing with unknown languages or domains.</p><p>For example, I&#8217;m researching how &#8220;extend the memory&#8221; of ChatGPT. Asking the following got me started quickly:</p><blockquote><p>I'm trying to "extend the memory" of ChatGPT when using its API, as I'm limited by context size. What are the steps to achieve this programatically?</p></blockquote><p>I then ask for details for each step and an explanation of the relevant terms.</p><blockquote><p>What are the steps once I get a new response to store it? <em>(even better if you can reference a step it provided previously)</em></p></blockquote><blockquote><p>What&#8217;s a vector database?</p></blockquote><p>Thanks to the responses:</p><ul><li><p>I have a detailed plan of the required steps to achieve my target result</p></li><li><p>I know the relevant terms to Google instead of guessing</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!S7VO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b2ecd8d-2198-44d8-9196-9d5f1606de6c_1868x389.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!S7VO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b2ecd8d-2198-44d8-9196-9d5f1606de6c_1868x389.png 424w, https://substackcdn.com/image/fetch/$s_!S7VO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b2ecd8d-2198-44d8-9196-9d5f1606de6c_1868x389.png 848w, https://substackcdn.com/image/fetch/$s_!S7VO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b2ecd8d-2198-44d8-9196-9d5f1606de6c_1868x389.png 1272w, https://substackcdn.com/image/fetch/$s_!S7VO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b2ecd8d-2198-44d8-9196-9d5f1606de6c_1868x389.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!S7VO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b2ecd8d-2198-44d8-9196-9d5f1606de6c_1868x389.png" width="1456" height="303" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b2ecd8d-2198-44d8-9196-9d5f1606de6c_1868x389.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:303,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:115025,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!S7VO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b2ecd8d-2198-44d8-9196-9d5f1606de6c_1868x389.png 424w, https://substackcdn.com/image/fetch/$s_!S7VO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b2ecd8d-2198-44d8-9196-9d5f1606de6c_1868x389.png 848w, https://substackcdn.com/image/fetch/$s_!S7VO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b2ecd8d-2198-44d8-9196-9d5f1606de6c_1868x389.png 1272w, https://substackcdn.com/image/fetch/$s_!S7VO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b2ecd8d-2198-44d8-9196-9d5f1606de6c_1868x389.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Research &amp; planning with AI</figcaption></figure></div><p>This allowed me to reduce my <strong>waste</strong> for research and planning by ~80%.</p><h4>New project setup</h4><p>The &#8220;getting started&#8221; task has probably been the one most impacted by my usage of AI. While I started giving out precise instructions, I&#8217;ve become a lot less specific in my directions after a while.</p><p>In a non-AI-enabled approach, I would have to</p><ul><li><p>Search for the best language/framework/libraries combo</p></li><li><p>Setup my machine if I&#8217;m missing tools</p></li><li><p>Go through the getting started documentation and run the commands</p></li><li><p>Look for ways to tailor the solution to my standards</p></li><li><p>Make sure it runs</p></li></ul><p>At most, in 1h of touch time, my value-added time is around 2 minutes, as most frameworks give you command lines to copy-paste in your terminal to set things up.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_LDp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7075ebe1-a066-4e27-9cc0-3352de473693_1834x389.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_LDp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7075ebe1-a066-4e27-9cc0-3352de473693_1834x389.png 424w, https://substackcdn.com/image/fetch/$s_!_LDp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7075ebe1-a066-4e27-9cc0-3352de473693_1834x389.png 848w, https://substackcdn.com/image/fetch/$s_!_LDp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7075ebe1-a066-4e27-9cc0-3352de473693_1834x389.png 1272w, https://substackcdn.com/image/fetch/$s_!_LDp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7075ebe1-a066-4e27-9cc0-3352de473693_1834x389.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_LDp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7075ebe1-a066-4e27-9cc0-3352de473693_1834x389.png" width="1456" height="309" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7075ebe1-a066-4e27-9cc0-3352de473693_1834x389.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:309,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:118605,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_LDp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7075ebe1-a066-4e27-9cc0-3352de473693_1834x389.png 424w, https://substackcdn.com/image/fetch/$s_!_LDp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7075ebe1-a066-4e27-9cc0-3352de473693_1834x389.png 848w, https://substackcdn.com/image/fetch/$s_!_LDp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7075ebe1-a066-4e27-9cc0-3352de473693_1834x389.png 1272w, https://substackcdn.com/image/fetch/$s_!_LDp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7075ebe1-a066-4e27-9cc0-3352de473693_1834x389.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Getting a project started without AI</figcaption></figure></div><p>But with AI, the result looks completely different because my process is the following:</p><ul><li><p>Write out my specs:</p><blockquote><p>I want to setup a blog.  Give me the commands and code to achieve this:</p><ul><li><p>Use NextJS</p></li><li><p>Articles written in markdown files</p></li><li><p>Possibility to create custom components in React render part of the articles</p></li><li><p>Uses TS, Eslint, Prettier</p></li></ul></blockquote></li><li><p>Wait for it to produce the response</p></li><li><p>Copy-paste terminal commands</p></li><li><p>Copy-paste file contents</p></li><li><p>Review</p></li><li><p>Fix/improve</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Pf5r!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7284dba9-2df7-4eb0-8512-18f83df883fc_1852x389.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Pf5r!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7284dba9-2df7-4eb0-8512-18f83df883fc_1852x389.png 424w, https://substackcdn.com/image/fetch/$s_!Pf5r!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7284dba9-2df7-4eb0-8512-18f83df883fc_1852x389.png 848w, https://substackcdn.com/image/fetch/$s_!Pf5r!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7284dba9-2df7-4eb0-8512-18f83df883fc_1852x389.png 1272w, https://substackcdn.com/image/fetch/$s_!Pf5r!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7284dba9-2df7-4eb0-8512-18f83df883fc_1852x389.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Pf5r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7284dba9-2df7-4eb0-8512-18f83df883fc_1852x389.png" width="1456" height="306" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7284dba9-2df7-4eb0-8512-18f83df883fc_1852x389.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:306,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:116096,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Pf5r!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7284dba9-2df7-4eb0-8512-18f83df883fc_1852x389.png 424w, https://substackcdn.com/image/fetch/$s_!Pf5r!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7284dba9-2df7-4eb0-8512-18f83df883fc_1852x389.png 848w, https://substackcdn.com/image/fetch/$s_!Pf5r!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7284dba9-2df7-4eb0-8512-18f83df883fc_1852x389.png 1272w, https://substackcdn.com/image/fetch/$s_!Pf5r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7284dba9-2df7-4eb0-8512-18f83df883fc_1852x389.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Getting a project started with AI</figcaption></figure></div></li></ul><p>So while the value-added time doesn&#8217;t change, in this case, the ratio goes from 3% to 13% as less time is spent getting to the commands to run.</p><p>One caveat to this approach is that it relies on known libraries and frameworks. This means that it&#8217;s impacted by ChatGPT4&#8217;s knowledge cutoff and may require a lot of specifications to achieve what I consider to be a good result.</p><p><strong>The bad:</strong></p><ul><li><p>In my case, I had to specify NextJS as it kept recommending create-react-app without.</p></li><li><p>I had to clean up some of the base configs it provided</p></li></ul><p><strong>The good:</strong></p><ul><li><p>I get the commands immediately</p></li></ul><ul><li><p>It recommended using .mdx files (markdown with react) and used a library to get them to work with Next, which saved me time.</p></li></ul><p>So a lousy prompt can quickly turn this time-saving process into extra cost. When using this approach, I try to stay with the most common tools (in this case, React, Next, &#8230;) to achieve the best results.</p><h4>Writing API-heavy code</h4><p><em>The notion of API here refers to the API of SDKs, libraries, or frameworks. Not only HTTP requests.</em></p><p>One of my top uses of ChatGPT4 is to achieve HTML DOM manipulation. It works well because the API has been stable for a while, and it&#8217;s probably been trained on many examples. So I can give out a task such as:</p><blockquote><p>Give me a function to watch for every button element that&#8217;s right after a textarea element and change the text content to &#8220;PUSH THIS!&#8221;.</p></blockquote><p>The code usually works instantly, and it also works with much more complex examples. A task that has often cost me a lot of time with constant interruptions to dig through <a href="https://developer.mozilla.org/en-US/docs/Web/API/Document">MDN&#8217;s docs</a> is now almost instantaneous.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-qN9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4badc84-e768-4804-80a7-cc92d3777143_1852x389.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-qN9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4badc84-e768-4804-80a7-cc92d3777143_1852x389.png 424w, https://substackcdn.com/image/fetch/$s_!-qN9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4badc84-e768-4804-80a7-cc92d3777143_1852x389.png 848w, https://substackcdn.com/image/fetch/$s_!-qN9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4badc84-e768-4804-80a7-cc92d3777143_1852x389.png 1272w, https://substackcdn.com/image/fetch/$s_!-qN9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4badc84-e768-4804-80a7-cc92d3777143_1852x389.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-qN9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4badc84-e768-4804-80a7-cc92d3777143_1852x389.png" width="1456" height="306" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e4badc84-e768-4804-80a7-cc92d3777143_1852x389.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:306,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:127799,&quot;alt&quot;:&quot;DOM Manipulation without AI&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="DOM Manipulation without AI" title="DOM Manipulation without AI" srcset="https://substackcdn.com/image/fetch/$s_!-qN9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4badc84-e768-4804-80a7-cc92d3777143_1852x389.png 424w, https://substackcdn.com/image/fetch/$s_!-qN9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4badc84-e768-4804-80a7-cc92d3777143_1852x389.png 848w, https://substackcdn.com/image/fetch/$s_!-qN9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4badc84-e768-4804-80a7-cc92d3777143_1852x389.png 1272w, https://substackcdn.com/image/fetch/$s_!-qN9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4badc84-e768-4804-80a7-cc92d3777143_1852x389.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">DOM Manipulation without AI</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ncbq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c46539c-5d4a-4648-b393-b353e73cea94_1839x389.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ncbq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c46539c-5d4a-4648-b393-b353e73cea94_1839x389.png 424w, https://substackcdn.com/image/fetch/$s_!Ncbq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c46539c-5d4a-4648-b393-b353e73cea94_1839x389.png 848w, https://substackcdn.com/image/fetch/$s_!Ncbq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c46539c-5d4a-4648-b393-b353e73cea94_1839x389.png 1272w, https://substackcdn.com/image/fetch/$s_!Ncbq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c46539c-5d4a-4648-b393-b353e73cea94_1839x389.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ncbq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c46539c-5d4a-4648-b393-b353e73cea94_1839x389.png" width="1456" height="308" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9c46539c-5d4a-4648-b393-b353e73cea94_1839x389.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:308,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:112960,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Ncbq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c46539c-5d4a-4648-b393-b353e73cea94_1839x389.png 424w, https://substackcdn.com/image/fetch/$s_!Ncbq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c46539c-5d4a-4648-b393-b353e73cea94_1839x389.png 848w, https://substackcdn.com/image/fetch/$s_!Ncbq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c46539c-5d4a-4648-b393-b353e73cea94_1839x389.png 1272w, https://substackcdn.com/image/fetch/$s_!Ncbq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c46539c-5d4a-4648-b393-b353e73cea94_1839x389.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">DOM Manipulation with AI</figcaption></figure></div><p>Unfortunately, without plugins or using an agent to fetch extra context, it&#8217;s <strong>impossible</strong> to achieve the same result <strong>with up-to-date libraries</strong> that it hasn&#8217;t been trained on. In this case, I&#8217;m back to Googling.</p><h4>Writing tests</h4><p><em>I&#8217;ll write on the principle that unit tests, while considered <strong>waste</strong>, will lead to reducing it later on.</em></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Us_0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d13ca16-9b8c-4717-9ab3-39d7f0b30f51_1852x373.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Us_0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d13ca16-9b8c-4717-9ab3-39d7f0b30f51_1852x373.png 424w, https://substackcdn.com/image/fetch/$s_!Us_0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d13ca16-9b8c-4717-9ab3-39d7f0b30f51_1852x373.png 848w, https://substackcdn.com/image/fetch/$s_!Us_0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d13ca16-9b8c-4717-9ab3-39d7f0b30f51_1852x373.png 1272w, https://substackcdn.com/image/fetch/$s_!Us_0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d13ca16-9b8c-4717-9ab3-39d7f0b30f51_1852x373.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Us_0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d13ca16-9b8c-4717-9ab3-39d7f0b30f51_1852x373.png" width="1456" height="293" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6d13ca16-9b8c-4717-9ab3-39d7f0b30f51_1852x373.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:293,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:119806,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Us_0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d13ca16-9b8c-4717-9ab3-39d7f0b30f51_1852x373.png 424w, https://substackcdn.com/image/fetch/$s_!Us_0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d13ca16-9b8c-4717-9ab3-39d7f0b30f51_1852x373.png 848w, https://substackcdn.com/image/fetch/$s_!Us_0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d13ca16-9b8c-4717-9ab3-39d7f0b30f51_1852x373.png 1272w, https://substackcdn.com/image/fetch/$s_!Us_0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d13ca16-9b8c-4717-9ab3-39d7f0b30f51_1852x373.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Test writing without AI</figcaption></figure></div><p>AI may be the answer to spreading TDD (more on this in a later post). Writing tests often feels like a drag and requires a lot of practice to get efficient with. For complicated business rules, translating them to tests can also be time-consuming.</p><p>This is where ChatGPT4 helps me. For example:</p><blockquote><p>In TS, with jest, give me a set of tests to comply with the following rules for "getTermStartDate"</p><ul><li><p>The input is a date and a term duration in months (1,3,6 or 12)</p></li><li><p>It should always return the start of the current period based on the input date</p></li><li><p>The first term of the year always starts at january 1st</p></li></ul></blockquote><p>I know it&#8217;s pretty simple, so here is how it fared.</p><p><strong>The good:</strong></p><ul><li><p>My rules were turned into a good set of tests to check my function</p></li><li><p>It covers every case I could have thought of</p></li></ul><p><strong>The bad:</strong></p><ul><li><p>Not every test is meaningful, and some are repetitive. In this case, it focused too much on the &#8220;January 1st&#8221; rule and gave me 2 tests to check it. While not very problematic, it can raise the <strong>waste</strong> of maintaining those tests later.</p></li></ul><p>Overall, it&#8217;s an excellent starting point and provides a working first draft of the required specs, all with business rules which could have been written mainly by a non-technical person.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gBx0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ee7f6c8-3bcc-43cd-89a2-99f527228a8c_1834x373.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gBx0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ee7f6c8-3bcc-43cd-89a2-99f527228a8c_1834x373.png 424w, https://substackcdn.com/image/fetch/$s_!gBx0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ee7f6c8-3bcc-43cd-89a2-99f527228a8c_1834x373.png 848w, https://substackcdn.com/image/fetch/$s_!gBx0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ee7f6c8-3bcc-43cd-89a2-99f527228a8c_1834x373.png 1272w, https://substackcdn.com/image/fetch/$s_!gBx0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ee7f6c8-3bcc-43cd-89a2-99f527228a8c_1834x373.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gBx0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ee7f6c8-3bcc-43cd-89a2-99f527228a8c_1834x373.png" width="1456" height="296" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1ee7f6c8-3bcc-43cd-89a2-99f527228a8c_1834x373.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:296,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:100923,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gBx0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ee7f6c8-3bcc-43cd-89a2-99f527228a8c_1834x373.png 424w, https://substackcdn.com/image/fetch/$s_!gBx0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ee7f6c8-3bcc-43cd-89a2-99f527228a8c_1834x373.png 848w, https://substackcdn.com/image/fetch/$s_!gBx0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ee7f6c8-3bcc-43cd-89a2-99f527228a8c_1834x373.png 1272w, https://substackcdn.com/image/fetch/$s_!gBx0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ee7f6c8-3bcc-43cd-89a2-99f527228a8c_1834x373.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Test writing with AI</figcaption></figure></div><p>Once again, this is a considerable reduction in <strong>waste</strong> time, primarily due to the translation to code ChatGPT operated.</p><h4>Implementing the function to pass those tests</h4><p><em>This is where most of the <strong>value-added time</strong> can be found</em></p><p>Whenever I give it the tests, ChatGPT4 is very efficient in implementing the function itself. Some back-and-forth may be required by giving it the test runner error output, but I&#8217;ve achieved good results.</p><p>In a case where the context is still small and previous messages are included, I usually just write:</p><blockquote><p>Implement the getTermStartDate method to pass those tests using luxon</p></blockquote><p>Here, I didn&#8217;t have anything to write. The function was provided just along the test cases. Value-added time is reduced to (almost) 0, along with the <strong>touch</strong> <strong>time</strong>, and my effectiveness ratio goes to nearly <strong>100%</strong>. It&#8217;s clearly a win.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!w_6J!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5d1a60-9686-4656-8836-bb638738847e_1854x373.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!w_6J!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5d1a60-9686-4656-8836-bb638738847e_1854x373.png 424w, https://substackcdn.com/image/fetch/$s_!w_6J!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5d1a60-9686-4656-8836-bb638738847e_1854x373.png 848w, https://substackcdn.com/image/fetch/$s_!w_6J!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5d1a60-9686-4656-8836-bb638738847e_1854x373.png 1272w, https://substackcdn.com/image/fetch/$s_!w_6J!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5d1a60-9686-4656-8836-bb638738847e_1854x373.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!w_6J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5d1a60-9686-4656-8836-bb638738847e_1854x373.png" width="1456" height="293" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/de5d1a60-9686-4656-8836-bb638738847e_1854x373.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:293,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:107880,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!w_6J!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5d1a60-9686-4656-8836-bb638738847e_1854x373.png 424w, https://substackcdn.com/image/fetch/$s_!w_6J!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5d1a60-9686-4656-8836-bb638738847e_1854x373.png 848w, https://substackcdn.com/image/fetch/$s_!w_6J!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5d1a60-9686-4656-8836-bb638738847e_1854x373.png 1272w, https://substackcdn.com/image/fetch/$s_!w_6J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5d1a60-9686-4656-8836-bb638738847e_1854x373.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Implementation of the previously tested function without AI</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UgIk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2e2be20-55f3-48f4-bcf5-12b09b0eaa5b_1874x388.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UgIk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2e2be20-55f3-48f4-bcf5-12b09b0eaa5b_1874x388.png 424w, https://substackcdn.com/image/fetch/$s_!UgIk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2e2be20-55f3-48f4-bcf5-12b09b0eaa5b_1874x388.png 848w, https://substackcdn.com/image/fetch/$s_!UgIk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2e2be20-55f3-48f4-bcf5-12b09b0eaa5b_1874x388.png 1272w, https://substackcdn.com/image/fetch/$s_!UgIk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2e2be20-55f3-48f4-bcf5-12b09b0eaa5b_1874x388.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UgIk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2e2be20-55f3-48f4-bcf5-12b09b0eaa5b_1874x388.png" width="1456" height="301" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a2e2be20-55f3-48f4-bcf5-12b09b0eaa5b_1874x388.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:301,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:105359,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UgIk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2e2be20-55f3-48f4-bcf5-12b09b0eaa5b_1874x388.png 424w, https://substackcdn.com/image/fetch/$s_!UgIk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2e2be20-55f3-48f4-bcf5-12b09b0eaa5b_1874x388.png 848w, https://substackcdn.com/image/fetch/$s_!UgIk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2e2be20-55f3-48f4-bcf5-12b09b0eaa5b_1874x388.png 1272w, https://substackcdn.com/image/fetch/$s_!UgIk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2e2be20-55f3-48f4-bcf5-12b09b0eaa5b_1874x388.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Implementation of the previously tested function with AI</figcaption></figure></div><p>However, there&#8217;s a significant limitation in realizing this objective. Optimizing ChatGPT -4&#8217;s ability to generate code requires careful planning and breaking down extensive features into smaller, more manageable functions.</p><p>Fortunately, if you remember &#8220;Research and planning&#8221;, it can also help you with that.</p><h4>Debugging</h4><p>I haven&#8217;t been able to achieve complex debugging with ChatGPT-4 because of a few reasons.</p><p>First, debugging is mostly about dichotomy and requires opening and going through multiple files to determine where the issue is. Thus, debugging involves a lot of context, most of the time above GPT4&#8217;s capacity.</p><p>Second, it requires back and forth between the code and your API/Website/Logs/&#8230; to retrigger and read the error. It should be possible with some advanced AI integration (see Langchain agents), but GPT4 alone can&#8217;t do so.</p><p>So no net gain on this side, although it once provided with helpful guess on where to look within a bugged small function.</p><h4>Upgrading an existing feature</h4><p>This is an area where ChatGPT4 both shines and lacks. So let me throw a quick summary:</p><h5><strong>I use it for:</strong></h5><ul><li><p><strong>Explaining a new language:</strong> With it, I was able to understand and write Python code in a matter of minutes. A language I have never used before.</p></li><li><p><strong>Explaining small functions:</strong> When checking out the jumbled-up code of <a href="https://github.com/MikeKMiller/supergpt/blob/main/scripts/content/conversation.js">another GPT Chrome extension</a> (I don&#8217;t get how they can move around in their codebase), it gave me a good summary of a function with way too many responsibilities</p><blockquote><ul><li><p>Loads conversation from nodes.</p></li><li><p>Retrieves user data (name, avatar) and settings.</p></li><li><p>Reconstructs conversation by traversing nodes.</p></li><li><p>Renders messages for user and assistant.</p></li><li><p>Inserts rendered messages into DOM.</p></li><li><p>Sets up event listeners and updates UI elements.</p></li></ul></blockquote></li><li><p><strong>Refactoring:</strong> By telling it to adhere to DRY, SOLID, DDD, TDD, and as many acronyms as I could think of, it gave me basic refactoring steps, which I can ask  an implementation for later on</p><blockquote><ul><li><p>Extract helper functions for better readability and separation of concerns.</p></li><li><p>Utilize async/await with Promisified chrome.storage API.</p></li><li><p>Replace <code>for</code> loop with <code>Array.prototype.map()</code>.</p></li><li><p>Simplify DOM manipulation with a more straightforward approach.</p></li><li><p>Create a separate function to set up event listeners and update UI elements.</p></li></ul></blockquote></li><li><p><strong>Updating small independent functions: </strong>I&#8217;ve successfully got GPT4 to update functions under ~40 lines.</p></li></ul><h5><strong>I don&#8217;t use it for:</strong></h5><ul><li><p><strong>Tasks expanding across many functions:</strong> too much context is required to be effective. And the answer is often cut off by the max response size.</p></li><li><p><strong>Updating big functions: </strong>Same reason. I try to ask for a refactor first (or do it myself). Otherwise, the response is cut off.</p></li><li><p><strong>Updating functions dependent on others:</strong> Sometimes work, but the other function names must be very explicit. And the chat won&#8217;t know about available functions which aren&#8217;t in its context.</p></li></ul><p>The context of working on an existing feature varies too much for me to do any accurate measurement. But all in all, it&#8217;s still a net gain. Either I reduce my lead time, or it remains the same.</p><h2>Where ChatGPT4 hasn&#8217;t helped me yet</h2><p>Please keep in mind that while it&#8217;s been a very effective tool for increasing my productivity, there are a couple of areas where I&#8217;ve been unable to use AI:</p><ul><li><p><strong>Up-to-date APIs:</strong> When developing my Chrome extension, it primarily recommends the deprecated v2 Chrome API. So I now have to rely on the doc. This might be fixed by ingesting the documentation first and providing it as context.</p></li><li><p><strong>UI:</strong> I haven&#8217;t managed to get it to produce a good complex layout which is not a default &#8220;getting started layout&#8221;. Also, every time I&#8217;ve tried, there&#8217;s been too much back and forth, maxing out the context. I guess that low-code/no-code platforms are the best equipped to deal with this.</p></li></ul><h2>Summing it up</h2><p>Considering everything I&#8217;ve talked about, in almost every situation, GPT4 increased my productivity. I got me to:</p><ul><li><p>Reduce my lead time</p></li><li><p>Reach the first value-added time task faster (the fun part)</p></li><li><p>Raise<strong> </strong>my<strong> </strong>value-added time/touch time ratio</p></li><li><p>Get to production more quickly (my guess is that it would have taken me 3x more to release <a href="https://chrome.google.com/webstore/detail/gpt-plus/obaghpmecidghkialdmkopfpbkchpopn">my Chrome extension</a> without it)</p></li></ul><p>What&#8217;s remarkable is that this isn&#8217;t just a tool replacing another with its typical trade-offs. It&#8217;s just a pure boost that speeds up all my coding activities. So if you&#8217;re not already a user, I advise you to at least try it out and make your own opinion.</p><div><hr></div><p>That was a long read. If you&#8217;ve reached this point, thanks a lot for reading through &#128521;.</p><p>As always, if you found this helpful, it would significantly help me if you could share this post.</p><p>In my next one, I&#8217;ll talk a bit more about my AI-enabled development environment. See you next time&#8230;</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.pairprog.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading pAIr&#183;prog! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[AI-powered development 101]]></title><description><![CDATA[Let's keep it simple at first]]></description><link>https://blog.pairprog.io/p/ai-powered-development-101</link><guid isPermaLink="false">https://blog.pairprog.io/p/ai-powered-development-101</guid><dc:creator><![CDATA[Yann Leflour]]></dc:creator><pubDate>Mon, 03 Apr 2023 05:01:19 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/8b07b97e-89ad-478a-bfd5-9b9f9c448674_840x600.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I hope you&#8217;re curious as me about integrating AIs into your daily job as a developer. But if you&#8217;re just getting started, you&#8217;re probably overwhelmed by the current pace at which the field is evolving. So here is a quick catch-up to get you started.</p><h5><em>Disclaimer: an AI was only put to work for the header image, glossary definitions, and examples (screenshots)</em></h5><h2>Glossary</h2><ul><li><p>LLM: A Large Language Model (LLM) is an AI model trained on massive amounts of text data. LLMs can understand and generate human-like text, allowing them to perform various natural language processing tasks, such as translation, summarization, and question-answering</p></li></ul><h2>Get access</h2><p>As you might have understood, I&#8217;ll focus on chat LLMs in this post. So here are my favorite ones by order of preference:</p><ul><li><p><strong><a href="https://chat.openai.com/chat?model=gpt-4">ChatGPT-4</a></strong>:</p><ul><li><p>Price: 20$ (+tax) / month for ChatGPT+</p></li><li><p>Why: Allows most personalization of the chat&#8217;s &#8220;personality&#8221;. Has been providing me with the best results and can help with multi-step projects if used well</p></li></ul></li><li><p><strong>Bing:</strong></p><ul><li><p>Price: Free, <a href="https://www.bing.com/new?form=MY028Z&amp;OCID=MY028Z">requires Microsoft Account + Edge</a></p></li><li><p>Why: well worth the price of $0. It seems to be a mix of GPT3.5 and GPT4. A good place to start if you don&#8217;t want to pay.</p></li><li><p>Why not: Bing search is integrated but actually gets in the way when using it for software development. UI is not great with code blocks.</p></li></ul></li><li><p><strong><a href="https://chat.openai.com/chat?model=text-davinci-002-render-sha">ChatGPT-3.5</a>:</strong></p><ul><li><p>Price: Free, Boosted with ChatGPT+</p></li><li><p>Why: Really fast to answer. Ok for a single question or working on a really small subset of code.</p></li><li><p>Why not: Response quality is way lower than GPT4&#8217;s and Bing&#8217;s. Not great with following multiple steps.</p></li></ul></li><li><p>Bonus, <a href="https://replit.com/site/ghostwriter">Repplit Ghostwritter</a>:</p><ul><li><p>Price: 20$/month (with other advantages)</p></li><li><p>Why: It&#8217;s integrated into Repplit, a fully online code editor with hosting capacities. It&#8217;s now my favorite tool for tinkering with code.</p></li><li><p>Why not: Responses are good but not up to GPT4&#8217;s level.</p></li></ul></li></ul><h2>What you should not do</h2><ul><li><p><strong>Try to search with it:</strong> All of them are trained with data as recent as September 2021. Also, note that apart from Bing Chat, none are connected to the internet by default. And be wary that Bing&#8217;s answer may not match the provided reference&#8217;s content.</p></li><li><p><strong>Expect up-to-date library/framework standards:</strong> Again, due to the knowledge cutoff, they don&#8217;t know about recent releases and breaking changes of your favorite framework.</p></li><li><p><strong>Try to get it to write the complete projects:</strong> I think we&#8217;ll get there fast, but right now, the main limitation is the chat&#8217;s memory. <a href="https://twitter.com/yleflour/status/1640307712625102851">I already wrote more about this on Twitter.</a></p></li></ul><h2>What you should try</h2><p>Here are the basic things I now use ChatGPT-4 exclusively for:</p><h3>Catch up &amp; learn</h3><p>I&#8217;ve started using Python to integrate LLMs into my own projects. I chose Python because it&#8217;s the most commonly used language for AI-related projects and has the most cutting-edge libraries.</p><p>But I don&#8217;t know Python. I&#8217;ve only dabbled with it. So I&#8217;ve been using GPT4 to teach me the basics:</p><ul><li><p>&#8220;How do you set up a python project?&#8221;</p></li><li><p>&#8220;What&#8217;s this <code>poetry.lock</code> file ?&#8221;</p></li><li><p>&#8220;How do you do X in python&#8221;</p></li><li><p>And even better if you know another language, &#8220;Translate this JS code on Python&#8221; with some JS code right under</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rUf_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c6533ad-6fd7-4e4d-ad72-9e7064351abe_1456x1072.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rUf_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c6533ad-6fd7-4e4d-ad72-9e7064351abe_1456x1072.png 424w, https://substackcdn.com/image/fetch/$s_!rUf_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c6533ad-6fd7-4e4d-ad72-9e7064351abe_1456x1072.png 848w, https://substackcdn.com/image/fetch/$s_!rUf_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c6533ad-6fd7-4e4d-ad72-9e7064351abe_1456x1072.png 1272w, https://substackcdn.com/image/fetch/$s_!rUf_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c6533ad-6fd7-4e4d-ad72-9e7064351abe_1456x1072.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rUf_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c6533ad-6fd7-4e4d-ad72-9e7064351abe_1456x1072.png" width="1456" height="1072" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8c6533ad-6fd7-4e4d-ad72-9e7064351abe_1456x1072.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1072,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:198091,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rUf_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c6533ad-6fd7-4e4d-ad72-9e7064351abe_1456x1072.png 424w, https://substackcdn.com/image/fetch/$s_!rUf_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c6533ad-6fd7-4e4d-ad72-9e7064351abe_1456x1072.png 848w, https://substackcdn.com/image/fetch/$s_!rUf_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c6533ad-6fd7-4e4d-ad72-9e7064351abe_1456x1072.png 1272w, https://substackcdn.com/image/fetch/$s_!rUf_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c6533ad-6fd7-4e4d-ad72-9e7064351abe_1456x1072.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></ul><h3>Tip of my tongue prompts</h3><p>When explaining some concepts or trying to find resources on a language/library, I often can&#8217;t remember the correct term to define a particular element.</p><p>So I pop up ChatGPT and ask for the name with a rough description or 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_!_kpm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cd2e0e3-9f3b-4852-937a-0fbb0a65c891_1464x488.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_kpm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cd2e0e3-9f3b-4852-937a-0fbb0a65c891_1464x488.png 424w, https://substackcdn.com/image/fetch/$s_!_kpm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cd2e0e3-9f3b-4852-937a-0fbb0a65c891_1464x488.png 848w, https://substackcdn.com/image/fetch/$s_!_kpm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cd2e0e3-9f3b-4852-937a-0fbb0a65c891_1464x488.png 1272w, https://substackcdn.com/image/fetch/$s_!_kpm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cd2e0e3-9f3b-4852-937a-0fbb0a65c891_1464x488.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_kpm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cd2e0e3-9f3b-4852-937a-0fbb0a65c891_1464x488.png" width="1456" height="485" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8cd2e0e3-9f3b-4852-937a-0fbb0a65c891_1464x488.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:485,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:133461,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_kpm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cd2e0e3-9f3b-4852-937a-0fbb0a65c891_1464x488.png 424w, https://substackcdn.com/image/fetch/$s_!_kpm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cd2e0e3-9f3b-4852-937a-0fbb0a65c891_1464x488.png 848w, https://substackcdn.com/image/fetch/$s_!_kpm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cd2e0e3-9f3b-4852-937a-0fbb0a65c891_1464x488.png 1272w, https://substackcdn.com/image/fetch/$s_!_kpm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8cd2e0e3-9f3b-4852-937a-0fbb0a65c891_1464x488.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 class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MzIY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ccb7e85-9365-4c98-b56d-6ae68351098e_1450x838.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MzIY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ccb7e85-9365-4c98-b56d-6ae68351098e_1450x838.png 424w, https://substackcdn.com/image/fetch/$s_!MzIY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ccb7e85-9365-4c98-b56d-6ae68351098e_1450x838.png 848w, https://substackcdn.com/image/fetch/$s_!MzIY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ccb7e85-9365-4c98-b56d-6ae68351098e_1450x838.png 1272w, https://substackcdn.com/image/fetch/$s_!MzIY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ccb7e85-9365-4c98-b56d-6ae68351098e_1450x838.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MzIY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ccb7e85-9365-4c98-b56d-6ae68351098e_1450x838.png" width="1450" height="838" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3ccb7e85-9365-4c98-b56d-6ae68351098e_1450x838.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:838,&quot;width&quot;:1450,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:181534,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MzIY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ccb7e85-9365-4c98-b56d-6ae68351098e_1450x838.png 424w, https://substackcdn.com/image/fetch/$s_!MzIY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ccb7e85-9365-4c98-b56d-6ae68351098e_1450x838.png 848w, https://substackcdn.com/image/fetch/$s_!MzIY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ccb7e85-9365-4c98-b56d-6ae68351098e_1450x838.png 1272w, https://substackcdn.com/image/fetch/$s_!MzIY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3ccb7e85-9365-4c98-b56d-6ae68351098e_1450x838.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>Plan</h3><p>While ChatGPT-4 can&#8217;t write a full project easily for you yet. It is very helpful in planning things out. Right now, I&#8217;m working on prompting my own data. But I don&#8217;t know where to begin. Well, let&#8217;s ask:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!J7je!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89b1f495-5184-49b1-8940-79bb3e488135_1450x1234.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!J7je!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89b1f495-5184-49b1-8940-79bb3e488135_1450x1234.png 424w, https://substackcdn.com/image/fetch/$s_!J7je!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89b1f495-5184-49b1-8940-79bb3e488135_1450x1234.png 848w, https://substackcdn.com/image/fetch/$s_!J7je!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89b1f495-5184-49b1-8940-79bb3e488135_1450x1234.png 1272w, https://substackcdn.com/image/fetch/$s_!J7je!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89b1f495-5184-49b1-8940-79bb3e488135_1450x1234.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!J7je!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89b1f495-5184-49b1-8940-79bb3e488135_1450x1234.png" width="1450" height="1234" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/89b1f495-5184-49b1-8940-79bb3e488135_1450x1234.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1234,&quot;width&quot;:1450,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:345718,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!J7je!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89b1f495-5184-49b1-8940-79bb3e488135_1450x1234.png 424w, https://substackcdn.com/image/fetch/$s_!J7je!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89b1f495-5184-49b1-8940-79bb3e488135_1450x1234.png 848w, https://substackcdn.com/image/fetch/$s_!J7je!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89b1f495-5184-49b1-8940-79bb3e488135_1450x1234.png 1272w, https://substackcdn.com/image/fetch/$s_!J7je!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F89b1f495-5184-49b1-8940-79bb3e488135_1450x1234.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>And I make sure to ask for sub-steps:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qmss!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c0f4df5-f263-4322-b4f4-76145358c26f_1468x1414.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qmss!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c0f4df5-f263-4322-b4f4-76145358c26f_1468x1414.png 424w, https://substackcdn.com/image/fetch/$s_!qmss!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c0f4df5-f263-4322-b4f4-76145358c26f_1468x1414.png 848w, https://substackcdn.com/image/fetch/$s_!qmss!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c0f4df5-f263-4322-b4f4-76145358c26f_1468x1414.png 1272w, https://substackcdn.com/image/fetch/$s_!qmss!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c0f4df5-f263-4322-b4f4-76145358c26f_1468x1414.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qmss!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c0f4df5-f263-4322-b4f4-76145358c26f_1468x1414.png" width="1456" height="1402" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c0f4df5-f263-4322-b4f4-76145358c26f_1468x1414.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1402,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:393701,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qmss!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c0f4df5-f263-4322-b4f4-76145358c26f_1468x1414.png 424w, https://substackcdn.com/image/fetch/$s_!qmss!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c0f4df5-f263-4322-b4f4-76145358c26f_1468x1414.png 848w, https://substackcdn.com/image/fetch/$s_!qmss!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c0f4df5-f263-4322-b4f4-76145358c26f_1468x1414.png 1272w, https://substackcdn.com/image/fetch/$s_!qmss!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c0f4df5-f263-4322-b4f4-76145358c26f_1468x1414.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>Implement</h3><p>If the step is small enough, I ask it to do it for me:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ed_h!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5e6e1c6-9af9-4e59-b183-ee4da644c51b_1450x1268.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ed_h!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5e6e1c6-9af9-4e59-b183-ee4da644c51b_1450x1268.png 424w, https://substackcdn.com/image/fetch/$s_!ed_h!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5e6e1c6-9af9-4e59-b183-ee4da644c51b_1450x1268.png 848w, https://substackcdn.com/image/fetch/$s_!ed_h!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5e6e1c6-9af9-4e59-b183-ee4da644c51b_1450x1268.png 1272w, https://substackcdn.com/image/fetch/$s_!ed_h!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5e6e1c6-9af9-4e59-b183-ee4da644c51b_1450x1268.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ed_h!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5e6e1c6-9af9-4e59-b183-ee4da644c51b_1450x1268.png" width="1450" height="1268" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a5e6e1c6-9af9-4e59-b183-ee4da644c51b_1450x1268.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1268,&quot;width&quot;:1450,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:234064,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ed_h!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5e6e1c6-9af9-4e59-b183-ee4da644c51b_1450x1268.png 424w, https://substackcdn.com/image/fetch/$s_!ed_h!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5e6e1c6-9af9-4e59-b183-ee4da644c51b_1450x1268.png 848w, https://substackcdn.com/image/fetch/$s_!ed_h!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5e6e1c6-9af9-4e59-b183-ee4da644c51b_1450x1268.png 1272w, https://substackcdn.com/image/fetch/$s_!ed_h!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5e6e1c6-9af9-4e59-b183-ee4da644c51b_1450x1268.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Didn&#8217;t test this one though</figcaption></figure></div><p>A nice addition is that it also recommends useful libraries to achieve your goals. But be sure to do your due diligence and watch out for deprecated recommendations.</p><h3>Fix code</h3><p>If the code doesn&#8217;t work, copy-paste the error into the text box, and ChatGPT will fix it.</p><p>I also use it in a code review format. It works with complex code but won&#8217;t process the whole response if the code is too long.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mrEh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fa2f488-bb25-4cff-8239-791040736836_1446x1202.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mrEh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fa2f488-bb25-4cff-8239-791040736836_1446x1202.png 424w, https://substackcdn.com/image/fetch/$s_!mrEh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fa2f488-bb25-4cff-8239-791040736836_1446x1202.png 848w, https://substackcdn.com/image/fetch/$s_!mrEh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fa2f488-bb25-4cff-8239-791040736836_1446x1202.png 1272w, https://substackcdn.com/image/fetch/$s_!mrEh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fa2f488-bb25-4cff-8239-791040736836_1446x1202.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mrEh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fa2f488-bb25-4cff-8239-791040736836_1446x1202.png" width="1446" height="1202" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0fa2f488-bb25-4cff-8239-791040736836_1446x1202.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1202,&quot;width&quot;:1446,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:142569,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mrEh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fa2f488-bb25-4cff-8239-791040736836_1446x1202.png 424w, https://substackcdn.com/image/fetch/$s_!mrEh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fa2f488-bb25-4cff-8239-791040736836_1446x1202.png 848w, https://substackcdn.com/image/fetch/$s_!mrEh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fa2f488-bb25-4cff-8239-791040736836_1446x1202.png 1272w, https://substackcdn.com/image/fetch/$s_!mrEh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fa2f488-bb25-4cff-8239-791040736836_1446x1202.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>Limitations to watch out for:</h2><p>I&#8217;ve already talked about this, but it&#8217;s always nice to set a reminder. So here are the main limitations once again:</p><ul><li><p>The Chat <strong>will</strong> start to forget after some time</p></li><li><p>The libraries and standards used in the code may not always be up to date</p></li><li><p>If the response is too big, it will stop halfway through</p></li><li><p>Do not use it for search</p></li></ul><div><hr></div><p>Ok, we&#8217;re done with the first post. Hope you found it useful. If so, please help me by recommending and sharing my Newsletter.</p><p>&#128587; Also, while I have your attention, I&#8217;d love to know what you&#8217;re most interested in &#128071;</p><div class="poll-embed" data-attrs="{&quot;id&quot;:61273}" data-component-name="PollToDOM"></div><div class="poll-embed" data-attrs="{&quot;id&quot;:61272}" data-component-name="PollToDOM"></div><div class="poll-embed" data-attrs="{&quot;id&quot;:61274}" data-component-name="PollToDOM"></div><div class="poll-embed" data-attrs="{&quot;id&quot;:61275}" data-component-name="PollToDOM"></div><p>And if you&#8217;re looking for something else, you&#8217;re always welcome to leave a comment:</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.pairprog.io/p/ai-powered-development-101/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.pairprog.io/p/ai-powered-development-101/comments"><span>Leave a comment</span></a></p>]]></content:encoded></item><item><title><![CDATA[I'm launching the pAIrprog Newsletter]]></title><description><![CDATA[So here's what it's about]]></description><link>https://blog.pairprog.io/p/im-launching-the-pairprog-newsletter</link><guid isPermaLink="false">https://blog.pairprog.io/p/im-launching-the-pairprog-newsletter</guid><dc:creator><![CDATA[Yann Leflour]]></dc:creator><pubDate>Wed, 29 Mar 2023 06:00:51 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/b176a124-d759-4614-a336-af9b74e071f2_840x600.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I get it.</p><p>You were promised a VSCode plugin&#8217;s news, but here you are with the first post of some guy&#8217;s newsletter on AI and development.</p><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://twitter.com/yleflour/status/1637846590961614848?s=20&quot;,&quot;full_text&quot;:&quot;I'm on an adventure to get <span class=\&quot;tweet-fake-link\&quot;>#gpt4</span> to code its own VSCode extension &#128506;\n\nStarting from scratch with Language Models, I'll share every discovery, insight, or rambling that crosses my mind along the way.\n\nSo, if you're interested, here's a link to every part &#128071;&quot;,&quot;username&quot;:&quot;yleflour&quot;,&quot;name&quot;:&quot;Yann Leflour&quot;,&quot;profile_image_url&quot;:&quot;&quot;,&quot;date&quot;:&quot;Mon Mar 20 16:00:31 +0000 2023&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:0,&quot;retweet_count&quot;:1,&quot;like_count&quot;:5,&quot;impression_count&quot;:0,&quot;expanded_url&quot;:{},&quot;video_url&quot;:null,&quot;belowTheFold&quot;:false}" data-component-name="Twitter2ToDOM"></div><p>Well, let me tell you, I&#8217;ve learned and rambled a lot on the way to creating this VSCode plugin. And while I might actually end up releasing it, I&#8217;ve wanted to take the opportunity to share as much as possible about my discoveries on working with AI as a Software Developer. But Twitter&#8217;s future looks bleak, and it&#8217;s not appealing to everyone. </p><p>So I&#8217;ve decided to launch the <strong>pAIrprog</strong> newsletter for the AI-curious developer.</p><p>With it, my goal is to:</p><ul><li><p>Help you stay up to date with the latest news and trends of ChatGPT and alternatives </p></li><li><p>Help you get started with it either for development or integration</p></li><li><p>Share the best resources I&#8217;ve come across</p></li><li><p>Talk about products or experiments I&#8217;m doing with AI</p></li><li><p>And, of course, share my random thoughts on the topic of AIs</p></li><li><p>All in a condensed (probably) weekly format for you to read &#128076;</p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.pairprog.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">So, if you&#8217;d like to, I&#8217;d love for you to come and join me on my odyssey into a <em>(sometimes disheartening)</em> AI world&#8230;</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h6></h6><div><hr></div><p><em>Disclaimer: No AI was <s>hurt</s> used in the making of this post except for the image</em></p>]]></content:encoded></item></channel></rss>