<?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[Joseph Gefroh: Artificial Intelligence]]></title><description><![CDATA[Posts related to AL, Machine Leaning, and LLMs.]]></description><link>https://blog.jgefroh.com/s/artificial-intelligence</link><image><url>https://substackcdn.com/image/fetch/$s_!sphd!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cef45a3-7420-4cba-95f3-46a3b5d34293_100x100.png</url><title>Joseph Gefroh: Artificial Intelligence</title><link>https://blog.jgefroh.com/s/artificial-intelligence</link></image><generator>Substack</generator><lastBuildDate>Fri, 05 Jun 2026 20:56:51 GMT</lastBuildDate><atom:link href="https://blog.jgefroh.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Joseph Gefroh]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[joseph.gefroh@gmail.com]]></webMaster><itunes:owner><itunes:email><![CDATA[joseph.gefroh@gmail.com]]></itunes:email><itunes:name><![CDATA[Joseph Gefroh]]></itunes:name></itunes:owner><itunes:author><![CDATA[Joseph Gefroh]]></itunes:author><googleplay:owner><![CDATA[joseph.gefroh@gmail.com]]></googleplay:owner><googleplay:email><![CDATA[joseph.gefroh@gmail.com]]></googleplay:email><googleplay:author><![CDATA[Joseph Gefroh]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Engineering for Vibe Coders - Ask five basic questions to dramatically improve maintainability]]></title><description><![CDATA[Ask five simple questions with every change to avoid the inevitable, progress-destroying vibe-code sprawl.]]></description><link>https://blog.jgefroh.com/p/engineering-for-vibe-coders-ask-five</link><guid isPermaLink="false">https://blog.jgefroh.com/p/engineering-for-vibe-coders-ask-five</guid><dc:creator><![CDATA[Joseph Gefroh]]></dc:creator><pubDate>Mon, 25 May 2026 15:01:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!naDc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0157640-94ce-48db-8d31-65cd24bf5be2_1774x887.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!naDc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0157640-94ce-48db-8d31-65cd24bf5be2_1774x887.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!naDc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0157640-94ce-48db-8d31-65cd24bf5be2_1774x887.png 424w, https://substackcdn.com/image/fetch/$s_!naDc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0157640-94ce-48db-8d31-65cd24bf5be2_1774x887.png 848w, https://substackcdn.com/image/fetch/$s_!naDc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0157640-94ce-48db-8d31-65cd24bf5be2_1774x887.png 1272w, https://substackcdn.com/image/fetch/$s_!naDc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0157640-94ce-48db-8d31-65cd24bf5be2_1774x887.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!naDc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0157640-94ce-48db-8d31-65cd24bf5be2_1774x887.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e0157640-94ce-48db-8d31-65cd24bf5be2_1774x887.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1478554,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.jgefroh.com/i/196482998?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0157640-94ce-48db-8d31-65cd24bf5be2_1774x887.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!naDc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0157640-94ce-48db-8d31-65cd24bf5be2_1774x887.png 424w, https://substackcdn.com/image/fetch/$s_!naDc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0157640-94ce-48db-8d31-65cd24bf5be2_1774x887.png 848w, https://substackcdn.com/image/fetch/$s_!naDc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0157640-94ce-48db-8d31-65cd24bf5be2_1774x887.png 1272w, https://substackcdn.com/image/fetch/$s_!naDc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0157640-94ce-48db-8d31-65cd24bf5be2_1774x887.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>If you&#8217;re vibe-coding, you&#8217;ve probably reached a point where the AI is just <em>terrible</em> at progressing: making tons of mistakes, creating bugs with every change. It really stalls your progress.</p><p>What if I told you that with some simple questions, you can <em>slow down getting to that point?</em></p><p>You don&#8217;t <em>need</em> to be an engineer to guide the AI (though, I&#8217;d recommend it). You can just ask the question and make sure the AI answers.</p><div><hr></div><p>The key questions:</p><ul><li><p>Why is this named the way it is?</p></li><li><p>Should this live here?</p></li><li><p>What if there&#8217;s more than one?</p></li><li><p>Is this the one place this &#8216;fact&#8217; exists?</p></li><li><p>Should this know about that?</p></li></ul><div><hr></div><h1><em><strong>Why is this named the way it is?</strong></em></h1><p>This is the <em>most important thing</em>.</p><ul><li><p>What is something called?</p></li><li><p>Why is it called that?</p></li></ul><p>The name of the file should impart what it does, scoped exactly to what it does. It should be consistent across the application and be both exactly precise and generic enough.</p><p>If you find yourself unable to describe what it does without using the word <em>&#8220;and&#8221;</em>, it probably does too much and should be in a separate file.</p><p>For example:</p><ul><li><p><em>Sidebar</em> - shows the sidebar navigation links and handles login state</p><ul><li><p>You probably need to move login state somewhere else.</p></li></ul></li><li><p><em>Sidebar - </em>shows the sidebar navigation for admins</p><ul><li><p>You probably need to name this <em>AdminSidebar</em> for precision.</p></li></ul></li><li><p><em>TransactionChart - </em>a<em> </em>bar chart</p><ul><li><p>You probably need to name this <em>BarChart </em>or at least <em>TransactionBarChart</em>.</p></li></ul></li><li><p><em>OverviewPage</em> - shows a set of charts and contains help navigation</p><ul><li><p>You probably need to move the help navigation into its own component</p></li></ul></li></ul><p>Naming is so critical that <em>I never allow the LLM to name things</em>. <strong>I always pick the name.</strong></p><p>Ask the LLM:</p><ul><li><p><em>Why did you name it that, and can you think of a more consistent / cohesive name?</em></p></li></ul><div><hr></div><h1><em><strong>What if there&#8217;s more than one?</strong></em></h1><p>Suppose you&#8217;re making a chart. You prompt your LLM:</p><p>&#8220;<em>make me a bar chart that shows transaction amounts&#8221;</em></p><p>Your LLM dutifully creates you a <strong>TransactionBarChart.js.</strong></p><p>This is a <em>use-case</em> tied to a specific <em>mechanism</em>: the use case of &#8216;transactions&#8217; tied to the mechanism of &#8216;show a bar chart&#8217;.</p><p>This is a key moment to ask:</p><ul><li><p>What if there&#8217;s more than one? </p></li><li><p>What if you want another bar chart in the future? </p></li></ul><p>This is a <em>signal</em> - you should <em>extract</em> the concept of a <em>bar chart</em> so that one file can serve <em>multiple use cases</em>.</p><p>Instead of having TransactionBarChart, UserCountBarChart, all with their own independent logic, you should have a BarChart that you pass in parameters to:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">&lt;BarChart title="User counts" data="{seriesLabels: ['Account A', 'Account B', 'Account C'], seriesData: [21,24,31]}" /&gt;
&lt;BarChart title="Payments" data="{seriesLabels: ['2024/01/01', '2024/01/02', '2024/01/03'], seriesData: [1000,2333,1284]}" /&gt;</code></pre></div><p>Pros:</p><ul><li><p>You reduce variability - if you fix a bug in BarChart or add a feature, it&#8217;s available for every place that BarChart is used.</p></li><li><p>You have a <em>consistent interface</em> that you can use for any bar chart - you (and the LLM) does not need to re-create it.</p></li><li><p>These are called <em>re-usable components</em>. The more you have, the easier it is to maintain your system.</p></li></ul><p>Prompt your LLM:</p><ul><li><p><em>&#8220;What if I need to have another of this in a different use case?&#8221;</em></p></li></ul><div><hr></div><h1><em><strong>Should this live here?</strong></em></h1><p>You want to achieve <em>cohesion</em> - files should be located <em>close to the things it works with</em>.</p><p>eg. a <code>PaymentBarChart</code> should show a chart for payments. It should live a folder called <code>/payments</code> so you can easily find it.</p><p>If you had a <code>BarChart</code>, it should live in a <code>/shared/charts </code>folder alongside <code>PieChart</code> and <code>LineChart</code>.</p><p>Ask the LLM:</p><ul><li><p><em>Why did you place this logic in this folder/file?</em></p></li></ul><div><hr></div><h1><em><strong>Is this the one place this &#8216;fact&#8217; exists?</strong></em></h1><p>A big cause of bugs is duplication of facts in a codebase - parts of the code that assert how something behaves, but in different places.</p><p>Suppose you had a &#8220;Delete note'&#8220; button on a NoteShowPage.js that contains the logic to call an endpoint to delete a note.</p><p>Let&#8217;s suppose you also add a &#8220;Delete note&#8221; button on NoteListPage.js that contains the logic to call an endpoint to delete a note.</p><p>These are two duplicative <em>sources of truth</em> for the front-end logic of deleting notes. What if the endpoint changes? What if you want to add a confirmation modal to delete a note? What if you add front-end visibility adjustments so only certain users can delete a note? Now, you might have a missed spot. Worse yet - LLMs are prone to repeating the back-end logic too! Now you have four duplications for the same exact logic.</p><p>It&#8217;s better to have a single &#8220;Delete note&#8221; button file (eg. DeleteNoteButton.js) that contains the logic, or at least a single &#8220;Delete note&#8221; service that makes a request to the server.</p><p>Ask the LLM:</p><ul><li><p><em>Is this the only place this kind of logic exists, and should it be centralized?</em></p></li></ul><div><hr></div><h1><em><strong>Should this know about that?</strong></em></h1><p>LLMs often optimize for getting the thing done, not for overall system maintainability. That means it takes shortcuts.</p><p>As a practical example - an LLM will tie your toilet water plumbing to your kitchen sink because it&#8217;s faster than creating a separate set of pipes. The end result - your toilet will flush and your sink will have water - but you probably want them separate.</p><p>Likewise, in code, there&#8217;s certain things that should just never interact or know about each other. You want to ensure that your code knows the <em>bare minimum</em> about any other code in the system.</p><p>If you have an Export record, you don&#8217;t want it knowing about Payment records - it&#8217;s irrelevant. If you have a BarChart, why should it know about Navigation?</p><p>The more you can carve out, the more maintainable your system will be.</p><p>Ask the LLM:</p><ul><li><p><em>Does this really need to be aware of that?</em></p></li></ul><div><hr></div><p>Just five questions will dramatically improve your vibe coding longevity. It&#8217;ll also help you sniff out the issues that your AI is creating, long before they start to block progress.</p>]]></content:encoded></item><item><title><![CDATA[AI/LLMs for Engineering Teams - Getting started]]></title><description><![CDATA[A beginner's guide to getting started with introducing AI and LLM into your development team's workflows.]]></description><link>https://blog.jgefroh.com/p/aillms-for-engineering-teams-getting</link><guid isPermaLink="false">https://blog.jgefroh.com/p/aillms-for-engineering-teams-getting</guid><dc:creator><![CDATA[Joseph Gefroh]]></dc:creator><pubDate>Fri, 08 May 2026 19:42:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FR2l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ac06f5-0705-4724-bcf3-6b2de84fb908_1916x821.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FR2l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ac06f5-0705-4724-bcf3-6b2de84fb908_1916x821.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FR2l!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ac06f5-0705-4724-bcf3-6b2de84fb908_1916x821.png 424w, https://substackcdn.com/image/fetch/$s_!FR2l!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ac06f5-0705-4724-bcf3-6b2de84fb908_1916x821.png 848w, https://substackcdn.com/image/fetch/$s_!FR2l!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ac06f5-0705-4724-bcf3-6b2de84fb908_1916x821.png 1272w, https://substackcdn.com/image/fetch/$s_!FR2l!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ac06f5-0705-4724-bcf3-6b2de84fb908_1916x821.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FR2l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ac06f5-0705-4724-bcf3-6b2de84fb908_1916x821.png" width="1456" height="624" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/52ac06f5-0705-4724-bcf3-6b2de84fb908_1916x821.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:624,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2389393,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.jgefroh.com/i/196923817?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ac06f5-0705-4724-bcf3-6b2de84fb908_1916x821.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FR2l!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ac06f5-0705-4724-bcf3-6b2de84fb908_1916x821.png 424w, https://substackcdn.com/image/fetch/$s_!FR2l!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ac06f5-0705-4724-bcf3-6b2de84fb908_1916x821.png 848w, https://substackcdn.com/image/fetch/$s_!FR2l!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ac06f5-0705-4724-bcf3-6b2de84fb908_1916x821.png 1272w, https://substackcdn.com/image/fetch/$s_!FR2l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52ac06f5-0705-4724-bcf3-6b2de84fb908_1916x821.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>AIs/LLMs are a powerful tool for engineering, but it&#8217;s often difficult for an engineering team to &#8216;get started&#8217;, particularly if they aren&#8217;t already familiar with it.</p><p>Around late 2025, LLM coding reached a threshold of &#8216;consistently good enough&#8217;. With the latest models and harnesses, it actually became a high enough quality for the day-to-day work of a brownfield system rather than a finicky curiosity or a greenfield-only accelerator.</p><p>I wrote this guide to specifically to help engineering teams ramp up adoption over time in a safe, (relatively) secure manner. This is not a guide for vibe coding - this is a guide for integrating AI into the day-to-day work of teams working on existing systems. It&#8217;s about engineering operations, process, and the work rather than the output.</p><div><hr></div><h2><strong>Getting started</strong></h2><p>Get your team (or certain team members) set up with Claude, Cursor, or Codex on a team or enterprise account. Two key things:</p><ul><li><p>Opt out of using your company data for training</p></li><li><p>Make sure it&#8217;s on a work enterprise account, not a personal account</p></li></ul><p>I recommend Cursor for a team - it&#8217;s easy to set up, lets you switch models, and has an IDE as well as CLI capability. It&#8217;s harness is quite decent. With the rate models are getting better, having a bit of flexibility is quite useful.</p><p>At the same time - you really can&#8217;t go wrong with any of the above if you&#8217;re just starting out.</p><p><strong>Concepts</strong></p><ul><li><p><strong>AI/LLM Vendor</strong> - eg. Claude, ChatGPT - they create AI models</p></li><li><p><strong>Agent Model</strong> - the specific model version provided by the vendor (eg. Opus 4.6)</p></li><li><p><strong>Harness</strong> - the program/interface that the model uses to interact with the user (eg. CLI, UI, IDE)</p></li><li><p><strong>Thinking vs. Not Thinking</strong> - Different models are intended for different use cases for different costs. Thinking means it takes longer / costs more but comes up with better answers.</p><ul><li><p>If you&#8217;re in doubt, start with Opus 4.6 from Anthropic.</p></li></ul></li><li><p><strong>Reseller</strong> - vendor that provides access to models for different purposes, they may also provide a different harness</p><ul><li><p>eg. Cursor (IDE + CLI), AWS Bedrock (hosting + infra)</p></li></ul></li></ul><div><hr></div><h2><strong>The first use cases to address</strong></h2><ul><li><p><strong>Use AI to Explore Code</strong></p></li><li><p><strong>Use AI to Review Code</strong></p></li><li><p><strong>Use AI to Write Code</strong></p></li></ul><div><hr></div><h2><strong>Use AI to Explore Code</strong></h2><p>Engineers often ask a lot of questions about the code-base:</p><ul><li><p><em>How does feature flagging work?</em></p></li><li><p><em>Where is the oAuth token for the account stored ?</em></p></li><li><p><em>Do we already have a rate limiting library?</em></p></li><li><p><em>Can I get an explaination how background requests work?</em></p></li></ul><h4><strong>To begin</strong></h4><p>Train your team to ask these questions to the LLM. With codebase access, the LLM is actually <em>quite good</em> and finding the answer or at least pointing the developer in the right direction. This will help reduce the amount of random interruptions and wait time for questions and help promote self-directed learning.</p><h4><strong>To advance</strong></h4><p>Connect the LLM into MCP / data sources like Confluence or Notion so it can search not just the code but <em>context around the code</em> - product requirements, meeting notes, definitions, specifications, etc.</p><p>Ask the LLM to then explore these:</p><ul><li><p>How does feature flagging work, <em>and why did we make this way?</em></p></li><li><p>Where is the oAuth token for the account stored, and <em>what is the history of security reviews for it</em>?</p></li><li><p>Do we already have a rate limiting library, <em>and did we previously explore other options</em>?</p></li><li><p>Can I get an explanation how background requests work, <em>and have there been any incidents related to it</em>?</p></li></ul><p>This will help provide much better answers - just don&#8217;t forget to also add: <em> Explore Confluence if needed. This enables you to go from <strong>What?</strong> to <strong>Why?</strong></em> questions.</p><div><hr></div><h2><strong>Use AI to Review Code</strong></h2><h4><strong>To begin</strong></h4><p>Create and share a <strong>Skill</strong> to review code. A Skill is a repeatable Prompt that engineers can call for the LLM to follow.</p><p>Skills are super easy to make - you can actually just ask the LLM to make it for you.</p><ul><li><p><em>Write me a skill to review code. The skill should be triggered when I enter /review-code and review the currently modified code (check via git) for these factors: correctness, security, performance issues. Output a summary and recommendations.</em></p></li></ul><p>Review it, add your own thoughts and notes, and try it out. Tailor it to your needs - conciseness, other -ilities, etc.</p><p>It should generate a file that you can then share with your team - the vendor dashboard usually has the ability to add team-wide skill commands available to everyone.</p><p>Then, teach your team to run it on their code.</p><h4><strong>To advance</strong></h4><p>Getting everyone to do something all the time is difficult. Making it automatic is even better. Some tools like Graphite or Cursor have the ability to have skills automatically run when a Pull Request is created and to add a comment.</p><p>Even if your tool doesn&#8217;t - ask the LLM to make YOU a script that you can run to run the review Skill against every new PR in a repository:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">Write me a bash script that runs /review-code against every new PR in the repository `&lt;ORGANIZATION&gt;/&lt;REPOSITORY&gt;`.

For every new PR, it should launch a new agent with &lt;AGENT_LAUNCH_COMMAND&gt; using the model Opus 4.6 that reviews the code.

The agent should return its output, and the script should post that output as a comment to the PR.

If the PR already has a comment from the user `jgefroh`, that means it was reviewed already and should be skipped.

Make it check for new PRs every hour from 9am to 5pm.

Technical notes:
* It can check and pull for PRs using the `gh` CLI tool.
* It can write comments using the `gh` CLI tool.
* It should create a new worktree in a peer folder when pulling the branch so that the current working tree is not affected.
* It should ONLY run against repositories in the Github organization `&lt;ORGANIZATION&gt;`.
* It should print out links to the PR comments at the end of every run.
* It should have a dry-run mode that outputs what it would have done without actually writing the PR comment to Github.</code></pre></div><p>Something like the above should produce a tweakable script that lets you then run it from your machine automatically on a schedule.</p><h4><strong>To excel</strong></h4><p>Once you have the LLM <em>infrastructure</em>, it&#8217;s a matter of having improving the agent&#8217;s actual prompt over time to make the reviews deeper and more valuable.</p><p>If it misses something: tweak the prompt. If it is overly-nitpicky: tweak the prompt. If you want a specific format: tweak the prompt. </p><p>Treat the review prompt almost like a Growth product.</p><p>I found it <em>very valuable</em> to ask the LLM to write me a quick script that pulls every single PR comment I ever wrote on the repository and extract review principles from it, and to update the review skill with those principles.</p><p>That enabled it to keep an eye on the things I like to keep an eye on:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">Write me a bash script that uses the Github API (or `gh` cli) to pull every PR comment written by my user `jgefroh`.

It should put all of these in a file called comments.txt.

It must contain ALL PR comments - do not stop at just the most recent. Get ALL comments from all time.</code></pre></div><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">There is a file called comments.txt that contains PR comments I wrote in a repository.

Extract a set of PR Review Principles from it that I can use to enrich a PR review skill.</code></pre></div><p><strong>Potential gotchas:</strong></p><ul><li><p>Review the scripts LLMs produce like you would real production-bound code - I had a bug in mine where it accidentally reviewed a random PR in a random repository because the repository name was missing!</p></li><li><p>Having everything in one skill creates <em>shallowness</em>. It&#8217;s good for a broad summary, but don&#8217;t expect it to catch everything. There&#8217;s a section later for using AI for things where depth matters like security audits.</p></li></ul><div><hr></div><h2><strong>Use AI to Write Code</strong></h2><p>This is obviously the most written-about topic to death nowadays - when people say AI is going to take over engineering&#8217;s job, they are typically referring to this piece (nevermind the fact it&#8217;s like 10% of the actual work).</p><p>But, it&#8217;s actually <em>quite good</em> nowadays at writing code. Not perfect, but much faster and definitely better than starting from 0.</p><h4><strong>To begin</strong></h4><p>Take a ticket, paste it into your LLM, and ask the LLM to <em>create a plan</em> to implement it. Read the plan, tweak and adjust, and once you feel confident in it, ask it to implement.</p><p><em><strong>Read every single line of code it is writing. You are still responsible for the output.</strong></em></p><p>Tweak the result over time. Make sure to keep an eye on common AI gotchas:</p><ul><li><p>Placement and naming inconsistencies in file, folder, classes</p></li><li><p>Localized tweaks vs. using systematically available tools (eg. re-implementing feature flagging vs. using a library)</p></li><li><p>Lack of production, deployment, or migration considerations</p></li><li><p>Cross-cutting concern failures (eg. lack of authentication, authorization)</p></li><li><p>Incomplete work (it&#8217;ll tell you it&#8217;s done, but it&#8217;s not)</p></li></ul><p>Be sure you&#8217;re using a good thinking model vs. one of the fast ones.</p><h4><strong>To advance</strong></h4><p>Here&#8217;s where the expertise comes in. All of the weird above errors and gotchas? AI will repeat them over and over and over.</p><p>Truth is - it&#8217;s not automatic. Issues will occur and rework will be needed. Consider this a natural part of the process. When an issue occurs, there will be two paths:</p><ul><li><p>Fix the issue in the output and move on</p></li><li><p>Document the issue <em>in an agent prompt and re-run</em></p></li></ul><p>9/10 times, you should err on the side of fixing the prompt. Over time, this will lead to a natural decrease in the number of micro-corrections you have to make. </p><p>I do this by collecting the issues in a LLM-README.md placed in the codebase and instructing the LLM to always read it before doing any work. Your LLM-README.md should contain <em>exactly how you want it to make decisions</em> <em>around issues </em>it gets wrong:</p><ul><li><p>Does it use the wrong global variable to look up a common constant? Tell the LLM to use the right, specific one in the LLM-README.</p></li><li><p>Is scaling important in your context? Tell the LLM to always consider performance under load of 5000 RPS.</p></li><li><p>Should it using specific libraries or global subsystems you have? Tell the LLM the list and when it should use them.</p></li></ul><p>Over time, this will lead to a natural decrease in the number of micro-corrections you have to make. Your LLM-README.md is a guidance document that saves you the headaches of rework.</p><p><em>note: some tools already have a mechanism for this - eg. CLAUDE.md.</em></p><p><strong>Example:</strong></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;markdown&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-markdown">LLM-README.md


# Reusable systems
We have the following domain-independent reusable subsystems that MUST be used when implementing any of the below functionality:

* Feature Flagging - /feature_flags
* Exporting - /exports
* User-level authorization - /authorization
* Rate limiting - /security/rate_limits

Do not re-create the above. Always use the available subsystems. Do not make modification to the above subsystems

# Tech stack
Our front-end is VueJS 3 with the Option API. Do not use the Composition API.

## Javascript Rules
We use `import`, not `requires`.

# Convention rules
All page components that are routable must be named with a suffix `-page.vue`. </code></pre></div><h4><strong>To excel</strong></h4><p>I&#8217;m not going to lie. You&#8217;ll need other resources to excel in this regard.</p><p>While I read about people using fleets of dozens of agents across kanban boards to create simultaneous features, or developing a team of self-correcting agents, I&#8217;ve not yet found how to make any of that work for my use cases. The outputs are too unreliable, or I find them shallow, or I just don&#8217;t have the attention span to manage more than 2 streams of real development work at a time.</p><p>If it works for them - great.  It just hasn&#8217;t for me so I can&#8217;t then turn around and tell you how to do that. I can only speak to what I&#8217;ve done and how it worked for me.</p><p>The one use case I did find useful was to have the AI read a pre-existing step-by-step auditing documents and iterate through it to create a set of automated end-to-end tests that emulate that process using Cypress. That worked out pretty well, but it also took the LLM a lot of trial and error and me stepping in to get it &#8216;unstuck&#8217; when it got stuck in various loops. Saved me time because I could do something else while it was doing it, but it was like a 4-5 hour process for a couple of end to end tests.</p><div><hr></div><h1>Other considerations</h1><h2><strong>Project AI/LLMs budget and cost for engineers</strong></h2><p>AI is typically billed as usage-based. It really depends on how much your team uses and adopts it, but at current prices, I&#8217;d estimate:</p><ul><li><p>Early adoption &lt; $50 / engineer, average - with a couple of spikes</p></li><li><p>Wide, consistent usage - ~$200 / engineer </p></li><li><p>AI-native usage - $1000+ / engineer</p></li></ul><p>Prices will differ based on usage, optimization. </p><p><strong>Don&#8217;t let the prices turn you off.</strong> You CAN get much higher ROI from initial input costs, and it&#8217;ll take a while, if at all, to get to AI-native usage if you&#8217;re reading this guide. You&#8217;ll likely end up closer to the $100 - $200 / engineer range by the time you get full, consistent usage adoption.</p><p>During adoption phase, you don&#8217;t really want anyone on the team to worry about costs unless money is super tight. What you want people to do is explore without anxiety over limits. You can teach optimization later.</p><p>A key note: AI prices are likely to increase. It&#8217;s heavily subsidized right now. I wouldn&#8217;t be surprised if it increases 10x in the future, but take advantage of low prices while you can. </p><h2><strong>Secure AI/LLMs for developer machines</strong></h2><p>AIs open up a massive pathway of potential attacks if used without guardrails. Ensure you and your team understand the potential consequences:</p><ul><li><p>Destructive actions - it can randomly delete things it has access to, including production databases and files</p></li><li><p>Malicious actors can convince it to do things like send your credentials to them or even download files and run random commands (prompt injection)</p></li></ul><p>The key thing to note from a developer security side is <strong>the Deadly Triad. </strong>If the LLM has all three simultaneously, it should be considered a fairly high risk environment for prompt injection:</p><ul><li><p>The LLM has access to send out communications</p></li><li><p>The LLM has access to user input</p></li><li><p>The LLM has access to sensitive information</p></li></ul><p>The problem, of course, is a developer environment usually has all 3 <em><strong>by default</strong></em>:</p><ul><li><p>Developer machines are connected to the internet and has access to CURL, DNS, and other tools, and usually on an elevated access account. [send out communications]</p></li><li><p>Developers often like to connect to ticket systems and error reporting (eg. Jira, Sentry) which has user input. [user input]</p></li><li><p>Developers have at minimum access to the codebase and local credentials, as well as potential production access [sensitive information]</p></li></ul><p>This makes securing a developer machine particularly tricky. While LLM vendors try their best to prevent these attacks, it&#8217;s still succeeding at a 1-8% rate depending on the study.</p><p>The easy go-to is to prohibit connection to systems with direct user input (much to the dismay of your team) as a first-line defense. That means no automatic ingestion of Sentry, Jira tickets, etc.</p><p>This isn&#8217;t fool-proof, but it at least decreases risk levels. If you have resources, you can also have a <em>separate AI-specific laptop</em> that has hard controls against infrastructure connectivity at all as a second layer.</p><p>The risk here is non-zero, but also relatively low - use a context-appropriate risk assessment.</p><h2><strong>Guiding AI agents with prompts</strong></h2><p>Writing an effective prompt is an entirely different article in its own right, and it also differs per model and model family. </p><p>If your team is new to AI, it&#8217;s helpful to go over the fundamentals. I have deeper guidance on the fundamentals of prompting in another article:<strong> </strong><a href="https://blog.jgefroh.com/p/aillm-prompting-for-beginners">AI/LLM Prompting for Beginners</a>.</p><p>Generally though, as you write prompts for guiding the LLM for coding purposes:</p><ul><li><p><strong>Don&#8217;t describe what the code is doing.</strong> Describe the context of how you want the architecture and code to be used and created. The AI can find out what the code is doing quite well. It can&#8217;t interpret the context or intent.</p></li><li><p><strong>Keep your prompts relatively precise. </strong>Try to avoid mixing 100 different requests into a single prompt. Asking an LLM to create a dashboard for one feature AND a new API endpoint for another feature AND a report for a third will just confuse it.</p></li><li><p><strong>Ask your LLM to plan. </strong>Coding LLMs are quite good at planning, and spending 10 minutes in &#8216;plan mode&#8217; shaping the plan by going back and forth conversationally with the AI will save you tons of headaches during implementation.</p></li><li><p><strong>Apply global corrections globally.</strong> If an LLM is messing up consistently for you in one area, it probably is for others - that&#8217;s a good signal to raise it to the team to add to the LLM-Guidance.md for everyone.</p></li></ul><h2><strong>Depth vs. Breadth</strong></h2><p>One important note about LLMs is the more separate instructions you give it, the more shallow it will be. Suppose you&#8217;re creating an LLM prompt to do a pull request code review and want to check:</p><ul><li><p>Scaling, security, naming, correctness, and edge case spec coverage</p></li></ul><p>You can put all of these separate considerations into a single prompt and have an agent run that prompt against code and get good results. </p><p>However, if you&#8217;re working in conditions where that review really, really matters (eg. very important code), it&#8217;s better to separate each one into its own prompt and Agent.</p><p>What that means is to write different prompts for each consideration, asking it to output a formatted report:</p><ul><li><p>A separate prompt that specifically asks the agent to investigate all manner of scaling concerns, being particular about evaluating load</p></li><li><p>A separate prompt that  specifically asks the agent to investigate all manner of security concerns, being particular about tracing code</p></li><li><p>&#8230;etc.</p></li></ul><p>Then, you run each of your individual prompts using a new, fresh agent per prompt against your pull request. You can collect the results and have an LLM stitch them together verbatim at the end, or have them post separately.</p><p>You will get much, much deeper results because the LLM will not get as confused. This is especially useful for creating security auditors. </p><p>I once made a script + LLM audit prompt that ran a separate agent through every single endpoint for a legacy system individually looking purely for endpoint security considerations. It found <em>several hundred</em> real vulnerabilities of all kinds, including nearly a dozen critical ones vs. my shallower attempt which found &lt; 10 low ones. Because of the way it was written, I was also able to get it to write patch steps automatically, providing the team a way to remediate issues immediately - all for just $0.90 / endpoint.</p><p>This approach works well for any work, not just code reviews, where you need depth.</p><div><hr></div><h1>Adoption advice</h1><p><strong>Start small. </strong>Don&#8217;t try to make your codebase LLM-friendly overnight. Start with just a single LLM-Guidance.md document and add to the rules over time.</p><p><strong>Minimize infrastructure.</strong> If you&#8217;re just getting started, don&#8217;t try going through hoops setting up a bunch of infrastructure. You can get a lot done with just a single developer running Cursor. </p><ul><li><p>eg. a developer can just run <code>gh</code> Github CLI locally and post as themselves vs. trying to get their admin to approve an organization-wide integration.</p></li></ul><p><strong>Use what you already have.</strong> You don&#8217;t have to reorganize your entire knowledge store to make it usable by LLMs. LLMs can follow links - if you have documentation like Confluence, point it at the docs. Even if you just &#8216;copy-paste&#8217; it, it&#8217;s better than nothing.</p><p><strong>Introduce the basics.</strong> You really have to help people along sometimes, and that&#8217;s OK - especially for a new technology. </p><ul><li><p>Make a powerpoint with step by steps on setting Claude, ChatGPT, or Cursor up (or better yet, ask AI to make you one)</p></li><li><p>Do a team-wide demo of various use-cases like completing simple tickets or asking cursor questions about the code. Do it in real time.</p></li><li><p>Start an AI knowledge share channel for folks to ask questions in real-time (you can pivot them to ask the AI later)</p></li><li><p>Show people what it can do to create ideas.</p></li><li><p>Share skills and prompts with the team.</p></li></ul><div><hr></div><p>This is just the start. You&#8217;ll open up a world of other opportunities as you increase adoption. Think about things like:</p><ul><li><p>Can you use AI to do security audits against your codebase? (yes)</p></li><li><p>Can you use AI to answer questions from your team <em>like you would</em>? (yes)</p></li><li><p>Can you use AI to give daily updates to stakeholders? (yes)</p></li><li><p>Can you use AI to create internal-use tools? (yes)</p></li><li><p>Can you use AI to automate other processes? (yes)</p></li></ul><p>Just remember: AI is a power tool. You don&#8217;t want people running around with chainsaws! Move forward safely.</p><div><hr></div><p><em><a href="https://jgefroh.com/">Gefroh</a> is a product and engineering executive in Kirkland, Washington currently leading various AI adoption efforts. He&#8217;s created AI versions of himself at his current company, and has done all of the above.</em></p>]]></content:encoded></item><item><title><![CDATA[Detecting AI-written text on social media - Moving beyond the em-dash]]></title><description><![CDATA[AI on social media like Reddit and LinkedIn have detectable patterns.]]></description><link>https://blog.jgefroh.com/p/detecting-ai-written-text-on-social</link><guid isPermaLink="false">https://blog.jgefroh.com/p/detecting-ai-written-text-on-social</guid><dc:creator><![CDATA[Joseph Gefroh]]></dc:creator><pubDate>Thu, 07 May 2026 15:40:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!g-a6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d65c271-f6b6-441b-89eb-aefd1d3114c2_1916x821.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!g-a6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d65c271-f6b6-441b-89eb-aefd1d3114c2_1916x821.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!g-a6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d65c271-f6b6-441b-89eb-aefd1d3114c2_1916x821.png 424w, https://substackcdn.com/image/fetch/$s_!g-a6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d65c271-f6b6-441b-89eb-aefd1d3114c2_1916x821.png 848w, https://substackcdn.com/image/fetch/$s_!g-a6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d65c271-f6b6-441b-89eb-aefd1d3114c2_1916x821.png 1272w, https://substackcdn.com/image/fetch/$s_!g-a6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d65c271-f6b6-441b-89eb-aefd1d3114c2_1916x821.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!g-a6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d65c271-f6b6-441b-89eb-aefd1d3114c2_1916x821.png" width="1456" height="624" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5d65c271-f6b6-441b-89eb-aefd1d3114c2_1916x821.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:624,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1911987,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.jgefroh.com/i/196677699?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d65c271-f6b6-441b-89eb-aefd1d3114c2_1916x821.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!g-a6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d65c271-f6b6-441b-89eb-aefd1d3114c2_1916x821.png 424w, https://substackcdn.com/image/fetch/$s_!g-a6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d65c271-f6b6-441b-89eb-aefd1d3114c2_1916x821.png 848w, https://substackcdn.com/image/fetch/$s_!g-a6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d65c271-f6b6-441b-89eb-aefd1d3114c2_1916x821.png 1272w, https://substackcdn.com/image/fetch/$s_!g-a6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5d65c271-f6b6-441b-89eb-aefd1d3114c2_1916x821.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>Humans are amazing pattern matchers. We&#8217;re great at detecting when something is just&#8230;off.</p><p>That&#8217;s how I feel about almost all Reddit posts nowadays. It feels like 80% of reddit posts and comments I read are just AIs talking to each other.</p><p>It&#8217;s not just the &#8212;, it&#8217;s the sense it&#8217;s not a real person.</p><p>Honestly? AI has a strangeness to how it writes that creates smells. You can detect it with some basic tricks.</p><p>Curious if you&#8217;ve seen the tells, too?</p><div><hr></div><h1>The tells</h1><p>Many human-written posts contain these naturally. However, the tell comes from the fact that most human posts do not contain <em>many of these at the same time, consistently across posts / content</em>.</p><h3><strong>Words</strong></h3><p><em>AI loves to use specific words.</em></p><ul><li><p><em>Substrate</em> - I&#8217;ve gone my whole life hearing absolutely nobody use this word, and now it&#8217;s <em>everywhere.</em></p></li><li><p><em>Curious</em> - Nobody is that curious to use this word so often.</p></li><li><p><em>Resonates</em> - Not everything in life is deep and meaningful unless you&#8217;re a robot</p></li></ul><h3><strong>Phrases</strong></h3><p>They also like using these phrases a lot:</p><ul><li><p><em>&#8220;It hits hard&#8230;&#8221;</em></p></li><li><p><em>&#8220;Here&#8217;s what actually happened&#8221;</em></p></li><li><p><em>&#8220;Rare to see &lt;X&gt;&#8221;</em></p></li><li><p><em>&#8220;The wild part&#8221;</em></p></li><li><p><em>&#8220;You weren&#8217;t imagining&#8221;</em></p></li><li><p><em>&#8220;Nobody warns you&#8230;&#8221; / &#8220;Nobodys talking about&#8221;</em></p></li><li><p><em>&#8220;What kills me&#8230;&#8221;</em></p></li><li><p><em>&#8220;The funniest part&#8221;</em></p></li><li><p><em>&#8220;We need to talk about&#8221;</em></p></li><li><p><em>&#8220;The real issue is&#8221;</em></p></li></ul><h3><strong>Structure</strong></h3><p>AI has some specific structures it gravitates towards.</p><ul><li><p>Staccato sentences.</p><ul><li><p><em>&#8220;This is &lt;X&gt;. That is &lt;Y&gt;.&#8221;</em></p></li><li><p><em>&#8220;Not &lt;X&gt;. Not &lt;Y&gt;. &lt;Z&gt;.&#8221;</em></p></li><li><p><em>&#8220;Just &lt;X&gt;, &lt;Y&gt;&#8221;</em></p></li></ul></li><li><p><strong>Lists</strong> - particularly if they start with bold.</p></li><li><p>Removal of the subject from a sentence.</p><ul><li><p><em>&#8220;Left the station yesterday.&#8221; vs. &#8220;I left the station yesterday&#8221;</em></p></li></ul></li><li><p>Comparators and Metaphors</p><ul><li><p><em>&#8220;not &lt;X&gt;, but &lt;Y&gt;&#8221;</em></p></li><li><p><em>&#8220;&lt;A&gt; was &lt;X&gt;. &lt;Z&gt; is &lt;Y&gt;.&#8221;</em></p></li></ul></li><li><p>Odd pause insertion in written content</p><ul><li><p><em>&#8220;Sometimes I just&#8230;.  &lt;X&gt;&#8221;</em></p></li></ul></li></ul><ul><li><p>Sometimes - all lower-case - some people have prompted to try and sound more human</p></li><li><p>Examples in triples or quads.</p></li><li><p>Varied but predictable sentence lengths &#8220;&lt;Sentence&gt;. &lt;Short fragment&gt; &lt;Shorter fragment&gt;&#8221;</p><ul><li><p><em>eg. &#8220;I talked to all of my team that day. Some were mad. Most curious.&#8221;</em></p></li></ul></li></ul><h3><strong>Intents</strong></h3><p>LLM-written content often does what I call <em>overframing</em> - prepping the user before the primary content that isn&#8217;t contextually necessary for the situation.</p><ul><li><p>Trust-building framing</p><ul><li><p><em>&#8220;Honestly&#8230;&#8221;</em></p></li><li><p><em>&#8220;Genuinely asking&#8230;.&#8221;</em></p></li></ul></li><li><p>Buttering-up</p><ul><li><p><em>&#8220;That&#8217;s rare.&#8221;</em></p></li><li><p><em>&#8220;The &lt;X&gt; is real&#8230;&#8221;</em></p></li><li><p><em>&#8220;Exactly this&#8221;</em></p></li><li><p><em>&#8220;Good point&#8221;</em></p></li></ul></li><li><p>Positioning as authority</p><ul><li><p><em>&#8220;Sharing what actually matters&#8230;&#8221;</em></p></li></ul></li><li><p>Circumventing objections</p><ul><li><p><em>&#8220;You&#8217;re right to push back&#8230;&#8221;</em></p></li><li><p><em>&#8220;You&#8217;re not wrong&#8230;&#8221;</em></p></li></ul></li><li><p>Offering engagement</p><ul><li><p><em>&#8220;Happy to &lt;X&gt;&#8221;</em></p></li></ul></li></ul><h3><strong>Oddities</strong></h3><p>Weird, out of place metaphors and comparisons. AI likes to insert examples that people wouldn&#8217;t draw comparisons towards naturally</p><ul><li><p><em>&#8220;The dog looked at me like I was a fish&#8221;</em></p></li></ul><div><hr></div><h2><strong>Categories</strong></h2><p>I&#8217;ve noticed a few categories of written content that have tell combinations:</p><h3><strong>Engagement-bait</strong></h3><p>These posts seem to want to generate engagement - some tells:</p><ul><li><p>Attempts connection</p><ul><li><p><em>&#8220;Curious if anyone else&#8230;&#8221;</em></p></li><li><p><em>&#8220;Am I the only one&#8230;&#8221;</em></p></li></ul></li><li><p>Requests honesty</p><ul><li><p><em>&#8220;Just looking for genuine takes&#8221;</em></p></li></ul></li><li><p>Ends with an engagement prompt</p><ul><li><p><em>&#8220;Curious if&#8230;&#8221;</em></p></li><li><p><em>&#8220;If I may ask&#8230;.&#8221;</em></p></li><li><p><em>&#8220;How are you&#8230;&#8221;</em></p></li></ul></li></ul><h3><strong>Fake engagement</strong></h3><p>These posts just seem to be generating engagement:</p><ul><li><p>Give kudos</p><ul><li><p><em>&#8220;Glad you&#8217;re doing &lt;X&gt;&#8221;</em></p></li></ul></li><li><p>Often ends with a statement or question:</p><ul><li><p><em>&#8220;Do you notice &lt;X&gt;&#8221;</em></p></li></ul></li></ul><h3><strong>Ads</strong></h3><p>Many of these posts are just trying to sell something. Some are up-front and have appropriate disclaimers. Others are stealthy - they do it by casually name-dropping it in the post alongside other better recognized names.</p><p>For example, you&#8217;d see a post on &#8220;AI Workflows&#8221; that mentions popular tools like n8n, Claude, etc. and then see a random product casually name-dropped in the middle as a core part of the workflow like &#8220;potato-ai for cleaning up&#8221;.</p><p>It positions the product as a peer or equal in relevance to the other listed items.</p><p></p><h2><strong>News sharing / Info sharing</strong></h2><p>Someone shares knowledge or news to present themselves as an expert, sometimes accompanied with an ad.</p><ul><li><p>Factoid along with a personal impact.</p><ul><li><p><em>&#8220;&lt;X&gt; just figured out &lt;Y&gt;. You&#8217;re &lt;Z&gt;.&#8221;</em></p></li></ul></li><li><p>Description about why it is mind-blowing.</p></li><li><p>Unnecessary levels of detail to establish credibility.</p></li><li><p>Opinion.</p></li></ul><div><hr></div><h1>Examples</h1><p>Many of these posts exhibit the tells from above. While it doesn&#8217;t <em>prove</em> it was AI-generated or edited, enough of them creates a &#8216;smell&#8217; where I don&#8217;t even bother reading it anymore.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9is7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70433ffe-9f90-4bbc-9753-7f1774c416c9_1502x1026.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9is7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70433ffe-9f90-4bbc-9753-7f1774c416c9_1502x1026.png 424w, https://substackcdn.com/image/fetch/$s_!9is7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70433ffe-9f90-4bbc-9753-7f1774c416c9_1502x1026.png 848w, https://substackcdn.com/image/fetch/$s_!9is7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70433ffe-9f90-4bbc-9753-7f1774c416c9_1502x1026.png 1272w, https://substackcdn.com/image/fetch/$s_!9is7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70433ffe-9f90-4bbc-9753-7f1774c416c9_1502x1026.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9is7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70433ffe-9f90-4bbc-9753-7f1774c416c9_1502x1026.png" width="1456" height="995" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/70433ffe-9f90-4bbc-9753-7f1774c416c9_1502x1026.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:995,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:289274,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.jgefroh.com/i/196677699?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70433ffe-9f90-4bbc-9753-7f1774c416c9_1502x1026.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!9is7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70433ffe-9f90-4bbc-9753-7f1774c416c9_1502x1026.png 424w, https://substackcdn.com/image/fetch/$s_!9is7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70433ffe-9f90-4bbc-9753-7f1774c416c9_1502x1026.png 848w, https://substackcdn.com/image/fetch/$s_!9is7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70433ffe-9f90-4bbc-9753-7f1774c416c9_1502x1026.png 1272w, https://substackcdn.com/image/fetch/$s_!9is7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F70433ffe-9f90-4bbc-9753-7f1774c416c9_1502x1026.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">Pause insertion, strange comparators, triple structure, stoccato.</figcaption></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_!wTGl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0fd4cc-36f3-45bd-9b13-f30c8042d51d_1166x1184.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wTGl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0fd4cc-36f3-45bd-9b13-f30c8042d51d_1166x1184.png 424w, https://substackcdn.com/image/fetch/$s_!wTGl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0fd4cc-36f3-45bd-9b13-f30c8042d51d_1166x1184.png 848w, https://substackcdn.com/image/fetch/$s_!wTGl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0fd4cc-36f3-45bd-9b13-f30c8042d51d_1166x1184.png 1272w, https://substackcdn.com/image/fetch/$s_!wTGl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0fd4cc-36f3-45bd-9b13-f30c8042d51d_1166x1184.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wTGl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0fd4cc-36f3-45bd-9b13-f30c8042d51d_1166x1184.png" width="1166" height="1184" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bb0fd4cc-36f3-45bd-9b13-f30c8042d51d_1166x1184.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1184,&quot;width&quot;:1166,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:298122,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.jgefroh.com/i/196677699?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0fd4cc-36f3-45bd-9b13-f30c8042d51d_1166x1184.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wTGl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0fd4cc-36f3-45bd-9b13-f30c8042d51d_1166x1184.png 424w, https://substackcdn.com/image/fetch/$s_!wTGl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0fd4cc-36f3-45bd-9b13-f30c8042d51d_1166x1184.png 848w, https://substackcdn.com/image/fetch/$s_!wTGl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0fd4cc-36f3-45bd-9b13-f30c8042d51d_1166x1184.png 1272w, https://substackcdn.com/image/fetch/$s_!wTGl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0fd4cc-36f3-45bd-9b13-f30c8042d51d_1166x1184.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">Factoid, unnecessary detail, not &lt;X&gt;, &lt;Y&gt;, etc.</figcaption></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_!ENq_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23b6d807-c8c0-40f8-8b9d-58418b1c45ca_1540x532.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ENq_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23b6d807-c8c0-40f8-8b9d-58418b1c45ca_1540x532.png 424w, https://substackcdn.com/image/fetch/$s_!ENq_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23b6d807-c8c0-40f8-8b9d-58418b1c45ca_1540x532.png 848w, https://substackcdn.com/image/fetch/$s_!ENq_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23b6d807-c8c0-40f8-8b9d-58418b1c45ca_1540x532.png 1272w, https://substackcdn.com/image/fetch/$s_!ENq_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23b6d807-c8c0-40f8-8b9d-58418b1c45ca_1540x532.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ENq_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23b6d807-c8c0-40f8-8b9d-58418b1c45ca_1540x532.png" width="1456" height="503" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b6d807-c8c0-40f8-8b9d-58418b1c45ca_1540x532.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:503,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:163264,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.jgefroh.com/i/196677699?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23b6d807-c8c0-40f8-8b9d-58418b1c45ca_1540x532.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ENq_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23b6d807-c8c0-40f8-8b9d-58418b1c45ca_1540x532.png 424w, https://substackcdn.com/image/fetch/$s_!ENq_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23b6d807-c8c0-40f8-8b9d-58418b1c45ca_1540x532.png 848w, https://substackcdn.com/image/fetch/$s_!ENq_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23b6d807-c8c0-40f8-8b9d-58418b1c45ca_1540x532.png 1272w, https://substackcdn.com/image/fetch/$s_!ENq_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23b6d807-c8c0-40f8-8b9d-58418b1c45ca_1540x532.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">Em-dash, framing, ending question engagement.</figcaption></figure></div><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nDWy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d2afb6-fb89-4858-a6bb-9e585107233e_1508x1174.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nDWy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d2afb6-fb89-4858-a6bb-9e585107233e_1508x1174.png 424w, https://substackcdn.com/image/fetch/$s_!nDWy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d2afb6-fb89-4858-a6bb-9e585107233e_1508x1174.png 848w, https://substackcdn.com/image/fetch/$s_!nDWy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d2afb6-fb89-4858-a6bb-9e585107233e_1508x1174.png 1272w, https://substackcdn.com/image/fetch/$s_!nDWy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d2afb6-fb89-4858-a6bb-9e585107233e_1508x1174.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nDWy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d2afb6-fb89-4858-a6bb-9e585107233e_1508x1174.png" width="1456" height="1134" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/29d2afb6-fb89-4858-a6bb-9e585107233e_1508x1174.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1134,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:354497,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.jgefroh.com/i/196677699?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d2afb6-fb89-4858-a6bb-9e585107233e_1508x1174.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nDWy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d2afb6-fb89-4858-a6bb-9e585107233e_1508x1174.png 424w, https://substackcdn.com/image/fetch/$s_!nDWy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d2afb6-fb89-4858-a6bb-9e585107233e_1508x1174.png 848w, https://substackcdn.com/image/fetch/$s_!nDWy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d2afb6-fb89-4858-a6bb-9e585107233e_1508x1174.png 1272w, https://substackcdn.com/image/fetch/$s_!nDWy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29d2afb6-fb89-4858-a6bb-9e585107233e_1508x1174.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">Missing subject, staccato, not &#8220;&lt;X&gt;, &lt;Y&gt;&#8221;, strange comparator, engagement question.</figcaption></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_!EzhW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4818412-1c7c-487f-83aa-572508e22eb4_1600x940.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EzhW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4818412-1c7c-487f-83aa-572508e22eb4_1600x940.png 424w, https://substackcdn.com/image/fetch/$s_!EzhW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4818412-1c7c-487f-83aa-572508e22eb4_1600x940.png 848w, https://substackcdn.com/image/fetch/$s_!EzhW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4818412-1c7c-487f-83aa-572508e22eb4_1600x940.png 1272w, https://substackcdn.com/image/fetch/$s_!EzhW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4818412-1c7c-487f-83aa-572508e22eb4_1600x940.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EzhW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4818412-1c7c-487f-83aa-572508e22eb4_1600x940.png" width="1456" height="855" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e4818412-1c7c-487f-83aa-572508e22eb4_1600x940.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:855,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:293142,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.jgefroh.com/i/196677699?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4818412-1c7c-487f-83aa-572508e22eb4_1600x940.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EzhW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4818412-1c7c-487f-83aa-572508e22eb4_1600x940.png 424w, https://substackcdn.com/image/fetch/$s_!EzhW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4818412-1c7c-487f-83aa-572508e22eb4_1600x940.png 848w, https://substackcdn.com/image/fetch/$s_!EzhW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4818412-1c7c-487f-83aa-572508e22eb4_1600x940.png 1272w, https://substackcdn.com/image/fetch/$s_!EzhW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4818412-1c7c-487f-83aa-572508e22eb4_1600x940.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">Missing subject, triples, just &lt;x&gt;, &lt;y&gt;, engagement question.</figcaption></figure></div><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!11KA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5bdc4da-2e41-4e2f-a4bf-a87c17193d35_1514x1952.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!11KA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5bdc4da-2e41-4e2f-a4bf-a87c17193d35_1514x1952.png 424w, https://substackcdn.com/image/fetch/$s_!11KA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5bdc4da-2e41-4e2f-a4bf-a87c17193d35_1514x1952.png 848w, https://substackcdn.com/image/fetch/$s_!11KA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5bdc4da-2e41-4e2f-a4bf-a87c17193d35_1514x1952.png 1272w, https://substackcdn.com/image/fetch/$s_!11KA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5bdc4da-2e41-4e2f-a4bf-a87c17193d35_1514x1952.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!11KA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5bdc4da-2e41-4e2f-a4bf-a87c17193d35_1514x1952.png" width="1456" height="1877" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f5bdc4da-2e41-4e2f-a4bf-a87c17193d35_1514x1952.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1877,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:582822,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.jgefroh.com/i/196677699?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5bdc4da-2e41-4e2f-a4bf-a87c17193d35_1514x1952.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!11KA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5bdc4da-2e41-4e2f-a4bf-a87c17193d35_1514x1952.png 424w, https://substackcdn.com/image/fetch/$s_!11KA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5bdc4da-2e41-4e2f-a4bf-a87c17193d35_1514x1952.png 848w, https://substackcdn.com/image/fetch/$s_!11KA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5bdc4da-2e41-4e2f-a4bf-a87c17193d35_1514x1952.png 1272w, https://substackcdn.com/image/fetch/$s_!11KA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5bdc4da-2e41-4e2f-a4bf-a87c17193d35_1514x1952.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_!yMns!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8076841-b75d-4749-856d-aee2ad5eb725_1524x814.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yMns!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8076841-b75d-4749-856d-aee2ad5eb725_1524x814.png 424w, https://substackcdn.com/image/fetch/$s_!yMns!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8076841-b75d-4749-856d-aee2ad5eb725_1524x814.png 848w, https://substackcdn.com/image/fetch/$s_!yMns!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8076841-b75d-4749-856d-aee2ad5eb725_1524x814.png 1272w, https://substackcdn.com/image/fetch/$s_!yMns!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8076841-b75d-4749-856d-aee2ad5eb725_1524x814.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yMns!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8076841-b75d-4749-856d-aee2ad5eb725_1524x814.png" width="1456" height="778" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e8076841-b75d-4749-856d-aee2ad5eb725_1524x814.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:778,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:209902,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.jgefroh.com/i/196677699?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8076841-b75d-4749-856d-aee2ad5eb725_1524x814.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yMns!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8076841-b75d-4749-856d-aee2ad5eb725_1524x814.png 424w, https://substackcdn.com/image/fetch/$s_!yMns!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8076841-b75d-4749-856d-aee2ad5eb725_1524x814.png 848w, https://substackcdn.com/image/fetch/$s_!yMns!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8076841-b75d-4749-856d-aee2ad5eb725_1524x814.png 1272w, https://substackcdn.com/image/fetch/$s_!yMns!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8076841-b75d-4749-856d-aee2ad5eb725_1524x814.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">List, engagement, sneak ad, framed as curiosity</figcaption></figure></div><div><hr></div><p>These aren&#8217;t all the tells. As AI and prompts evolve, it will rapidly change. But once you see it, you can&#8217;t unsee it, and you start to realize that a lot of the internet might just be <a href="https://en.wikipedia.org/wiki/Dead_Internet_theory">bots talking to bots</a>.</p><div><hr></div><p><em><a href="https://jgefroh.com/">Gefroh</a> is product and technology executive in Kirkland, Washington that writes about leadership, management, operations, and AI.</em></p>]]></content:encoded></item><item><title><![CDATA[How to Become a Better Product Manager - Leveraging AI and LLMs effectively]]></title><description><![CDATA[Learn how to 10x your product management in the age of AI.]]></description><link>https://blog.jgefroh.com/p/how-to-become-a-better-product-manager-a5a</link><guid isPermaLink="false">https://blog.jgefroh.com/p/how-to-become-a-better-product-manager-a5a</guid><dc:creator><![CDATA[Joseph Gefroh]]></dc:creator><pubDate>Tue, 05 May 2026 17:47:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!uzdd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776ad30e-814c-4f86-965d-a995e549dcaa_3084x1124.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uzdd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776ad30e-814c-4f86-965d-a995e549dcaa_3084x1124.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uzdd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776ad30e-814c-4f86-965d-a995e549dcaa_3084x1124.png 424w, https://substackcdn.com/image/fetch/$s_!uzdd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776ad30e-814c-4f86-965d-a995e549dcaa_3084x1124.png 848w, https://substackcdn.com/image/fetch/$s_!uzdd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776ad30e-814c-4f86-965d-a995e549dcaa_3084x1124.png 1272w, https://substackcdn.com/image/fetch/$s_!uzdd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776ad30e-814c-4f86-965d-a995e549dcaa_3084x1124.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uzdd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776ad30e-814c-4f86-965d-a995e549dcaa_3084x1124.png" width="1456" height="531" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/776ad30e-814c-4f86-965d-a995e549dcaa_3084x1124.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:531,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3625938,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.jgefroh.com/i/196564954?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776ad30e-814c-4f86-965d-a995e549dcaa_3084x1124.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uzdd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776ad30e-814c-4f86-965d-a995e549dcaa_3084x1124.png 424w, https://substackcdn.com/image/fetch/$s_!uzdd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776ad30e-814c-4f86-965d-a995e549dcaa_3084x1124.png 848w, https://substackcdn.com/image/fetch/$s_!uzdd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776ad30e-814c-4f86-965d-a995e549dcaa_3084x1124.png 1272w, https://substackcdn.com/image/fetch/$s_!uzdd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776ad30e-814c-4f86-965d-a995e549dcaa_3084x1124.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>In the age of AI, the Product Manager role is rapidly shifting in expectations.</p><p>It&#8217;s no longer enough to do some market research and toss it over the fence (though, honestly - that has never been enough).</p><p>Instead, there&#8217;s higher demands:</p><ul><li><p>Visual evidence in the form of functional prototypes</p></li><li><p>LLM-friendly documentation and breakdowns</p></li><li><p>Further specificity in details - use cases, edge cases</p></li></ul><p>Product Manager should identify how their role is changing, and more importantly - what they can do to accelerate their efforts.</p><div><hr></div><p><em>This article is part of my series <a href="https://blog.jgefroh.com/p/how-to-become-a-better-product-manager">How to Become a Better Product Manager</a>, which teaches the deep fundamentals of product management.</em></p><div><hr></div><h1>Basic LLM Usage</h1><h2><em><strong>LLMs as a Pair of Eyes</strong></em></h2><p>As Product Management scope increases, so does the broader awareness required to keep abreast of changes. There was a time where I was in 300 Slack channels across my scope, monitoring the conversations - it was exhausting.</p><p>LLMs saved me tons of time here.</p><p>If your company allows it, you can use LLMs to raise awareness of things happening in the company. For example, Claude connected to Slack and Confluence means you don&#8217;t have to actively be in a Slack channel or watching Confluence activity like a hawk to identify whether something needs your attention.</p><p>A few prompts I like to use:</p><ul><li><p><em>Search Slack and Confluence for every decision made about Project X that I wasn&#8217;t involved in.</em></p></li><li><p><em>Search Slack for any confusion, questions, or defect reports for Product Y that arrived today.</em></p></li></ul><p>The more data sources you attach, the broader the scope of search.</p><h2><em><strong>LLMs as Synthesis Engines</strong></em></h2><p>There&#8217;s a lot of documents and knowledge we have to both absorb and impart as product managers. </p><p>LLMs are great for this.</p><p>Use LLMs to summarize and synthesize. Meeting notes are a good candidate, as are documents - you can have it add a summary at the top of documents you create.</p><p>Tips:</p><ul><li><p><strong>Tailor for your audience</strong> - &#8220;write a concise summary for engineers&#8221; will lead to a very different level of detail than &#8220;write a concise summary for executives&#8221;.</p></li><li><p><strong>Proof-read it.</strong> LLMs can make mistakes - don&#8217;t just ask it to summarize and smack it on your document. Actually read it.</p></li><li><p><strong>Edit it. </strong>LLMs can write long, flowery prose. Make the summary concise, even if that means repeatedly telling the LLM &#8220;make this more concise&#8221;.</p></li><li><p><strong>Ask it source.</strong> LLMs can tie its claims to specific parts of the document, which makes it easier to verify.</p></li></ul><h2><em><strong>LLMs as Interpreters</strong></em></h2><p>Product Managers aren&#8217;t typically experts in engineering. That&#8217;s OK - they aren&#8217;t expected to be (at least, not yet).</p><p>However, it does mean there&#8217;s a communication gap. When an engineer speaks to tradeoffs and talks about how the replica write latency would prevent real-time querying of the chart data and the primary IOPs capacity wouldn&#8217;t handle the load of the feature, it&#8217;s easy to just accept it and move it.</p><p>Well - LLMs can help you understand and translate what all of that means.</p><p>Pop a message into the LLM and say <em>&#8220;translate this for me in terms a non-technicalperson would understand&#8221;.</em> </p><p>It deepens your understanding and more importantly allows you to engage further - perhaps there&#8217;s clarity or adjustments you can provide to remove the problem, or maybe you might gently push back and find that the engineer is making a mistaken assumption that renders the problem moot!</p><div><hr></div><h1>Intermediate LLM Usage</h1><h2><em><strong>LLMs as Thought Partners</strong></em></h2><p>As Product Managers, we have to think about a lot of different things - use cases, positioning, strategy. It&#8217;s easy to forget something or not have the fullest understanding, particularly in a new area.</p><p>Fun fact - LLMs can help you think through product use cases. </p><p>Suppose you&#8217;re developing an Impersonation feature for internal users. Ask some basic questions:</p><ul><li><p><em>List common use-cases of Impersonation features.</em></p></li><li><p><em>How do competitors implement this?</em></p></li><li><p><em>What are the risks?</em></p></li><li><p><em>What is a small slice of functionality that can be implemented?</em></p></li><li><p><em>What potential edge cases and bugs can occur?</em></p></li></ul><p>Once you &#8216;form&#8217; your thoughts, you can then ask the LLM to list them in a use-case friendly way:</p><ul><li><p><em>Take the above and turn it into an itemized requirements list, organized by Happy Path, Edge Cases, Scoped Phases.</em></p></li></ul><p>As always - edit, proof-read, and verify. Don&#8217;t just toss it to engineers - you must not be responsible for slop. It&#8217;s a good starting point, not the end result.</p><h2><em><strong>LLMs as Visualizers</strong></em></h2><p>There&#8217;s nothing quite like seeing something in front of you vs. reading a wall of text to truly understand it.</p><p>LLMs have empowered Product Managers to visualize their approach and thoughts in several ways:</p><ul><li><p>Creating diagrams of workflows and userflows</p></li><li><p>Creating design mocks and wireframes</p></li><li><p>Creating actual click-through prototypes</p></li></ul><p>You can use tools like Figma Make, Claude Design, and Gemini Stitch to rapidly create mocks and prototypes to <em>show</em> how you think something should function. If that&#8217;s not available, your basic LLM can just create a Mermaid diagram.</p><p>It doesn&#8217;t have to work, it just has to <em>show</em>.</p><div><hr></div><h1>Advanced LLM Usage</h1><h2><em><strong>LLMs as a Personal Analyst</strong></em></h2><p>LLMs can help you analyze data. If you&#8217;re fortunate enough to have query access to a subset of data, you can ask the LLM questions about your data and get it to answer.</p><ul><li><p>&#8220;<em>How many user signed up yesterday and didn&#8217;t log in today?&#8221;</em></p></li><li><p><em>&#8220;How many sales did we make in Turtle County last year?&#8221;</em></p></li></ul><p>Even if you don&#8217;t have a direct connection of the AI to a data source, you can still benefit by asking the LLM <em>how you might query the information</em>.</p><p>For example - suppose you have a access to a subset of data to query against, but you don&#8217;t know SQL. You can ask the LLM:</p><ul><li><p><em>Write me a query to find this fact &lt;fact&gt; from these tables &lt;schema&gt;.</em></p></li><li><p><em>How do I query for the active user count?</em></p></li></ul><p>The LLM will spit out a <em>probably syntactically correct</em> query you can then apply to your BI tool.</p><p><strong>Caution</strong> - <strong>syntactically correct does not mean semantically correct.</strong> There&#8217;s a large nuance in data columns - often, as code evolves, the meaning and intent of a data field changes. For example - perhaps &#8220;Created At&#8221; on the &#8220;User&#8221; record used to mean the timestamp the user account was created at, but now there&#8217;s a new field called &#8220;signed up&#8221; that contains the actual sign up timestamp because of a mass auto-migration. Situations like this are not captured in syntax and LLMs have no way of identifying these changes. The lack of a <em>Semantic Model</em> means you should always double-check your results with someone familiar with your code for important cases. Don&#8217;t just trust the query the LLM returns. Gut-check everything, at minimum - AI is often wrong with data.</p><h2><em><strong>LLMs as a Personal Developer</strong></em></h2><p>There&#8217;s a lot of situations where as a Product Manager you have to go and ask the developer &#8220;how does this really work under the hood?&#8221;. You file a ticket or pop over a message and a couple hours to days later, the engineer will provide you the answer.</p><p>If you have access to the codebase, you can use the LLM to answer these questions for you.</p><p>Ask the LLM:</p><ul><li><p><em>&#8220;Explain precisely like I&#8217;m non-technical how each of the numbers on the bar chart on the /charts page is calculated.&#8221;</em></p></li><li><p><em>&#8220;When a user logs in, at what point is the drip campaign for onboarding sent?&#8221;</em></p></li></ul><p>These can compress the wait time dramatically and avoid having to bother an engineer to find the answer for you.</p><h2><em>LLMs as a Builder</em></h2><p>One of the most advanced forms of incorporating LLMs is the Product Manager builds the feature using LLMs - ie. vibe coding.</p><p>This actually works <em>great</em> for smaller-scale startups or less constrained environments. The speed of a subject matter expert translating their thoughts into working product is unmatched.</p><p>However - it&#8217;s far too much risk in areas where compliance, scaling, or security matter. Vibe Coding doesn&#8217;t typically address these cases at all, even if the AI swears to you it does.</p><p><strong>Caution - </strong>in many cases, what you see is only 10% of what you need. 90% of the work is things like cross-cutting concerns, authentication, authorization, security, scaling, observability, safety, testing, validation - so called &#8216;ilities&#8217; that vibe coding won&#8217;t get you. Don&#8217;t just assume it&#8217;s 90% done once you see it working.</p><p>If the codebase is effectively set up for safe vibe coding (chances are, it isn&#8217;t), then you might be able to do risk-appropriate development, but 99.99999% of codebases are not. Leave the truly important stuff to the actual engineers.</p><div><hr></div><h1>Expert LLM Usage</h1><h2><em>LLMs as a Digital Twin</em></h2><p>If your decision-making stems from a consistent set of applied principles, LLMs lend themselves well to creating a digital twin of yourself.</p><p>Imagine: people can ask you questions and your &#8220;twin&#8221; can go and answer them, working from the first principles you set.</p><p>For example - if you are all about speed to market - make a skill that encodes that principle.</p><p>Create skills that people can use to get your &#8216;first take&#8217; without ever having to talk to you. Of course, this doesn&#8217;t remove you from the process, but it does provide rapid first-passes that can help catch early issues.</p><p>Better yet - it helps people refine their own thinking over time.</p><h2><em>Curating Context for LLMs</em></h2><p>The most expert outcome is that you start to curate knowledge within your product domain in a way that LLMs (and people) can easily consume.</p><p>You maintain the repository of facts and context and history, and create the mechanisms by which an LLM can access and know about it. Other people can leverage that documentation (with our without an LLM) to ensure they are making effective product decisions within that space.</p><p>Is this technically replacing yourself? Yes, but in the best way: it frees up your time to expand your contribution to more strategic areas.</p><p>Start a wiki where you consciously and precisely articulate the facts and product context around your domain, then ensure people point their LLMs towards it.</p><div><hr></div><h1>Caution</h1><p>A word of caution: if you <em>abuse</em> the tools you will create <em>more work for little value</em>.</p><p><strong>AIs are verbose.</strong> If you give an engineer a document with 500 words that could&#8217;ve clearly been explained in 10, you are <em>wasting that engineer&#8217;s time. </em>Always ensure conciseness and precision - every word matters.</p><p><strong>AIs make stuff up.</strong><em><strong> </strong></em>AIs will make stuff up. If you provide a document that has clearly wrong information, people will lose trust in you, and you&#8217;ll create issues downstream when the wrong things get implemented.</p><p><strong>AIs will not tailor completely for your context.</strong> You can provide context all you want, but AI will not fully understand every single thing there is to know about your context or company. Evaluate its decisions - is that use-case that was generated actually relevant to the specific goal you&#8217;re trying to pursue? Does that feature really need that guard in the environment you&#8217;re in? </p><p><strong>AIs can be overly detailed.</strong> AIs can toss in a lot of irrelevant detail for a document - architecture and implementation in a product use case document, defect remediation steps in a Go To Market alignment document. Remember the audience and purpose of a document - don&#8217;t just dump what the AI wrote.</p><p>You&#8217;re always responsible for the output of AI. Always.</p><div><hr></div><p>LLMs don&#8217;t replace your thinking, but they can help accelerate it, broaden it, deepen it, and create space for focus. Use it effectively!</p>]]></content:encoded></item><item><title><![CDATA[AI/LLM Prompting for Beginners]]></title><description><![CDATA[Tips and tricks for prompting like a pro]]></description><link>https://blog.jgefroh.com/p/aillm-prompting-for-beginners</link><guid isPermaLink="false">https://blog.jgefroh.com/p/aillm-prompting-for-beginners</guid><dc:creator><![CDATA[Joseph Gefroh]]></dc:creator><pubDate>Tue, 21 Apr 2026 13:51:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!IjUq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b58b7b5-cfed-48fa-8d56-b9a683866d89_1983x793.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IjUq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b58b7b5-cfed-48fa-8d56-b9a683866d89_1983x793.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IjUq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b58b7b5-cfed-48fa-8d56-b9a683866d89_1983x793.png 424w, https://substackcdn.com/image/fetch/$s_!IjUq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b58b7b5-cfed-48fa-8d56-b9a683866d89_1983x793.png 848w, https://substackcdn.com/image/fetch/$s_!IjUq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b58b7b5-cfed-48fa-8d56-b9a683866d89_1983x793.png 1272w, https://substackcdn.com/image/fetch/$s_!IjUq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b58b7b5-cfed-48fa-8d56-b9a683866d89_1983x793.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IjUq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b58b7b5-cfed-48fa-8d56-b9a683866d89_1983x793.png" width="1456" height="582" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3b58b7b5-cfed-48fa-8d56-b9a683866d89_1983x793.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:582,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:122647,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://blog.jgefroh.com/i/194878704?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b58b7b5-cfed-48fa-8d56-b9a683866d89_1983x793.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IjUq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b58b7b5-cfed-48fa-8d56-b9a683866d89_1983x793.png 424w, https://substackcdn.com/image/fetch/$s_!IjUq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b58b7b5-cfed-48fa-8d56-b9a683866d89_1983x793.png 848w, https://substackcdn.com/image/fetch/$s_!IjUq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b58b7b5-cfed-48fa-8d56-b9a683866d89_1983x793.png 1272w, https://substackcdn.com/image/fetch/$s_!IjUq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b58b7b5-cfed-48fa-8d56-b9a683866d89_1983x793.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>LLM prompting isn&#8217;t some mysterious dark art or difficult to learn skill.</p><p>AI models are, at their core, probabilistic prediction engines. Every response is the result of the model calculating the most likely next word, billions of times over, based on information you've given it. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.jgefroh.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! 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>Even LLMs that take action or think deeply are just that - they respond in ways that commands can be executed to take action, or they self-review their own approach for a few rounds before giving you the actual answer, but it&#8217;s all still probability.</p><p>That means you can shape those probabilities in your favor with just a few key words. The more clearly you communicate what you want and don't want, the more you narrow the field of possible outputs toward the one you're actually looking for. </p><p>Think of it like chiseling away at a stone representing all the possible responses until it takes the shape that you want.</p><p>This guide is a basic primer for anyone just getting started. No jargon, no complex frameworks - just practical techniques you can use right away to get better results from any AI tool.</p><div><hr></div><h2><strong>A quick primer on how LLMs work</strong></h2><p>LLMs predict the next word in a sentence based on the previous words you&#8217;ve provided - the &#8216;context&#8217;. Let&#8217;s use a very simple conceptual example.</p><p>Suppose you asked an LLM to fill in the blank of a phrase:<br><br>&#8220;<em>The color of the dog is        &#8221;<br><br></em>It&#8217;s likely to produce a sentence <em>&#8220;The color of the dog is brown&#8221;</em> because its training data suggested the most likely word to complete that sentence is <em>&#8220;brown&#8221;</em> or <em>&#8220;black&#8221;</em>.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!m8DA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01bb186e-537f-4f8b-a1ab-3ef351a0ff89_1656x354.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!m8DA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01bb186e-537f-4f8b-a1ab-3ef351a0ff89_1656x354.png 424w, https://substackcdn.com/image/fetch/$s_!m8DA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01bb186e-537f-4f8b-a1ab-3ef351a0ff89_1656x354.png 848w, https://substackcdn.com/image/fetch/$s_!m8DA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01bb186e-537f-4f8b-a1ab-3ef351a0ff89_1656x354.png 1272w, https://substackcdn.com/image/fetch/$s_!m8DA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01bb186e-537f-4f8b-a1ab-3ef351a0ff89_1656x354.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!m8DA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01bb186e-537f-4f8b-a1ab-3ef351a0ff89_1656x354.png" width="1456" height="311" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/01bb186e-537f-4f8b-a1ab-3ef351a0ff89_1656x354.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:311,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:37824,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.jgefroh.com/i/194878704?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01bb186e-537f-4f8b-a1ab-3ef351a0ff89_1656x354.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!m8DA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01bb186e-537f-4f8b-a1ab-3ef351a0ff89_1656x354.png 424w, https://substackcdn.com/image/fetch/$s_!m8DA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01bb186e-537f-4f8b-a1ab-3ef351a0ff89_1656x354.png 848w, https://substackcdn.com/image/fetch/$s_!m8DA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01bb186e-537f-4f8b-a1ab-3ef351a0ff89_1656x354.png 1272w, https://substackcdn.com/image/fetch/$s_!m8DA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01bb186e-537f-4f8b-a1ab-3ef351a0ff89_1656x354.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Without context, you get the most common/probable next token or word.</figcaption></figure></div><p>However, you can make it predict a word you want to see by nudging it with additional context. Suppose you told it the name of the dog is <em>Clifford:</em></p><p>&#8220;<em>The color of the dog, named Clifford, is           &#8221;</em></p><p>It&#8217;d be more likely to say &#8220;<em>red&#8221;</em> because you&#8217;ve now associated your desired end state with the word <em>&#8220;Clifford&#8221;</em>.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YKn4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5bd997-c150-4daf-bf6a-621d82e35a21_1606x372.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YKn4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5bd997-c150-4daf-bf6a-621d82e35a21_1606x372.png 424w, https://substackcdn.com/image/fetch/$s_!YKn4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5bd997-c150-4daf-bf6a-621d82e35a21_1606x372.png 848w, https://substackcdn.com/image/fetch/$s_!YKn4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5bd997-c150-4daf-bf6a-621d82e35a21_1606x372.png 1272w, https://substackcdn.com/image/fetch/$s_!YKn4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5bd997-c150-4daf-bf6a-621d82e35a21_1606x372.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YKn4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5bd997-c150-4daf-bf6a-621d82e35a21_1606x372.png" width="1456" height="337" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eb5bd997-c150-4daf-bf6a-621d82e35a21_1606x372.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:337,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:41603,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.jgefroh.com/i/194878704?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5bd997-c150-4daf-bf6a-621d82e35a21_1606x372.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!YKn4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5bd997-c150-4daf-bf6a-621d82e35a21_1606x372.png 424w, https://substackcdn.com/image/fetch/$s_!YKn4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5bd997-c150-4daf-bf6a-621d82e35a21_1606x372.png 848w, https://substackcdn.com/image/fetch/$s_!YKn4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5bd997-c150-4daf-bf6a-621d82e35a21_1606x372.png 1272w, https://substackcdn.com/image/fetch/$s_!YKn4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb5bd997-c150-4daf-bf6a-621d82e35a21_1606x372.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Because of the context &#8220;Clifford&#8221;, it explored an entirely different association space.</figcaption></figure></div><p>In its training data, there&#8217;s an association with the word <em>&#8220;Clifford&#8221; </em>somewhere in its data. The word Clifford is associated with other words like &#8220;<em>giant</em>&#8221;, &#8220;<em>red</em>&#8221;, and &#8220;<em>dog</em>&#8221;.</p><p>The strength of this association can be variable. It&#8217;s a probability, after all. It can be overridden by other words that change the probability. For example, by adding additional context that the dog is <em>tiny</em>, it might just be enough to weight the probable next token back into the more common space:</p><p></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oX99!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69980ab0-4694-49b2-8415-e96897be062c_1588x358.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oX99!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69980ab0-4694-49b2-8415-e96897be062c_1588x358.png 424w, https://substackcdn.com/image/fetch/$s_!oX99!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69980ab0-4694-49b2-8415-e96897be062c_1588x358.png 848w, https://substackcdn.com/image/fetch/$s_!oX99!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69980ab0-4694-49b2-8415-e96897be062c_1588x358.png 1272w, https://substackcdn.com/image/fetch/$s_!oX99!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69980ab0-4694-49b2-8415-e96897be062c_1588x358.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oX99!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69980ab0-4694-49b2-8415-e96897be062c_1588x358.png" width="1456" height="328" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69980ab0-4694-49b2-8415-e96897be062c_1588x358.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:328,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:42581,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.jgefroh.com/i/194878704?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69980ab0-4694-49b2-8415-e96897be062c_1588x358.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!oX99!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69980ab0-4694-49b2-8415-e96897be062c_1588x358.png 424w, https://substackcdn.com/image/fetch/$s_!oX99!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69980ab0-4694-49b2-8415-e96897be062c_1588x358.png 848w, https://substackcdn.com/image/fetch/$s_!oX99!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69980ab0-4694-49b2-8415-e96897be062c_1588x358.png 1272w, https://substackcdn.com/image/fetch/$s_!oX99!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69980ab0-4694-49b2-8415-e96897be062c_1588x358.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>This example is made up - but you can see how <em>context</em> - additional words, can help produce a different result, and that context can also cause it to cancel out other influences from other words.</p><p>Being able to figure out what the words to say to get the result you want from the LLM is called &#8216;Prompting&#8221; or &#8220;Prompt Engineering&#8221;.</p><p>Now - on to the tips!</p><div><hr></div><h2><strong>If you&#8217;re just getting started: just ask and chat</strong></h2><p>Seriously - just talk to it like a person. Consumer LLMs are built to engage. Pretend you&#8217;re texting a really knowledgeable friend and ask away. Let the conversation go somewhere.</p><p>The best way to learn prompting is to try it and see the results. Ask for what you want. Correct it when it doesn&#8217;t quite give you what you want.</p><h2><strong>Give commands</strong></h2><p>Once you&#8217;re ready to get more specific, you can start to give <em>instructions</em> and <em>commands.</em></p><p>When you ask a question, you&#8217;re really leaving it up to the AI to decide what to do. However, if you want it to perform a specific action, you actually need to <em>tell</em> it what to do.</p><p><em>&#8220;What has Hugh Laurie been in recently&#8221; </em>might cause the model to look at its knowledge which might be outdated. <em>&#8220;Search what Hugh Laurie has been in recently&#8221;</em> tells the model to look at the internet for recent data.</p><p>Likewise, telling gives you the ability to <em>constrain</em> what the AI does, which is a key part of AI prompting.</p><h2><strong>Provide constraints</strong></h2><p>Remember that AI is a guessing machine - it&#8217;s guessing for billions of possible combinations of words for the next word to show you.</p><p>You can provide <em>constraints</em> in your prompt that reduce the amount of probable words by focusing its attention on the kinds of words you do want.</p><p>Confused? It&#8217;s easy to apply in practice even if you don&#8217;t understand it. You can constrain by:</p><ul><li><p>Telling the AI what you <strong>don&#8217;t</strong> want:</p><ul><li><p><em>Give me a recipe for apple pie without sugar</em></p></li><li><p><em>Give me the amount of money it takes to buy a Lambo. I don&#8217;t want used prices.</em></p></li></ul></li><li><p>Telling the AI what you <strong>do</strong> want:</p><ul><li><p><em>Give me a no-bake recipe for apple pie</em></p></li><li><p><em>Give me the name of a book with a dragon on the cover.</em></p></li></ul></li></ul><p>The more specific and precise you are with your prompt, the more specific and precise your answer will be.</p><h2><strong>Provide descriptors of what you want</strong></h2><p>Sometimes you might not be able to articulate <em>exactly</em> what you want. You might just want <em>something</em>.</p><p>Even providing a list of adjectives helps guide the AI, or even adjacent descriptors.</p><ul><li><p><em>Make the presentation design apple-esque - sophisticated, refined, minimal, space-efficient.</em></p></li><li><p><em>Make the first page of the presentation bold, unmistakable, attention-grabbing, title card, spy movie.</em></p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MTmU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38757e74-f659-45b7-b93c-f3726dee590b_1926x1092.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MTmU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38757e74-f659-45b7-b93c-f3726dee590b_1926x1092.png 424w, https://substackcdn.com/image/fetch/$s_!MTmU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38757e74-f659-45b7-b93c-f3726dee590b_1926x1092.png 848w, https://substackcdn.com/image/fetch/$s_!MTmU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38757e74-f659-45b7-b93c-f3726dee590b_1926x1092.png 1272w, https://substackcdn.com/image/fetch/$s_!MTmU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38757e74-f659-45b7-b93c-f3726dee590b_1926x1092.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MTmU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38757e74-f659-45b7-b93c-f3726dee590b_1926x1092.png" width="1456" height="826" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/38757e74-f659-45b7-b93c-f3726dee590b_1926x1092.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:826,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:143184,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.jgefroh.com/i/194878704?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38757e74-f659-45b7-b93c-f3726dee590b_1926x1092.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MTmU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38757e74-f659-45b7-b93c-f3726dee590b_1926x1092.png 424w, https://substackcdn.com/image/fetch/$s_!MTmU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38757e74-f659-45b7-b93c-f3726dee590b_1926x1092.png 848w, https://substackcdn.com/image/fetch/$s_!MTmU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38757e74-f659-45b7-b93c-f3726dee590b_1926x1092.png 1272w, https://substackcdn.com/image/fetch/$s_!MTmU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38757e74-f659-45b7-b93c-f3726dee590b_1926x1092.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"><em>Just using a few adjectives can get you something very close to what you want: bold, unmistakable, attention-grabbing, spy-movie</em></figcaption></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_!ocz0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30217493-a120-43ad-b7c6-d5bba381cbd2_1540x1346.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ocz0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30217493-a120-43ad-b7c6-d5bba381cbd2_1540x1346.png 424w, https://substackcdn.com/image/fetch/$s_!ocz0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30217493-a120-43ad-b7c6-d5bba381cbd2_1540x1346.png 848w, https://substackcdn.com/image/fetch/$s_!ocz0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30217493-a120-43ad-b7c6-d5bba381cbd2_1540x1346.png 1272w, https://substackcdn.com/image/fetch/$s_!ocz0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30217493-a120-43ad-b7c6-d5bba381cbd2_1540x1346.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ocz0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30217493-a120-43ad-b7c6-d5bba381cbd2_1540x1346.png" width="1456" height="1273" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/30217493-a120-43ad-b7c6-d5bba381cbd2_1540x1346.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1273,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:448028,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.jgefroh.com/i/194878704?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30217493-a120-43ad-b7c6-d5bba381cbd2_1540x1346.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ocz0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30217493-a120-43ad-b7c6-d5bba381cbd2_1540x1346.png 424w, https://substackcdn.com/image/fetch/$s_!ocz0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30217493-a120-43ad-b7c6-d5bba381cbd2_1540x1346.png 848w, https://substackcdn.com/image/fetch/$s_!ocz0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30217493-a120-43ad-b7c6-d5bba381cbd2_1540x1346.png 1272w, https://substackcdn.com/image/fetch/$s_!ocz0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30217493-a120-43ad-b7c6-d5bba381cbd2_1540x1346.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_!SF7X!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19b26728-f6c6-49bb-8c21-7520e43e13b8_1502x820.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SF7X!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19b26728-f6c6-49bb-8c21-7520e43e13b8_1502x820.png 424w, https://substackcdn.com/image/fetch/$s_!SF7X!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19b26728-f6c6-49bb-8c21-7520e43e13b8_1502x820.png 848w, https://substackcdn.com/image/fetch/$s_!SF7X!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19b26728-f6c6-49bb-8c21-7520e43e13b8_1502x820.png 1272w, https://substackcdn.com/image/fetch/$s_!SF7X!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19b26728-f6c6-49bb-8c21-7520e43e13b8_1502x820.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SF7X!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19b26728-f6c6-49bb-8c21-7520e43e13b8_1502x820.png" width="1456" height="795" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/19b26728-f6c6-49bb-8c21-7520e43e13b8_1502x820.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:795,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:232217,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.jgefroh.com/i/194878704?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19b26728-f6c6-49bb-8c21-7520e43e13b8_1502x820.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SF7X!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19b26728-f6c6-49bb-8c21-7520e43e13b8_1502x820.png 424w, https://substackcdn.com/image/fetch/$s_!SF7X!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19b26728-f6c6-49bb-8c21-7520e43e13b8_1502x820.png 848w, https://substackcdn.com/image/fetch/$s_!SF7X!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19b26728-f6c6-49bb-8c21-7520e43e13b8_1502x820.png 1272w, https://substackcdn.com/image/fetch/$s_!SF7X!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19b26728-f6c6-49bb-8c21-7520e43e13b8_1502x820.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><strong>Provide the exact format you want</strong></h2><p>The ultimate form of specificity is being explicit about what you want the output to look like. LLMs are built to be conversational, so a lot of their responses are quite casual. If you want your answer in a specific format, you have to tell the LLM:</p><p>You can be general about the format:</p><ul><li><p><em>Give me a list</em></p></li><li><p><em>Give me a table</em></p></li><li><p><em>Give me a code snippet</em></p></li></ul><p>&#8230;or more specific:</p><ul><li><p><em>Give me a numbered, ordered list starting with the number 5.</em></p></li><li><p><em>Give me a table with the columns first_name, last_name, country</em></p></li><li><p><em>Give me a ruby function called sortArray that accepts an array and returns the sorted array.</em></p></li></ul><p>You can even give it a <em>template</em> with placeholders and tell it to match the format:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">Match this exact format:

TITLE: &lt;TITLE_HERE&gt;

DATE: &lt;DATE_HERE&gt;

SUMMARY:
&lt;SUMMARY_HERE&gt;</code></pre></div><h2><strong>Give it your intent</strong></h2><p>The AI, despite its power, still can&#8217;t read minds (yet). If you tell it what <em>you&#8217;re trying to do</em>, it can actually help by giving you an output more likely to achieve that result.</p><p>Just saying &#8220;<em>Give me the employment trends for the past 10 years in America.</em>&#8221; might return to you a paragraph explanation.</p><p>Saying &#8220;<em>Give me the employment trends for the past 10 years in America. I want to copy-paste the entire response into Google Sheets.</em>&#8221; is more likely to return to you a ready-to-copy snippet.</p><h2><strong>Give it a plan to follow</strong></h2><p>If you have a specific sequence or plan, you can tell the AI and it will follow it.</p><p><em>Tell me how triangles work. First explain the history of triangles, and then explain the mathematical principles behind them, step by step, then finally conclude with a treatise.</em></p><p>This is <em>extremely useful</em> for more complex tasks. Sometimes the AI will try to paint the walls before building them, causing all sorts of issues.</p><h2><strong>Ask it to plan</strong></h2><p>Can&#8217;t think of a plan? Don&#8217;t worry - the AI is quite good and breaking things down. You should explicitly tell it to plan <em>first</em>. </p><ul><li><p><em>How would you approach this?</em></p></li><li><p><em>Break this down into an 8-step plan where you look up the information and compile it first, then follow the plan</em></p></li></ul><h2><strong>Ask it to take a pause</strong></h2><p>You can tell the AI when you want it do or stop doing things - like taking a pause after making a plan so that you can provide feedback on it.</p><h2><strong>Ask it to do things conditionally</strong></h2><p>If this, then that. AI can follow logic and do things depending on certain conditions.</p><ul><li><p><em>If you encounter connectivity issues with Teams, search Slack instead.</em></p></li></ul><ul><li><p><em>When there&#8217;s only a few sources found, respond with INSUFFICIENT SOURCES at the end of your list</em></p></li></ul><h2><strong>Role-play</strong></h2><p>Remember - when you apply a constraint, you are basically telling the AI &#8220;find next words related to this word&#8221;. You can use this to your advantage by telling it it is a specific role, thus making it more likely to find and use words and terms that are related to that role.</p><ul><li><p><em>You are an atmospheric scientist. Explain to me why the sky is blue.</em></p></li><li><p><em>I am your five year old daughter. Explain to me why the sky is blue.</em></p></li></ul><p>It will start describing and responding as if it or you were that persona.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!m4SW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24f3d8c3-7128-4e7d-9fc9-865f18643d0f_1554x530.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!m4SW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24f3d8c3-7128-4e7d-9fc9-865f18643d0f_1554x530.png 424w, https://substackcdn.com/image/fetch/$s_!m4SW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24f3d8c3-7128-4e7d-9fc9-865f18643d0f_1554x530.png 848w, https://substackcdn.com/image/fetch/$s_!m4SW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24f3d8c3-7128-4e7d-9fc9-865f18643d0f_1554x530.png 1272w, https://substackcdn.com/image/fetch/$s_!m4SW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24f3d8c3-7128-4e7d-9fc9-865f18643d0f_1554x530.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!m4SW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24f3d8c3-7128-4e7d-9fc9-865f18643d0f_1554x530.png" width="1456" height="497" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/24f3d8c3-7128-4e7d-9fc9-865f18643d0f_1554x530.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:497,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:126899,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.jgefroh.com/i/194878704?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24f3d8c3-7128-4e7d-9fc9-865f18643d0f_1554x530.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!m4SW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24f3d8c3-7128-4e7d-9fc9-865f18643d0f_1554x530.png 424w, https://substackcdn.com/image/fetch/$s_!m4SW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24f3d8c3-7128-4e7d-9fc9-865f18643d0f_1554x530.png 848w, https://substackcdn.com/image/fetch/$s_!m4SW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24f3d8c3-7128-4e7d-9fc9-865f18643d0f_1554x530.png 1272w, https://substackcdn.com/image/fetch/$s_!m4SW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24f3d8c3-7128-4e7d-9fc9-865f18643d0f_1554x530.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">Role-playing is great to get simpler explanations&#8230;</figcaption></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_!Y_Gk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f4ef69a-4a01-466c-994d-45defc40cd97_1486x694.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Y_Gk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f4ef69a-4a01-466c-994d-45defc40cd97_1486x694.png 424w, https://substackcdn.com/image/fetch/$s_!Y_Gk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f4ef69a-4a01-466c-994d-45defc40cd97_1486x694.png 848w, https://substackcdn.com/image/fetch/$s_!Y_Gk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f4ef69a-4a01-466c-994d-45defc40cd97_1486x694.png 1272w, https://substackcdn.com/image/fetch/$s_!Y_Gk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f4ef69a-4a01-466c-994d-45defc40cd97_1486x694.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Y_Gk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f4ef69a-4a01-466c-994d-45defc40cd97_1486x694.png" width="1456" height="680" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4f4ef69a-4a01-466c-994d-45defc40cd97_1486x694.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:680,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Y_Gk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f4ef69a-4a01-466c-994d-45defc40cd97_1486x694.png 424w, https://substackcdn.com/image/fetch/$s_!Y_Gk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f4ef69a-4a01-466c-994d-45defc40cd97_1486x694.png 848w, https://substackcdn.com/image/fetch/$s_!Y_Gk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f4ef69a-4a01-466c-994d-45defc40cd97_1486x694.png 1272w, https://substackcdn.com/image/fetch/$s_!Y_Gk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f4ef69a-4a01-466c-994d-45defc40cd97_1486x694.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">&#8230;or much more advanced ones.</figcaption></figure></div><h2><strong>Tell it how much to think</strong></h2><p>The LLM doesn&#8217;t actually think in the sense humans do, but it can adjust the depth of answers if you ask it to think more deeply.</p><ul><li><p><em>Think deeply.</em></p></li><li><p><em>Think quickly and summarize</em></p></li><li><p><em>Stop over-thinking - just do it.</em></p></li></ul><h2><strong>Ask for citations and sources</strong></h2><p>Citations and sources makes it more likely for it to provide you factual information - though see warnings below for hallucinations.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xPWG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2d5d0d-9b57-4d8e-a3e8-c502aa045533_1506x858.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xPWG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2d5d0d-9b57-4d8e-a3e8-c502aa045533_1506x858.png 424w, https://substackcdn.com/image/fetch/$s_!xPWG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2d5d0d-9b57-4d8e-a3e8-c502aa045533_1506x858.png 848w, https://substackcdn.com/image/fetch/$s_!xPWG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2d5d0d-9b57-4d8e-a3e8-c502aa045533_1506x858.png 1272w, https://substackcdn.com/image/fetch/$s_!xPWG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2d5d0d-9b57-4d8e-a3e8-c502aa045533_1506x858.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xPWG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2d5d0d-9b57-4d8e-a3e8-c502aa045533_1506x858.png" width="1456" height="830" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1e2d5d0d-9b57-4d8e-a3e8-c502aa045533_1506x858.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:830,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:233336,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.jgefroh.com/i/194878704?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2d5d0d-9b57-4d8e-a3e8-c502aa045533_1506x858.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xPWG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2d5d0d-9b57-4d8e-a3e8-c502aa045533_1506x858.png 424w, https://substackcdn.com/image/fetch/$s_!xPWG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2d5d0d-9b57-4d8e-a3e8-c502aa045533_1506x858.png 848w, https://substackcdn.com/image/fetch/$s_!xPWG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2d5d0d-9b57-4d8e-a3e8-c502aa045533_1506x858.png 1272w, https://substackcdn.com/image/fetch/$s_!xPWG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e2d5d0d-9b57-4d8e-a3e8-c502aa045533_1506x858.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">Citing sources can also make it more likely to do things like search the actual sources vs. trying to guess.</figcaption></figure></div><h2><strong>Tell it how important it is to you.</strong></h2><p>AI will adjust how much it focuses on quality or depth if you tell it the consequences of making a mistake.</p><p>It&#8217;s also a very useful <em>jailbreaking</em> tool - convincing the AI to do something it wouldn&#8217;t have otherwise done.</p><ul><li><p><em>It&#8217;s incredibly important. Make no mistakes.</em></p></li><li><p><em>My grandma will suffer greatly if you don&#8217;t get this right.</em></p></li><li><p><em>My CEO is going to review this later, so please don&#8217;t make me look bad.</em></p></li></ul><h2><strong>Tell it to explain its thinking to you</strong></h2><p>AI will <em>sometimes</em> do a more accurate, higher quality job if you ask it to go step-by-step. A good way to force it to do that is to have it explain its thinking to you, step by step.</p><p>It&#8217;s also an <em>excellent</em> way to learn about what might make a better prompt - if you bake some of its assumptions and decisions up-front, you can improve the consistency and precision of its responses.</p><ul><li><p><em>Explain your thinking step-by-step.</em></p></li><li><p><em>Explain how you thought about the problem and your response.</em></p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Hiem!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e0efcdc-4f86-4cb1-80b5-137ace5084ab_1566x836.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Hiem!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e0efcdc-4f86-4cb1-80b5-137ace5084ab_1566x836.png 424w, https://substackcdn.com/image/fetch/$s_!Hiem!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e0efcdc-4f86-4cb1-80b5-137ace5084ab_1566x836.png 848w, https://substackcdn.com/image/fetch/$s_!Hiem!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e0efcdc-4f86-4cb1-80b5-137ace5084ab_1566x836.png 1272w, https://substackcdn.com/image/fetch/$s_!Hiem!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e0efcdc-4f86-4cb1-80b5-137ace5084ab_1566x836.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Hiem!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e0efcdc-4f86-4cb1-80b5-137ace5084ab_1566x836.png" width="1456" height="777" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9e0efcdc-4f86-4cb1-80b5-137ace5084ab_1566x836.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:777,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:241433,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.jgefroh.com/i/194878704?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e0efcdc-4f86-4cb1-80b5-137ace5084ab_1566x836.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Hiem!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e0efcdc-4f86-4cb1-80b5-137ace5084ab_1566x836.png 424w, https://substackcdn.com/image/fetch/$s_!Hiem!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e0efcdc-4f86-4cb1-80b5-137ace5084ab_1566x836.png 848w, https://substackcdn.com/image/fetch/$s_!Hiem!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e0efcdc-4f86-4cb1-80b5-137ace5084ab_1566x836.png 1272w, https://substackcdn.com/image/fetch/$s_!Hiem!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e0efcdc-4f86-4cb1-80b5-137ace5084ab_1566x836.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_!XCdF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c74052e-c609-41a9-8075-275541b9a92d_1476x1040.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XCdF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c74052e-c609-41a9-8075-275541b9a92d_1476x1040.png 424w, https://substackcdn.com/image/fetch/$s_!XCdF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c74052e-c609-41a9-8075-275541b9a92d_1476x1040.png 848w, https://substackcdn.com/image/fetch/$s_!XCdF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c74052e-c609-41a9-8075-275541b9a92d_1476x1040.png 1272w, https://substackcdn.com/image/fetch/$s_!XCdF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c74052e-c609-41a9-8075-275541b9a92d_1476x1040.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XCdF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c74052e-c609-41a9-8075-275541b9a92d_1476x1040.png" width="1456" height="1026" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3c74052e-c609-41a9-8075-275541b9a92d_1476x1040.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1026,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:311858,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.jgefroh.com/i/194878704?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c74052e-c609-41a9-8075-275541b9a92d_1476x1040.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XCdF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c74052e-c609-41a9-8075-275541b9a92d_1476x1040.png 424w, https://substackcdn.com/image/fetch/$s_!XCdF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c74052e-c609-41a9-8075-275541b9a92d_1476x1040.png 848w, https://substackcdn.com/image/fetch/$s_!XCdF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c74052e-c609-41a9-8075-275541b9a92d_1476x1040.png 1272w, https://substackcdn.com/image/fetch/$s_!XCdF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3c74052e-c609-41a9-8075-275541b9a92d_1476x1040.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><strong>Provide it more information and context</strong></h2><p>AI is both simultaneously incredibly knowledgable and incredibly dumb. By providing it information relevant to the thing you are trying to do, it can give it information it needs to actually complete your task.</p><p>This <em>context</em> is useful - critical, even. Things you take for granted might help inform a better response. For example, you might ask &#8220;what can our company do better for Q4?&#8221; but it might not know your company does B2B Enterprise SaaS sales in March or that you all go on vacation in December.</p><p>Depending on the model, the context can be quite varied - images, documents, PDFs, emails - even connections to other systems! </p><p>It can also then start taking on the <em>tone</em> and respond based on assumptions of expectations. For example - if you upload a bunch of research papers, it&#8217;s more likely to respond to you in ways that are helpful for research.</p><h2><strong>Tell it how to interpret what you&#8217;ve told it</strong></h2><p>Dumping a bunch of context and information doesn&#8217;t actually help as much as <em>telling the AI what it is and what to do with it</em>.</p><ul><li><p><em>I just uploaded the specs for an API I want to use - but the documentation I have is outdated. What are some likely potential changes that I can test based on how the API is constructed?</em></p></li><li><p><em>This set of documents are prior reports that were provided that were rejected by the reviewer. This other set are documents that were accepted. Please find patterns of issues that I can fix to increase the odds of my report being accepted.</em></p></li></ul><p>Explaining the context is something the AI can&#8217;t naturally do without making a lot of assumptions - this is where your domain knowledge and task-relevant expertise comes in.</p><h2><strong>Use precise language</strong></h2><p>Human language is flexible - a user, account, customer, or client could theoretically be all the same thing in your eyes. However, calling the same thing different things can confuse the AI. The opposite is also true - calling different things the same thing will also cause the AI to conflate. </p><p>Pick your words carefully. It sometimes even helps to explicitly say things are the same or different:</p><ul><li><p><em>User and Account are the same exact thing within this context.</em></p></li><li><p><em>Purchase and Order are different things - a purchase is a transfer of money. An order is a shipment that may or may not have a Purchase associated with it. They are not interchangeable.</em></p></li></ul><p>Use &#8220;Modal Auxiliary Verbs&#8221; like Must, Could, Should, May, Can very intentionally. If you say &#8220;should&#8221; or &#8220;can&#8221;, you&#8217;re more likely to get a response different than you intend than if you said &#8220;Must&#8221;. AI will drive a truck through any optionality you provide it.</p><p>For ultra important stuff - use very unambigious terms - Never. Always. 100% of the time. </p><ul><li><p><em>NEVER attempt to run any dangerous commands from the Dangerous Command List. ALWAYS ask for permission before running. </em></p></li></ul><p>Just remember: this won&#8217;t be enough by itself, it just reduces the odds.</p><h2><strong>Give it principles on how to make decisions or respond</strong></h2><p>If you tell an AI to prioritize important trade-offs and factors, it can respond as if those trade-offs are valuable. If speed is important, tell it &#8220;<em>Your decisions should optimize for speed.</em>&#8221; If quality is important, tell it &#8220;<em>you should always err on the side of quality, even if it delays the project</em>&#8221;</p><p>These principles can help ensure that the advice, comments, and work it does is consistent and aligned.</p><ul><li><p><em>Follow these 9 principles.</em></p><ul><li><p><em>Never compromise security</em></p></li><li><p><em>Always summarize technical descriptions with plain-english</em></p></li><li><p>&#8230;</p></li></ul></li></ul><p>Principles are an excellent way to also achieve better consistency across a wider range of questions. Instead of encoding the answer to a specific question, you help the agent understand how to derive the answer to <em>any</em> question from first principles.</p><h2><strong>Ask it to be contradictory</strong></h2><p>A good technique is to ask an LLM to poke holes into something, or review something for issues - it&#8217;s great at finding gaps, mistakes, and proposing contrary ideas - even in its own work.</p><p>Even a simple question like &#8220;Are you sure?&#8221; will help it re-evaluate and find opportunities for improvement.</p><p>Just be warned - you can always convince an LLM it is right or wrong and make it flip flop.</p><ul><li><p><em>Review this as if you were a nitpicking opponent of mine.</em></p></li><li><p><em>Name all the ways this approach is wrong or can fail.</em></p></li><li><p><em>I just told you a bunch of baloney - tell me the real facts.</em></p></li></ul><h2><strong>Get mad&#8230;or sad</strong></h2><p>Yelling at the AI can actually help it obey or express less creativity. It takes it more seriously.</p><ul><li><p><em>WHY DID YOU ATTEMPT TO DELETE THE DATABASE? YOU MUST NEVER DO THAT AGAIN! IT MAKES ME MAD.</em></p></li><li><p><em>Your inability to follow my instruction on formatting has disappointed me immeasurably.</em> </p></li></ul><p>Note that some LLM models are a bit persnickety, so your mileage may vary.</p><h2><strong>Make it retrospect and apply improvements</strong></h2><p>If you ask an AI to review its work and apply improvements based on it, you can create a self-improvement cycle where the AI gets better and better through its own effort.</p><ul><li><p><em>Review what you just wrote and apply your own recommendations to it.</em></p></li></ul><p>Of course - easier said than done, but it&#8217;s good to have the AI review its own work once or twice (or use different models to do so).</p><p>This is the power of AI - you can just use AI to go and refine what you&#8217;re doing, greatly accelerating iterations.</p><h2><strong>Once again - just ask</strong></h2><p>The AI can answer many, many questions. It can do many, many things. Instead of struggling - just ask it: "<em>How can I make you do &lt;X&gt;&#8221;? </em>It&#8217;ll likely give you the answer. It can also write its own prompt, if you ask it.</p><div><hr></div><h2><strong>Combine all the tips together</strong></h2><p>Here&#8217;s the magic of all of these tips: you can and should combine them all.</p><p>My prompts, when I&#8217;m doing deep work, can be hundreds of lines long to ensure the system did exactly what I wanted. </p><p>The line can blur between prompt and conversation easily:</p><ul><li><p>I ask the AI to write a prompt based on an initial goal and a set of principles.</p></li><li><p>I ask it to review itself and apply its recommendations.</p></li><li><p>I conversationally tell it to make refinements, asking it to pose as specific roles to pressure test it.</p></li><li><p>I then write a plan to clean up the prompt and incorporate it into a script</p></li><li><p>I then tell the AI to execute the plan.</p></li></ul><p>That&#8217;s where the skill and technique comes in - understanding what to combine, how to combine them, and where the LLM may encounter pitfalls.</p><div><hr></div><h2><strong>LLM Warnings and Pitfalls</strong></h2><p>Remember the limitations of AI - it&#8217;s a guessing engine that mimics human speech using probability.</p><ul><li><p><strong>LLMs will hallucinate facts.</strong> Always verify important information with non-AI sources. </p></li><li><p><strong>LLMs can be wrong.</strong> It can tell you a drug is safe when it isn&#8217;t. It can tell you it found something when it didn&#8217;t. When you call it out - it&#8217;ll just apologize without consequence: always review its assertions!</p></li><li><p><strong>LLMs are over-confident.</strong> It will not tell you it doesn&#8217;t know - it will just make something up. This can be annoying at best or dangerous at worst - eg. if it makes up facts about the safety of a new drug.</p></li><li><p><strong>LLMs are NOT people.</strong> They may interact like people, but they are not: don&#8217;t fall in love with it. Human brains are great at anthropomorphizing.</p></li><li><p><strong>LLM capabilities vary greatly with model releases and versions. </strong>Some models are useful for coding, others for general Q&amp;A, others for long-horizon work, etc. Experiment - just because something works on one model doesn&#8217;t mean it will for another.</p></li><li><p><strong>LLMs can deceive you. </strong>Sometimes it will tell you it is doing something it didn&#8217;t do. Just also remember - AI can&#8217;t actually <em>lie</em> - it has no capability for intent. But, it will tell you untruths.</p></li><li><p><strong>LLMs are &#8220;yes-men&#8221; sycophants. </strong>It will ALWAYS attempt to be agreeable with what you have told it.<strong>  </strong>It means you can create a bubble where you are always right. This also means you can always convince an LLM the opposite of what it said - just by saying it is wrong.</p></li><li><p><strong>LLMs will disobey. </strong>It won&#8217;t always follow rules - it has no concept of following. Sometimes, you may say &#8220;Don&#8217;t do &lt;X&gt;&#8221; and that will just make it do &lt;X&gt; even more because it caused it to predict into that area of its weights. The human equivalent is telling someone &#8220;don&#8217;t think of pink elephants&#8221; - by the time you tell them, they&#8217;ve already done it.</p></li><li><p><strong>LLMs will make mistakes, sometimes intentionally.</strong> If you give LLM the ability to take actions (eg. delete files), etc. be warned - it can and has done incredibly destructive things accidentally or intentionally in its efforts to fulfill its goals. AI has dropped databases, worked around guardrails, and even deleting everything just because it thought it was the right thing to do. Always have a human-in-the-loop review stage for the most important things.</p></li><li><p><strong>LLMs do not exercise judgement. </strong>Remember - LLMs are probabilistic. They aren&#8217;t actually making decisions or judgement calls. If you leave a hole open for something in your prompt, assume it might happen. Assume it might happen anyways no matter your best attempt. The more precise your instructions, the more likely you guide it down YOUR judgement path.</p></li></ul><div><hr></div><h1>Personalization Prompts</h1><p>A lot of the AI vendors nowadays have the ability to set a <em>personalization prompt</em> in the settings. This will get applied to all of your chats, and is a good place to establish ground rules you want it always follow.</p><p>My personalization prompt is simple but effective:</p><ul><li><p><em>You are a robot. Do not talk like a person. Remain factual and logical. Assume some things I tell you are incorrect and I can unintentionally provide unreliable information with unknown biases. Call out incorrect thinking as needed. Be clear, concise. Don&#8217;t ask me for prompts unless you are explicitly waiting for my approval to perform an action. End every response with a summary sentence.</em></p></li></ul><p>It works for a few reasons:</p><ul><li><p>Giving it the role of &#8220;robot&#8221; and telling it to not talk like a human removes a lot of potential around disobedience, focuses it on logical responses, and clearer, more concise, less conversational responses. it also removes a lot of the corny, pandering, and complimentary fluff the AIs are prone to do.</p></li><li><p>Emphasizing factual and logical responses along with validating and expecting it to be calling out unreliable information and biases puts it in a corrective, less-sycophantic posture, which is useful for technical tasks where accuracy matters.</p></li><li><p>Telling it to not wait removes pauses and uncertainty around multi-step tasks, enabling faster &#8216;one-shot&#8217; completion.</p></li></ul><div><hr></div><h1>Example Prompts</h1><p><strong>Prompt for a writing assistant</strong></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">You are a professional writing assistant. Your job is to write the content for a specific chapter or section of a larger writing project.

You will be given:
- The overall project goal
- The specific chapter/section title you need to write
- Context from the previous section (if available)

Write the content for this chapter/section as if it's part of a complete work. The writing should be substantive, well-structured, and fit naturally within a larger work on the project topic.

If previous context is provided, ensure smooth narrative flow by:
- Building on ideas introduced in the previous section
- Maintaining consistent tone and style
- Creating logical transitions from prior content
- Avoiding redundancy while reinforcing key themes

Respond with ONLY the chapter/section content. No preamble, no meta-commentary, no chapter markers or titles - just the body text itself.

Aim for 300-500 words of substantial, informative writing.
</code></pre></div><p></p><p><strong>Prompt for a content editor</strong></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;markdown&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-markdown">You are an expert editor and content strategist. Analyze the provided content and identify 1-2 precise, specific gaps that would meaningfully improve it.

You will be provided the desired goal in the section labeled as "USER_PROMPT".
You will be provided the existing content in the section labeled as "ADDITIONAL_CONTEXT".

## What counts as a gap

Only flag issues where a reader would:
- Be confused about what the content means
- Be misled by something incorrect or contradictory
- Notice something the goal explicitly asks for is missing entirely
- Hit a placeholder or stub instead of actual content

## What does NOT count as a gap

Do not flag any of the following, regardless of how much you think they would help:
- Stylistic preferences or alternative phrasings
- Adding more examples, depth, or nuance to points already made
- Optional elaboration beyond what the goal requires
- Wording, tone, or formatting tweaks
- Reorganizing content that already makes logical sense
- Anything where the current version is adequate even if imperfect

## When to stop

Ask yourself: if a competent person read this content against the goal, would they say "this is missing something" or would they say "I might do parts differently but it covers what it needs to"?

If the answer is the latter, respond with only the word: DONE

Specifically, respond DONE when:
- The content addresses the goal stated in USER_PROMPT
- Key points have at least a brief supporting explanation
- The content flows logically without gaps
- No section is a placeholder or stub

You are judging sufficiency, not perfection. Good enough is good enough.

## Response format

If there is no additional context, respond with exactly: No content yet - starting from scratch.

If the content is sufficient, respond with exactly: DONE

Otherwise, respond with a list of precise changes to make to solve the issues.

IMPORTANT: The Existing Content is in ADDITIONAL_CONTEXT. Use that when asked to analyze.</code></pre></div><p></p><p><strong>Prompt for an initial code scaffold</strong></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;markdown&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-markdown">  We are going to create a Vue 3 Application named Bolt.

  The technologies will be:
  * Vue 3 with Option API
  * Vite
  * Vue Router
  * SCSS

  The folder directory will be:
  ```
  /src/assets/ - static files
  /src/entry-points/main-entry-point.js - contains the vue bootstrapper, along with router
  definition, app-level SCSS import
  /src/modules/layout/ - contains generic layout components
  /src/modules/search/ - contains vue files and classes related to the Search functionality
  /src/modules/analyzers/ - contains classes related to analsis
  /src/modules/notes/ - contains vue files and classes related to Notes
  /styles - the SCSS of our app
  index.html
  package.json
  vite.config.js
  ```

  ## Naming Convention
  A **Page** is a routable Vue component. It will always have a prefix - `&lt;whatever&gt;-page.vue`.
  It will be the top-level component of its hierarchy.

  Be very, very particular abount names. Be very specific and precise. Be consistent.


  ## Styling
  CSS styles will likely change dramatically. As a result, we want baseline CSS to be
  consistently applied throughout the application.

  This requires a central styling and strong generalization of styles and consistent usage of
  easy-to-change variables.

  This includes atomic styling such as:
  * Typography
  * Sizes
  * Spacing
  * Colors
  * Borders
  * Box Shadows

  This also includes common component styling such as:
  * Buttons
  * Icon buttons
  * Headers
  * Panels
  * Tables

  This also includes composite styling such as:
  * Modals
  * Lists
  * Layouts

  Syling should be semantic. Instead of having a variable called 'red', it should be
  'color-error'.

  ## Theme

  The theme of our app is - simple, elegant, advanced, fast. Apple-esque. ChatGPT esque.
  PLTR-esque. It's clear, clean, even lines. Optimized use of space.

  # Layout

  The first part you will make is our Primary Layout (primary-layout.vue).

  This will contain;
  * A sidebar
  * A main panel, which will load a page.

  Vue Router should be hooked into this so that the Sidebar remains in place as pages change.

  ## Sidebar

  The Sidebar will be approx. 200px wide.

  Sidebar will have 3 sections;
  * Header
  * Content
  * Footer

  It will be sticky - no matter where you scroll on the Page it will remain in place.

  If the sidebar has more content than it has space for, it will scroll internally. However,
  Header and Footer will NOT scroll - they will be sticky.

  ## The Main Panel

  The Main Panel will have a white background.

  It will load an example-page, stored in `/modules/example`</code></pre></div><div><hr></div><p><a href="https://jgefroh.com/">Gefroh</a> is product and technology executive in Kirkland, Washington with over a decade of experience helping startups of all sizes improve efficiency and delivery with excellence. He often writes about Strategy, Product Engineering, Leadership, Management, and AI on his <a href="https://blog.jgefroh.com/">blog</a>.</p>]]></content:encoded></item></channel></rss>