<?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[build mode]]></title><description><![CDATA[Tools, tactics, and taste for product builders]]></description><link>https://newsletter.posthog.com</link><image><url>https://substackcdn.com/image/fetch/$s_!_vWZ!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0489bdc3-8f42-4d23-8e97-5b6921b35814_69x69.png</url><title>build mode</title><link>https://newsletter.posthog.com</link></image><generator>Substack</generator><lastBuildDate>Thu, 01 Oct 2026 04:50:30 GMT</lastBuildDate><atom:link href="https://newsletter.posthog.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[PostHog]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[posthog@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[posthog@substack.com]]></itunes:email><itunes:name><![CDATA[PostHog]]></itunes:name></itunes:owner><itunes:author><![CDATA[PostHog]]></itunes:author><googleplay:owner><![CDATA[posthog@substack.com]]></googleplay:owner><googleplay:email><![CDATA[posthog@substack.com]]></googleplay:email><googleplay:author><![CDATA[PostHog]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[We're building multiplayer AI. Here's what we've learned so far]]></title><description><![CDATA[Non-obvious lessons for multi-human agent systems]]></description><link>https://newsletter.posthog.com/p/were-building-multiplayer-ai-heres</link><guid isPermaLink="false">https://newsletter.posthog.com/p/were-building-multiplayer-ai-heres</guid><dc:creator><![CDATA[Jina Yoon]]></dc:creator><pubDate>Mon, 28 Sep 2026 18:05:40 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/f764b8e7-e031-4979-8860-633fa3e6eacd_2400x1260.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://x.com/emollick/status/2095585825949946273&quot;,&quot;full_text&quot;:&quot;Multiplayer AI, where many people in an organization can use AI together to accomplish goals, remains one of the biggest (non-technical) problems in using AI right now. Approaches tend to be pretty primitive and based around AI-as-a-person-in-your-group-chat. That is limiting.&quot;,&quot;username&quot;:&quot;emollick&quot;,&quot;name&quot;:&quot;Ethan Mollick&quot;,&quot;profile_image_url&quot;:&quot;https://pbs.substack.com/profile_images/1601382188712398850/3AAOlqrX_normal.jpg&quot;,&quot;date&quot;:&quot;2026-09-03T18:52:49.000Z&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:117,&quot;retweet_count&quot;:41,&quot;like_count&quot;:649,&quot;impression_count&quot;:125838,&quot;expanded_url&quot;:null,&quot;video_url&quot;:null,&quot;video_preview_media_key&quot;:null,&quot;belowTheFold&quot;:false}" data-component-name="Twitter2ToDOM"></div><p>When people imagine multiplayer AI, they usually think of products like <a href="https://www.anthropic.com/news/introducing-claude-tag">Claude Tag</a> or <a href="https://posthog.com/slack?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=multiplayer-ai">PostHog in Slack</a>.</p><p>These are fine for simple tasks, like fixing minor bugs and querying data, but most work happens <em>outside</em> Slack across dozens of apps in messy, nonlinear processes.</p><p>This creates a UI bottleneck that forces people to translate rich information into flat text, only to be transformed back into the original shape by agents at the end of the funnel.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sdr_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de480cd-0423-4ff3-b5d9-d8c88023f589_1360x732.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sdr_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de480cd-0423-4ff3-b5d9-d8c88023f589_1360x732.png 424w, https://substackcdn.com/image/fetch/$s_!sdr_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de480cd-0423-4ff3-b5d9-d8c88023f589_1360x732.png 848w, https://substackcdn.com/image/fetch/$s_!sdr_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de480cd-0423-4ff3-b5d9-d8c88023f589_1360x732.png 1272w, https://substackcdn.com/image/fetch/$s_!sdr_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de480cd-0423-4ff3-b5d9-d8c88023f589_1360x732.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sdr_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de480cd-0423-4ff3-b5d9-d8c88023f589_1360x732.png" width="1360" height="732" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8de480cd-0423-4ff3-b5d9-d8c88023f589_1360x732.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:732,&quot;width&quot;:1360,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:157615,&quot;alt&quot;:&quot;Diagram titled \&quot;The Slack UI becomes an information bottleneck for multiplayer AI collaboration.\&quot; Lines from three people (Jina, Ian and Andy) all run into one Slack window. A single arrow then leads from Slack to an AI agent icon, and from there to GitHub.&quot;,&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://newsletter.posthog.com/i/217326905?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de480cd-0423-4ff3-b5d9-d8c88023f589_1360x732.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Diagram titled &quot;The Slack UI becomes an information bottleneck for multiplayer AI collaboration.&quot; Lines from three people (Jina, Ian and Andy) all run into one Slack window. A single arrow then leads from Slack to an AI agent icon, and from there to GitHub." title="Diagram titled &quot;The Slack UI becomes an information bottleneck for multiplayer AI collaboration.&quot; Lines from three people (Jina, Ian and Andy) all run into one Slack window. A single arrow then leads from Slack to an AI agent icon, and from there to GitHub." srcset="https://substackcdn.com/image/fetch/$s_!sdr_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de480cd-0423-4ff3-b5d9-d8c88023f589_1360x732.png 424w, https://substackcdn.com/image/fetch/$s_!sdr_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de480cd-0423-4ff3-b5d9-d8c88023f589_1360x732.png 848w, https://substackcdn.com/image/fetch/$s_!sdr_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de480cd-0423-4ff3-b5d9-d8c88023f589_1360x732.png 1272w, https://substackcdn.com/image/fetch/$s_!sdr_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de480cd-0423-4ff3-b5d9-d8c88023f589_1360x732.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We wanted to build a collaboration tool that&#8217;s designed for agents from the start, so we&#8217;ve been exploring alternatives beyond Slack for multiplayer AI these last few months.</p><p>Here are a few of the lessons we&#8217;ve learned so far about building multiplayer in <a href="https://posthog.com/desktop?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=multiplayer-ai">PostHog Desktop</a>.</p><div><hr></div><h2>1. You need to establish a shared reality</h2><p>Context is important for any AI system, but the key word in multiplayer is <em>shared</em> context. Siloed context wastes tokens, duplicates work, and creates inconsistencies.</p><p>Say two teammates attend the same meeting but write down slightly different definitions of a goal metric. Their context now differs, which means their work may diverge without them even knowing. With agents, these minor differences can compound into completely different realities at scale.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!M_9g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0ebec21-0be7-4eb8-a8a0-e4f5e7a09ab0_1360x682.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!M_9g!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0ebec21-0be7-4eb8-a8a0-e4f5e7a09ab0_1360x682.png 424w, https://substackcdn.com/image/fetch/$s_!M_9g!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0ebec21-0be7-4eb8-a8a0-e4f5e7a09ab0_1360x682.png 848w, https://substackcdn.com/image/fetch/$s_!M_9g!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0ebec21-0be7-4eb8-a8a0-e4f5e7a09ab0_1360x682.png 1272w, https://substackcdn.com/image/fetch/$s_!M_9g!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0ebec21-0be7-4eb8-a8a0-e4f5e7a09ab0_1360x682.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!M_9g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0ebec21-0be7-4eb8-a8a0-e4f5e7a09ab0_1360x682.png" width="1360" height="682" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b0ebec21-0be7-4eb8-a8a0-e4f5e7a09ab0_1360x682.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:682,&quot;width&quot;:1360,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:378912,&quot;alt&quot;:&quot;Diagram titled \&quot;Siloed context leads to diverging results that compound at scale.\&quot; Person A's context and Person B's context each lead to a slightly different hedgehog. Further along, those become two very different hedgehogs, labeled \&quot;Compounding effects.\&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://newsletter.posthog.com/i/217326905?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0ebec21-0be7-4eb8-a8a0-e4f5e7a09ab0_1360x682.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Diagram titled &quot;Siloed context leads to diverging results that compound at scale.&quot; Person A's context and Person B's context each lead to a slightly different hedgehog. Further along, those become two very different hedgehogs, labeled &quot;Compounding effects.&quot;" title="Diagram titled &quot;Siloed context leads to diverging results that compound at scale.&quot; Person A's context and Person B's context each lead to a slightly different hedgehog. Further along, those become two very different hedgehogs, labeled &quot;Compounding effects.&quot;" srcset="https://substackcdn.com/image/fetch/$s_!M_9g!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0ebec21-0be7-4eb8-a8a0-e4f5e7a09ab0_1360x682.png 424w, https://substackcdn.com/image/fetch/$s_!M_9g!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0ebec21-0be7-4eb8-a8a0-e4f5e7a09ab0_1360x682.png 848w, https://substackcdn.com/image/fetch/$s_!M_9g!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0ebec21-0be7-4eb8-a8a0-e4f5e7a09ab0_1360x682.png 1272w, https://substackcdn.com/image/fetch/$s_!M_9g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0ebec21-0be7-4eb8-a8a0-e4f5e7a09ab0_1360x682.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A shared context system reduces that risk by being a source of truth. This also decreases the friction of information handoff, since teammates can just check a shared resource instead of asking and waiting on each other.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QquO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ef540fc-bcc2-4d8a-806d-6c2de1fd8027_1360x732.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QquO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ef540fc-bcc2-4d8a-806d-6c2de1fd8027_1360x732.png 424w, https://substackcdn.com/image/fetch/$s_!QquO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ef540fc-bcc2-4d8a-806d-6c2de1fd8027_1360x732.png 848w, https://substackcdn.com/image/fetch/$s_!QquO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ef540fc-bcc2-4d8a-806d-6c2de1fd8027_1360x732.png 1272w, https://substackcdn.com/image/fetch/$s_!QquO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ef540fc-bcc2-4d8a-806d-6c2de1fd8027_1360x732.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QquO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ef540fc-bcc2-4d8a-806d-6c2de1fd8027_1360x732.png" width="1360" height="732" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1ef540fc-bcc2-4d8a-806d-6c2de1fd8027_1360x732.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:732,&quot;width&quot;:1360,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:218618,&quot;alt&quot;:&quot;Diagram titled \&quot;Shared context creates a shared reality that keeps everyone aligned.\&quot; One \&quot;Shared context\&quot; bubble points to two nearly identical hedgehogs, labeled \&quot;Aligned results.\&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://newsletter.posthog.com/i/217326905?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ef540fc-bcc2-4d8a-806d-6c2de1fd8027_1360x732.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Diagram titled &quot;Shared context creates a shared reality that keeps everyone aligned.&quot; One &quot;Shared context&quot; bubble points to two nearly identical hedgehogs, labeled &quot;Aligned results.&quot;" title="Diagram titled &quot;Shared context creates a shared reality that keeps everyone aligned.&quot; One &quot;Shared context&quot; bubble points to two nearly identical hedgehogs, labeled &quot;Aligned results.&quot;" srcset="https://substackcdn.com/image/fetch/$s_!QquO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ef540fc-bcc2-4d8a-806d-6c2de1fd8027_1360x732.png 424w, https://substackcdn.com/image/fetch/$s_!QquO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ef540fc-bcc2-4d8a-806d-6c2de1fd8027_1360x732.png 848w, https://substackcdn.com/image/fetch/$s_!QquO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ef540fc-bcc2-4d8a-806d-6c2de1fd8027_1360x732.png 1272w, https://substackcdn.com/image/fetch/$s_!QquO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ef540fc-bcc2-4d8a-806d-6c2de1fd8027_1360x732.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>There&#8217;s no reason to <em>not</em> have a shared context system since it can be as simple as a team Notion page connected via MCP. The real challenges are in keeping it up to date, trustworthy, and complete.</p><h3>How we&#8217;re building it</h3><p>In chat-based systems, shared context is basically free since you can infer what&#8217;s in scope from the root conversation. When the PostHog in Slack bot gets tagged in a thread, it can just read what people have said in chat so far. It also has context from the relevant PostHog project for that organization via our MCP.</p><p>But our approach to multiplayer in PostHog Desktop is built on Spaces, not conversations. Spaces are like &#8220;rooms&#8221; that hold people, agents, and work objects in a shared container. They&#8217;re entirely user-defined, so there&#8217;s no way to automatically identify and initialize shared context.</p><p>We first tried to solve this by asking users to write down the purpose of a Space in a <code>CONTEXT.md</code> at creation time and update it regularly. As you&#8217;d expect, that never actually happened. Over 90 days, only 64 users ever started a shared context file, and only 14 users ever edited it.</p><p>We&#8217;ve since been exploring automatic context maintenance for Spaces through an AI-powered <a href="https://github.com/PostHog/posthog/blob/master/products/context_layer/README.md">context layer</a>. It starts out almost empty and grows by running a nightly &#8220;dreaming&#8221; task that records what happened that day in a version-controlled Markdown wiki.</p><p>This is similar to what others might describe as an implicit knowledge layer, or company brain. The actual work objects like docs, PRs, and tickets live elsewhere; the context layer just looks at them to extract information:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!a-l6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee3338e2-90ff-421f-bb16-e5aec54b5a78_1566x912.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!a-l6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee3338e2-90ff-421f-bb16-e5aec54b5a78_1566x912.png 424w, https://substackcdn.com/image/fetch/$s_!a-l6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee3338e2-90ff-421f-bb16-e5aec54b5a78_1566x912.png 848w, https://substackcdn.com/image/fetch/$s_!a-l6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee3338e2-90ff-421f-bb16-e5aec54b5a78_1566x912.png 1272w, https://substackcdn.com/image/fetch/$s_!a-l6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee3338e2-90ff-421f-bb16-e5aec54b5a78_1566x912.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!a-l6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee3338e2-90ff-421f-bb16-e5aec54b5a78_1566x912.png" width="1456" height="848" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ee3338e2-90ff-421f-bb16-e5aec54b5a78_1566x912.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:848,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:112124,&quot;alt&quot;:&quot;Diagram titled \&quot;A context layer extracts the state of the company by watching what work was actually completed every day.\&quot; There are three events: Jina merges a PR, Ian updates a doc and Andy creates a new dashboard. They feed into PR, Handbook and Dashboards, and all three flow into a cloud labeled \&quot;Context layer reads and extracts company state.\&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://newsletter.posthog.com/i/217326905?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee3338e2-90ff-421f-bb16-e5aec54b5a78_1566x912.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Diagram titled &quot;A context layer extracts the state of the company by watching what work was actually completed every day.&quot; There are three events: Jina merges a PR, Ian updates a doc and Andy creates a new dashboard. They feed into PR, Handbook and Dashboards, and all three flow into a cloud labeled &quot;Context layer reads and extracts company state.&quot;" title="Diagram titled &quot;A context layer extracts the state of the company by watching what work was actually completed every day.&quot; There are three events: Jina merges a PR, Ian updates a doc and Andy creates a new dashboard. They feed into PR, Handbook and Dashboards, and all three flow into a cloud labeled &quot;Context layer reads and extracts company state.&quot;" srcset="https://substackcdn.com/image/fetch/$s_!a-l6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee3338e2-90ff-421f-bb16-e5aec54b5a78_1566x912.png 424w, https://substackcdn.com/image/fetch/$s_!a-l6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee3338e2-90ff-421f-bb16-e5aec54b5a78_1566x912.png 848w, https://substackcdn.com/image/fetch/$s_!a-l6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee3338e2-90ff-421f-bb16-e5aec54b5a78_1566x912.png 1272w, https://substackcdn.com/image/fetch/$s_!a-l6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee3338e2-90ff-421f-bb16-e5aec54b5a78_1566x912.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A key part of the design is that it only looks at what was actually shipped, merged, or decided in a day. If the context layer were to observe items like meeting notes or brainstorming docs, it would likely hallucinate and misrepresent reality and defeat the purpose of being a source of truth.</p><p>Here&#8217;s an excerpt of a decision log based on <a href="https://github.com/PostHog/posthog/pull/96742">this PR</a>, written in present-tense since the context layer&#8217;s job is to describe the <em>current</em> state of PostHog:</p><div class="callout-block" data-callout="true"><p>Replay Vision optimizes for precision over recall. A finding it presents must hold up, so a monitor yes under verify-positives stands only when a blind second draw agrees; one dissent drops it and no third draw breaks the tie.</p></div><p>We&#8217;ve only been dogfooding this for a few weeks, but the need has been clear for a while. Almost every external user has requested it in our interviews without even being asked, and there are several startups building similar products like <a href="https://getunblocked.com">Unblocked</a>, <a href="https://humanlayer.dev">HumanLayer</a>, and <a href="https://factory.com/news/wiki">Factory</a>.</p><blockquote><p><strong>The takeaway: </strong>If you&#8217;re building any sort of multiplayer AI, you need shared context to save your team time, energy, and mistakes. This can be as simple as a <a href="https://posthog.com/handbook?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=multiplayer-ai">company handbook</a>, but ideally your system can automatically update and ground itself in reality.</p></blockquote><div><hr></div><h2>2. Most collaboration happens before and after writing the code</h2><p>A core part of our vision for Spaces was live session streaming. We wanted teammates to be able to stop, steer, and prompt each others&#8217; agents in real-time.</p><p>But so far in our early data, we&#8217;re seeing that coding in PostHog Desktop is mostly done solo. <a href="https://posthog.com/community/profiles/45504?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=multiplayer-ai">Shy</a>, our main product engineer working on Spaces, explained his hypothesis:</p><div class="callout-block" data-callout="true"><p><em>&#8220;If I&#8217;m working on a coding task, I don&#8217;t want other people to go and join the conversation and shift the direction of the agent. I might come back to a bunch of new commits and code changes that I didn&#8217;t expect.&#8221;</em></p></div><p>Most collaboration in software engineering has always been <em>after </em>code is written, during the review process. And so far, in our internal tests, that still happens more in GitHub rather than our UI.</p><p>Something new we&#8217;re observing in other products, however, is agent transcripts used as part of the code review process. This is the main bet behind <a href="https://delta.dev/">Delta</a>, the recently-launched multiplayer coding app by Zed. In their UI, they place code diffs side-by-side with agent chats and let teammates comment on either in real-time. Copilot also added <a href="https://github.blog/changelog/2026-03-20-trace-any-copilot-coding-agent-commit-to-its-session-logs/">an agent commit trailer</a> earlier this year that makes it easier for reviewers to understand its changes.</p><p>Research suggests code review is more about understanding the reasons behind changes, knowledge transfer, and team awareness.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> So as engineers produce more code than they can realistically review, it&#8217;s reasonable to think there will be more emphasis on gathering teammates&#8217; intent, reasoning, and prompting by reading session transcripts, or high-level PR descriptions.</p><h3>How we&#8217;re building it</h3><p>We&#8217;re still talking to users to figure out what this means for how we design shared coding sessions in PostHog Desktop.</p><p>One area we <em>are</em> certain about is that collaborative tasks that happen <em>before</em> writing any code are ripe for better AI tooling.</p><p>We think artifacts are the answer here. Artifacts are agent-generated web apps that are rendered next to your agent conversation. You might know them as Claude Artifacts, ChatGPT Canvas, or PostHog Canvases. For simplicity, we&#8217;ll refer to them broadly as &#8220;artifacts.&#8221;</p><p>Most people think of artifacts as just another way for agents to display their answers to humans, like when you ask Claude to walk you through a codebase with illustrations rather than text. But it&#8217;s also useful as a medium for human-to-human communication.</p><p>For example, Shy has been rearchitecting some features within Spaces. Instead of sharing his brainstorming session transcripts, he generated this artifact that summarizes only the relevant pieces that he wanted his teammates to comment on:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!S6O2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc84813a-ffe5-4d05-9edc-e909204804ab_1276x844.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!S6O2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc84813a-ffe5-4d05-9edc-e909204804ab_1276x844.png 424w, https://substackcdn.com/image/fetch/$s_!S6O2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc84813a-ffe5-4d05-9edc-e909204804ab_1276x844.png 848w, https://substackcdn.com/image/fetch/$s_!S6O2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc84813a-ffe5-4d05-9edc-e909204804ab_1276x844.png 1272w, https://substackcdn.com/image/fetch/$s_!S6O2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc84813a-ffe5-4d05-9edc-e909204804ab_1276x844.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!S6O2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc84813a-ffe5-4d05-9edc-e909204804ab_1276x844.png" width="1276" height="844" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fc84813a-ffe5-4d05-9edc-e909204804ab_1276x844.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:844,&quot;width&quot;:1276,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:239230,&quot;alt&quot;:&quot;A dark-themed artifact titled \&quot;One edit, end to end.\&quot; A flow diagram shows Client A sending an edit to the API. The API writes it to Postgres and to a Redis stream, and the stream pushes it to Client B over SSE. Below the diagram, four labeled steps explain the process: Optimistic, Append, Publish and Fan out.&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://newsletter.posthog.com/i/217326905?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc84813a-ffe5-4d05-9edc-e909204804ab_1276x844.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A dark-themed artifact titled &quot;One edit, end to end.&quot; A flow diagram shows Client A sending an edit to the API. The API writes it to Postgres and to a Redis stream, and the stream pushes it to Client B over SSE. Below the diagram, four labeled steps explain the process: Optimistic, Append, Publish and Fan out." title="A dark-themed artifact titled &quot;One edit, end to end.&quot; A flow diagram shows Client A sending an edit to the API. The API writes it to Postgres and to a Redis stream, and the stream pushes it to Client B over SSE. Below the diagram, four labeled steps explain the process: Optimistic, Append, Publish and Fan out." srcset="https://substackcdn.com/image/fetch/$s_!S6O2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc84813a-ffe5-4d05-9edc-e909204804ab_1276x844.png 424w, https://substackcdn.com/image/fetch/$s_!S6O2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc84813a-ffe5-4d05-9edc-e909204804ab_1276x844.png 848w, https://substackcdn.com/image/fetch/$s_!S6O2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc84813a-ffe5-4d05-9edc-e909204804ab_1276x844.png 1272w, https://substackcdn.com/image/fetch/$s_!S6O2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc84813a-ffe5-4d05-9edc-e909204804ab_1276x844.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A screenshot of an artifact Shy generated to capture his architecture redesign.</figcaption></figure></div><p>The obvious benefit is that it&#8217;s easier to read than a giant wall of text. But, more importantly, artifacts make work <em>portable</em>. They&#8217;re like session state snapshots; if you pass your teammates a well-designed artifact, they don&#8217;t need access to your original agent, session, or sandbox.</p><p>This concept is the backbone of <a href="https://linear.app">Linear</a>, <a href="https://asana.com">Asana</a>, and many other <a href="https://posthog.com/newsletter/software-factories?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=multiplayer-ai">software factory</a> approaches. Persistent objects like tickets and specs hold context so that any agent (or human!) can pick up wherever the work has been left off &#8211; anywhere, any time &#8211; for future sessions and cycles:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1RT9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9ee5e93-8f2d-4f25-bb51-e8897997d894_1360x732.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1RT9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9ee5e93-8f2d-4f25-bb51-e8897997d894_1360x732.png 424w, https://substackcdn.com/image/fetch/$s_!1RT9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9ee5e93-8f2d-4f25-bb51-e8897997d894_1360x732.png 848w, https://substackcdn.com/image/fetch/$s_!1RT9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9ee5e93-8f2d-4f25-bb51-e8897997d894_1360x732.png 1272w, https://substackcdn.com/image/fetch/$s_!1RT9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9ee5e93-8f2d-4f25-bb51-e8897997d894_1360x732.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1RT9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9ee5e93-8f2d-4f25-bb51-e8897997d894_1360x732.png" width="1360" height="732" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f9ee5e93-8f2d-4f25-bb51-e8897997d894_1360x732.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:732,&quot;width&quot;:1360,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:57390,&quot;alt&quot;:&quot;Loop diagram between two boxes, Session and Artifact. The top arrow reads \&quot;A session produces an artifact.\&quot; The return arrow reads \&quot;The artifact becomes context for the next session.\&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://newsletter.posthog.com/i/217326905?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9ee5e93-8f2d-4f25-bb51-e8897997d894_1360x732.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Loop diagram between two boxes, Session and Artifact. The top arrow reads &quot;A session produces an artifact.&quot; The return arrow reads &quot;The artifact becomes context for the next session.&quot;" title="Loop diagram between two boxes, Session and Artifact. The top arrow reads &quot;A session produces an artifact.&quot; The return arrow reads &quot;The artifact becomes context for the next session.&quot;" srcset="https://substackcdn.com/image/fetch/$s_!1RT9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9ee5e93-8f2d-4f25-bb51-e8897997d894_1360x732.png 424w, https://substackcdn.com/image/fetch/$s_!1RT9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9ee5e93-8f2d-4f25-bb51-e8897997d894_1360x732.png 848w, https://substackcdn.com/image/fetch/$s_!1RT9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9ee5e93-8f2d-4f25-bb51-e8897997d894_1360x732.png 1272w, https://substackcdn.com/image/fetch/$s_!1RT9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9ee5e93-8f2d-4f25-bb51-e8897997d894_1360x732.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We want to take that session-artifact feedback loop to the next level by turning them into real-time experiences. You can think of it like Figma, but every change a human makes also gets recorded as code. That way, agents can easily consume and work with the same object, making a truly multiplayer experience where every actor is speaking in the same language.</p><blockquote><p><strong>The takeaway: </strong>Coding is still primarily a solo activity in our early multiplayer data, and most collaboration is limited to GitHub PRs. The clearest opportunity we see today is to make pre-coding tasks like planning, research, and handoff more multiplayer-friendly with real-time editable artifacts.</p></blockquote><div><hr></div><h2>3. Multiplayer AI scopes are a human problem</h2><p>During the earliest stages of design, we couldn&#8217;t articulate what <em>defines</em> a Space. Should they be based on teams and org charts? Do we separate them by repos, projects, or tasks? How do people choose where and with whom to collaborate with anyway?</p><p>Rather than trying to speedrun the entire discipline of organizational psychology, we left the answer blank to just see what happens.</p><h3>How we&#8217;re building it</h3><p>Spaces initially had no prescribed structure &#8211; anyone could create one, and everything was visible to the whole company.</p><p>This actually worked well for us because PostHog operates on very little hierarchy. But most other companies have strict policies around role-based access control, which is why other approaches like YC&#8217;s <a href="https://github.com/yc-software/qm">QM</a> place so much emphasis on governance, permissions, and admin settings. This is one of our biggest blind spots, so we&#8217;re interviewing lots of people to learn more.</p><p>Still, our dogfooding at least helped us identify how and why people set up different Spaces. Even among just ~200 PostHog employees, there were three clear patterns that emerged.</p><p>The first was expected. Most teams set up a Space for their team, which ends up looking a lot like our Slack channel directory:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!053s!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2633dad0-383a-45b7-bdc2-dfb601ce43d2_2224x990.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!053s!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2633dad0-383a-45b7-bdc2-dfb601ce43d2_2224x990.png 424w, https://substackcdn.com/image/fetch/$s_!053s!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2633dad0-383a-45b7-bdc2-dfb601ce43d2_2224x990.png 848w, https://substackcdn.com/image/fetch/$s_!053s!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2633dad0-383a-45b7-bdc2-dfb601ce43d2_2224x990.png 1272w, https://substackcdn.com/image/fetch/$s_!053s!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2633dad0-383a-45b7-bdc2-dfb601ce43d2_2224x990.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!053s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2633dad0-383a-45b7-bdc2-dfb601ce43d2_2224x990.png" width="1456" height="648" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2633dad0-383a-45b7-bdc2-dfb601ce43d2_2224x990.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:648,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:803839,&quot;alt&quot;:&quot;Two lists side by side. On the left is a dark PostHog Desktop list of team Spaces, such as #team-ai-gateway, #team-analytics-platform and #team-error-tracking, with linked repos and member avatars. On the right is a purple Slack sidebar with a similar list of team channels, such as #team-demand-gen, #team-replay and #team-wizard-and-docs.&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://newsletter.posthog.com/i/217326905?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2633dad0-383a-45b7-bdc2-dfb601ce43d2_2224x990.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Two lists side by side. On the left is a dark PostHog Desktop list of team Spaces, such as #team-ai-gateway, #team-analytics-platform and #team-error-tracking, with linked repos and member avatars. On the right is a purple Slack sidebar with a similar list of team channels, such as #team-demand-gen, #team-replay and #team-wizard-and-docs." title="Two lists side by side. On the left is a dark PostHog Desktop list of team Spaces, such as #team-ai-gateway, #team-analytics-platform and #team-error-tracking, with linked repos and member avatars. On the right is a purple Slack sidebar with a similar list of team channels, such as #team-demand-gen, #team-replay and #team-wizard-and-docs." srcset="https://substackcdn.com/image/fetch/$s_!053s!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2633dad0-383a-45b7-bdc2-dfb601ce43d2_2224x990.png 424w, https://substackcdn.com/image/fetch/$s_!053s!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2633dad0-383a-45b7-bdc2-dfb601ce43d2_2224x990.png 848w, https://substackcdn.com/image/fetch/$s_!053s!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2633dad0-383a-45b7-bdc2-dfb601ce43d2_2224x990.png 1272w, https://substackcdn.com/image/fetch/$s_!053s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2633dad0-383a-45b7-bdc2-dfb601ce43d2_2224x990.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>But then people started creating Spaces based on criteria like product areas, specific incidents, or task types. For example, <a href="https://posthog.com/community/profiles/38198?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=multiplayer-ai">Adam Bowker</a> cycles frequently between <code>#posthog-desktop</code> and a sub-team project called <code>#desktop-onboarding</code>, as well as <code>#builder-relations</code> to look at feedback from our Discord.</p><p>We were also wrong about how people would use public vs. private sessions. We thought PostHog employees would default to creating sessions in team Spaces to promote transparency, but they overwhelmingly prefer to start tasks in private. We often see behaviors like:</p><ul><li><p><a href="https://posthog.com/community/profiles/40548?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=multiplayer-ai">Richard</a> moving a pending task from <code>#personal</code> to the shared <code>#gateway</code> Space</p></li><li><p><a href="https://posthog.com/community/profiles/35074?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=multiplayer-ai">Eleftheria</a> reviewing her own tasks in <code>#personal</code>, then switching to the <code>#ai-infrastructure</code> team-wide feed</p></li><li><p><a href="https://posthog.com/community/profiles/32501?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=multiplayer-ai">Phil</a> reading shared agent tasks in <code>#release</code>, then going back to <code>#personal</code> to start a new session</p></li></ul><p>Maybe this is just because we all got used to talking to agents informally and asking them dumb questions.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YmRr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88809e3a-4fe7-41ab-86e7-7cf80870da37_1358x248.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YmRr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88809e3a-4fe7-41ab-86e7-7cf80870da37_1358x248.png 424w, https://substackcdn.com/image/fetch/$s_!YmRr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88809e3a-4fe7-41ab-86e7-7cf80870da37_1358x248.png 848w, https://substackcdn.com/image/fetch/$s_!YmRr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88809e3a-4fe7-41ab-86e7-7cf80870da37_1358x248.png 1272w, https://substackcdn.com/image/fetch/$s_!YmRr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88809e3a-4fe7-41ab-86e7-7cf80870da37_1358x248.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YmRr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88809e3a-4fe7-41ab-86e7-7cf80870da37_1358x248.png" width="1358" height="248" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/88809e3a-4fe7-41ab-86e7-7cf80870da37_1358x248.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:248,&quot;width&quot;:1358,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:65757,&quot;alt&quot;:&quot;Slack message from Matt Pua: \&quot;my mother would be fiercely disappointed if she saw the way i talk to robots, i can imagine some coworkers would question why i was hired if they saw my chats.\&quot; It has three \&quot;this tbh\&quot; reactions.&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://newsletter.posthog.com/i/217326905?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88809e3a-4fe7-41ab-86e7-7cf80870da37_1358x248.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Slack message from Matt Pua: &quot;my mother would be fiercely disappointed if she saw the way i talk to robots, i can imagine some coworkers would question why i was hired if they saw my chats.&quot; It has three &quot;this tbh&quot; reactions." title="Slack message from Matt Pua: &quot;my mother would be fiercely disappointed if she saw the way i talk to robots, i can imagine some coworkers would question why i was hired if they saw my chats.&quot; It has three &quot;this tbh&quot; reactions." srcset="https://substackcdn.com/image/fetch/$s_!YmRr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88809e3a-4fe7-41ab-86e7-7cf80870da37_1358x248.png 424w, https://substackcdn.com/image/fetch/$s_!YmRr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88809e3a-4fe7-41ab-86e7-7cf80870da37_1358x248.png 848w, https://substackcdn.com/image/fetch/$s_!YmRr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88809e3a-4fe7-41ab-86e7-7cf80870da37_1358x248.png 1272w, https://substackcdn.com/image/fetch/$s_!YmRr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88809e3a-4fe7-41ab-86e7-7cf80870da37_1358x248.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>There&#8217;s still a lot left to learn about multiplayer scopes, but the hypothesis we&#8217;re landing on is that groups form around shared work and shared context &#8211; and those usually come from a shared goal.</p><p>To experiment with this, we just shipped some simple UI changes that make it easier for users to tell us about those goals. For example, they can select that the goal for the Space is to move a metric and, if so, we ask them about their targets, measurement intervals, and deadlines:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YpZE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1235da12-15ad-41bb-8162-353be7412b6e_1018x1132.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YpZE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1235da12-15ad-41bb-8162-353be7412b6e_1018x1132.png 424w, https://substackcdn.com/image/fetch/$s_!YpZE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1235da12-15ad-41bb-8162-353be7412b6e_1018x1132.png 848w, https://substackcdn.com/image/fetch/$s_!YpZE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1235da12-15ad-41bb-8162-353be7412b6e_1018x1132.png 1272w, https://substackcdn.com/image/fetch/$s_!YpZE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1235da12-15ad-41bb-8162-353be7412b6e_1018x1132.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YpZE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1235da12-15ad-41bb-8162-353be7412b6e_1018x1132.png" width="383" height="425.8899803536346" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1235da12-15ad-41bb-8162-353be7412b6e_1018x1132.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1132,&quot;width&quot;:1018,&quot;resizeWidth&quot;:383,&quot;bytes&quot;:215904,&quot;alt&quot;:&quot;The PostHog Desktop \&quot;What is this space for?\&quot; setup form. \&quot;A goal\&quot; is selected over \&quot;Nothing yet\&quot; and \&quot;A feature.\&quot; The goal field reads \&quot;Increase the newsletter subscriber rate,\&quot; with a target of at least 2 per month and a deadline of 01/06/2027.&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://newsletter.posthog.com/i/217326905?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1235da12-15ad-41bb-8162-353be7412b6e_1018x1132.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The PostHog Desktop &quot;What is this space for?&quot; setup form. &quot;A goal&quot; is selected over &quot;Nothing yet&quot; and &quot;A feature.&quot; The goal field reads &quot;Increase the newsletter subscriber rate,&quot; with a target of at least 2 per month and a deadline of 01/06/2027." title="The PostHog Desktop &quot;What is this space for?&quot; setup form. &quot;A goal&quot; is selected over &quot;Nothing yet&quot; and &quot;A feature.&quot; The goal field reads &quot;Increase the newsletter subscriber rate,&quot; with a target of at least 2 per month and a deadline of 01/06/2027." srcset="https://substackcdn.com/image/fetch/$s_!YpZE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1235da12-15ad-41bb-8162-353be7412b6e_1018x1132.png 424w, https://substackcdn.com/image/fetch/$s_!YpZE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1235da12-15ad-41bb-8162-353be7412b6e_1018x1132.png 848w, https://substackcdn.com/image/fetch/$s_!YpZE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1235da12-15ad-41bb-8162-353be7412b6e_1018x1132.png 1272w, https://substackcdn.com/image/fetch/$s_!YpZE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1235da12-15ad-41bb-8162-353be7412b6e_1018x1132.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">We now ask users about their goals when they create a new Space.</figcaption></figure></div><p>This sounds simple but, with enough data, we could leverage this information to suggest smart defaults for permissions, experiments, dashboards, and more in an AI wizard-like experience.</p><blockquote><p><strong>The takeaway: </strong>Organizational scopes are difficult because every company has their own culture with existing habits, tools, and systems. No one has ever fully figured that out for human-only collaboration, and now we&#8217;re adding agents to the mix.</p></blockquote><p><em>Words by <a href="https://x.com/jinayoon_">Jina Yoon</a>, who wants multiplayer AI to support ranked competitive queues. Graphics by <a href="https://posthog.com/community/profiles/27881?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=ai-writes-all">Lottie</a> and <a href="https://posthog.com/community/profiles/34810?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=ai-writes-all">Daniel</a>.</em></p><div><hr></div><h2>&#9876;&#65039; Grab these knowledge buffs</h2><ul><li><p><strong><a href="https://multiplayer-ai.com/">The Multiplayer AI Manifesto</a> &#8211; Sergey Karayev</strong></p></li><li><p><strong><a href="https://posthog.com/blog/self-driving-loops?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=multiplayer-ai">6-7 loops we use every day to make PostHog self-driving</a> &#8211; Andy Maguire</strong></p></li><li><p><strong><a href="https://x.com/JoshARosen/status/2096950231166296341">Multiplayer AI: Competing Architectures for Human-Agent Collaboration</a> &#8211; Josh Rosen</strong></p></li><li><p><strong><a href="https://posthog.com/blog/build-or-buy-feature-flags?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=multiplayer-ai">To build or buy feature flags: Non-obvious things to know</a> &#8211; Ian Vanagas</strong></p></li><li><p><strong><a href="https://newsletter.pragmaticengineer.com/p/how-anthropic-built-artifacts#%C2%A71-from-drawing-board-to-shipping-artifacts">How Anthropic built Artifacts</a> &#8211; Gergely Orosz</strong></p></li><li><p><strong><a href="https://posthog.com/blog/are-you-actually-data-driven?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=multiplayer-ai">Are you data-driven, or are you just busy?</a> &#8211; Natalia Amorim</strong></p></li></ul><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.posthog.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Subscribe for next season&#8217;s meta</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>&#127918; Join our party</h2><ul><li><p><strong><a href="https://posthog.com/careers/technical-customer-success-manager-americas?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=multiplayer-ai">Technical Customer Success Manager - Americas</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/technical-customer-success-manager-emea?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=multiplayer-ai">Technical Customer Success Manager - EMEA</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/ai-research-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=multiplayer-ai">AI Research Engineer</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/finance-manager-revenue-accounting?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=multiplayer-ai">Finance Manager, Revenue Accounting</a></strong></p></li></ul><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p><a href="https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/ICSE202013-codereview.pdf">Bacchelli &amp; Bird, 2013. Expectations, Outcomes, and Challenges of Modern Code Review. </a></p></div></div>]]></content:encoded></item><item><title><![CDATA[What happens to engineers when AI writes all the code?]]></title><description><![CDATA[Engineers aren&#8217;t going away. They'll be piloting the product loop.]]></description><link>https://newsletter.posthog.com/p/if-ai-writes-all-the-code-whats-left</link><guid isPermaLink="false">https://newsletter.posthog.com/p/if-ai-writes-all-the-code-whats-left</guid><dc:creator><![CDATA[Ian Vanagas]]></dc:creator><pubDate>Mon, 14 Sep 2026 18:08:17 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/29b74983-b9ef-43fd-8a86-d0e6a730d161_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>We are plausibly coming to a moment where AI will write all the code. This is a reality for many developers already. Over the last 4 months at PostHog, we moved from around </span><a href="https://posthog.com/blog/10k-prs-a-month?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=ai-writes-all"><span>20% of our monorepo PRs</span></a><span> being opened by agents to 70%.</span></p><p><span>This breaks the definition of engineer as &#8220;someone who writes code.&#8221; But no one thinks engineers will go extinct as soon as this happens. Anthropic has claimed &#8220;</span><a href="https://www.youtube.com/watch?v=We7BZVKbCVw"><span>coding is largely solved</span></a><span>,&#8221; yet it has 208 open roles with &#8220;engineer&#8221; in the title.</span></p><p><span>So what will engineers be doing?</span></p><div><hr></div><h2><span>1. Monitoring the situation</span></h2><p><span>Engineers spend a lot of time monitoring running agents, fixing errors, responding to customer requests, evaluating competitors, checking dashboards, strategizing on their role in company priorities, learning new workflows, and babysitting outstanding PRs.</span></p><p><span>I sum this up as &#8220;monitoring the situation.&#8221; The result of it is ideas and observations of how they can improve.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UgyU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb384d4cb-701d-457c-a016-51f80a7636be_1578x1018.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UgyU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb384d4cb-701d-457c-a016-51f80a7636be_1578x1018.png 424w, https://substackcdn.com/image/fetch/$s_!UgyU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb384d4cb-701d-457c-a016-51f80a7636be_1578x1018.png 848w, https://substackcdn.com/image/fetch/$s_!UgyU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb384d4cb-701d-457c-a016-51f80a7636be_1578x1018.png 1272w, https://substackcdn.com/image/fetch/$s_!UgyU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb384d4cb-701d-457c-a016-51f80a7636be_1578x1018.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UgyU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb384d4cb-701d-457c-a016-51f80a7636be_1578x1018.png" width="1456" height="939" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b384d4cb-701d-457c-a016-51f80a7636be_1578x1018.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:939,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:106092,&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://newsletter.posthog.com/i/215679544?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb384d4cb-701d-457c-a016-51f80a7636be_1578x1018.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_!UgyU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb384d4cb-701d-457c-a016-51f80a7636be_1578x1018.png 424w, https://substackcdn.com/image/fetch/$s_!UgyU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb384d4cb-701d-457c-a016-51f80a7636be_1578x1018.png 848w, https://substackcdn.com/image/fetch/$s_!UgyU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb384d4cb-701d-457c-a016-51f80a7636be_1578x1018.png 1272w, https://substackcdn.com/image/fetch/$s_!UgyU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb384d4cb-701d-457c-a016-51f80a7636be_1578x1018.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Engineers did a lot of this before, especially </span><a href="https://posthog.com/product-engineer/what-is-a-product-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=ai-writes-all"><span>product engineers</span></a><span>, but AI has amplified it. AI increased the amount of information an engineer can process, but it also increased expectations from managers and customers about productivity and polish.</span></p><p><span>This means engineers can&#8217;t be waiting for the right information to come to them. The best ones now create systems to get the information they need at the right time. This is part </span><a href="https://posthog.com/newsletter/loops?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=ai-writes-all"><span>loop engineering</span></a><span> and part </span><a href="https://posthog.com/newsletter/fix-your-agents?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=ai-writes-all"><span>context engineering</span></a><span>. Engineers at PostHog have</span><a href="https://posthog.com/blog/standup-bot-revenge?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=ai-writes-all"><span> standup bots</span></a><span>, repo summary</span><a href="https://posthog.com/blog/what-is-a-scout?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=ai-writes-all"><span> scouts</span></a><span>,</span><a href="https://www.talyn.dev?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=ai-writes-all"><span> custom setups</span></a><span> for monitoring in-progress PRs, </span><a href="https://posthog.com/surveys?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=ai-writes-all"><span>feedback surveys</span></a><span>, </span><a href="https://posthog.com/changelog?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=ai-writes-all"><span>changelog</span></a><span> automations, anomaly </span><a href="https://posthog.com/docs/alerts?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=ai-writes-all"><span>alerts</span></a><span>, and more.</span></p><p><span>Why is doing all this important? Because without this information, you will likely end up working on the wrong thing and not know it. Knowing all the possible things you could be working on enables you to prioritize and pick the right one.</span></p><div><hr></div><h2><span>2. Setting direction</span></h2><p><span>Software might be</span><a href="https://posthog.com/blog/what-if-your-product-built-itself?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=ai-writes-all"><span> increasingly driving itself</span></a><span>, but you still need to say where you want it to go. This requires synthesizing and analyzing what you observed to figure out what is valuable and worth acting on.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!P3tT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a16bc76-aa3d-41a6-9ac5-9c256be48103_2290x1018.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!P3tT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a16bc76-aa3d-41a6-9ac5-9c256be48103_2290x1018.png 424w, https://substackcdn.com/image/fetch/$s_!P3tT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a16bc76-aa3d-41a6-9ac5-9c256be48103_2290x1018.png 848w, https://substackcdn.com/image/fetch/$s_!P3tT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a16bc76-aa3d-41a6-9ac5-9c256be48103_2290x1018.png 1272w, https://substackcdn.com/image/fetch/$s_!P3tT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a16bc76-aa3d-41a6-9ac5-9c256be48103_2290x1018.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!P3tT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a16bc76-aa3d-41a6-9ac5-9c256be48103_2290x1018.png" width="1456" height="647" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7a16bc76-aa3d-41a6-9ac5-9c256be48103_2290x1018.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:647,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:151901,&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://newsletter.posthog.com/i/215679544?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a16bc76-aa3d-41a6-9ac5-9c256be48103_2290x1018.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_!P3tT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a16bc76-aa3d-41a6-9ac5-9c256be48103_2290x1018.png 424w, https://substackcdn.com/image/fetch/$s_!P3tT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a16bc76-aa3d-41a6-9ac5-9c256be48103_2290x1018.png 848w, https://substackcdn.com/image/fetch/$s_!P3tT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a16bc76-aa3d-41a6-9ac5-9c256be48103_2290x1018.png 1272w, https://substackcdn.com/image/fetch/$s_!P3tT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a16bc76-aa3d-41a6-9ac5-9c256be48103_2290x1018.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Based on the input an engineer receives, there will be hundreds of potential paths. In the past, product managers or execs might have been responsible for picking the best ones, but it&#8217;s now increasingly up to engineers.</span></p><p><span>Our </span><a href="https://posthog.com/newsletter/choosing-technologies#4-we-make-decisions-asynchronously?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=ai-writes-all"><span>requests for comments</span></a><span> repos are an example of what this looks like. They contain nearly 1,000 direction-setting decisions on topics like </span><a href="https://github.com/PostHog/requests-for-comments-public/pull/551"><span>dashboard MCP improvements</span></a><span>,</span><a href="https://github.com/PostHog/requests-for-comments-public/pull/176"><span> environments</span></a><span>, and </span><a href="http://github.com/PostHog/requests-for-comments-public/pull/71"><span>picking programming languages</span></a><span>. We can look at </span><a href="https://github.com/PostHog/requests-for-comments-public/pull/475/changes"><span>an RFC for a unified health page</span></a><span> as a specific example. It filters information through:</span></p><ul><li><p><strong><span>Personal experience and opinions.</span></strong><span> Rafa wrote it and the decision was ultimately his, with others adding their thoughts. As a specific example, he predicts: &#8220;We have 4 of them right now, but 3 of them were created in the last couple months, so they might start proliferating.&#8221;</span></p></li><li><p><strong><span>Importance to users, customers, and company. </span></strong><span>The problem statement details the many surfaces for diagnostic information and the problem this creates for users: discoverability, each health page providing an incomplete picture, and the developer overhead of maintaining each one.</span></p></li><li><p><strong><span>Technical feasibility. </span></strong><span>The design outlines the specific architecture using Dagster to run checks and store them in Postgres. It also includes how PostHog AI can use this data to provide suggestions.</span></p></li><li><p><strong><span>How it fits into the broader competitive landscape. </span></strong><span>Unifying the health page automates a problem the Onboarding team regularly runs into with customers when setting them up for long-term success. Healthier setups are better for our customers and for us.</span></p></li></ul><p><span>Without a clear direction, you can feel productive without actually making progress. AI makes this worse by enabling you to add anything you can think of easily. The direction and experience of your entire product can become clouded by features that aren&#8217;t what users actually want or you can be quickly led down the wrong path that&#8217;s hard to reverse.</span></p><div><hr></div><h2><span>3. Deciding how to build and implement</span></h2><p><span>Engineers might not be writing code, but they are still deciding what code gets written. A direction leads to many smaller decisions. Each decision is a hypothesis of what can be built to make progress towards the direction you're going.</span></p><p>What this often looks like is deciding on scope. This requires knowing the codebase, what&#8217;s possible, what agents are capable of, and their blind spots. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PTdz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bc8bf94-6f98-456e-b46a-20b4bc902903_2290x784.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PTdz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bc8bf94-6f98-456e-b46a-20b4bc902903_2290x784.png 424w, https://substackcdn.com/image/fetch/$s_!PTdz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bc8bf94-6f98-456e-b46a-20b4bc902903_2290x784.png 848w, https://substackcdn.com/image/fetch/$s_!PTdz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bc8bf94-6f98-456e-b46a-20b4bc902903_2290x784.png 1272w, https://substackcdn.com/image/fetch/$s_!PTdz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bc8bf94-6f98-456e-b46a-20b4bc902903_2290x784.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PTdz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bc8bf94-6f98-456e-b46a-20b4bc902903_2290x784.png" width="1456" height="498" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9bc8bf94-6f98-456e-b46a-20b4bc902903_2290x784.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:498,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:153513,&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://newsletter.posthog.com/i/215679544?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bc8bf94-6f98-456e-b46a-20b4bc902903_2290x784.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_!PTdz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bc8bf94-6f98-456e-b46a-20b4bc902903_2290x784.png 424w, https://substackcdn.com/image/fetch/$s_!PTdz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bc8bf94-6f98-456e-b46a-20b4bc902903_2290x784.png 848w, https://substackcdn.com/image/fetch/$s_!PTdz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bc8bf94-6f98-456e-b46a-20b4bc902903_2290x784.png 1272w, https://substackcdn.com/image/fetch/$s_!PTdz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9bc8bf94-6f98-456e-b46a-20b4bc902903_2290x784.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>The importance of this is made clear when I compare myself against real engineers. As a marketer, I monitor the situation and think about the direction products should be going in. I make feature requests and can use agents to implement them, but just the ability to generate code, even in the right direction, is not necessarily good engineering.</span></p><p>For example, I wanted the ability to send AI user interviews as a link rather than an email. Although I could have asked an agent to build it, Paul&#8217;s reply shows the knowledge I lacked for making a good implementation decision. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!72au!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f82d12-8492-47d0-ae26-02d32ef6a170_1630x988.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!72au!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f82d12-8492-47d0-ae26-02d32ef6a170_1630x988.png 424w, https://substackcdn.com/image/fetch/$s_!72au!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f82d12-8492-47d0-ae26-02d32ef6a170_1630x988.png 848w, https://substackcdn.com/image/fetch/$s_!72au!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f82d12-8492-47d0-ae26-02d32ef6a170_1630x988.png 1272w, https://substackcdn.com/image/fetch/$s_!72au!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f82d12-8492-47d0-ae26-02d32ef6a170_1630x988.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!72au!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f82d12-8492-47d0-ae26-02d32ef6a170_1630x988.png" width="666" height="403.89972527472526" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f6f82d12-8492-47d0-ae26-02d32ef6a170_1630x988.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:883,&quot;width&quot;:1456,&quot;resizeWidth&quot;:666,&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_!72au!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f82d12-8492-47d0-ae26-02d32ef6a170_1630x988.png 424w, https://substackcdn.com/image/fetch/$s_!72au!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f82d12-8492-47d0-ae26-02d32ef6a170_1630x988.png 848w, https://substackcdn.com/image/fetch/$s_!72au!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f82d12-8492-47d0-ae26-02d32ef6a170_1630x988.png 1272w, https://substackcdn.com/image/fetch/$s_!72au!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6f82d12-8492-47d0-ae26-02d32ef6a170_1630x988.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>I wouldn't have known to accept </span><code>distinct_id</code><span> and </span><code>session_id</code><span> as query parameters, to throttle requests, or to look at hosted surveys for inspiration like Paul did. At best, my agents would have taken many more tokens to get to the same solution. At worst, they would have introduced bugs and attack vectors.</span></p><p><span>It&#8217;s this understanding of the problem area, implementation details, and structure that enables engineers to ask the right questions and follow up to get a solution shipped.</span></p><div><hr></div><h2><span>4. Evaluating the work of your agents</span></h2><p><span>This is the point where engineers would have been writing the code. Now, they just tell the agent to do it and that&#8217;s it, right?</span></p><p><span>Sadly, not yet. Engineers still need to evaluate whether it was </span><strong><span>built right</span></strong><span>.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mrUJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b38b1a-2734-4e11-b155-9e7518ec57c8_2290x714.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mrUJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b38b1a-2734-4e11-b155-9e7518ec57c8_2290x714.png 424w, https://substackcdn.com/image/fetch/$s_!mrUJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b38b1a-2734-4e11-b155-9e7518ec57c8_2290x714.png 848w, https://substackcdn.com/image/fetch/$s_!mrUJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b38b1a-2734-4e11-b155-9e7518ec57c8_2290x714.png 1272w, https://substackcdn.com/image/fetch/$s_!mrUJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b38b1a-2734-4e11-b155-9e7518ec57c8_2290x714.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mrUJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b38b1a-2734-4e11-b155-9e7518ec57c8_2290x714.png" width="1456" height="454" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b2b38b1a-2734-4e11-b155-9e7518ec57c8_2290x714.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:454,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:146611,&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://newsletter.posthog.com/i/215679544?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b38b1a-2734-4e11-b155-9e7518ec57c8_2290x714.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_!mrUJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b38b1a-2734-4e11-b155-9e7518ec57c8_2290x714.png 424w, https://substackcdn.com/image/fetch/$s_!mrUJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b38b1a-2734-4e11-b155-9e7518ec57c8_2290x714.png 848w, https://substackcdn.com/image/fetch/$s_!mrUJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b38b1a-2734-4e11-b155-9e7518ec57c8_2290x714.png 1272w, https://substackcdn.com/image/fetch/$s_!mrUJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb2b38b1a-2734-4e11-b155-9e7518ec57c8_2290x714.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>This is done through </span><a href="https://posthog.com/newsletter/code-review-tips?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=ai-writes-all"><span>code reviews</span></a><span> and asking questions like:</span></p><ul><li><p><span>Did the agent actually follow directions?</span></p></li><li><p><span>How is the code quality of this change?</span></p></li><li><p><span>Did the tests pass? If not, how do I make them pass?</span></p></li></ul><p><span>With the volume of changes coming from agents, this quickly becomes a bottleneck. If you are generating 20 PRs per day, reading every line and running them by hand is unrealistic. You need new systems, like review and testing agents, to keep up while ensuring the code you ship is good.</span></p><p><span>For example, many of our engineers have their own custom-built code review and PR management setups. Tom on our warehouse sources team built </span><a href="https://www.talyn.dev/"><span>Talyn</span></a><span> as a &#8220;mission control&#8221; for his PRs, our DevEx team built </span><a href="https://github.com/PostHog/posthog/tree/master/tools/hogbox-preview"><span>speedy virtual machines</span></a><span> to preview changes, and we&#8217;ve already written about Paul&#8217;s </span><a href="https://posthog.com/newsletter/code-review-tips?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=ai-writes-all"><span>code review setup</span></a><span>.</span></p><p><span>Systems like these are necessary when engineers are seeing a dramatic increase in the amount of pull requests they need to review. At PostHog, we went from 1,441 PRs merged in January to 4,869 in August while only growing engineering headcount 10%.</span></p><div><hr></div><h2><span>5. Improving the entire loop</span></h2><p><span>This process doesn't just end. It loops repeatedly. What you build and ship leads to new observations like &#8220;are people using what we built?&#8221;</span></p><p>The loop isn&#8217;t just linear either. Stages feed back on each other:</p><ul><li><p><span>The information you find valuable while </span><strong><span>setting direction</span></strong><span> informs how you </span><strong><span>monitor the situation</span></strong><span>: what information you pay more attention to and what you ignore.</span></p></li><li><p><span>How well a </span><strong><span>decision</span></strong><span> gets built informs the scope of </span><strong><span>what you&#8217;ll decide for agents to build</span></strong><span> </span><strong><span>next</span></strong><span>. Seeing an agent flail and make mistakes leads you to reduce the scope of its future tasks.</span></p></li><li><p><span>The functionality and usage of </span><strong><span>what you built</span></strong><span> informs whether it was the </span><strong><span>right direction</span></strong><span>, giving you experience and updating your knowledge on agent capabilities, technical feasibility, and customer demand.</span></p></li></ul><p><span>It&#8217;s not just one big loop, but many smaller loops as well. The consequence of this is engineers doing more work on the system that builds the product than the product itself. They build the </span><a href="https://posthog.com/newsletter/software-factories?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=ai-writes-all"><span>software factory</span></a><span> rather than the software.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!R0-R!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4b797a-1ec0-45b1-bd63-393fa8fa18c5_2290x1088.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!R0-R!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4b797a-1ec0-45b1-bd63-393fa8fa18c5_2290x1088.png 424w, https://substackcdn.com/image/fetch/$s_!R0-R!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4b797a-1ec0-45b1-bd63-393fa8fa18c5_2290x1088.png 848w, https://substackcdn.com/image/fetch/$s_!R0-R!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4b797a-1ec0-45b1-bd63-393fa8fa18c5_2290x1088.png 1272w, https://substackcdn.com/image/fetch/$s_!R0-R!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4b797a-1ec0-45b1-bd63-393fa8fa18c5_2290x1088.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!R0-R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4b797a-1ec0-45b1-bd63-393fa8fa18c5_2290x1088.png" width="1456" height="692" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5f4b797a-1ec0-45b1-bd63-393fa8fa18c5_2290x1088.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:692,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:186847,&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://newsletter.posthog.com/i/215679544?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4b797a-1ec0-45b1-bd63-393fa8fa18c5_2290x1088.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_!R0-R!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4b797a-1ec0-45b1-bd63-393fa8fa18c5_2290x1088.png 424w, https://substackcdn.com/image/fetch/$s_!R0-R!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4b797a-1ec0-45b1-bd63-393fa8fa18c5_2290x1088.png 848w, https://substackcdn.com/image/fetch/$s_!R0-R!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4b797a-1ec0-45b1-bd63-393fa8fa18c5_2290x1088.png 1272w, https://substackcdn.com/image/fetch/$s_!R0-R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f4b797a-1ec0-45b1-bd63-393fa8fa18c5_2290x1088.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>The growing capability of agents means there are cases where you can skip much of the loop too. Agents often only really need direction and the right tools to ship a valuable fix. With these, they can then figure out what to build, how to build it, and evaluate whether it actually worked. Here&#8217;s a real example from PostHog:</span></p><ul><li><p><strong><span>Direction</span></strong><span> is encoded into a prompt for a </span><a href="https://posthog.com/blog/what-is-a-scout?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=ai-writes-all"><span>Scout</span></a><span>, a long-running agent that makes sense of all your data. In this case, we have one that aims to improve our </span><a href="https://posthog.com/docs/model-context-protocol?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=ai-writes-all"><span>MCP server</span></a><span>, an important surface for our ICP of AI-pilled developers.</span></p></li><li><p><span>Based on </span><strong><span>observations</span></strong><span> from </span><code>mcp feedback submitted</code><span> events and </span><code>mcp_tool_call</code><span> error rates, the Scout finds agents want to define catalog events before they have been ingested and use an ugly workaround to do so. Related observations are grouped and become a report.</span></p></li><li><p><span>This report triggers an agent to </span><strong><a href="https://github.com/PostHog/posthog/pull/90832"><span>write a fix</span></a></strong><span>, which is </span><strong><span>reviewed </span></strong><span>by another agent before escalating for human review. It wasn&#8217;t auto-approved because the review found 2 &#8220;must fix&#8221; issues.</span></p></li><li><p><span>After the fix ships, another agent </span><strong><span>evaluates</span></strong><span> whether issues are actually solved. It does this by keeping notes in its scratchpad about what was reported, what shipped, and validates that the fix holds before considering a report closed.</span></p></li></ul><p><span>In this case, the monitoring, deciding, and evaluation were all handled by the agent, the direction to improve the MCP server was implicitly guiding it, and our product improved without us needing to do anything. We call this making your product </span><a href="https://posthog.com/self-driving?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=ai-writes-all"><span>self-driving</span></a><span>.</span></p><p><span>But even this case is reliant on your skills and knowledge as an engineer. Writing code might be cheap, but your system for building a product isn&#8217;t. All your sources of information, your way of setting direction, your implementation knowledge, the way you evaluate what was built, and the connections between these stages becomes what makes you and your product unique.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!D-oA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08dcad11-d873-4d78-a6c0-825390adf1e8_2290x1274.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!D-oA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08dcad11-d873-4d78-a6c0-825390adf1e8_2290x1274.png 424w, https://substackcdn.com/image/fetch/$s_!D-oA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08dcad11-d873-4d78-a6c0-825390adf1e8_2290x1274.png 848w, https://substackcdn.com/image/fetch/$s_!D-oA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08dcad11-d873-4d78-a6c0-825390adf1e8_2290x1274.png 1272w, https://substackcdn.com/image/fetch/$s_!D-oA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08dcad11-d873-4d78-a6c0-825390adf1e8_2290x1274.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!D-oA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08dcad11-d873-4d78-a6c0-825390adf1e8_2290x1274.png" width="1456" height="810" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/08dcad11-d873-4d78-a6c0-825390adf1e8_2290x1274.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:810,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:232942,&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://newsletter.posthog.com/i/215679544?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08dcad11-d873-4d78-a6c0-825390adf1e8_2290x1274.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_!D-oA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08dcad11-d873-4d78-a6c0-825390adf1e8_2290x1274.png 424w, https://substackcdn.com/image/fetch/$s_!D-oA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08dcad11-d873-4d78-a6c0-825390adf1e8_2290x1274.png 848w, https://substackcdn.com/image/fetch/$s_!D-oA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08dcad11-d873-4d78-a6c0-825390adf1e8_2290x1274.png 1272w, https://substackcdn.com/image/fetch/$s_!D-oA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08dcad11-d873-4d78-a6c0-825390adf1e8_2290x1274.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Yes, this is a version of the <a href="https://en.wikipedia.org/wiki/OODA_loop">OODA loop</a>. Credit John Boyd.</figcaption></figure></div><p><span>This is all still engineering work. It just doesn&#8217;t look like it once did.</span></p><p><em><span>Words by </span><a href="https://x.com/ianvanagas"><span>Ian Vanagas</span></a><span>, OODA loop respecter. Graphics by </span><a href="https://posthog.com/community/profiles/27881"><span>Lottie</span></a><span> and </span><a href="https://posthog.com/community/profiles/34810"><span>Daniel</span></a><span>. </span></em></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.posthog.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">We also need engineers to stick around so we can keep writing posts like these</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><div><hr></div><h2>&#129489;&#8205;&#128187; We&#8217;re hiring too</h2><ul><li><p><strong><a href="https://posthog.com/careers/backend-engineer-ingestion-(europeuk-timezone)?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=ai-writes-all">Backend Engineer &#8211; Ingestion (Europe/UK)</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/technical-staff-writer-(blogs-and-newsletters)?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=ai-writes-all">Technical Staff Writer (Blogs &amp; Newsletters)</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/business-development-lead-americas?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=ai-writes-all">Business Development Lead (Americas)</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/technical-customer-success-manager-americas?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=ai-writes-all">Technical Customer Success Manager (Americas)</a></strong></p></li></ul><div><hr></div><h2>&#128214; More good reads</h2><ul><li><p><strong><a href="https://posthog.com/blog/irl-events?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=ai-writes-all">From 1 to 100 IRL events in a year: The secret to getting engineers to demo</a> &#8211; Daniel Zaltsman</strong></p></li><li><p><strong><a href="https://posthog.com/blog/multimodal-models-need-video?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=ai-writes-all">Multimodal models need video. We froze time to give it to them</a> &#8211; Tue Haulund</strong></p></li><li><p><strong><a href="https://posthog.com/blog/turning-data-into-content?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=ai-writes-all">How to turn your data into content with PostHog</a> &#8211; Natalia Amorim</strong></p></li><li><p><strong><a href="https://ooda.de/media/chet_richards_-_boyds_ooda_loop_its_not_what_you_think.pdf">Boyd&#8217;s OODA Loop (It&#8217;s Not What You Think)</a> &#8211; Chet Richards</strong></p></li><li><p><strong><a href="https://www.normaltech.ai/p/why-ai-hasnt-replaced-software-engineers">Why AI hasn&#8217;t replaced software engineers, and won&#8217;t</a><a href="https://www.normaltech.ai/p/what-will-be-left-for-us-to-workhttps://www.normaltech.ai/p/why-ai-hasnt-replaced-software-engineers"> </a>&#8211; <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Arvind Narayanan&quot;,&quot;id&quot;:19265788,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!bVLI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd0d6558-256e-46c4-b2c5-7cf7f808a9c9_693x693.jpeg&quot;,&quot;uuid&quot;:&quot;c19449bb-45e1-4030-86c3-90ba96a7006a&quot;}" data-component-name="MentionToDOM"></span> and <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Sayash Kapoor&quot;,&quot;id&quot;:891603,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!fLlB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30f87ce8-8dbc-468f-8f8b-9fbf430e323c_976x974.png&quot;,&quot;uuid&quot;:&quot;ece28e10-594a-41db-929b-75c34be4a189&quot;}" data-component-name="MentionToDOM"></span></strong></p></li></ul>]]></content:encoded></item><item><title><![CDATA[Read this before deleting your AGENTS.md]]></title><description><![CDATA[The three best ways to unhobble your AI agents]]></description><link>https://newsletter.posthog.com/p/your-agentsmd-is-holding-you-back</link><guid isPermaLink="false">https://newsletter.posthog.com/p/your-agentsmd-is-holding-you-back</guid><dc:creator><![CDATA[Jina Yoon]]></dc:creator><pubDate>Mon, 31 Aug 2026 18:01:38 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/305f04ed-304f-415f-900a-e027696b5ae3_2400x1260.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a href="https://posthog.com/newsletter/context-engineering?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agents-md"><span>Context engineering</span></a><span> used to focus on adding information that base models lacked:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LBfM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0146129-0ff3-4751-813c-bcd448a3bf60_1392x876.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LBfM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0146129-0ff3-4751-813c-bcd448a3bf60_1392x876.png 424w, https://substackcdn.com/image/fetch/$s_!LBfM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0146129-0ff3-4751-813c-bcd448a3bf60_1392x876.png 848w, https://substackcdn.com/image/fetch/$s_!LBfM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0146129-0ff3-4751-813c-bcd448a3bf60_1392x876.png 1272w, https://substackcdn.com/image/fetch/$s_!LBfM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0146129-0ff3-4751-813c-bcd448a3bf60_1392x876.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LBfM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0146129-0ff3-4751-813c-bcd448a3bf60_1392x876.png" width="1392" height="876" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e0146129-0ff3-4751-813c-bcd448a3bf60_1392x876.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:876,&quot;width&quot;:1392,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:99959,&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://newsletter.posthog.com/i/212623985?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0146129-0ff3-4751-813c-bcd448a3bf60_1392x876.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_!LBfM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0146129-0ff3-4751-813c-bcd448a3bf60_1392x876.png 424w, https://substackcdn.com/image/fetch/$s_!LBfM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0146129-0ff3-4751-813c-bcd448a3bf60_1392x876.png 848w, https://substackcdn.com/image/fetch/$s_!LBfM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0146129-0ff3-4751-813c-bcd448a3bf60_1392x876.png 1272w, https://substackcdn.com/image/fetch/$s_!LBfM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0146129-0ff3-4751-813c-bcd448a3bf60_1392x876.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>But then the models kept getting better. Now, the same context your agents couldn&#8217;t function without </span><a href="https://developers.openai.com/api/docs/guides/latest-model?model=gpt-5.6#favor-leaner-prompts"><span>can make them perform worse</span></a><span>.</span></p><p>Our AI onboarding wizard, for example, often landed on the wrong project in monorepos because our scripts pointed to root by default. Now that models are good at inferring repo structure, <a href="https://github.com/PostHog/wizard/pull/884">we updated it</a> so headless runs take advantage of model recommendations.</p><p>This is the same reason why Anthropic <a href="https://claude.com/blog/the-new-rules-of-context-engineering-for-claude-5-generation-models">removed 80% of Claude Code&#8217;s system prompt</a>. Labs are going back on previous advice about rules and repetition; judgment, interfaces, and progressive disclosure are the new best practices instead.</p><p><span>The goal of context engineering has since shifted toward </span><em><span>subtracting </span></em><span>as much information as you can to get out of the models&#8217; way:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VQmC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cee41b8-9730-45a2-a34e-559a12df7540_1392x876.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VQmC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cee41b8-9730-45a2-a34e-559a12df7540_1392x876.png 424w, https://substackcdn.com/image/fetch/$s_!VQmC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cee41b8-9730-45a2-a34e-559a12df7540_1392x876.png 848w, https://substackcdn.com/image/fetch/$s_!VQmC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cee41b8-9730-45a2-a34e-559a12df7540_1392x876.png 1272w, https://substackcdn.com/image/fetch/$s_!VQmC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cee41b8-9730-45a2-a34e-559a12df7540_1392x876.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VQmC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cee41b8-9730-45a2-a34e-559a12df7540_1392x876.png" width="1392" height="876" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9cee41b8-9730-45a2-a34e-559a12df7540_1392x876.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:876,&quot;width&quot;:1392,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:146330,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.posthog.com/i/212623985?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cee41b8-9730-45a2-a34e-559a12df7540_1392x876.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_!VQmC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cee41b8-9730-45a2-a34e-559a12df7540_1392x876.png 424w, https://substackcdn.com/image/fetch/$s_!VQmC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cee41b8-9730-45a2-a34e-559a12df7540_1392x876.png 848w, https://substackcdn.com/image/fetch/$s_!VQmC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cee41b8-9730-45a2-a34e-559a12df7540_1392x876.png 1272w, https://substackcdn.com/image/fetch/$s_!VQmC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9cee41b8-9730-45a2-a34e-559a12df7540_1392x876.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>But figuring out exactly what to subtract isn&#8217;t easy when dealing with unpredictable behavior. </p><p>When asked about his approach, <span>Boris Cherny, the creator of Claude Code, </span><a href="https://www.youtube.com/watch?v=qyPCVqFUyDo"><span>recommended deleting your CLAUDE.md</span></a><span> every six months to stay on the bleeding edge. </span><a href="https://x.com/theo/status/2082009220631953782"><span>Theo</span></a><span> recently reported it was worth rewriting his </span><code>AGENTS.md</code><span> by hand:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mlyR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8fee2b3-57de-4455-9561-d103cff6224a_1208x534.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mlyR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8fee2b3-57de-4455-9561-d103cff6224a_1208x534.png 424w, https://substackcdn.com/image/fetch/$s_!mlyR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8fee2b3-57de-4455-9561-d103cff6224a_1208x534.png 848w, https://substackcdn.com/image/fetch/$s_!mlyR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8fee2b3-57de-4455-9561-d103cff6224a_1208x534.png 1272w, https://substackcdn.com/image/fetch/$s_!mlyR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8fee2b3-57de-4455-9561-d103cff6224a_1208x534.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mlyR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8fee2b3-57de-4455-9561-d103cff6224a_1208x534.png" width="1208" height="534" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b8fee2b3-57de-4455-9561-d103cff6224a_1208x534.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:534,&quot;width&quot;:1208,&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_!mlyR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8fee2b3-57de-4455-9561-d103cff6224a_1208x534.png 424w, https://substackcdn.com/image/fetch/$s_!mlyR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8fee2b3-57de-4455-9561-d103cff6224a_1208x534.png 848w, https://substackcdn.com/image/fetch/$s_!mlyR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8fee2b3-57de-4455-9561-d103cff6224a_1208x534.png 1272w, https://substackcdn.com/image/fetch/$s_!mlyR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8fee2b3-57de-4455-9561-d103cff6224a_1208x534.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If you'd rather not start from scratch every time, here are three practical ways to maintain your context while <a href="https://claude.com/blog/the-new-rules-of-context-engineering-for-claude-5-generation-models">"unhobbling" AI</a>, from most hands-on to most <a href="https://posthog.com/newsletter/agent-autonomy?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agents-md">autonomous</a>.</p><div><hr></div><h2><span>1. Run </span><code>/doctor</code><span>, but follow up with real eyes</span></h2><p><span>The simplest way to keep your context healthy is to read and edit it yourself.</span></p><p><span>Most coding agents have a built-in </span><code>/doctor</code><span> command to help with this. </span><a href="https://code.claude.com/docs/en/commands#:~:text=v2.1.198%20or%20later-,/doctor,-Skill.%20Run"><span>Anthropic&#8217;s version of it</span></a><span> runs basic health checks, deletes redundant prompts, catches broken settings, finds unused plugins, and optimizes for lazy loading.</span></p><p><span>The report also prints a summary of how often you&#8217;ve used each file, and how much it can trim. Here&#8217;s what that looks like for our website&#8217;s main </span><code>AGENTS.md</code><span>:</span></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;f119900e-cc7a-4bb9-87d4-33b0230b8914&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext"> Component: posthog.com/AGENTS.md (= CLAUDE.md symlink)
  Type: memory file
  Scope: project (checked in)
  Uses (total since install): always loaded
  Used in window?: yes
  Est. resident tokens: ~1,780
  Verdict: trim ~350</code></pre></div><p><span>Across the </span><code>posthog.com</code><span> repo, it suggested turning off 3 unused plugins and 3 skills across our website repo and estimated saving an average of 6K tokens per session.</span></p><p><span>This is decent, but you can&#8217;t rely on it to catch everything because it doesn&#8217;t check for correctness; it acts only based on what it can derive from your code.</span></p><p><span>For example, last month, we started using merge queues and added this line to our </span><code>AGENTS.md</code><span>:</span></p><div class="callout-block" data-callout="true"><p><span>&#8220;All merges into </span><code>master</code><span> go through the Trunk merge queue. Never run </span><code>gh pr merge</code><span>.&#8221;</span></p></div><p><span>A couple days later, we paused the queue to fix some failing tests and forgot to update that line. Our agents therefore had wrong instructions for 21 hours. During that time, one engineer&#8217;s PR got stuck for 10 hours; another lost 45 minutes investigating the cause before </span><a href="https://github.com/PostHog/posthog/pull/75873"><span>updating the instructions</span></a><span>.</span></p><p><span>We didn&#8217;t use </span><code>claude doctor</code><span> in the </span><code>posthog</code><span> monorepo to fix this, but it couldn&#8217;t have caught it anyway since merge queue state lives in a GitHub setting rather than in code. Agents don&#8217;t know what they don&#8217;t know.</span></p><blockquote><p><strong><span>Try this:</span></strong><span> Run </span><code>claude doctor</code> after each upgrade and follow up with a manual pass on your <code>AGENTS.md</code><span>. For each line, if you can&#8217;t name the failure it prevents, delete it.</span></p></blockquote><div><hr></div><h2><span>2. Test your context like it&#8217;s code</span></h2><p><span>Another tool for maintaining and unhobbling your context is evals.</span></p><p><span>It&#8217;s just like adding regression tests whenever you fix a bug in code. Every time you update your context to address an agent&#8217;s mistake, capture what caused it in the first place as an eval.</span></p><p><span>For example, we record technical &#8220;gotchas&#8221; we see from real PostHog Wizard runs as framework-specific </span><a href="https://github.com/PostHog/context-mill/blob/main/context/commandments.yaml"><span>commandments</span></a><span> such as:</span></p><ul><li><p><span>For versions 15.3+, initialize PostHog in </span><code>instrumentation-client.ts</code><span> for the simplest setup.</span></p></li><li><p><span>For Phoenix or Plug apps, add </span><code>PostHog.Integrations.Plug</code><span> before the router so request context is attached to captured events and errors</span></p></li><li><p><code>posthog-rs</code><span> is the Rust SDK crate; add it with </span><code>cargo add posthog-rs</code><span> and construct the client with </span><code>posthog_rs::client(options).await</code>.</p></li></ul><p><span>These get combined with instructions from the </span><code>context-mill</code><span> (e.g., &#8220;reuse event names the project already uses&#8221;) and a set of ~40 clean sample apps to create the evals we use in the </span><a href="https://github.com/PostHog/wizard-workbench/tree/main/services/wizard-ci"><span>wizard-ci</span></a><span>. Here&#8217;s how it works:</span></p><ol><li><p><code>wizard-ci</code><span> runs the PostHog Wizard on all ~40 sample apps and creates one PR for each.</span></p></li><li><p><span>Those PRs don&#8217;t get merged. Instead, a second agent called the </span><a href="https://github.com/PostHog/wizard-workbench/tree/main/services/pr-evaluator"><span>pr-evaluator</span></a><span> grades each of them based on the diffs and session logs.</span></p></li><li><p><span>The </span><code>pr-evaluator</code><span> leaves metrics and reports on the trigger PR and the </span><code>wizard-ci PR</code><span>.</span></p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wzqN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f17b359-37ad-46ff-a4a5-5ac0408483ee_1200x1200.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wzqN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f17b359-37ad-46ff-a4a5-5ac0408483ee_1200x1200.png 424w, https://substackcdn.com/image/fetch/$s_!wzqN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f17b359-37ad-46ff-a4a5-5ac0408483ee_1200x1200.png 848w, https://substackcdn.com/image/fetch/$s_!wzqN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f17b359-37ad-46ff-a4a5-5ac0408483ee_1200x1200.png 1272w, https://substackcdn.com/image/fetch/$s_!wzqN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f17b359-37ad-46ff-a4a5-5ac0408483ee_1200x1200.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wzqN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f17b359-37ad-46ff-a4a5-5ac0408483ee_1200x1200.png" width="1200" height="1200" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4f17b359-37ad-46ff-a4a5-5ac0408483ee_1200x1200.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1200,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:138813,&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://newsletter.posthog.com/i/212623985?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f17b359-37ad-46ff-a4a5-5ac0408483ee_1200x1200.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wzqN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f17b359-37ad-46ff-a4a5-5ac0408483ee_1200x1200.png 424w, https://substackcdn.com/image/fetch/$s_!wzqN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f17b359-37ad-46ff-a4a5-5ac0408483ee_1200x1200.png 848w, https://substackcdn.com/image/fetch/$s_!wzqN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f17b359-37ad-46ff-a4a5-5ac0408483ee_1200x1200.png 1272w, https://substackcdn.com/image/fetch/$s_!wzqN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f17b359-37ad-46ff-a4a5-5ac0408483ee_1200x1200.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://github.com/PostHog/wizard-workbench/pulls?q=is%3Apr+is%3Aclosed+label%3ACI%2FCD"><span>These reports</span></a><span> help us catch issues like the wizard skipping installing PostHog entirely because the model determined it was already complete:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eZ5_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe089ee94-70b3-45b2-a749-89a7f01ba997_784x630.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eZ5_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe089ee94-70b3-45b2-a749-89a7f01ba997_784x630.png 424w, https://substackcdn.com/image/fetch/$s_!eZ5_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe089ee94-70b3-45b2-a749-89a7f01ba997_784x630.png 848w, https://substackcdn.com/image/fetch/$s_!eZ5_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe089ee94-70b3-45b2-a749-89a7f01ba997_784x630.png 1272w, https://substackcdn.com/image/fetch/$s_!eZ5_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe089ee94-70b3-45b2-a749-89a7f01ba997_784x630.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eZ5_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe089ee94-70b3-45b2-a749-89a7f01ba997_784x630.png" width="784" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e089ee94-70b3-45b2-a749-89a7f01ba997_784x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:784,&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_!eZ5_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe089ee94-70b3-45b2-a749-89a7f01ba997_784x630.png 424w, https://substackcdn.com/image/fetch/$s_!eZ5_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe089ee94-70b3-45b2-a749-89a7f01ba997_784x630.png 848w, https://substackcdn.com/image/fetch/$s_!eZ5_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe089ee94-70b3-45b2-a749-89a7f01ba997_784x630.png 1272w, https://substackcdn.com/image/fetch/$s_!eZ5_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe089ee94-70b3-45b2-a749-89a7f01ba997_784x630.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><code>wizard-ci</code><span> is just one of many context-as-code tools we&#8217;ve built in our </span><a href="https://github.com/PostHog/wizard-workbench"><span>wizard-workbench</span></a><span>. The setup is complex since it maintains </span><a href="https://posthog.com/newsletter/context-engineering?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agents-md#lesson-6-investing-in-context-pays-off"><span>our biggest conversion path</span></a><span>, but the core concept is easy to apply: test your context by saving prompts that check if your agents are doing what you want them to do.</span></p><blockquote><p><strong><span>Try this:</span></strong><span> The next time your agent makes a mistake, paste the prompt that caused it into a </span><code>failures.md</code><span>. Re-run those prompts the next time you edit or delete parts of your </span><code>AGENTS.md</code> <span>as a quick test suite for your highest-cost piece of context.</span></p></blockquote><div><hr></div><h2><span>3. Ask agents for feedback </span>directly</h2><p><span>Another option for fixing your context is to just ask. Agents are good at providing feedback about how they would improve your context while they&#8217;re using it.</span></p><p><span>Many developers already do this to update their skills, but you can take it further by putting it in your prompts by default.</span></p><p><span>For example, the final instruction for the PostHog Wizard says to </span><a href="https://github.com/PostHog/wizard/blob/ba91f26c418f332f1ede8b6e80fd9fa14bbb22e8/src/lib/agent/runner/sequence/orchestrator/queue-tools.ts#L23"><span>send back a quick remark</span></a><span> about any errors they encountered in production:</span></p><div class="callout-block" data-callout="true"><p><span>&#8220;What information or guidance would have been useful to have in the integration prompt or documentation for this task? Specifically anything that would have prevented tool failures, erroneous edits, or other wasted turns.&#8221;</span></p></div><p><span>This gives us a rich feed of live bug reports for cheap &#8211; a basic form of AI observability:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TEg5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fced0f4d9-1847-41a1-a6c1-e2a0db433175_1126x340.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TEg5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fced0f4d9-1847-41a1-a6c1-e2a0db433175_1126x340.png 424w, https://substackcdn.com/image/fetch/$s_!TEg5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fced0f4d9-1847-41a1-a6c1-e2a0db433175_1126x340.png 848w, https://substackcdn.com/image/fetch/$s_!TEg5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fced0f4d9-1847-41a1-a6c1-e2a0db433175_1126x340.png 1272w, https://substackcdn.com/image/fetch/$s_!TEg5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fced0f4d9-1847-41a1-a6c1-e2a0db433175_1126x340.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TEg5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fced0f4d9-1847-41a1-a6c1-e2a0db433175_1126x340.png" width="1126" height="340" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ced0f4d9-1847-41a1-a6c1-e2a0db433175_1126x340.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:340,&quot;width&quot;:1126,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:123617,&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://newsletter.posthog.com/i/212623985?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fced0f4d9-1847-41a1-a6c1-e2a0db433175_1126x340.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_!TEg5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fced0f4d9-1847-41a1-a6c1-e2a0db433175_1126x340.png 424w, https://substackcdn.com/image/fetch/$s_!TEg5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fced0f4d9-1847-41a1-a6c1-e2a0db433175_1126x340.png 848w, https://substackcdn.com/image/fetch/$s_!TEg5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fced0f4d9-1847-41a1-a6c1-e2a0db433175_1126x340.png 1272w, https://substackcdn.com/image/fetch/$s_!TEg5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fced0f4d9-1847-41a1-a6c1-e2a0db433175_1126x340.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Examples of agent-provided feedback from real PostHog Wizard runs in prod.</figcaption></figure></div><p><span>We took this </span><em><span>even further</span></em><span> by feeding them back into our </span><code>context-mill</code><span> with a </span><a href="https://posthog.com/newsletter/loops?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agents-md"><span>loop</span></a><span>, making it </span><a href="https://posthog.com/self-driving?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agents-md"><span>self-driving</span></a><span>. But since we can't trust agents at face value, we cluster and verify the underlying issues first. Here's what the feedback clusters looked like for the last month:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BW6J!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e755e8e-f21b-4a9e-87dc-ed14dd8372cf_1178x824.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BW6J!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e755e8e-f21b-4a9e-87dc-ed14dd8372cf_1178x824.png 424w, https://substackcdn.com/image/fetch/$s_!BW6J!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e755e8e-f21b-4a9e-87dc-ed14dd8372cf_1178x824.png 848w, https://substackcdn.com/image/fetch/$s_!BW6J!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e755e8e-f21b-4a9e-87dc-ed14dd8372cf_1178x824.png 1272w, https://substackcdn.com/image/fetch/$s_!BW6J!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e755e8e-f21b-4a9e-87dc-ed14dd8372cf_1178x824.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BW6J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e755e8e-f21b-4a9e-87dc-ed14dd8372cf_1178x824.png" width="1178" height="824" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9e755e8e-f21b-4a9e-87dc-ed14dd8372cf_1178x824.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:824,&quot;width&quot;:1178,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:60173,&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://newsletter.posthog.com/i/212623985?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e755e8e-f21b-4a9e-87dc-ed14dd8372cf_1178x824.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_!BW6J!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e755e8e-f21b-4a9e-87dc-ed14dd8372cf_1178x824.png 424w, https://substackcdn.com/image/fetch/$s_!BW6J!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e755e8e-f21b-4a9e-87dc-ed14dd8372cf_1178x824.png 848w, https://substackcdn.com/image/fetch/$s_!BW6J!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e755e8e-f21b-4a9e-87dc-ed14dd8372cf_1178x824.png 1272w, https://substackcdn.com/image/fetch/$s_!BW6J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e755e8e-f21b-4a9e-87dc-ed14dd8372cf_1178x824.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Half of the </span><code>other</code><span> category is just confirmation messages like &#8220;succeeded on the first attempt,&#8221; or &#8220;</span><code>posthog-js</code><span> already installed&#8221;. The other half is a long tail of issues that weren&#8217;t common enough to cluster.</span></p><p><span>Once the loop identifies a meaningful cluster, it deploys subagents to verify the issue before attempting a fix. For example, to check the </span><code>notebook create schema/tool</code><span> issue, a subagent followed the legacy instructions to reproduce the hand-splicing text failure that was addressed in </span><a href="https://github.com/PostHog/context-mill/pull/272"><span>this PR</span></a><span>.</span></p><p><span>This approach works best at scale to cluster remarks, but you can still apply the concept to your workflows by simply asking agents to log what context files they used.</span></p><p><span>We do this in our </span><code>posthog</code><span> monorepo </span><a href="https://github.com/PostHog/posthog/blob/27c2aeee512923e4c9b29045d84a7ec932312ebf/.github/pull_request_template.md?plain=1#L53"><span>PR template</span></a><span>, which prompts agents to name any skills invoked. We&#8217;ve seen other agents use this information to catch and fix skill inconsistencies, like in </span><a href="https://github.com/PostHog/posthog/pull/81018"><span>this PR</span></a><span> where Claude found an issue while unblocking stalled ClickHouse cleanup PRs.</span></p><blockquote><p><strong><span>Try this: </span></strong>Agents face issues all the time. Ask them to provide feedback about your context with a structured prompt about any errors, inconsistencies, or failures they ran into. Over time, you can turn verified reports into a <a href="https://posthog.com/self-driving?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agents-md">self-driving</a> context system. </p></blockquote><p><em>Written by <a href="https://x.com/jinayoon_">Jina Yoon</a>, who would like a word with whoever coined the term &#8220;unhobbling.&#8221;</em></p><div><hr></div><h2><span>&#129504; Optimize your HUMANS.md</span></h2><ul><li><p><strong><a href="https://claude.com/blog/a-field-guide-to-claude-fable-finding-your-unknowns"><span>A field guide to Claude Fable 5: Finding your unknowns</span></a> &#8211; Thariq Shihipar</strong></p></li><li><p><strong><a href="https://posthog.com/blog/semantic-layer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agents-md">Our context warehouse knows your data, the semantic layer tells it what to trust</a> &#8211; Thiago Rocha Salvatore, Lizzie Epton</strong></p></li><li><p><strong><a href="https://posthog.com/blog/developer-marketing-questions?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agents-md"><span>The most common questions about developer marketing, answered</span></a> &#8211; Joe Martin</strong></p></li><li><p><strong><a href="https://posthog.com/blog/nobody-watches-session-replays?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agents-md"><span>Nobody watches their session replays: A study of 7.7 million views</span></a> &#8211; Natalia Amorim</strong></p></li><li><p><strong><a href="https://luke.geek.nz/azure/eval-gates-for-prompts/">Treat prompt changes like code deploys</a> &#8211; Luke Murray</strong></p></li></ul><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.posthog.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Subscribe for the freshest context.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><div><hr></div><h2><span>&#129428; Join the PostHog crew</span></h2><ul><li><p><strong><a href="https://posthog.com/careers/backend-engineer-ingestion-(europeuk-timezone)?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agents-md"><span>Backend Engineer &#8211; Ingestion (Europe/UK)</span></a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/technical-content-writer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agents-md">Technical Content Writer</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/business-development-lead-americas?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agents-md">Business Development Lead (Americas)</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/technical-customer-success-manager-americas?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agents-md"><span>Technical Customer Success Manager (Americas)</span></a></strong></p></li></ul>]]></content:encoded></item><item><title><![CDATA[You need to find product-market fit again (sorry)]]></title><description><![CDATA[A case study in disrupting yourself]]></description><link>https://newsletter.posthog.com/p/you-need-to-find-product-market-fit</link><guid isPermaLink="false">https://newsletter.posthog.com/p/you-need-to-find-product-market-fit</guid><dc:creator><![CDATA[Cleo Lant]]></dc:creator><pubDate>Tue, 25 Aug 2026 17:43:42 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/c7da9331-5ada-429d-9f08-9e7c07f1bb98_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>If a team powered by AI rebuilt your flagship product today, what would they build and what would they skip? PostHog Desktop is our work-in-progress answer to that open question.</span></p><p><span>It came from a simple reality no company can escape: the </span><a href="https://posthog.com/founders/product-market-fit-game?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=pmf-again"><span>product-market fit game</span></a><span> never really ends. Whether it&#8217;s frontier labs attacking your territory, or the hundreds of scrappy two-person teams determined to build &#8220;[Your App] for 2026&#8221;, now is the time disrupt yourself.</span></p><p><span>I&#8217;ve had the job of marketing our in-house disruption through every shape it&#8217;s taken. It started as</span><a href="https://posthog.com/blog/self-driving-product?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=pmf-again"><span> PostHog Code</span></a><span>, an agentic coding tool and product editor. Then the most valuable thing that grew inside it, </span><a href="https://posthog.com/self-driving?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=pmf-again"><span>self-driving</span></a><span>, got de-bundled and shipped into PostHog Web.</span></p><p><span>The container it left behind became </span><a href="https://posthog.com/desktop?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=pmf-again"><span>PostHog Desktop</span></a><span>: a different product shape entirely, built around multiplayer spaces, generative UI artifacts, and the thesis that shared business context is key to a product that </span><a href="https://posthog.com/blog/what-if-your-product-built-itself?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=pmf-again"><span>builds itself.</span></a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qUJN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb96a331a-2470-4b20-9bea-64520144f213_2048x1194.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qUJN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb96a331a-2470-4b20-9bea-64520144f213_2048x1194.png 424w, https://substackcdn.com/image/fetch/$s_!qUJN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb96a331a-2470-4b20-9bea-64520144f213_2048x1194.png 848w, https://substackcdn.com/image/fetch/$s_!qUJN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb96a331a-2470-4b20-9bea-64520144f213_2048x1194.png 1272w, https://substackcdn.com/image/fetch/$s_!qUJN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb96a331a-2470-4b20-9bea-64520144f213_2048x1194.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qUJN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb96a331a-2470-4b20-9bea-64520144f213_2048x1194.png" width="1456" height="849" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b96a331a-2470-4b20-9bea-64520144f213_2048x1194.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:849,&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;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qUJN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb96a331a-2470-4b20-9bea-64520144f213_2048x1194.png 424w, https://substackcdn.com/image/fetch/$s_!qUJN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb96a331a-2470-4b20-9bea-64520144f213_2048x1194.png 848w, https://substackcdn.com/image/fetch/$s_!qUJN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb96a331a-2470-4b20-9bea-64520144f213_2048x1194.png 1272w, https://substackcdn.com/image/fetch/$s_!qUJN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb96a331a-2470-4b20-9bea-64520144f213_2048x1194.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">This canvas captures the state of self-driving development. Because it's generative UI, we can visualize whatever data we want on it.</figcaption></figure></div><p><span>This isn&#8217;t advice from someone who&#8217;s run the PMF playbook and won &#8211; PostHog Desktop is now in open beta and doesn&#8217;t have product-market fit (yet). It&#8217;s mid-game observations that might help if you&#8217;re post product-market fit, and pre-whatever comes next.</span></p><h2><span>1. Write down how you die</span></h2><p>Disrupting yourself is about playing a good offense, but you still need to understand what you&#8217;re defending against. <span>Write down the threats as three or four one-liners: who or what makes your product unnecessary? (we&#8217;ll counterattack later, so just speculate the future for now). </span></p><p><span>For example, Vercel built its agent tooling by running its own agents in production and shipping the gaps as products: </span><a href="https://vercel.com/ai-gateway"><span>AI Gateway</span></a><span>, </span><a href="https://chat-sdk.dev/"><span>Chat SDK</span></a><span>, and the </span><a href="https://vercel.com/blog/agent-stack"><span>Agent Stack</span></a><span>. Your cause of &#8220;death&#8221; doesn&#8217;t have to be a villain. AI models getting so good that everyone can ship software is arguably utopia, but you don&#8217;t need me to tell you how disruptive that&#8217;s been.</span></p><h2><span>2. Fund the attacker yourself</span></h2><p><span>Give the &#8220;death-page&#8221; to a small team with big ideas &#8211; plus a blank slate to build something where your existing users won&#8217;t trip over it. 3-5 people, reporting to a founder rather than to the department they&#8217;re disrupting. You get to be the incumbent and the seed investor at once! (startups attacking you would kill for this setup).</span></p><h2><span>3. Score it like a seed bet, not a business unit</span></h2><p><span>In all likelihood, the new thing you build will have lower margins, worse retention, and more pivots than you expect. Don&#8217;t compare the metrics of your pre-PMF bet to those of your current PMF product (not yet, at least).</span></p><p><span>Write down, in advance, what the experiment will be judged on, the resources it&#8217;s allocated, and the runway it has before you even </span><em><span>think</span></em><span> about killing it. This is your defense against pulling the plug too early, and subsidized infinity.</span></p><h2><span>4. Look for customers doing cool things with your product</span></h2><p><span>With the PostHog MCP, you never have to open the web app at all &#8211; and that&#8217;s fine by us. Whether people reach PostHog through the </span><a href="https://posthog.com/docs/model-context-protocol?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=pmf-again"><span>MCP</span></a><span>, the </span><a href="https://posthog.com/slack?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=pmf-again"><span>Slack app</span></a><span>, Desktop, or the </span><a href="https://posthog.com/docs/cli?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=pmf-again"><span>CLI</span></a><span>, our job stays the same: give them tools they need to build successful products.</span></p><p><span>One of our largest customers took us up on that in a way we didn&#8217;t expect. They wired our MCP to Claude (plus a few other tools), and built their own working prototype of PostHog 2.0. This is the yellow flag every founder should watch for: when your users start assembling the next version of your product themselves, the demand is proven.</span></p><h2><span>5. Build first, validate later</span></h2><p><span>Your users are a great source of insight about how to improve your existing product. A good product team is obsessed with pleasing them, and every signal they send you compounds to growth.</span></p><p><span>The opposite is true when taking a bet on something new. Ask this amplification machine whether you should build a strange new thing for a strange new market (maybe even a whole new category) and it&#8217;ll probably say: &#8220;uh&#8230; no? Why risk what&#8217;s working?&#8221;</span></p><p><span>You can win these people round, but only after you&#8217;ve built something real, so don&#8217;t get hung up on validating your idea with them beforehand. We launched PostHog Code as a closed beta and validated it with real users, which led us to integrating its core ideas into PostHog Web.</span></p><h2><span>6. Ask the disappointment question early and often</span></h2><p><span>Once you have a prototype, dogfood it internally. The </span><a href="https://newsletter.posthog.com/i/137830990/3-launch-a-pmf-survey"><span>classic Sean Ellis PMF survey</span></a><span>: &#8220;how disappointed would you be if this disappeared?&#8221; works on your own team (especially if they&#8217;re your </span><a href="https://posthog.com/newsletter/ideal-customer-profile-framework?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=pmf-again"><span>ICP</span></a><span>).</span></p><p><span>We did this before a recent product launch and scored 23%. The industry PMF benchmark is ~40%, so obviously this was painful. Your team will tell you the truth before your churn does, but only if you ask them.</span></p><h2><span>7. Let usage overrule everyone, including you</span></h2><p><span>Building a product runs on a mix of data (user interviews, session replays, product analytics) and, honestly, some plain vibes. Vibes are fine for deciding what to try &#8211; not what to keep on building. We set up a </span><a href="https://posthog.com/blog/replay-vision?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=pmf-again"><span>Replay Vision</span></a><span> agent that watches session recordings of PostHog Desktop users and posts a daily summary in Slack. It contradicts our vibes </span><em><span>constantly</span></em><span>.</span></p><p><strong><span>One thing to keep in mind:</span></strong><span> people who love your current product will land in the new version carrying assumptions. They&#8217;ll judge it against the workflow they already have, and read every change as something taken away. Net-new users have no map, and will show you what the new thing actually invites people to do. Both signals matter, but don&#8217;t try to average them.</span></p><h2><span>8. Build the new thing on the asset your attackers can&#8217;t copy</span></h2><p><span>Every incumbent has something a newcomer can&#8217;t copy &#8211; usually data, distribution, or both. Find a way to give your pre-PMF team that family advantage without the generational baggage.</span></p><p><span>In our case, Desktop shares almost no interface code with PostHog Web. What it shares is the data, including the same MCP we hand to customers. And because it&#8217;s a new app, long-time users keep the interface that works for them, while new users get to choose their own PostHog adventure.</span></p><p><span>GitHub did the same with Copilot: a brand-new product built on the two things only it and Microsoft had: the world&#8217;s largest pile of code, and distribution to millions of developers.</span></p><h2><span>9. Ship before you&#8217;re ready</span></h2><p><span>When you hop back on the PMF treadmill, it will feel bad in very specific ways. The new thing will lose in almost every comparison your company knows how to make. You&#8217;ll change the name too many times. You&#8217;ll kill features you were proud of two weeks after shipping them. And your own people will tell you they don&#8217;t &#8220;get&#8221; what you&#8217;re doing.</span></p><p><span>If none of that is happening, you&#8217;re probably not disrupting yourself.</span></p><p><span>But you&#8217;ve done this once before, so you&#8217;re better armed than any first-timer. You have revenue funding the experiment, real users telling you the truth, years of data to build on &#8211; and now agents doing half the building.</span></p><p><a href="https://posthog.com/desktop?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=pmf-again"><span>PostHog Desktop</span></a><span> is our version of this, and it&#8217;s out now for you to try (no waitlist). Come use it in ways we never imagined, and tell us what you&#8217;d fight to keep. If it all goes sideways, we&#8217;ll write the post-mortem post too (those are usually pretty popular).</span></p><p><em><span>Words by </span><a href="https://www.linkedin.com/in/cleolant/"><span>Cleo Lant</span></a><span>, who thinks a sandwich cut into triangles tastes better. </span></em></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.posthog.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Subscribe for more disruption</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><div><hr></div><h2>&#128188; Join us on our journey to PMF (again)</h2><ul><li><p><strong><a href="https://posthog.com/careers/technical-customer-success-manager-americas?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=pmf-again">Technical Customer Success Manager</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/technical-account-executive-(sfu.s.-west-coast)?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=pmf-again">Technical Account Executive (SF/U.S. West Coast)</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/technical-account-executive-emea?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=pmf-again">Technical Account Executive (EMEA)</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/bizops-manager-(sales-focused)?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=pmf-again"><span>BizOps Manager (Sales Focused)</span></a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/backend-engineer-ingestion-(europeuk-timezone)?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=pmf-again"><span>Backend Engineer &#8211; Ingestion</span></a></strong></p></li></ul>]]></content:encoded></item><item><title><![CDATA[This post will save you tokens]]></title><description><![CDATA[Tokenminning is tokenwinning]]></description><link>https://newsletter.posthog.com/p/this-post-will-save-you-tokens</link><guid isPermaLink="false">https://newsletter.posthog.com/p/this-post-will-save-you-tokens</guid><dc:creator><![CDATA[Ian Vanagas]]></dc:creator><pubDate>Tue, 18 Aug 2026 17:30:53 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/fd4be58e-e6f9-45c3-a013-9da64f68fbea_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>Three months ago, everyone was tokenmaxxing. Then, reality struck.</span></p><p><span>Fable limits made the average developer increasingly aware of their spend, and giants like Facebook, Microsoft, and Shopify turned away and </span><a href="https://blog.pragmaticengineer.com/the-pulse-tokenmaxxing-as-a-weird-new-trend/"><span>curbed the practice</span></a><span>.</span></p><p><span>Now everyone is (rightly) obsessed with </span><strong><span>tokenminning</span></strong><span>: optimizing token spend and limits for fun and profit. This post is your guide to squeezing the most out of your dollars and context.</span></p><h2><span>1. Learn how to track token spend</span></h2><p><span>The first step in tokenminning is knowing how much you spend. If we didn&#8217;t track this, we never would have known:</span></p><ul><li><p><span>A product&#8217;s LLM costs doubling from $5k to $10k in a day wasn&#8217;t a regression. A launch caused a workflow to run 4x more, but the cost per run actually </span><em><span>fell</span></em><span> from $1.8 to $1.4.</span></p></li><li><p><span>The Claude Code SDK in </span><a href="https://posthog.com/desktop?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=tokenminning"><span>PostHog Desktop</span></a><span> uses Haiku extensively (3-5 calls per Opus call) revealing an opportunity for us to swap it with a cheaper, self-hosted model in the future.</span></p></li><li><p><a href="https://github.com/rtk-ai/rtk"><span>RTK</span></a><span> wasn&#8217;t saving tokens on bash commands as expected because it wasn&#8217;t being used properly by Claude. A fix cut 13% in bash token usage and a PR is open to </span><a href="https://github.com/PostHog/posthog/pull/80119"><span>ship it to everyone</span></a><span>.</span></p></li></ul><p><span>To catch and optimize spend like this, you need to monitor:</span></p><ol><li><p><span>How much</span><strong><span> you </span></strong><span>use on flat-rate subscriptions like Claude Code which are constrained by context windows and rate limits, rather than costs. The /usage command is the big one here, but so are </span><a href="https://ccusage.com/"><span>ccusage</span></a><span>, quota widgets like </span><a href="https://github.com/Iamshankhadeep/ccseva"><span>ccseva</span></a><span>, and monitoring of </span><a href="https://www.uber.com/us/en/blog/genai-gateway/"><span>LLM spend through gateways</span></a><span>.</span></p></li><li><p><span>How much</span><strong><span> your team </span></strong><span>uses automations, Slack apps, and scheduled agents. Many have monitoring built-in, but you need to consolidate them to prevent blind spots.</span></p></li><li><p><span>How much</span><strong><span> customers</span></strong><span> use AI-powered features. Being efficient here impacts what products you can build, how much you can charge for them, and how much you can grow. </span><a href="https://posthog.com/ai-observability?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=tokenminning"><span>AI Observability</span></a><span> is a big help.</span></p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!srBl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F662462a9-b759-4c40-a988-0ce5abc98534_2048x1211.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!srBl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F662462a9-b759-4c40-a988-0ce5abc98534_2048x1211.png 424w, https://substackcdn.com/image/fetch/$s_!srBl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F662462a9-b759-4c40-a988-0ce5abc98534_2048x1211.png 848w, https://substackcdn.com/image/fetch/$s_!srBl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F662462a9-b759-4c40-a988-0ce5abc98534_2048x1211.png 1272w, https://substackcdn.com/image/fetch/$s_!srBl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F662462a9-b759-4c40-a988-0ce5abc98534_2048x1211.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!srBl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F662462a9-b759-4c40-a988-0ce5abc98534_2048x1211.png" width="1456" height="861" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/662462a9-b759-4c40-a988-0ce5abc98534_2048x1211.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:861,&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;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!srBl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F662462a9-b759-4c40-a988-0ce5abc98534_2048x1211.png 424w, https://substackcdn.com/image/fetch/$s_!srBl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F662462a9-b759-4c40-a988-0ce5abc98534_2048x1211.png 848w, https://substackcdn.com/image/fetch/$s_!srBl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F662462a9-b759-4c40-a988-0ce5abc98534_2048x1211.png 1272w, https://substackcdn.com/image/fetch/$s_!srBl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F662462a9-b759-4c40-a988-0ce5abc98534_2048x1211.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Teams almost always have a gap in at least one of these places. This limits the details you have about what workflows, features, and use cases are using the most tokens. Your monthly bill from Anthropic won&#8217;t tell you this.</span></p><p><span>However you find your baseline costs, it needs to go hand-in-hand with tracking accuracy, success rates, and usage because it defeats the purpose of tokenminning if the changes make your workflows or products worse. </span><a href="https://posthog.com/docs/ai-evals?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=tokenminning"><span>Evals</span></a><span> and </span><a href="https://posthog.com/product-analytics?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=tokenminning"><span>product analytics</span></a><span> are critical to monitoring this.</span></p><p><span>Tracking quality also reveals failures like bad queries, repeated retries, and agent runs that produce nothing. Fixing errors like these prevents token spend that never should have been spent in the first place.</span></p><h2><span>2. Optimize your </span><code>AGENTS.md</code></h2><p><span>Your </span><code>AGENTS.md</code><span> is like a backpack you carry wherever you go. Its goal is to save your agent tokens when they read it. To best do that, it should include:</span></p><ol><li><p><strong><span>Discovery shortcuts.</span></strong><span> Facts an agent will find eventually, expensively. For example, details on our bespoke, unguessable hogli CLI for testing, linting, and building.</span></p></li><li><p><strong><span>Undiscoverable intent.</span></strong><span> Direction of travel, taste, and policy. Like preferring SeaweedFS over MinIO (because the latter is being removed) or that we ban hooks.</span></p></li><li><p><strong><span>Landmines.</span></strong><span> Things agents get confidently wrong and only learn from CI or prod like workflow backward compatibility breaking CI repeatedly or dispatch caps on stacked PRs.</span></p></li></ol><p><span>It shouldn't include:</span></p><ul><li><p><span>Lint-enforced content, like using camelCase for TypeScript or American English</span></p></li><li><p><span>Obvious model-defaults, like following existing patterns in the codebase and writing tests</span></p></li><li><p><span>One ls or grep answers, like directory trees, the list of packages, 200 line reference components</span></p></li><li><p><span>Docs meant for humans, like mission statements or contributing etiquette</span></p></li></ul><p><span>An </span><code>AGENTS.md</code><span> file is definitely worth having though. </span><a href="https://arxiv.org/abs/2601.20404"><span>One study</span></a><span> showed &#8220;the presence of </span><code>AGENTS.md</code><span> is associated with a lower median runtime (&#916; 28.64%) and reduced output token consumption (&#916; 16.58%), while maintaining a comparable task completion behavior.&#8221; That&#8217;s tokenminning if I ever heard it.</span></p><h2><span>3. Audit your MCP servers</span></h2><p><span>Although MCP tool definitions and schemas don't load into the system prompt anymore, fetching one can still blow up a session's context window. For example:</span></p><ul><li><p><span>The official </span><a href="https://www.atlassian.com/blog/development/mcp-compression-preventing-tool-bloat-in-ai-agents"><span>Atlassian MCP server</span></a><span> consumes roughly 10k tokens for Jira and Confluence tools alone.</span></p></li><li><p><span>The official GitHub MCP server exposes 94 tools and consumes roughly 17.6k tokens.</span></p></li><li><p><a href="https://blog.cloudflare.com/code-mode-mcp/"><span>Cloudflare&#8217;s native MCP</span></a><span> with full schemas include 2,594 tools with a cost of 1,170,523 tokens (but Code Mode fits it in 1,069).</span></p></li><li><p><span>With every tool exposed, </span><a href="https://posthog.com/docs/model-context-protocol?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=tokenminning"><span>PostHog&#8217;s MCP server</span></a><span> used to have 183 tools and 113,843 tokens (it doesn&#8217;t anymore).</span></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_!uZjQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcffad81-83f3-4c65-877e-113da8d997a1_1542x1250.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uZjQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcffad81-83f3-4c65-877e-113da8d997a1_1542x1250.png 424w, https://substackcdn.com/image/fetch/$s_!uZjQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcffad81-83f3-4c65-877e-113da8d997a1_1542x1250.png 848w, https://substackcdn.com/image/fetch/$s_!uZjQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcffad81-83f3-4c65-877e-113da8d997a1_1542x1250.png 1272w, https://substackcdn.com/image/fetch/$s_!uZjQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcffad81-83f3-4c65-877e-113da8d997a1_1542x1250.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uZjQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcffad81-83f3-4c65-877e-113da8d997a1_1542x1250.png" width="1456" height="1180" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dcffad81-83f3-4c65-877e-113da8d997a1_1542x1250.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1180,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:135219,&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://newsletter.posthog.com/i/211685502?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcffad81-83f3-4c65-877e-113da8d997a1_1542x1250.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_!uZjQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcffad81-83f3-4c65-877e-113da8d997a1_1542x1250.png 424w, https://substackcdn.com/image/fetch/$s_!uZjQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcffad81-83f3-4c65-877e-113da8d997a1_1542x1250.png 848w, https://substackcdn.com/image/fetch/$s_!uZjQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcffad81-83f3-4c65-877e-113da8d997a1_1542x1250.png 1272w, https://substackcdn.com/image/fetch/$s_!uZjQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcffad81-83f3-4c65-877e-113da8d997a1_1542x1250.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>For developers, you need to know what MCP servers are costing you. A </span><a href="https://posthog.com/docs/cli?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=tokenminning"><span>CLI</span></a><span> like the </span><code>gh</code><span> for GitHub or </span><code>posthog-cli</code><span> can often be more efficient and there are tools like </span><a href="https://github.com/rtk-ai/rtk"><span>RTK</span></a><span> that further optimize CLI commands.</span></p><p><span>For MCP server providers, you cannot just expose every endpoint as a tool. Tool descriptions can occupy a huge amount of the context window. Platforms like</span><a href="https://forum.cursor.com/t/increase-the-mcp-tool/69194"><span> Cursor</span></a><span> and </span><a href="https://github.com/code-yeongyu/oh-my-openagent/issues/2848"><span>OpenAI</span></a><span> limit tool count anyways.</span></p><p><span>Let us be a lesson. As a company with a formerly hefty MCP server, here&#8217;s what we&#8217;ve done to optimize ours:</span></p><ul><li><p><span>A </span><a href="https://github.com/PostHog/posthog/pull/53371"><span>single</span></a><span> </span><code>exec</code><span> tool. This brought our MCP server down from 113,843 tokens to 5,000.</span></p></li><li><p><span>Progressive schema exploration. Tools like </span><code>query-trends</code><span>, </span><code>dashboards</code><span>, and </span><code>execute-sql</code><span> had input schemas that exceeded the 16k token limits individually, so we summarize them instead.</span></p></li><li><p><span>Connect time scoping. </span><code>mcp.posthog.com/mcp?features=flags,dashboards</code><span> mounts two features instead of forty. </span><code>?tools=dashboard-get</code><span> pins one tool. Most users only use a handful of our tools, our MCP server can match this behavior.</span></p></li></ul><h2><span>4. Learn what caching is and why it matters</span></h2><p><span>Vincent on our Wizard &amp; Docs team once audited our AI install wizard and </span><a href="https://posthog.com/blog/optimizing-agent-cost?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=tokenminning"><span>found it embezzling tokens</span></a><span>. The trivial conclude step cost $1.47 and he thought it was the agent holding onto context up until that point. A fresh query() call cut accumulated input 89%. You&#8217;d expect this to cut costs, right?</span></p><p><span>Wrong. Every new call has to rebuild the whole cache, which costs more. Cache writes cost much more than cache reads, so clearing context only pays off if you save 12x tokens for every one it forces you to rewrite. Cached tokens are 10x cheaper in dollars per token than regular ones, and sometimes even </span><a href="https://claude.com/blog/prompt-caching"><span>faster</span></a><span> too.</span></p><p><span>This is why understanding caching is so important. </span><a href="https://ngrok.com/blog/prompt-caching"><span>ngrok</span></a><span> and</span><a href="https://earendil.com/posts/prompt-caching/"><span> earendil</span></a><span> have great guides if you want all the details, but the most relevant parts in practice are:</span></p><ol><li><p><span>Caches are per-model, so beware of fallbacks. If a conversation falls back to another model in a session, it will instantly double charge you.</span></p></li><li><p><span>The cache is keyed on the literal bytes of your prompt in render order: tools, system, messages. Put stable tokens first and volatile content last. Anything that changes per request belongs after the last cache breakpoint, not interpolated into the system prompt.</span></p></li><li><p><span>Subagents are great for context isolation, but don&#8217;t share its parent&#8217;s prefix, so every one you spawn pays the full cache-write price. The parent&#8217;s cache can also run out waiting for children to return.</span></p></li><li><p><span>Anthropic cached writes cost 1.25x normal input on the 5-minute cache and 2x on the hour. Reads cost 0.1x. This means you need one read to earn back the 5-minute write, but the hour cache write needs two reads.</span></p></li><li><p><span>Check </span><code>cache_read_input_tokens</code><span> in the response. If it&#8217;s zero across requests that should share a prefix, something is silently invalidating.</span></p></li></ol><h2><span>5. Choose the best model for the job</span></h2><p><span>First, do you need a model at all? The most token-efficient call is the one you don't make. Linting, regex, a SQL query, or a script are free, fast, and can't hallucinate.</span></p><p><span>If you do, start by understanding the model landscape: which ones are available and what do they excel at? This often isn&#8217;t obvious.</span></p><p><span>For example, on paper, Sonnet is cheaper than Opus, but in a test on our self-driving capabilities, we found that Sonnet 5 was 20% cheaper than Opus 4.5, not 2.5x as advertised, because Sonnet spends 1.7x turns/tokens.</span></p><p><span>We used Sonnet 4.5 on </span><a href="https://posthog.com/blog/8-learnings-from-1-year-of-agents-posthog-ai?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=tokenminning"><span>early agents</span></a><span> not because it was the smartest but because it was the best blend of quality, speed, and cost. The blend is still the primary way we evaluate models, iterating by giving a variety of models the latest data and using </span><a href="https://posthog.com/blog/stop-ai-slop?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=tokenminning"><span>LLM-as-judge</span></a><span> to pick what model makes sense.</span></p><p><span>Typically this means:</span></p><ul><li><p><strong><span>Cheap models for one-shot jobs with simple outputs.</span></strong><span> We use claude-haiku-4-5 for titles and Slack app classifiers, gpt-4.1-mini for MCP intent generation and survey summaries.</span></p></li><li><p><strong><span>Frontier models where the reasoning is the product.</span></strong><span> claude-opus-4-8 is the default for PostHog Desktop and query materialization fixes. gpt-5.6-luna classifies Slack app tasks and reasons about which model to use for them.</span></p></li><li><p><strong><span>Gemini where it&#8217;s structurally the right tool, not just cheaper.</span></strong><span> We use gemini-3-flash-preview for </span><a href="https://posthog.com/replay-vision?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=tokenminning"><span>Replay Vision</span></a><span> because it actually watches the video (others don&#8217;t) and gemini-2.5-flash-lite-preview for summarizing huge volumes of LLM traces because it needs a cheap model with a huge context window.</span></p></li></ul><p><span>A router can provide a gateway to many models, which is helpful for testing and optimizing. Using multiple models, and routing to different ones per request, is </span><a href="https://www.interconnects.ai/p/use-multiple-models"><span>the current meta</span></a><span> with some companies saving </span><a href="https://www.kalviumlabs.ai/blog/model-cost-optimization-cutting-llm-bills/"><span>60-75% on workloads</span></a><span>.</span></p><p><span>The final boss of &#8220;choosing the best model for the job&#8221; is training your own. </span><a href="https://posthog.com/blog/training-ai-models?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=tokenminning"><span>We&#8217;re doing this for session replays</span></a><span> as it&#8217;s a specific format where even a basic custom model can better give signal to whether a replay is interesting or not, for cheaper.</span></p><h2><span>6. Separate working memory from long-term memory</span></h2><p><span>Agents don&#8217;t need to remember everything you&#8217;ve ever done, like what you had for breakfast this morning.</span></p><p><span>Even though Claude and ChatGPT have auto memory features, it is still useful to build a mental model of how and when agents make memories. This way you aren&#8217;t stuck with wasteful memories and you can </span><a href="https://posthog.com/newsletter/context-engineering?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=tokenminning"><span>context engineer</span></a><span> a token-saving memory system when using models directly if you need.</span></p><p><span>There are two types of memories:</span></p><ol><li><p><strong><span>Working memory</span></strong><span>: Session-limited, in-context, compressible.</span></p></li><li><p><strong><span>Long-term memory</span></strong><span>: Persisted, project-level, selectively retrieved.</span></p></li></ol><p><span>All memories start in working memory. It is only with some rule that they get promoted to long-term. For us, that is: </span><strong><span>Is it actionable for a future run?</span></strong></p><p><span>Both the &#8220;future&#8221; and &#8220;actionable&#8221; parts of this rule are relevant. We follow these in our </span><a href="https://github.com/PostHog/posthog/blob/master/products/signals/skills/authoring-scouts/references/dedupe-and-memory.md"><span>Scout scratchpad</span></a><span> by creating memories that are &#8220;dated, names the entity ID, gives a clear conditional, bounded by a precise time anchor.&#8221; An example looks like this:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AtEo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1051bc-2e52-41be-a66d-04a6acec1c80_1404x490.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AtEo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1051bc-2e52-41be-a66d-04a6acec1c80_1404x490.png 424w, https://substackcdn.com/image/fetch/$s_!AtEo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1051bc-2e52-41be-a66d-04a6acec1c80_1404x490.png 848w, https://substackcdn.com/image/fetch/$s_!AtEo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1051bc-2e52-41be-a66d-04a6acec1c80_1404x490.png 1272w, https://substackcdn.com/image/fetch/$s_!AtEo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1051bc-2e52-41be-a66d-04a6acec1c80_1404x490.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AtEo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1051bc-2e52-41be-a66d-04a6acec1c80_1404x490.png" width="1404" height="490" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fd1051bc-2e52-41be-a66d-04a6acec1c80_1404x490.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:490,&quot;width&quot;:1404,&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_!AtEo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1051bc-2e52-41be-a66d-04a6acec1c80_1404x490.png 424w, https://substackcdn.com/image/fetch/$s_!AtEo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1051bc-2e52-41be-a66d-04a6acec1c80_1404x490.png 848w, https://substackcdn.com/image/fetch/$s_!AtEo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1051bc-2e52-41be-a66d-04a6acec1c80_1404x490.png 1272w, https://substackcdn.com/image/fetch/$s_!AtEo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd1051bc-2e52-41be-a66d-04a6acec1c80_1404x490.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>The key </span><code>dedupe:error_tracking:19f&#8230;</code><span>  is structured so when agents are researching another error, they only need a single text search to find </span><code>error_tracking</code><span> related memories. The content then gives instructions on what to do if it&#8217;s the same row-tracking Redis failure again: skip authoring a new report.</span></p><p><span>A bad memory might have a key of </span><code>note-1</code><span> and content of all the context. This requires the agent to scan much more content to find the relevant memory and then interpret the content to decide if it&#8217;s actionable.</span></p><h2><span>7. Know when not to tokenmin</span></h2><p><span>There is a lot of stupid advice about tokenminning, like spending your time optimizing over single words. I've seen influencers say you shouldn't say "please" or "thank you" because those are wasted tokens.</span></p><p><span>Optimizing a prompt you use a handful of times isn&#8217;t worth it. Neither is a workflow that doesn&#8217;t use many tokens. Our </span><a href="https://posthog.com/docs/ai-engineering/ai-wizard?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=tokenminning"><span>AI installation wizard</span></a><span> is an example of the shape that&#8217;s worth optimizing for. It runs hundreds of times per day and costs ~$7 each time. Look at per-run cost to find waste and run count to decide if it&#8217;s worth changing.</span></p><p><span>Don&#8217;t optimize something whose shape isn&#8217;t settled. Prototypes get rewritten. Tuning caching and model selection on an in-progress workflow just means doing it again later.</span></p><p><span>If you&#8217;re an individual developer on a flat-rate plan, dollars are probably not your constraint. Focus on your context window and what&#8217;s loaded every session (</span><code>AGENTS.md</code><span>, MCP), not shaving prompts.</span></p><p><span>Done right, tokenminning helps you tokenmaxx on the right things.</span></p><p><em><span>Words by </span><a href="https://x.com/ianvanagas"><span>Ian Vanagas</span></a><span>, who will still use his tokens to say "thank you" no matter what the haters say.</span></em></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.posthog.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Subscribe for more posts worth the tokens</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><div><hr></div><h2>&#128188; Jobs at PostHog</h2><ul><li><p><strong><a href="https://posthog.com/careers/technical-customer-success-manager-americas?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=tokenminning">Technical Customer Success Manager</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/technical-account-executive?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=tokenminning"><span>Technical Account Executive (Americas)</span></a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/business-development-lead-americas?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=tokenminning"><span>Business Development Lead (Americas)</span></a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/bizops-manager-(sales-focused)?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=tokenminning"><span>BizOps Manager (Sales Focused)</span></a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/backend-engineer-(europeuk-timezone)?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=tokenminning"><span>Backend Engineer &#8211; Ingestion</span></a></strong></p></li></ul><div><hr></div><h2>&#128218; Good reads worth spending time with</h2><ul><li><p><strong><a href="https://posthog.com/blog/bribing-customers-to-talk-to-me?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=tokenminning">I bribe customers to talk to me</a> - Jake Sciotto</strong></p></li><li><p><strong><a href="https://posthog.com/tutorials/understand-ai-agent-performance?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=tokenminning">How to understand AI agent performance in your product</a> - Will Wearing</strong></p></li><li><p><strong><a href="https://www.tokenminning.com/">The Tokenminning Manifesto</a> - Rob May</strong></p></li><li><p><strong><a href="https://linear.app/data">AI usage patterns in software teams</a> - Tim Qi</strong></p></li><li><p><strong><a href="https://yegge.ai/essays/the-shape-of-things-to-come/">The Shape of Things to Come</a> - Steve Yegge</strong></p></li></ul>]]></content:encoded></item><item><title><![CDATA[Can software factories actually work?]]></title><description><![CDATA[Software factories, explained]]></description><link>https://newsletter.posthog.com/p/software-factories</link><guid isPermaLink="false">https://newsletter.posthog.com/p/software-factories</guid><dc:creator><![CDATA[Jina Yoon]]></dc:creator><pubDate>Tue, 11 Aug 2026 18:02:07 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/5eeba4b2-705a-4ebf-a8a8-d0a9ef5535d6_2912x2096.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>Agents write code faster than any human can review.</span></p><p><span>To keep from</span><a href="https://posthog.com/newsletter/code-review-tips?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=software-factories?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=software-factories"><span> becoming the bottleneck</span></a><span>, engineers everywhere have been building </span><strong><span>software factories</span></strong><span>: automated systems and guardrails that let agents ship and test on their own.</span></p><p><span>But the hype came to a sudden halt when HumanLayer CEO Dex Horthy went viral with a three-part series on </span><a href="https://x.com/dexhorthy/status/2080697380379427275"><span>Why Software Factories Fail</span></a><span> last month. He argues that no amount of harness engineering can ever make them work at scale.</span></p><p><span>So, will we always be stuck reading the code, or can software factories actually work?</span></p><div><hr></div><h2><span>What is a software factory?</span></h2><p><span>The idea is simple. With the right pipeline in place, you can automate most (if not all) of software development, much like an industrial assembly line.</span></p><p><span>It involves several </span><a href="https://posthog.com/newsletter/loops?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=software-factories"><span>loops</span></a><span> scaffolded with tools like version control, CI/CD, and monitoring that make it easy for anyone &#8211; human or agent &#8211; to ship code in a standardized, repeatable process.</span></p><p><span>Current software factories that incorporate agents look something like this:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Mhu_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff80468d2-de83-4d46-8987-890e1acf2bf7_1458x744.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Mhu_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff80468d2-de83-4d46-8987-890e1acf2bf7_1458x744.png 424w, https://substackcdn.com/image/fetch/$s_!Mhu_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff80468d2-de83-4d46-8987-890e1acf2bf7_1458x744.png 848w, https://substackcdn.com/image/fetch/$s_!Mhu_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff80468d2-de83-4d46-8987-890e1acf2bf7_1458x744.png 1272w, https://substackcdn.com/image/fetch/$s_!Mhu_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff80468d2-de83-4d46-8987-890e1acf2bf7_1458x744.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Mhu_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff80468d2-de83-4d46-8987-890e1acf2bf7_1458x744.png" width="1456" height="743" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f80468d2-de83-4d46-8987-890e1acf2bf7_1458x744.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:743,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:132567,&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://newsletter.posthog.com/i/210145235?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff80468d2-de83-4d46-8987-890e1acf2bf7_1458x744.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_!Mhu_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff80468d2-de83-4d46-8987-890e1acf2bf7_1458x744.png 424w, https://substackcdn.com/image/fetch/$s_!Mhu_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff80468d2-de83-4d46-8987-890e1acf2bf7_1458x744.png 848w, https://substackcdn.com/image/fetch/$s_!Mhu_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff80468d2-de83-4d46-8987-890e1acf2bf7_1458x744.png 1272w, https://substackcdn.com/image/fetch/$s_!Mhu_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff80468d2-de83-4d46-8987-890e1acf2bf7_1458x744.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ol><li><p><span>Humans </span><strong><span>decide</span></strong><span> what to build and put it into a ticketing system.</span></p></li><li><p><span>Agents pull tickets, </span><strong><span>build and test</span></strong><span> PRs that satisfy the requirements, then submit them for CI and review.</span></p></li><li><p><span>If the PR is approved, the code is </span><strong><span>deployed</span></strong><span> to production via CD.</span></p></li><li><p><span>If it&#8217;s rejected, it goes back to an agent for further </span><strong><span>iteration</span></strong><span> until it gets approved.</span></p></li><li><p><span>Once the code is in production, </span><strong><span>users</span></strong><span> engage with it and emit data, feedback, and signals that inform what gets built next.</span></p></li></ol><p><span>Since it&#8217;s just a metaphor, there&#8217;s no actual criteria for what counts as a software factory. It&#8217;s easier to think about it as a spectrum based on </span><strong><span>how much of the code is produced by agents</span></strong><span>, and </span><strong><span>how closely humans still read the code</span></strong><span>:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3ggd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32b6f989-71f7-4dcc-960b-c1eb67dc8b8f_1460x1140.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3ggd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32b6f989-71f7-4dcc-960b-c1eb67dc8b8f_1460x1140.png 424w, https://substackcdn.com/image/fetch/$s_!3ggd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32b6f989-71f7-4dcc-960b-c1eb67dc8b8f_1460x1140.png 848w, https://substackcdn.com/image/fetch/$s_!3ggd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32b6f989-71f7-4dcc-960b-c1eb67dc8b8f_1460x1140.png 1272w, https://substackcdn.com/image/fetch/$s_!3ggd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32b6f989-71f7-4dcc-960b-c1eb67dc8b8f_1460x1140.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3ggd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32b6f989-71f7-4dcc-960b-c1eb67dc8b8f_1460x1140.png" width="1456" height="1137" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/32b6f989-71f7-4dcc-960b-c1eb67dc8b8f_1460x1140.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1137,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:489721,&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://newsletter.posthog.com/i/210145235?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32b6f989-71f7-4dcc-960b-c1eb67dc8b8f_1460x1140.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_!3ggd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32b6f989-71f7-4dcc-960b-c1eb67dc8b8f_1460x1140.png 424w, https://substackcdn.com/image/fetch/$s_!3ggd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32b6f989-71f7-4dcc-960b-c1eb67dc8b8f_1460x1140.png 848w, https://substackcdn.com/image/fetch/$s_!3ggd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32b6f989-71f7-4dcc-960b-c1eb67dc8b8f_1460x1140.png 1272w, https://substackcdn.com/image/fetch/$s_!3ggd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32b6f989-71f7-4dcc-960b-c1eb67dc8b8f_1460x1140.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">(These are estimates based on what companies have published.)</figcaption></figure></div><p><a href="https://builders.ramp.com/post/why-we-built-our-background-agent"><span>Ramp</span></a><span>,</span><a href="https://cursor.com/blog/third-era"><span> Cursor</span></a><span>, and</span><a href="https://www.uber.com/us/en/blog/ureview/"><span> Uber</span></a><span> land near the middle today. They&#8217;ve posted about using autonomous background agents without explicitly calling them software factories. PostHog is just a little further than that with</span><a href="http://posthog.com/blog/10k-prs-a-month?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=software-factories"><span> agents writing about 70% of our PRs</span></a><span>, but humans still</span><a href="https://posthog.com/newsletter/code-review-tips?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=software-factories#3-add-a-pr-auto-stamper"><span> skim at least 80%</span></a><span> of those.</span></p><p><span>The top right corner is where it gets controversial with</span><a href="https://www.danshapiro.com/blog/2026/01/the-five-levels-from-spicy-autocomplete-to-the-software-factory/"><span> &#8220;lights-off&#8221; software factories</span></a><span>, or &#8220;dark&#8221; software factories. In these, agents write all of the code while humans read none. This requires:</span></p><ul><li><p><strong><span>A high degree of AI adoption </span></strong><span>in a team. Just having access to coding agents doesn&#8217;t mean anything if no one is using them.</span></p></li><li><p><span>A system where </span><strong><span>agent output gets validated to the point of mergeability</span></strong><span>, such as with peer reviews, local testing, or browser clickthroughs; writing unit tests or reasoning about their own code is not enough.</span></p></li><li><p><strong><span>Guardrails that assume failure, </span></strong><span>such as sandboxes, permissions, and deterministic checks. Humans only act as decision makers on high risk PRs.</span></p></li></ul><p><span>Only a few companies like </span><a href="https://factory.strongdm.ai/"><span>StrongDM</span></a><span> have publicly written about going fully lights-off, and </span><a href="https://news.ycombinator.com/item?id=46924426"><span>many developers are skeptical</span></a><span> about the approach.</span></p><div><hr></div><h2><span>Why is everyone talking about them now?</span></h2><p><span>As humans shifted from writing code to orchestrating agents that write code for them, code review has become the new bottleneck.</span></p><p><span>At the same time, models keep getting better, so people are building loops, systems, and tools where agents review and/or merge PRs instead of humans &#8211; a.k.a., software factories.</span></p><p><span>But the discussion </span><em><span>really</span></em><span> heated up when Dex Horthy went viral with his three-part piece on</span><a href="https://github.com/humanlayer/advanced-context-engineering-for-coding-agents/blob/main/wsff.md"><span> Why Software Factories Fail</span></a><span> a few weeks ago.</span></p><p><span>He argues that no amount of harness engineering makes lights-off software factories viable because the problem lies in the models.</span></p><p><span>He specifically highlights how coding agents are rewarded for one-off code correctness during RL training:</span></p><div class="callout-block" data-callout="true"><p><span>&#8220;</span>How the model got to a correct answer doesn&#8217;t matter. If the tests pass, we win, but there is no penalty for eroding codebase maintainability.&#8221;</p></div><p><span>This happens because there simply aren&#8217;t many benchmarks that can detect quality and maintainability in the first place. The paper behind one recently published benchmark,</span><a href="https://arxiv.org/html/2603.24755v1"><span> SlopCodeBench</span></a><span>, describes the challenge well:</span></p><div class="callout-block" data-callout="true"><p>&#8220;Every design decision in software engineering is a compromise with unknown future requirements.&#8221;</p></div><p><span>In other words, whether a design is good or not depends on what an agent will get asked to build next. That rubric is unique to every codebase and impossible to know in advance.</span></p><p><span>So, until there are better benchmarks in place, Dex&#8217;s recommendation is to either keep reading the code, or front-load human effort in the planning phase.</span></p><div><hr></div><h2><span>What software factories are missing</span></h2><p><span>The problem with most software factories today is that they enforce a clean separation between &#8220;deciding what to build&#8221; and &#8220;building it.&#8221;</span></p><p><span>This is evident in every blog about software factories we&#8217;ve seen so far. The pipeline always begins with a step where a human does all the planning and decision-making first, stuffs the requirements in a ticket, then hands it off to an agent with zero prior context on the problem.</span></p><p><span>Dex&#8217;s argument follows this pattern, too. In</span><a href="https://x.com/dexhorthy/status/2081797628552270027"><span> part 3</span></a><span>, he says a better oracle for code quality would be whether the output &#8220;passes all verifiers for an incrementally-divulged spec.&#8221; Again, it&#8217;s assumed that the agent that writes the code must receive a spec written by a human.</span></p><p>In the real world, <strong>that&#8217;s not how good <a href="https://posthog.com/product-engineer/what-is-a-product-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=software-factories">product engineering</a> works. </strong></p><p><span>Every engineer knows that to design a system well, you need both the technical constraints as well as a deep understanding of the problem. This is why product engineers need to</span><a href="https://posthog.com/newsletter/talk-to-users?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=software-factories"><span> talk to users</span></a><span>,</span><a href="https://posthog.com/newsletter/what-weve-learned-about-product-market-fit?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=software-factories"><span> measure product-market fit</span></a><span>, and</span><a href="https://posthog.com/newsletter/validating-product-ideas?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=software-factories"><span> validate product ideas</span></a><span>. It&#8217;s also why our</span><a href="https://posthog.com/newsletter/product-management-is-broken#2-engineers-make-product-decisions?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=software-factories"><span> engineers decide what to build</span></a><span>, not PMs.</span></p><p><span>The same applies to coding agents. An agent makes better architectural choices if they have access to relevant information, such as how your product is currently being used, your</span><a href="https://posthog.com/newsletter/ideal-customer-profile-framework?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=software-factories"><span> ideal customer profile</span></a><span>, what users are complaining about, or what else is going on in your company:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jp5d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78a9c1c4-994d-4ed4-9859-3348e8ad202b_1458x742.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jp5d!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78a9c1c4-994d-4ed4-9859-3348e8ad202b_1458x742.png 424w, https://substackcdn.com/image/fetch/$s_!jp5d!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78a9c1c4-994d-4ed4-9859-3348e8ad202b_1458x742.png 848w, https://substackcdn.com/image/fetch/$s_!jp5d!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78a9c1c4-994d-4ed4-9859-3348e8ad202b_1458x742.png 1272w, https://substackcdn.com/image/fetch/$s_!jp5d!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78a9c1c4-994d-4ed4-9859-3348e8ad202b_1458x742.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jp5d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78a9c1c4-994d-4ed4-9859-3348e8ad202b_1458x742.png" width="1456" height="741" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/78a9c1c4-994d-4ed4-9859-3348e8ad202b_1458x742.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:741,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:143548,&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://newsletter.posthog.com/i/210145235?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78a9c1c4-994d-4ed4-9859-3348e8ad202b_1458x742.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_!jp5d!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78a9c1c4-994d-4ed4-9859-3348e8ad202b_1458x742.png 424w, https://substackcdn.com/image/fetch/$s_!jp5d!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78a9c1c4-994d-4ed4-9859-3348e8ad202b_1458x742.png 848w, https://substackcdn.com/image/fetch/$s_!jp5d!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78a9c1c4-994d-4ed4-9859-3348e8ad202b_1458x742.png 1272w, https://substackcdn.com/image/fetch/$s_!jp5d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78a9c1c4-994d-4ed4-9859-3348e8ad202b_1458x742.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Looking at signals from prod is especially valuable for enabling code </span><em><span>maintainability</span></em><span> since most software changes happen in response to actual usage. At PostHog, for example, 63% of changed lines are in files that already exist, and </span><code>fix</code><span> is</span><a href="https://posthog.com/blog/10k-prs-a-month?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=software-factories#how-we-validate-posthog-isnt-breaking"><span> our largest commit type</span></a><span> at 40%.</span></p><p><span>And if you think about the last time you addressed an incident in prod or a piece of user feedback, you probably relied more on</span><a href="https://posthog.com/logs?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=software-factories"><span> logs</span></a><span> and</span><a href="https://posthog.com/traces?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=software-factories"><span> traces</span></a><span> to figure out a fix instead of trusting someone else&#8217;s secondhand account of the problem.</span></p><p><span>These are the kinds of problems we&#8217;re working on at PostHog to make</span><a href="https://posthog.com/blog/what-if-your-product-built-itself?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=software-factories"><span> self-driving products</span></a><span> a reality: giving agents the same context that human engineers would use to make better design decisions.</span></p><p><span>Once you have that, turning off the lights might not be so crazy after all.</span></p><p><em><span>Words by </span><a href="https://x.com/jinayoon_"><span>Jina Yoon</span></a><span>, who still can&#8217;t believe we got software factories before GTA 6.</span></em></p><div><hr></div><h2><span>&#128213; Long-term quality reads</span></h2><ul><li><p><strong><a href="https://posthog.com/blog/agents-killing-ui?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=software-factories"><span>Are agents really killing UI?</span></a><span> &#8211; Cleo Lant</span></strong></p></li><li><p><strong><a href="https://addyosmani.com/blog/own-the-outer-loop/"><span>Own the Outer Loop</span></a><span> &#8211; Addy Osmani</span></strong></p></li><li><p><strong><span> </span><a href="https://earendil.com/posts/session-portability/"><span>The Session You Cannot Take With You</span></a><span> &#8211; EARENDIL</span></strong></p></li><li><p><strong><a href="https://simonwillison.net/2026/Jul/31/stateless-mcp/">Stateless MCP has recaptured my interest</a> &#8211; Simon Willison</strong> </p></li><li><p><strong><a href="https://posthog.com/blog/on-doing-more-weird?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=software-factories">We spend $45,000 on doing more weird every month</a> &#8211; Charles Cook</strong></p></li></ul><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.posthog.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">Ship better, not just faster</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2><span>&#127981; Join our production line</span></h2><ul><li><p><strong><a href="https://posthog.com/careers/technical-account-executive?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=software-factories"><span>Technical Account Executive (Americas)</span></a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/business-development-lead-americas?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=software-factories"><span>Business Development Lead (Americas)</span></a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/bizops-manager-(sales-focused)?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=software-factories"><span>BizOps Manager (Sales Focused)</span></a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/backend-engineer-(europeuk-timezone)?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=software-factories"><span>Backend Engineer &#8211; Ingestion</span></a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/site-reliability-engineer-clickhouse?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=software-factories"><span>Site Reliability Engineer &#8211; ClickHouse</span></a></strong></p></li></ul>]]></content:encoded></item><item><title><![CDATA[What nobody tells you about writing agent skills]]></title><description><![CDATA[Everything we&#8217;ve learned about writing great skills at PostHog]]></description><link>https://newsletter.posthog.com/p/what-nobody-tells-you-about-writing</link><guid isPermaLink="false">https://newsletter.posthog.com/p/what-nobody-tells-you-about-writing</guid><dc:creator><![CDATA[Ian Vanagas]]></dc:creator><pubDate>Mon, 03 Aug 2026 17:31:31 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/010dbea1-020c-4cd9-8475-2acdf7682673_1456x1048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>We&#8217;re officially skill-pilled. PostHog teams have published 226 skills to our internal </span><a href="https://posthog.com/docs/ai-engineering/skills-store?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=skills"><span>skill store</span></a><span>, and we have 187 </span><code>SKILL.md</code><span> files across 28 different products in our codebase. Everyone uses skills to both improve PostHog and their own workflows.</span></p><p><span>They&#8217;re essential because agents have amnesia. Every conversation, they rediscover your codebase and workflows from scratch. They pick the wrong tool, fall for the same gotchas, and repeat old mistakes. They figure it out eventually, but only after wasting time and tokens.</span></p><p><span>This is irritating for engineers who hate repeating themselves. That&#8217;s why they automate, write abstractions, and keep handy scripts around. Skills are this instinct applied to agents. Write them once and never explain to agents again.</span></p><p><span>Here&#8217;s everything we&#8217;ve learned about writing skills that actually work, for both you and your product.</span></p><h1><span>1. You need to master progressive disclosure</span></h1><p><span>Agents can learn entire programming languages, figure out how to use nearly any tool you throw at them, and improve themselves in a loop, but only if they have context to do it in.</span></p><p><span>Context is usually dumped in all at once at the beginning, which limits the amount agents have to work with. Skills flip this. Instead of loading everything up front, they disclose information progressively. The skill&#8217;s information is only loaded when the agent decides it&#8217;s relevant, whether that is the main </span><code>SKILL.md</code><span> file or </span><code>references</code><span> and </span><code>scripts</code><span> within it. This means </span><strong><span>good skills act as a router</span></strong><span>.</span></p><p><span>First, the agent needs to choose to load the skill. The skill&#8217;s name and description should describe when to reach for it, not what the skill is, because they&#8217;re only part always in context. </span></p><p><span>Here&#8217;s </span><a href="https://github.com/PostHog/posthog/tree/master/products/posthog_ai/skills/querying-posthog-data"><span>our SQL skill</span></a><span> as an example:</span></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">---
name: querying-posthog-data
description: &#8216;Required reading before writing any HogQL/SQL or calling execute-sql against PostHog. Use whenever the user wants to search, find, or do complex aggregations PostHog entities (insights, dashboards, cohorts, feature flags, experiments, surveys, hog flows, data warehouse, persons, etc.) and query analytics data (trends, funnels, retention, lifecycle, paths, stickiness, web analytics, error tracking, logs, sessions, LLM traces). Covers HogQL syntax differences from ClickHouse SQL, system table schemas (system.*), available functions, query examples, and the schema-discovery workflow.&#8217;
---</code></pre></div><ul><li><p><span>The name and first sentence define when to read the skill.</span></p></li><li><p><span>The middle sentence defines when to use it.</span></p></li><li><p><span>The last sentence defines what the skill does.</span></p></li></ul><p><span>Having too many skills or too large descriptions causes problems. We learned this the hard way when building (too many) skills for </span><a href="http://posthog.com/ai?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=skills"><span>PostHog AI</span></a><span>. The agent&#8217;s effectiveness declined as skill descriptions filled the agent&#8217;s context window. Databricks also found that </span><a href="https://arxiv.org/html/2605.24050v1"><span>agents increasingly pick the wrong skill</span></a><span> as more are added.</span></p><p><span>Sections </span><em><span>within the skill</span></em><span> also need to work as routers. The rest of </span><a href="https://github.com/PostHog/posthog/tree/master/products/posthog_ai/skills/querying-posthog-data"><span>our SQL skill</span></a><span> is a thin workflow that links to 26 schema files, 22 example query patterns, and a function index. This enables further progressive disclosure.</span></p><p><span>If done correctly, skills help agents succeed faster with fewer tokens, but only because the context isn&#8217;t loaded all at once.</span></p><blockquote><p><strong><span>Try this:</span></strong><span> Read your skills through the lens of progressive disclosure. Do the names and descriptions help them get discovered? Are they split in a way that agents can only load what they need?</span></p></blockquote><h1><span>2. Skills aren&#8217;t just code</span></h1><p><span>Look at these two mini-skills:</span></p><blockquote><ol><li><p>Run <code>git log --oneline -20</code>.</p></li><li><p>If you see a commit with &#8220;fix&#8221; in it, check the diff.</p></li><li><p>If the diff touches <code>auth.py</code>, read lines 40&#8211;120.</p></li><li><p>If the function is over 50 lines, flag it.</p></li></ol></blockquote><p><span>And</span></p><blockquote><p><span>Find recent changes that look risky and explain why. Start with the commit history.</span></p></blockquote><p><span>They have the same spirit, but the first is over-specified. It breaks the moment the repo doesn&#8217;t match what the skill expects. The second survives because it embraces ambiguity, the agent can actually look at what&#8217;s in front of it.</span></p><p><span>This is how treating skills like code goes wrong. Skills are a superset of code. They can do everything code can (because agents can write code) as well as a lot of things it can&#8217;t (because they are smart). Agents can handle cases in your skills you can&#8217;t foresee, like errors or runtime context, but only if you let them do so.</span></p><p><span>This means skills should be precise about:</span></p><ol><li><p><strong><span>The goal.</span></strong><span> What does &#8220;done&#8221; look like? If you don&#8217;t say, the agent will decide for you. Give it examples of what good looks like or ways to self-verify. For example, the </span><code>creating-an-endpoint</code><span> </span><a href="https://github.com/PostHog/posthog/blob/master/products/endpoints/skills/creating-an-endpoint/SKILL.md"><span>skill</span></a><span> asks the agent to &#8220;confirm by calling </span><code>endpoint-run</code><span> with a sample payload to verify the response shape.&#8221;</span></p></li><li><p><strong><span>Constraints. </span></strong><span>The boundaries and guardrails that prevent disaster.</span></p></li><li><p><strong><span>Context it can&#8217;t derive. </span></strong><span>Where your data lives, which tool to use, the schema it would otherwise need to guess.</span></p></li></ol><p><span>But ambiguous about:</span></p><ol><li><p><strong><span>The steps.</span></strong><span> You don&#8217;t need to be prescriptive about what files to check. Tell it to understand how billing works and it will find them.</span></p></li><li><p><strong><span>Failures. </span></strong><span>You can&#8217;t know everything that will go wrong. The agent can read the error and you&#8217;re paying it to figure it out.</span></p></li><li><p><strong><span>Runtime specifics. </span></strong><span>What the data actually looks like. Line numbers, file lists, counts, versions, and outputs all change more often than you think.</span></p></li></ol><p><span>Over-specification turns a skill into a workflow and strips the intelligence you are paying for. Leaving the path ambiguous gives agents the flexibility they need to do what you want them to do.</span></p><blockquote><p><strong><span>Try this:</span></strong><span> Make your skills </span><em><span>less</span></em><span> prescriptive. Give the agent the tools they need and the goal you want them to achieve then let them find a way to do it.</span></p></blockquote><h1><span>3. Skills rot (but you can prevent it)</span></h1><p><span>Products, APIs, CLIs, MCPs, models, behaviors, and best practices all change. When these changes break skills, most people just make fixes ad hoc, but this wastes time and tokens whenever it happens.</span></p><p><span>You can be more proactive than that. Preventing rot comes down to three principles:</span></p><ol><li><p><strong><span>Split durable structure from volatile content.</span></strong><span> Hand-write parts that rarely change, </span><em><span>reference</span></em><span> parts that drift.</span></p></li><li><p><strong><span>Point to a single source of truth.</span></strong><span> For us, that&#8217;s docs. Skills that point to specific URLs are less likely to go out of date than ones that include all the content separately.</span></p></li><li><p><strong><span>Regenerate, don&#8217;t patch. </span></strong><span>Rewrite and refine your skill from a stable base rather than piling on fixes. Repeated fixes cloud a skill&#8217;s focus until it rots into something less effective.</span></p></li></ol><p><span>These principles work at the individual level, but can also scale to a robust pipeline for skill generation. Our </span><a href="https://posthog.com/teams/wizard-and-docs"><span>Wizard &amp; Docs team</span></a><span> do this to publish 120+ skills on how to integrate and use PostHog correctly.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0_N6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb2bbcf1-bd4a-42a8-aad2-96131ffcda63_2187x888.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0_N6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb2bbcf1-bd4a-42a8-aad2-96131ffcda63_2187x888.png 424w, https://substackcdn.com/image/fetch/$s_!0_N6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb2bbcf1-bd4a-42a8-aad2-96131ffcda63_2187x888.png 848w, https://substackcdn.com/image/fetch/$s_!0_N6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb2bbcf1-bd4a-42a8-aad2-96131ffcda63_2187x888.png 1272w, https://substackcdn.com/image/fetch/$s_!0_N6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb2bbcf1-bd4a-42a8-aad2-96131ffcda63_2187x888.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0_N6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb2bbcf1-bd4a-42a8-aad2-96131ffcda63_2187x888.png" width="1456" height="591" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fb2bbcf1-bd4a-42a8-aad2-96131ffcda63_2187x888.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:591,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:228417,&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://newsletter.posthog.com/i/209648145?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb2bbcf1-bd4a-42a8-aad2-96131ffcda63_2187x888.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_!0_N6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb2bbcf1-bd4a-42a8-aad2-96131ffcda63_2187x888.png 424w, https://substackcdn.com/image/fetch/$s_!0_N6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb2bbcf1-bd4a-42a8-aad2-96131ffcda63_2187x888.png 848w, https://substackcdn.com/image/fetch/$s_!0_N6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb2bbcf1-bd4a-42a8-aad2-96131ffcda63_2187x888.png 1272w, https://substackcdn.com/image/fetch/$s_!0_N6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb2bbcf1-bd4a-42a8-aad2-96131ffcda63_2187x888.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>The main part of this pipeline is the </span><a href="https://github.com/PostHog/context-mill"><span>context mill</span></a><span> (above) which consists of three parts:</span></p><ol><li><p><strong><span>Sourcing:</span></strong><span> Pulls all our docs plus curated prompts and working example apps.</span></p></li><li><p><strong><span>Assembly:</span></strong><span> Transforms and packages these into a portable, self-contained zip manifest.</span></p></li><li><p><strong><span>Delivery:</span></strong><span> Creates a versioned release that is used by both the PostHog MCP (as resources and slash commands) and the install wizard.</span></p></li></ol><p><span>You don&#8217;t need a pipeline like this to prevent your skills from rotting. The three principles work by hand. Done right, a skill doesn&#8217;t just resist rot, it improves on its own. Point it at the docs and it tracks their changes. Regenerate it from a prompt and it inherits model and implementation upgrades.</span></p><blockquote><p><strong>Try this: </strong>Next time you need to do an ad hoc fix for a skill, think of and implement a way to prevent future rot like pointing to a URL or generating a part of the skill instead.</p></blockquote><h1><span>4. Asking questions &gt; making demands</span></h1><p><span>Agents, like people, work better when you understand them and what they need. So rather than jumping straight to making demands, try asking questions like:</span></p><ol><li><p><strong><span>&#8220;What can you do to help?&#8221;</span></strong><span> You need to know what tools and capabilities an agent has to help you accomplish your task. You should care about agent ergonomics and let it shape the skills you write.</span></p></li><li><p><strong><span>&#8220;What do you need to do better?&#8221;</span></strong><span> Beyond what&#8217;s built-in, there might be other tools, capabilities, context access, or evaluations that might help it improve the skill.</span></p></li><li><p><strong><span>&#8220;Based on the last run, how can this skill improve?&#8221;</span></strong><span> Runs often uncover errors or inefficiencies that can be fixed by tweaking the skill.</span></p></li></ol><p><span>This works because the agent holds information you don&#8217;t: which tools it has, the context it can reach, and what broke on previous runs. Guessing that is how you burn tokens and time; asking is how you stop.  As </span><a href="https://posthog.com/blog/making-claude-cowork-actually-useful?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=skills"><span>Charles said</span></a><span> &#8220;The single most useful hour I spent with Cowork was asking it to help me figure out what to use Cowork for.&#8221;</span></p><blockquote><p><strong><span>Try this:</span></strong><span> Before building your next skill, build some empathy for the agent by asking the questions above. This is high leverage work, so use a more powerful model, like Fable, even if a less powerful model will run the skill.</span></p></blockquote><h1><span>5. Not everything deserves a skill</span></h1><p><span>Reading all this might inspire you to write skills for everything, but remember there are context and maintenance costs for each one. Picking the right ones matters, so you should write skills for work that&#8230;</span></p><ul><li><p><strong><span>You do repeatedly. </span></strong><span>Point your agent at your last 30 days of work. Your Slack, emails, code, writing. Have it identify manual workflows worth packaging.</span><a href="https://medium.com/@creativeaininja/when-to-make-an-ai-skill-when-not-to-and-how-to-steal-one-from-your-own-chat-02a3157bbaac"><span> Kristopher Dunham</span></a><span> suggests asking &#8220;Have you done it three times and will you do it three more times?&#8221;</span></p></li><li><p><strong><span>Agents do badly by default.</span></strong><span> Ask your agent to do the skill you&#8217;re planning to write. If it can accomplish it efficiently, it doesn&#8217;t need a skill. For example, it doesn&#8217;t really need a skill to write SQL, but it might need a skill to write ClickHouse-flavored SQL specific to PostHog.</span></p></li><li><p><strong><span>Needs context models don&#8217;t have out-of-the-box.</span></strong><span> For example, a bunch of data like </span><a href="https://posthog.com/ai-observability?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=skills"><span>AI observability</span></a><span> and </span><a href="https://posthog.com/logs?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=skills"><span>logs</span></a><span> in PostHog have nested or non-obvious payload shapes. A skill ensures agents don&#8217;t need to rediscover this shape every conversation.</span></p></li><li><p><strong><span>Can run on autopilot. </span></strong><span>You can create </span><a href="https://posthog.com/newsletter/loops?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=skills"><span>loops</span></a><span> to handle this. Add a goal, context, way to evaluate work, and put it on a schedule. Examples include </span><a href="https://posthog.com/newsletter/code-review-tips?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=skills#2-delegate-pr-babysitting-to-loops"><span>PR babysitting</span></a><span>, flaky test hunting, and </span><a href="https://posthog.com/blog/karpathy-autoresearch-query-engine-bug?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=skills"><span>performance improvement autoresearching</span></a><span>. Our </span><a href="https://posthog.com/blog/what-is-a-scout?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=skills"><span>scouts</span></a><span> are long-running agents guided by a skill.</span></p></li></ul><blockquote><p><strong><span>Try this: </span></strong>Run this prompt to create some new skill candidates.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;markdown&quot;,&quot;nodeId&quot;:&quot;ec6aa8aa-514a-4d6a-8cc1-ee6e8f44561e&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-markdown">Look over my work from the last 30 days and identify repeated manual workflows worth packaging into skills.

Use available evidence in this order:
- Recent sessions and task summaries.
- Memories and outputs to find patterns repeated across sessions.
- Existing skills, custom agents, and automations, so you reuse or extend what already exists instead of duplicating it.

Look for work that is repeated, time-consuming, error-prone, context-heavy, or benefits from a consistent process. Include workflows across coding, research, writing, planning, communication, operations, analysis, and personal administration.

Only act on a candidate when it:
- Occurred at least twice, or is clearly likely to recur and costly to repeat
- Has stable inputs, a repeatable procedure, and a clear output or stopping condition
- Would materially improve speed, quality, consistency, or reliability
- Is not already adequately covered.

Produce a compact shortlist with:
- Repeated workflow
- Supporting evidence and dates
- Frequency/confidence
- Why it is or is not worth creating</code></pre></div></blockquote><p><em>Words by <a href="https://x.com/ianvanagas">Ian Vanagas</a>, who&#8217;s definitely skill-pilled.</em></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.posthog.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">You definitely don&#8217;t need a skill to subscribe</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><div><hr></div><h2>&#129428; Jobs at PostHog</h2><ul><li><p><strong><a href="https://posthog.com/careers/technical-customer-success-manager-americas?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=skills"><span>Technical Customer Success Manager &#8211; Americas</span></a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/technical-customer-success-manager-emea?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=skills"><span>Technical Customer Success Manager &#8211; EMEA</span></a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/bdr-team-lead?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=skills"><span>BDR Team Lead</span></a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/revenue-ops-manager-(sales-focused)?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=skills"><span>Revenue Ops Manager (sales focused)</span></a></strong></p></li></ul><div><hr></div><h2>&#128218; More good reads</h2><ul><li><p><strong><a href="https://posthog.com/blog/10k-prs-a-month?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=skills">10,000 PRs a month is easy: How devex is evolving at PostHog</a> &#8211; Paul D&#8217;Ambra</strong></p></li><li><p><strong><a href="https://www.anthropic.com/engineering/equipping-agents-for-the-real-world-with-agent-skills">Equipping agents for the real world with Agent Skills</a> &#8211; Anthropic</strong></p></li><li><p><strong><a href="https://timariyeh.com/micromanaging-the-model/">Micromanaging the Model Backfires</a> &#8211; Tim Ariyeh</strong></p></li><li><p><strong><a href="https://posthog.com/blog/how-to-get-hired-marketing?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=skills">How to get hired to PostHog&#8217;s marketing teams</a> &#8211; Joe Martin</strong></p></li></ul>]]></content:encoded></item><item><title><![CDATA[How much can you delegate to agents?]]></title><description><![CDATA[A simple guide to agent autonomy]]></description><link>https://newsletter.posthog.com/p/agent-autonomy</link><guid isPermaLink="false">https://newsletter.posthog.com/p/agent-autonomy</guid><dc:creator><![CDATA[Jina Yoon]]></dc:creator><pubDate>Mon, 27 Jul 2026 18:01:16 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/9e69b042-b83c-4028-a0b5-202080e59195_2912x2096.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>People are trusting their agents to do more work without supervision, but how do you decide when to trust them?</p><p>Some think the answer depends on how good the model is &#8211;&nbsp;i.e. when models get better, you can trust them to do more. But trusting your agents just because the models got smarter is like skipping your seatbelt because you got a nicer car.</p><p>The real answer has nothing to do with the model, and everything to do with the <em>task</em>. You need to build a mental model for when to delegate and how much, which you can then adapt. </p><p><span>Here&#8217;s a simple guide to maximizing agent autonomy, so you can ship fast </span><em><span>without</span></em><span> breaking things.</span></p><div><hr></div><h2><span>The two factors that set the ceiling</span></h2><p>You need to ask yourself two questions first:</p><h3><span>1. Is it easy to check the agent&#8217;s work?</span></h3><p>To run safely on their own, agents need immediate feedback when they&#8217;re wrong. This is possible for most code with deterministic checks, like unit and integration tests. But subjective tasks, like renaming a parameter for clarity, are harder without human taste and judgment.</p><h3><span>2. Is it cheap to undo an agent&#8217;s mistake?</span></h3><p><span>Just like in traditional software engineering, if you want to trust an agent run without supervision, you need a guaranteed Ctrl+Z for worst case scenarios. That&#8217;s why </span>StampHog, <a href="http://posthog.com/newsletter/code-review-tips?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-autonomy#3-add-a-pr-auto-stamper"><span>our PR approval agent</span></a><span>, routes anything that contains deny-list keywords to a human.</span></p><p>Together, these two factors<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a><span> point you to one of four levels for any task:</span></p><ul><li><p><strong><span>Level 0: Agent as assistant.</span></strong><span> For tasks that are hard to check and hard to undo. Necessary when dealing with tricky and sensitive code.</span></p></li><li><p><strong><span>Level 1: Human-in-the-loop.</span></strong><span> For tasks that are hard to check and easy to undo. Usually when you need subjective evaluation.</span></p></li><li><p><strong><span>Level 2: Agent delegation.</span></strong><span> For tasks that are easy to check and hard to undo. The default ceiling for most dev work today.</span></p></li><li><p><strong><span>Level 3: Self-driving mode.</span></strong><span> For tasks that are easy to check and easy to undo. Everything is accelerating towards this.</span></p></li></ul><p>You can map these four levels to a very simple decision tree, which you can apply to any task:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HnV9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8188004-4403-4b09-87ed-29462aed3aa1_1600x828.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HnV9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8188004-4403-4b09-87ed-29462aed3aa1_1600x828.png 424w, https://substackcdn.com/image/fetch/$s_!HnV9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8188004-4403-4b09-87ed-29462aed3aa1_1600x828.png 848w, https://substackcdn.com/image/fetch/$s_!HnV9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8188004-4403-4b09-87ed-29462aed3aa1_1600x828.png 1272w, https://substackcdn.com/image/fetch/$s_!HnV9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8188004-4403-4b09-87ed-29462aed3aa1_1600x828.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HnV9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8188004-4403-4b09-87ed-29462aed3aa1_1600x828.png" width="1456" height="753" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b8188004-4403-4b09-87ed-29462aed3aa1_1600x828.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:753,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:133284,&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://newsletter.posthog.com/i/208273504?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8188004-4403-4b09-87ed-29462aed3aa1_1600x828.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_!HnV9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8188004-4403-4b09-87ed-29462aed3aa1_1600x828.png 424w, https://substackcdn.com/image/fetch/$s_!HnV9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8188004-4403-4b09-87ed-29462aed3aa1_1600x828.png 848w, https://substackcdn.com/image/fetch/$s_!HnV9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8188004-4403-4b09-87ed-29462aed3aa1_1600x828.png 1272w, https://substackcdn.com/image/fetch/$s_!HnV9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb8188004-4403-4b09-87ed-29462aed3aa1_1600x828.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This helps you make decisions about how much to delegate to your agents, but you still can engineer your pipeline to enable higher autonomy for any specific task.</p><div><hr></div><h2><span>Level 0: Agent as assistant</span></h2><p><em><span>When the work is </span><strong><span>hard to check</span></strong><span> + </span><strong><span>costly to undo</span></strong></em></p><p><span>This is the lowest level of agent autonomy. Think asking ChatGPT for advice, or auto-complete in Cursor, just like the good ol&#8217; days of 2024.</span></p><p><span>But just because it&#8217;s old-fashioned doesn&#8217;t mean it&#8217;s bad; this mode is ideal when dealing with tricky problems in sensitive code surfaces.</span></p><p><span>For example, when </span><a href="https://posthog.com/community/profiles/30455?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-autonomy"><span>Dylan</span></a><span> updated our feature flag engine to support generic property targeting last year, he had to migrate an assumption that was indirectly baked into every feature flag at PostHog. </span></p><p><span>This would have been hard for agents to check deterministically since it wasn&#8217;t possible to </span><code>grep </code><span>for. The update also had a huge blast radius since it touched live customer flags, API response shapes, and reason-scoring functions.</span></p><h3><span>How to level up from here</span></h3><p><strong><span>Break the task down.</span></strong><span> </span>Small pieces make it obvious where delegation is safe or not. Dylan handed off less critical work, like propagating the new targeting logic across our JavaScript, PHP, Ruby, and Flutter SDKs, to agents while doing the riskier core migration by hand.</p><div><hr></div><h2><span>Level 1: Human-in-the-loop</span></h2><p><em><span>When the work is </span><strong><span>hard to check</span></strong><span> + </span><strong><span>cheap to undo</span></strong></em></p><p><span>This level of agent autonomy is common for tasks that need subjective evaluation since it&#8217;s hard to teach agents taste and judgment (for now, at least).</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0Qs7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66fe69c5-2059-4181-b41d-01ff90a0037a_1600x710.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0Qs7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66fe69c5-2059-4181-b41d-01ff90a0037a_1600x710.png 424w, https://substackcdn.com/image/fetch/$s_!0Qs7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66fe69c5-2059-4181-b41d-01ff90a0037a_1600x710.png 848w, https://substackcdn.com/image/fetch/$s_!0Qs7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66fe69c5-2059-4181-b41d-01ff90a0037a_1600x710.png 1272w, https://substackcdn.com/image/fetch/$s_!0Qs7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66fe69c5-2059-4181-b41d-01ff90a0037a_1600x710.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0Qs7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66fe69c5-2059-4181-b41d-01ff90a0037a_1600x710.png" width="1456" height="646" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/66fe69c5-2059-4181-b41d-01ff90a0037a_1600x710.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:646,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:112333,&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://newsletter.posthog.com/i/208273504?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66fe69c5-2059-4181-b41d-01ff90a0037a_1600x710.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_!0Qs7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66fe69c5-2059-4181-b41d-01ff90a0037a_1600x710.png 424w, https://substackcdn.com/image/fetch/$s_!0Qs7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66fe69c5-2059-4181-b41d-01ff90a0037a_1600x710.png 848w, https://substackcdn.com/image/fetch/$s_!0Qs7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66fe69c5-2059-4181-b41d-01ff90a0037a_1600x710.png 1272w, https://substackcdn.com/image/fetch/$s_!0Qs7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66fe69c5-2059-4181-b41d-01ff90a0037a_1600x710.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Human-in-the-loop tasks are considered cheap to undo since the code stays in draft mode and won&#8217;t get merged until it&#8217;s verified by a human. An undo just means kicking off another iteration.</span></p><p><a href="https://github.com/PostHog/posthog/pull/35127"><span>This code readability refactor</span></a><span> by </span><a href="https://posthog.com/community/profiles/30210?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-autonomy"><span>Thomas</span></a><span> was mostly done by hand, but it's a good example of something an agent wouldn't know how to grade. It was just a few lines that made it easier for humans to understand &#8211; adding comments, grouping actions, swapping strings for an enum &#8211; and didn't introduce any breaking changes.</span></p><h3><span>How to level up from here</span></h3><ul><li><p><strong><span>Use LLM-as-judge.</span></strong><span> This is how most people are building their agentic code review systems. As models continue to improve, more tasks that require human judgment can be </span><a href="https://posthog.com/blog/testing-ai-agents?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-autonomy#non-deterministic-evaluators"><span>checked with LLMs</span></a><span>.</span></p></li><li><p><strong><span>Define a scoped, measurable goal.</span></strong><span> Success metrics or contracts can work as a proxy for a subjective evaluation. For example, you could instruct a system to experiment with landing page copy until a variant reaches 3% conversion.</span></p></li><li><p><strong><a href="http://posthog.com/newsletter/agent-first-product-engineering?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-autonomy#4-writing-skills-is-a-human-skill"><span>Write custom skills.</span></a></strong><span> This helps agents produce work that reliably fits your standards, conventions, and taste with less steering required. For example, many developers write custom code review skills to follow team-specific standards.</span></p></li></ul><div><hr></div><h2><span>Level 2: Agent delegation</span></h2><p><em><span>When the work is </span><strong><span>easy to check</span></strong><span> + </span><strong><span>costly to undo</span></strong></em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!W_Ho!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec383514-0369-4f64-b8da-a116f938c2f3_1600x710.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!W_Ho!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec383514-0369-4f64-b8da-a116f938c2f3_1600x710.png 424w, https://substackcdn.com/image/fetch/$s_!W_Ho!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec383514-0369-4f64-b8da-a116f938c2f3_1600x710.png 848w, https://substackcdn.com/image/fetch/$s_!W_Ho!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec383514-0369-4f64-b8da-a116f938c2f3_1600x710.png 1272w, https://substackcdn.com/image/fetch/$s_!W_Ho!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec383514-0369-4f64-b8da-a116f938c2f3_1600x710.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!W_Ho!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec383514-0369-4f64-b8da-a116f938c2f3_1600x710.png" width="1456" height="646" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ec383514-0369-4f64-b8da-a116f938c2f3_1600x710.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:646,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:104553,&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://newsletter.posthog.com/i/208273504?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec383514-0369-4f64-b8da-a116f938c2f3_1600x710.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_!W_Ho!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec383514-0369-4f64-b8da-a116f938c2f3_1600x710.png 424w, https://substackcdn.com/image/fetch/$s_!W_Ho!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec383514-0369-4f64-b8da-a116f938c2f3_1600x710.png 848w, https://substackcdn.com/image/fetch/$s_!W_Ho!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec383514-0369-4f64-b8da-a116f938c2f3_1600x710.png 1272w, https://substackcdn.com/image/fetch/$s_!W_Ho!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec383514-0369-4f64-b8da-a116f938c2f3_1600x710.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>This is the level that most developer tasks are today. An agent writes code that can be tested deterministically, but the final act of merging it is gated behind a final safety check.</span></p><p><span>When </span><a href="https://posthog.com/community/profiles/29292?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-autonomy"><span>Robbie</span></a><span> </span><a href="https://posthog.com/blog/sql-parser?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-autonomy"><span>rewrote our SQL parser</span></a><span> in Rust from scratch, he barely read the code since he had a machine oracle to check the work. But since the parser touches every query at PostHog, the agent&#8217;s work was gated behind multiple safety checks: shadow mode in production, then a staged cutover.</span></p><h3><span>How to level up from here</span></h3><p><strong><span>Enforce policies and guardrails with code. </span></strong><span>Most people default to gating Level 2 tasks behind a human (a.k.a., themselves), but this habit turns you into your own bottleneck. Instead, encode as many of your guardrails directly into your pipeline with policies like dry-running by default, scoping credentials, and putting changes behind </span><a href="https://posthog.com/feature-flags?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-autonomy"><span>feature flags</span></a><span>.</span></p><div><hr></div><h2>Level 3: Self-driving mode</h2><p><em><span>When the work is </span><strong><span>easy to check</span></strong><span> + </span><strong><span>cheap to undo</span></strong></em></p><p><span>There aren&#8217;t very many tasks in this category yet &#8211; just smaller ones like dependency bumps, lint fixes, adding test coverage to existing code. But the category is growing quickly, especially with long-running agents, goal-driven loops, and more complex orchestration.</span></p><p><span>We&#8217;re going all-in at PostHog on making </span><a href="http://posthog.com/docs/self-driving?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-autonomy"><span>self-driving</span></a><span> mode a reality for builders. Last month, for example, we launched </span><a href="https://posthog.com/blog/what-is-a-scout?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-autonomy"><span>Scouts</span></a><span> &#8211; agents that run on a schedule, investigate signals from product data, and draft a PR based on what they find.</span></p><h3><span>How to level up from here</span></h3><ul><li><p><strong><span>Train domain-specific models. </span></strong><span>Much of the next wave of tooling will be about improving verification tasks that are difficult for LLMs today. One obvious path is purpose-trained models that know what &#8220;good&#8221; looks like in a specific domain, which is why we&#8217;re </span><a href="http://posthog.com/blog/training-ai-models?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-autonomy"><span>training our own AI models</span></a><span> at PostHog. </span></p></li><li><p><strong><span>Build expert-level context banks. </span></strong><span>A lack of agent autonomy is often just due to a context deficit. We learned firsthand from </span><a href="http://posthog.com/newsletter/context-engineering?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-autonomy"><span>engineering our context layer</span></a><span> for the PostHog Wizard that closing this gap with structured and fresh knowledge is one of the highest-leverage things you can build for reliable agents.</span></p></li><li><p><strong><span>Design clear signals for scouts. </span></strong><span>The bottleneck for long-running agents is going to be whether they know when there&#8217;s work worth doing, and how to distinguish valid </span><a href="http://posthog.com/docs/self-driving/signals?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-autonomy"><span>signals</span></a><span> from random noise.</span></p></li></ul><p><em><span>Words by </span><a href="https://x.com/jinayoon_"><span>Jina Yoon</span></a><span>, who writes these newsletters at Level 0.</span></em></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.posthog.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Subscribe for more content like this. Or don&#8217;t. You have full autonomy.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2><span>&#128373;&#65039; Have your agents talk to our agents</span></h2><ul><li><p><strong><a href="https://posthog.com/careers/technical-customer-success-manager-americas?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-autonomy"><span>Technical Customer Success Manager - Americas</span></a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/technical-customer-success-manager-emea?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-autonomy"><span>Technical Customer Success Manager - EMEA</span></a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/bdr-team-lead?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-autonomy"><span>BDR Team Lead</span></a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/revenue-ops-manager-(sales-focused)?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-autonomy"><span>Revenue Ops Manager (sales focused)</span></a></strong></p></li></ul><div><hr></div><h2><span>&#128314; More ways to level up</span></h2><ul><li><p><strong><a href="https://addyo.substack.com/p/agentic-autonomy-levels"><span>Agentic Autonomy Levels</span></a><span> &#8211; Addy Osmani</span></strong></p></li><li><p><strong><a href="https://posthog.com/blog/repositioning-posthog?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-autonomy">Repositioning PostHog</a> &#8211; Charles Cook</strong></p></li><li><p><strong><a href="https://www.cerebras.ai/blog/how-we-built-our-knowledge-base"><span>How Cerebras Built Its Enterprise Knowledge Base</span></a><span> &#8211; Isaac Tai, Daniel Kim, Mike Gao</span></strong></p></li><li><p><strong><a href="https://posthog.com/blog/what-is-a-context-warehouse?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-autonomy">What is a context warehouse?</a> &#8211; Lizzie Epton</strong></p></li><li><p><strong><span> </span><a href="https://x.com/trq212/status/2080710971228918066"><span>The new rules of context engineering for Claude 5 models</span></a><span> &#8211; Thariq Shihipar</span></strong></p></li></ul><p></p><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>Note that scale isn&#8217;t a factor for determining agent autonomy levels. People often conflate the two because multi-agent orchestration makes autonomy urgent. But if you get autonomy right at the task level, scale takes care of itself.</p></div></div>]]></content:encoded></item><item><title><![CDATA[2030-shaped software]]></title><description><![CDATA[The future of software we&#8217;re building for at PostHog]]></description><link>https://newsletter.posthog.com/p/2030-shaped-software</link><guid isPermaLink="false">https://newsletter.posthog.com/p/2030-shaped-software</guid><dc:creator><![CDATA[Ian Vanagas]]></dc:creator><pubDate>Mon, 20 Jul 2026 17:52:08 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/5ec2eea0-f996-446f-a569-5363b38340fd_2912x2096.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>By 2030, AI agents will be the primary users of software.</span></p><p><span>Many of the conversations and decisions about what we&#8217;re building now are impacted by this. More and more, we&#8217;re aiming towards building &#8220;2030-shaped software.&#8221;</span></p><p><span>This is a vague aspiration and &#8220;</span><a href="https://posthog.com/newsletter/agent-first-product-engineering?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=2030-software"><span>agent-first software</span></a><span>&#8221; isn&#8217;t much better. But, while we can&#8217;t predict the future, we can share how we&#8217;re thinking about the problem.</span></p><h2><span>Human and agent work is split</span></h2><p><span>The current era of software is designed for humans to do all the work, but in 2030, agents will be the ones </span><strong><span>doing</span></strong><span>. Agents have shown that they can do the obvious stuff themselves. What does this leave humans to do?</span></p><ol><li><p><strong><span>Judging and deciding.</span></strong><span> Humans will approve, prioritize, choose direction, and resolve ambiguity.</span></p></li><li><p><strong><span>Understanding and trusting.</span></strong><span> Humans will evaluate whether it worked, if it&#8217;s safe, and what&#8217;s changed.</span></p></li></ol><p><span>&#8220;Doing&#8221; UI like buttons and forms are going away. They will be replaced with UI that supports the two types of work above. This helps optimize humans&#8217; limited time and energy by pointing them where their input actually matters.</span></p><h2><span>Product infrastructure is agent-first</span></h2><p><span>If a human can do something with your product, agents should be able to do it too. This means complete APIs, an </span><a href="https://posthog.com/mcp?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=2030-software"><span>MCP server</span></a><span>, tools, and permissions. Build for </span><a href="http://posthog.com/newsletter/agent-first-product-engineering?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=2030-software"><span>agents as a primary surface</span></a><span>, not an afterthought.</span></p><p><span>Missing capabilities are a failure mode. Say you ask an agent to set up an </span><a href="http://posthog.com/experiments?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=2030-software"><span>A/B test</span></a><span>. It creates the </span><a href="https://posthog.com/feature-flags?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=2030-software"><span>feature flag</span></a><span>, builds the insight, wires up the events, and stops because you never exposed a tool to create the experiment. It now has to ask you to do that part which defeats the purpose of using agents.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!g9_Z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8608cb4a-a666-42d7-b8a7-02e022b2bf2d_923x379.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!g9_Z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8608cb4a-a666-42d7-b8a7-02e022b2bf2d_923x379.png 424w, https://substackcdn.com/image/fetch/$s_!g9_Z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8608cb4a-a666-42d7-b8a7-02e022b2bf2d_923x379.png 848w, https://substackcdn.com/image/fetch/$s_!g9_Z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8608cb4a-a666-42d7-b8a7-02e022b2bf2d_923x379.png 1272w, https://substackcdn.com/image/fetch/$s_!g9_Z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8608cb4a-a666-42d7-b8a7-02e022b2bf2d_923x379.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!g9_Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8608cb4a-a666-42d7-b8a7-02e022b2bf2d_923x379.png" width="923" height="379" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8608cb4a-a666-42d7-b8a7-02e022b2bf2d_923x379.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:379,&quot;width&quot;:923,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Agent-first infrastructure&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Agent-first infrastructure" title="Agent-first infrastructure" srcset="https://substackcdn.com/image/fetch/$s_!g9_Z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8608cb4a-a666-42d7-b8a7-02e022b2bf2d_923x379.png 424w, https://substackcdn.com/image/fetch/$s_!g9_Z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8608cb4a-a666-42d7-b8a7-02e022b2bf2d_923x379.png 848w, https://substackcdn.com/image/fetch/$s_!g9_Z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8608cb4a-a666-42d7-b8a7-02e022b2bf2d_923x379.png 1272w, https://substackcdn.com/image/fetch/$s_!g9_Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8608cb4a-a666-42d7-b8a7-02e022b2bf2d_923x379.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>This doesn&#8217;t mean that tools are all you need. It won&#8217;t be enough to just let Claude use your product on its own. Relying entirely on a model provider is too much risk. Building your own harness lets you guarantee quality, protect your brand, and make continuous improvements. Even </span><a href="https://openai.com/index/harness-engineering/"><span>OpenAI notes</span></a><span> that agents struggle not because they are incapable, but because they lack &#8220;the tools, abstractions, and internal structure required to make progress toward high-level goals.&#8221;</span></p><p><span>Context is what makes your agent special. The model is the same for everyone, your moat is the source code, usage data, customer data, and product skills you feed it. This means </span><a href="https://posthog.com/newsletter/context-engineering?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=2030-software"><span>context engineering</span></a><span>, creating pipelines and flows to get fresh, valuable context to the agents when they need it.</span></p><h2><span>Chat is the front door, generative UI inside</span></h2><p><span>People like to complain about chat as an interface, but we think it's a good one. There's a reason why it's still the primary interface to work with agents and companies are doubling down with products like Slack apps &#8211; have you tried the </span><a href="https://posthog.com/slack?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=2030-software"><span>PostHog Slack app</span></a><span> yet? Telling an agent what's needed and letting it go do it is a powerful interaction method.</span></p><p>But chat isn&#8217;t enough because sometimes reading a paragraph is worse than glancing at a chart or flicking a toggle. Text can be too low bandwidth as it&#8217;s flexible but linear; a UI is legible but rigid. Generative UI is in between.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0sZb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bf6040f-7a09-49df-aa2f-ed458afbd6dc_1600x1186.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0sZb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bf6040f-7a09-49df-aa2f-ed458afbd6dc_1600x1186.jpeg 424w, https://substackcdn.com/image/fetch/$s_!0sZb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bf6040f-7a09-49df-aa2f-ed458afbd6dc_1600x1186.jpeg 848w, https://substackcdn.com/image/fetch/$s_!0sZb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bf6040f-7a09-49df-aa2f-ed458afbd6dc_1600x1186.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!0sZb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bf6040f-7a09-49df-aa2f-ed458afbd6dc_1600x1186.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0sZb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bf6040f-7a09-49df-aa2f-ed458afbd6dc_1600x1186.jpeg" width="1456" height="1079" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0bf6040f-7a09-49df-aa2f-ed458afbd6dc_1600x1186.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1079,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Generative UI&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Generative UI" title="Generative UI" srcset="https://substackcdn.com/image/fetch/$s_!0sZb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bf6040f-7a09-49df-aa2f-ed458afbd6dc_1600x1186.jpeg 424w, https://substackcdn.com/image/fetch/$s_!0sZb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bf6040f-7a09-49df-aa2f-ed458afbd6dc_1600x1186.jpeg 848w, https://substackcdn.com/image/fetch/$s_!0sZb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bf6040f-7a09-49df-aa2f-ed458afbd6dc_1600x1186.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!0sZb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bf6040f-7a09-49df-aa2f-ed458afbd6dc_1600x1186.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A look at the generative UI we&#8217;re working on for PostHog</figcaption></figure></div><p><span>Most generative UI will be disposable, but some will become artifacts: outputs worth keeping, sharing, and forking. Examples include reports, documents, code, pull requests, configuration, and even entire apps. All of them are backed by your app's data. Generative UI is how you work with the agent right now; artifacts are what you walk away with.</span></p><h2><span>Build UI when text isn&#8217;t enough</span></h2><p><span>Text and generative UI cover much of what a product needs, but not everything. Some jobs will continue to need persistent, purpose-built UIs, like:</span></p><ul><li><p><strong><span>Trust and verification surfaces</span></strong><span> confirming the agent did what you wanted. Checking work, not doing it.</span></p></li><li><p><strong><span>Triage and inbox surfaces</span></strong><span> listing decisions that need a human. Approvals, ambiguous calls, unclosed support tickets.</span></p></li></ul><p><span>It's tempting to make your UI agent-first by removing the buttons, forms, and other parts of the UI that power the doing, but this is a half-measure. Most of this new "read-only" UI can be delivered as text by an agent, making it redundant and misaligned with what humans need the UI for.</span></p><p>Take our <a href="https://posthog.com/feature-flags?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=2030-software">feature flags</a> page. The jobs to be done are:</p><ul><li><p><span>Is my flag rolled out?</span></p></li><li><p><span>To whom?</span></p></li><li><p><span>Does it have a payload?</span></p></li><li><p><span>What type is it?</span></p></li></ul><p><span>An agent can answer all these questions in a sentence. You're not verifying the agent's work and there's no decision to be made. You're just checking the flag's state. A 2030 flags page shows how agents change rollouts and previews a pull request to clear up stale flags.</span></p><p>The question to ask is: is a human looking at this for trust and judgement, or to act? If it&#8217;s an action, give the agent the capability. If it&#8217;s to trust or judgement, build for that specifically.</p><h2><span>Be everywhere</span></h2><p><span>Agents don't work like apps. They run on their own, often for a long time. Nobody should have to sit in a browser tab watching them. 2030 products come to their users, no matter if that means </span><a href="https://posthog.com/code?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=2030-software"><span>desktop</span></a><span>, </span><a href="https://posthog.com/slack?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=2030-software"><span>Slack</span></a><span>, mobile, email, API, or voice.</span></p><p>These are a shared control plane between humans and agents. Thin clients over a shared backend, so the experience is the same anywhere and the handoff between surfaces is seamless.</p><p>This pushes you towards cloud-first. The real bottleneck when working with agents is concurrency and babysitting. Builders want to run many agents at once, point them at a backlog, and refine the output from anywhere. On-device execution can&#8217;t do that.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IHTi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fc50f9b-581f-41b6-a424-a7086eaac82a_600x211.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IHTi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fc50f9b-581f-41b6-a424-a7086eaac82a_600x211.png 424w, https://substackcdn.com/image/fetch/$s_!IHTi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fc50f9b-581f-41b6-a424-a7086eaac82a_600x211.png 848w, https://substackcdn.com/image/fetch/$s_!IHTi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fc50f9b-581f-41b6-a424-a7086eaac82a_600x211.png 1272w, https://substackcdn.com/image/fetch/$s_!IHTi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fc50f9b-581f-41b6-a424-a7086eaac82a_600x211.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IHTi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fc50f9b-581f-41b6-a424-a7086eaac82a_600x211.png" width="702" height="246.87" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8fc50f9b-581f-41b6-a424-a7086eaac82a_600x211.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:211,&quot;width&quot;:600,&quot;resizeWidth&quot;:702,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Theo cloud agents&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Theo cloud agents" title="Theo cloud agents" srcset="https://substackcdn.com/image/fetch/$s_!IHTi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fc50f9b-581f-41b6-a424-a7086eaac82a_600x211.png 424w, https://substackcdn.com/image/fetch/$s_!IHTi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fc50f9b-581f-41b6-a424-a7086eaac82a_600x211.png 848w, https://substackcdn.com/image/fetch/$s_!IHTi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fc50f9b-581f-41b6-a424-a7086eaac82a_600x211.png 1272w, https://substackcdn.com/image/fetch/$s_!IHTi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fc50f9b-581f-41b6-a424-a7086eaac82a_600x211.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption"><a href="https://x.com/theo/status/2071083700385955906">Source</a></figcaption></figure></div><p><span>Cloud-first only works if all that infrastructure is excellent. Sandboxes need to be rock solid: fast repo imaging, snappy execution, no crashing or freezing. Your app is ubiquitous, your infrastructure invisible.</span></p><h2><span>Building 2030-shaped software now</span></h2><p>2030 software requires a lot of changes, and 2026 is not 2030. As a company with multiple successful <a href="https://posthog.com/products?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=2030-software">products</a> and thousands of users relying on us, the hard part is getting there while having a real product and revenue to support. Do we retrofit or start fresh?</p><p>Retrofitting maximizes reach, that&#8217;s where our users already are, but we inherit all our 2026 patterns. Every change draws complaints from users attached to the way things work today (not to mention the tech debt).</p><p>Starting fresh means a clean break with years of cumulative UI built on assumptions that might not be valid or relevant. The people who opt in are early adopters who want to co-create the future with us. They don&#8217;t complain about what&#8217;s missing, they tell us what they need. The cost of this is convincing existing users to switch (eventually) and splitting focus with our existing products while we do.</p><p>We&#8217;re cheating a bit and going semi-fresh, using our existing data and infra on a new surface. We&#8217;re expanding our existing <a href="https://posthog.com/desktop?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=2030-software">PostHog Desktop app</a> to fit our 2030 vision first before migrating other surfaces. It&#8217;s already where the best agents live, it draws exactly the early adopters we want, and it&#8217;s simple enough to be a genuine blank slate.</p><p>Without this change, we risk building 2026-shaped software with AI bolted on. We answer &#8220;how do we add AI to this&#8221; rather than &#8220;what is the agent-first version of this?&#8221; We can&#8217;t predict 2030, but don&#8217;t need to be right about the details to build in the right direction. The companies that matter in 2030 will be the ones who started building for it well before they had to.</p><p><em>Words by <a href="https://x.com/ianvanagas">Ian Vanagas</a> who&#8217;s looking forward to 2030 software almost as much as a 2030 World Cup.</em></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.posthog.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Subscribe for more posts on building 2030-shaped software.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><div><hr></div><h2>&#128197; 2026 blog posts you should read now</h2><ul><li><p><strong><a href="https://posthog.com/blog/session-replays-opening-pull-requests?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=2030-software">Our session replays are opening their own pull requests</a> - Sara Miteva</strong></p></li><li><p><strong><a href="https://akashyap.ai/the-future-of-saas-is-agentic/">The Future of SaaS Is Agentic</a> - Arjun Kashyap</strong></p></li><li><p><strong><a href="https://blog.staysaasy.com/p/riding-technology-waves">Riding Technology Waves</a> - Stay SaaSy</strong></p></li><li><p><strong><a href="https://addyo.substack.com/p/own-the-outer-loop">Own the Outer Loop</a> - Addy Osmani</strong></p></li><li><p><strong><a href="https://www.normaltech.ai/p/why-ai-hasnt-replaced-software-engineers">Why AI hasn&#8217;t replaced software engineers, and won&#8217;t</a> - Arvind Narayanan and Sayash Kapoor</strong></p></li></ul><div><hr></div><h2>&#128188; Join us on our journey</h2><ul><li><p><strong><a href="https://posthog.com/careers/ai-research-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=2030-software"><span>AI Research Engineer</span></a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/site-reliability-engineer-(us-pacific-time)?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=2030-software">Site Reliability Engineer (Pacific timezone)</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/bdr-team-lead?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=2030-software">BDR Team Lead</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/context-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=2030-software">Context Engineer</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/backend-engineer-europeuk-timezone?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=2030-software">Backend Engineer</a></strong></p></li></ul>]]></content:encoded></item><item><title><![CDATA[Product for Engineers is now build mode]]></title><description><![CDATA[Same team, same posts. New brand, new focus.]]></description><link>https://newsletter.posthog.com/p/product-for-engineers-is-now-build</link><guid isPermaLink="false">https://newsletter.posthog.com/p/product-for-engineers-is-now-build</guid><dc:creator><![CDATA[Ian Vanagas]]></dc:creator><pubDate>Mon, 13 Jul 2026 18:39:17 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/fd61ab64-b689-4d1e-b577-eb1849b29f0f_1456x1048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>We&#8217;re rebranding Product for Engineers as </span><strong><span>build mode</span></strong><span> to better cover everything it takes to build successful products from now into the future. Here&#8217;s why.</span></p><h2><span>We accomplished our original goal</span></h2><p>We started Product for Engineers to challenge the idea that engineers only care about code.</p><p>We showed that engineers can flex their product muscle, <a href="https://posthog.com/newsletter/talk-to-users?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=build-mode-launch">talk to users directly</a>, <a href="https://posthog.com/newsletter/how-we-decide-what-to-build?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=build-mode-launch">be opinionated about what to work on</a>, work autonomously to ship features, and figure out if they are successful. The tens of thousands of subscribers we amassed, the rise in popularity of the product engineer role, and 100+ YC startups hiring them now are proof we accomplished this.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FtGt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff56b481f-fc00-4d29-84d3-57d952924097_2048x917.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FtGt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff56b481f-fc00-4d29-84d3-57d952924097_2048x917.png 424w, https://substackcdn.com/image/fetch/$s_!FtGt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff56b481f-fc00-4d29-84d3-57d952924097_2048x917.png 848w, https://substackcdn.com/image/fetch/$s_!FtGt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff56b481f-fc00-4d29-84d3-57d952924097_2048x917.png 1272w, https://substackcdn.com/image/fetch/$s_!FtGt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff56b481f-fc00-4d29-84d3-57d952924097_2048x917.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FtGt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff56b481f-fc00-4d29-84d3-57d952924097_2048x917.png" width="1456" height="652" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f56b481f-fc00-4d29-84d3-57d952924097_2048x917.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:652,&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;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FtGt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff56b481f-fc00-4d29-84d3-57d952924097_2048x917.png 424w, https://substackcdn.com/image/fetch/$s_!FtGt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff56b481f-fc00-4d29-84d3-57d952924097_2048x917.png 848w, https://substackcdn.com/image/fetch/$s_!FtGt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff56b481f-fc00-4d29-84d3-57d952924097_2048x917.png 1272w, https://substackcdn.com/image/fetch/$s_!FtGt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff56b481f-fc00-4d29-84d3-57d952924097_2048x917.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Along the way, we learned product engineers care about more than just </span><em><span>product</span></em><span>. They care about building a successful company and career more broadly. After all, great products come from the people and companies who build them.</span></p><p><span>Following the advice to &#8220;</span><s><span>build</span></s><span> write something people want,&#8221; we wrote about everything from </span><a href="https://posthog.com/newsletter/finding-a-job-product-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=build-mode-launch"><span>finding a job</span></a><span> to </span><a href="https://posthog.com/newsletter/building-a-startup-that-scales?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=build-mode-launch"><span>scaling a startup</span></a><span> to </span><a href="https://posthog.com/newsletter/marketing-for-devs?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=build-mode-launch"><span>marketing</span></a><span> to </span><a href="https://posthog.com/newsletter/collaboration-sucks?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=build-mode-launch"><span>collaboration</span></a><span>.</span></p><p><span>But every post like this pulled us away from the &#8220;product&#8221; framing in our name. Helping people build more successful products meant a lot more than just helping engineers do product.</span></p><h2><span>AI changes engineering and the meaning of &#8220;engineer&#8221;</span></h2><p><span>The other part of our name has also seen huge changes because of AI.</span></p><p><span>First, people are building AI-powered products and using AI to do so. Last week, PostHog saw 3.5M </span><a href="https://posthog.com/mcp?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=build-mode-launch"><span>MCP</span></a><span> tool calls, nearly 100K </span><a href="https://posthog.com/ai?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=build-mode-launch"><span>PostHog AI</span></a><span> chats, and 40% of experiments created through our MCP. Our </span><a href="https://posthog.com/ai-observability?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=build-mode-launch"><span>AI observability</span></a><span> product grew 17x in the last year. Building the best products now requires </span><a href="https://posthog.com/newsletter/agent-first-product-engineering?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=build-mode-launch"><span>building for agents</span></a><span>, </span><a href="https://posthog.com/newsletter/loops?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=build-mode-launch"><span>writing loops</span></a><span>, and </span><a href="https://posthog.com/newsletter/ai-coding-mistakes?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=build-mode-launch"><span>making full use of AI coding tools</span></a><span>.</span></p><p><span>Second, AI has made it possible for anyone to build. The</span><a href="https://posthog.com/newsletter/engineeringification-of-everything?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=build-mode-launch"><span> engineeringification of everything</span></a><span> is real.</span><a href="https://posthog.com/blog/slack-app-beta#the-one-where-it-built-a-new-feature-for-the-web-app?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=build-mode-launch"><span> Salespeople ship features</span></a><span>, </span><a href="https://github.com/PostHog/posthog/pull/62065"><span>product managers fix bugs</span></a><span>, </span><a href="https://posthog.com/blog/joe-os-analytics?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=build-mode-launch"><span>marketers build video games</span></a><span>. Our posts are relevant to a new group who don&#8217;t exclusively label themselves as engineers.</span></p><p><span>PostHog as a company is changing to reflect this. Beyond building more for AI, </span><a href="https://posthog.com/handbook/who-we-build-for?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=build-mode-launch"><span>our ICP</span></a><span> has changed from engineers at high growth startups to the people building products in AI-pilled software teams at any scale. Our newsletter should reflect this change too.</span></p><p><span>The Product for Engineers brand wasn&#8217;t resonating for us or our readers, so we&#8217;re changing it and going </span><strong><span>build mode</span></strong><span>.</span></p><h2><span>What is build mode?</span></h2><p><span>The tools, tactics, and taste builders need to build successful products, companies, and careers like:</span></p><ol><li><p><span>How to build </span><a href="https://posthog.com/newsletter/agent-first-product-engineering?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=build-mode-launch"><span>AI-native products</span></a><span> (and</span><a href="https://posthog.com/newsletter/building-ai-agents?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=build-mode-launch"><span> agents</span></a><span>) successfully</span></p></li><li><p><span>How to leverage AI to build more successful products and careers</span></p></li><li><p><span>How to build a successful </span><a href="https://posthog.com/newsletter/what-does-a-product-manager-do?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=build-mode-launch"><span>company</span></a><span>, </span><a href="https://posthog.com/newsletter/hackathons?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=build-mode-launch"><span>culture</span></a><span>, and</span><a href="https://posthog.com/newsletter/startup-marketing-for-noobs?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=build-mode-launch"><span> brand</span></a></p></li><li><p><span>Lessons from the</span><a href="https://newsletter.posthog.com/p/llms-are-picking-winners-heres-how"><span> frontlines</span></a><span> of doing all of the above at </span><a href="https://posthog.com/newsletter/hidden-danger-of-shipping-fast?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=build-mode-launch"><span>PostHog</span></a></p></li></ol><p><strong><span>build mode</span></strong><span> is a reflection of what's happening now and what we think matters to builders going forward. Our upcoming posts will cover what we think the future of software looks like, writing agent skills, and an explainer on effort levels.</span></p><p>It turns out that when code is cheap, the product skills we wrote about become even more important. AI enables more people to build and takes them further, faster, but it still needs the guidance, judgement, and taste only you can provide. Build mode aims to help you with this as best as we can.</p><p><span>Go build mode.</span></p><p><em>Words by <a href="https://x.com/ianvanagas">Ian Vanagas</a> who will miss our mascot Swolehog.</em></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.posthog.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Subscribe to go build mode</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Stop being the code review bottleneck]]></title><description><![CDATA[4 ways to make AI code review suck less (with prompts)]]></description><link>https://newsletter.posthog.com/p/code-review-tips</link><guid isPermaLink="false">https://newsletter.posthog.com/p/code-review-tips</guid><dc:creator><![CDATA[Jina Yoon]]></dc:creator><pubDate>Thu, 09 Jul 2026 19:15:14 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/1018b66a-6d94-4190-b34b-60e0072e3840_1317x988.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Agents are writing code faster than any human can review. </p><p>The naive solution would be for developers to review code faster. The 500 IQ take is for developers to review as little code as possible. </p><p>If you need to be involved in every code review, you will always be the bottleneck. Instead, put yourself outside of the code review loop by building a pipeline that delegates tasks to agents.</p><p>We asked engineers at PostHog how they&#8217;ve been reviewing AI-generated code to keep shipping fast without losing quality.</p><p>Here are four workflow changes you can steal (with prompts included) to make your life easier.</p><div><hr></div><h2>1. Make agents review code for you</h2><p>The number one thing to add, if you haven&#8217;t yet, is a way for agents to review code for you.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!I0j6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a86da0d-520c-4b49-8693-295f42193f43_900x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!I0j6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a86da0d-520c-4b49-8693-295f42193f43_900x720.png 424w, https://substackcdn.com/image/fetch/$s_!I0j6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a86da0d-520c-4b49-8693-295f42193f43_900x720.png 848w, https://substackcdn.com/image/fetch/$s_!I0j6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a86da0d-520c-4b49-8693-295f42193f43_900x720.png 1272w, https://substackcdn.com/image/fetch/$s_!I0j6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a86da0d-520c-4b49-8693-295f42193f43_900x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!I0j6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a86da0d-520c-4b49-8693-295f42193f43_900x720.png" width="556" height="444.8" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1a86da0d-520c-4b49-8693-295f42193f43_900x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:900,&quot;resizeWidth&quot;:556,&quot;bytes&quot;:421465,&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://newsletter.posthog.com/i/206243478?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a86da0d-520c-4b49-8693-295f42193f43_900x720.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_!I0j6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a86da0d-520c-4b49-8693-295f42193f43_900x720.png 424w, https://substackcdn.com/image/fetch/$s_!I0j6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a86da0d-520c-4b49-8693-295f42193f43_900x720.png 848w, https://substackcdn.com/image/fetch/$s_!I0j6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a86da0d-520c-4b49-8693-295f42193f43_900x720.png 1272w, https://substackcdn.com/image/fetch/$s_!I0j6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a86da0d-520c-4b49-8693-295f42193f43_900x720.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>The goal is to offload the simpler reviews to agents, and flag if something genuinely needs a human.</span></p><p><span>The key is that the agent that wrote the code can&#8217;t be the one that reviews it. Agents are bad at checking their own work since they&#8217;re often unaware of their own blind spots.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a></span></p><p><span>For the same reason, it&#8217;s better to have multiple agents with different instructions and goals to cover more gaps,</span><a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a><span> as well as different models and providers for different reviewers.</span><a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a></p><p><span>Here&#8217;s how one of our engineers, </span><a href="https://posthog.com/community/profiles/30173?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=code-review"><span>Paul D&#8217;Ambra</span></a><span>, makes his own custom agent review system work:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZlzF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e5ce9b3-0ee9-4444-a746-df6a792fbe98_1296x803.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZlzF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e5ce9b3-0ee9-4444-a746-df6a792fbe98_1296x803.png 424w, https://substackcdn.com/image/fetch/$s_!ZlzF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e5ce9b3-0ee9-4444-a746-df6a792fbe98_1296x803.png 848w, https://substackcdn.com/image/fetch/$s_!ZlzF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e5ce9b3-0ee9-4444-a746-df6a792fbe98_1296x803.png 1272w, https://substackcdn.com/image/fetch/$s_!ZlzF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e5ce9b3-0ee9-4444-a746-df6a792fbe98_1296x803.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZlzF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e5ce9b3-0ee9-4444-a746-df6a792fbe98_1296x803.png" width="1296" height="803" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1e5ce9b3-0ee9-4444-a746-df6a792fbe98_1296x803.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:803,&quot;width&quot;:1296,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:72855,&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://newsletter.posthog.com/i/206243478?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e5ce9b3-0ee9-4444-a746-df6a792fbe98_1296x803.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_!ZlzF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e5ce9b3-0ee9-4444-a746-df6a792fbe98_1296x803.png 424w, https://substackcdn.com/image/fetch/$s_!ZlzF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e5ce9b3-0ee9-4444-a746-df6a792fbe98_1296x803.png 848w, https://substackcdn.com/image/fetch/$s_!ZlzF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e5ce9b3-0ee9-4444-a746-df6a792fbe98_1296x803.png 1272w, https://substackcdn.com/image/fetch/$s_!ZlzF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e5ce9b3-0ee9-4444-a746-df6a792fbe98_1296x803.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ol><li><p><span>First, </span><strong><a href="https://github.com/pauldambra/dotfiles/tree/main/ai/skills/qa-swarm"><span>qa-swarm</span></a></strong><span> spawns four reviewer agents, each with their own special instructions:</span></p><ul><li><p><strong><span>qa-team</span></strong><span> &#8211; spawns technical subagents that hunt for security, database, performance, etc.</span></p></li><li><p><strong><span>security-audit</span></strong><span> &#8211; probes for vulnerabilities like SQL or prompt injections</span></p></li><li><p><strong><span>paul-reviewer </span></strong><span>&#8211; uses Paul&#8217;s voice and focuses on observability, rollouts, naming</span></p></li><li><p><strong><span>xp-reviewer</span></strong><span> &#8211; applies an Extreme Programming lens to review</span></p></li></ul></li><li><p><span>Then,</span><strong><span> </span><a href="https://github.com/pauldambra/dotfiles/blob/main/ai/skills/review-triage/SKILL.md"><span>review-triage</span></a><span> </span></strong><span>sorts those reviews to classify threads into three categories:</span></p><ul><li><p><strong><span>actionable </span></strong><span>&#8594; gets fixed and pushed</span></p></li><li><p><strong><span>nits</span></strong><span> &#8594; get resolved and replied to with a comment</span></p></li><li><p><strong><span>ambiguous</span></strong><span> &#8594; escalated and sorted for Paul to work through with the agent later</span></p></li></ul></li><li><p><span>An outer loop iterates up to three times or until no new actionable threads appear.</span></p></li></ol><p><span>From there, you can connect this to another loop that shepherds the PR until it&#8217;s ready to merge &#8211; more on that in the next section.</span></p><blockquote><p><strong><span>The takeaway: </span></strong><span>Save time reviewing code by making </span><a href="https://posthog.com/newsletter/agent-first-product-engineering?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=code-review"><span>agents</span></a><span> review each other. This knocks out easier reviews so that only the PRs that really need human attention get flagged.</span></p></blockquote><h3>Steal this</h3><p><span>You can check out and copy Paul&#8217;s </span><a href="https://github.com/pauldambra/dotfiles/blob/main/ai/skills/qa-swarm/SKILL.md"><span>qa-swarm</span></a><span> and </span><a href="https://github.com/pauldambra/dotfiles/blob/main/ai/skills/review-triage/SKILL.md"><span>review-triage</span></a><span> skills, or use this prompt to design your own review loop based on his:</span></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;markdown&quot;,&quot;nodeId&quot;:&quot;1d2a46a3-5423-450a-9a13-fd25db41713b&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-markdown">Read Paul D'Ambra's qa-swarm skill, plus its sibling review-triage in the same folder, then help me design my own version: https://github.com/pauldambra/dotfiles/blob/main/ai/skills/qa-swarm/SKILL.md

It should take in a single PR, spawn a reviewer panel, triage every finding and existing PR thread into actionable / nit / ambiguous, and keep going until nothing's left but the ambiguous ones flagged for me.  

Interview me about my stack, tooling, available models, and how autonomous it should be &#8212; what gets auto-fixed vs. only reported, and what it may post to GitHub &#8212; before writing the final SKILL.md, then install it.</code></pre></div><p><span>That said, these systems can get token expensive:</span></p><div class="callout-block" data-callout="true"><p><em><span>&#8220;Something like 60% of my token spend is burned automating the toil of handling CI and review and I don&#8217;t regret a single dollar.&#8221; </span></em><span>&#8211; Paul</span></p></div><p><span>So if running multiple agents or loops isn&#8217;t an option for your team, look for single agent designs like </span><a href="https://github.com/kunchenguid/no-mistakes"><span>this one</span></a><span> by Kun Chen.</span></p><div><hr></div><h2>2. Delegate PR babysitting to loops</h2><p>The context switching that comes with agentic coding is exhausting. One easy way to reduce that fatigue is by automating code review-adjacent tasks that don&#8217;t need your attention.</p><p>For example, babysitting a single PR can involve tedious tasks like monitoring CI, re-running flaky tests, checking notifications for comments, and keeping the branch up to date.</p><p>Why waste your most precious resource &#8211; your energy &#8211; when you can just delegate all of it to a <a href="https://posthog.com/newsletter/loops?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=code-review">loop</a>?</p><blockquote><p><strong><span>The takeaway: </span></strong><span>Reduce context switching and fatigue by delegating simple tasks like PR babysitting to a loop.</span></p></blockquote><h3><span>Steal this</span></h3><p><span>You can implement your own PR babysitter skill, based on </span><a href="https://github.com/haacked/dotfiles/blob/main/ai/skills/babysit-prs/SKILL.md"><span>babysit-prs</span></a><span> by </span><a href="https://posthog.com/community/profiles/32501?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=code-review"><span>Phil Haack </span></a><span>with the prompt below. (It works best if you run it after creating a review loop skill from the previous section.)</span></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;markdown&quot;,&quot;nodeId&quot;:&quot;91d19119-2623-495e-b91e-38bf8d8db510&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-markdown">Read https://github.com/haacked/dotfiles/blob/main/ai/skills/babysit-prs/SKILL.md and adapt it for me: same sweep/state design, but it dispatches my own single-PR review skill via a spawned agent per unreviewed PR. 

Before writing SKILL.md, interview me on: which skill it dispatches and where my skills live, my stack/tooling/models, and which extra tasks to include &#8212; CI monitoring, branch freshness, flaky-test reruns, lint/format autofix, regenerating drifted artifacts, description sync. 

Ground the interview in  facts you can discover yourself (my open PRs, gh auth, clone layout) rather than asking about them.</code></pre></div><div><hr></div><h2>3. Add a PR auto-stamper</h2><p><span>Fast-moving teams generate a lot of small, low-risk PRs, and every one still needs approval on GitHub (a.k.a., a stamp).</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Zsw1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c3a309a-d257-4c10-8732-a582edd4d7c7_1976x1037.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Zsw1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c3a309a-d257-4c10-8732-a582edd4d7c7_1976x1037.png 424w, https://substackcdn.com/image/fetch/$s_!Zsw1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c3a309a-d257-4c10-8732-a582edd4d7c7_1976x1037.png 848w, https://substackcdn.com/image/fetch/$s_!Zsw1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c3a309a-d257-4c10-8732-a582edd4d7c7_1976x1037.png 1272w, https://substackcdn.com/image/fetch/$s_!Zsw1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c3a309a-d257-4c10-8732-a582edd4d7c7_1976x1037.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Zsw1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c3a309a-d257-4c10-8732-a582edd4d7c7_1976x1037.png" width="1456" height="764" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7c3a309a-d257-4c10-8732-a582edd4d7c7_1976x1037.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:764,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:198368,&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://newsletter.posthog.com/i/206243478?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c3a309a-d257-4c10-8732-a582edd4d7c7_1976x1037.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_!Zsw1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c3a309a-d257-4c10-8732-a582edd4d7c7_1976x1037.png 424w, https://substackcdn.com/image/fetch/$s_!Zsw1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c3a309a-d257-4c10-8732-a582edd4d7c7_1976x1037.png 848w, https://substackcdn.com/image/fetch/$s_!Zsw1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c3a309a-d257-4c10-8732-a582edd4d7c7_1976x1037.png 1272w, https://substackcdn.com/image/fetch/$s_!Zsw1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c3a309a-d257-4c10-8732-a582edd4d7c7_1976x1037.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>At PostHog, we used to handle this in Slack where you drop your PR in #dev-stamp-exchange and wait for someone to give it a quick approval and react with a stamp emoji. We even built a </span><a href="https://stamphog.vercel.app/"><span>leaderboard</span></a><span> for it.</span></p><p><span>It worked, but each stamp required another engineer to take themselves out of their flow to approve a change they had little to no context on.</span></p><p><span>Now, most of those are done by our StampHog agent instead. And in just one quarter, it gives the final stamp on roughly 1 in 3 PRs merged into our main repo.</span></p><p><span>Our engineers add a </span><code>stamphog</code><span> label on their PR in GitHub, and it runs a few safety checks based on:</span></p><ul><li><p><strong><span>PR state.</span></strong><span> No merge conflicts or changes requested</span></p></li><li><p><strong><span>Blast radius.</span></strong><span> </span><a href="https://github.com/PostHog/posthog/blob/master/tools/pr-approval-agent/README.md#t2--never-ai-approved"><span>Deny-list</span></a><span> keywords (auth, secrets, billing, public APIs, etc.)</span></p></li><li><p><strong><span>Diff size.</span></strong><span> Under 500 lines and 20 files</span></p></li><li><p><strong><span>A simple LLM check.</span></strong><span> For basic showstoppers</span></p></li></ul><p><span>If the agent approves, it&#8217;ll leave a bare GitHub approval with no line comments.</span></p><p><span>Otherwise, it refuses or escalates with a 1-2 sentence reason, risk level rating, and next steps. Usually that means routing to a subject matter expert based on </span><a href="https://github.com/PostHog/posthog/blob/master/.github/CODEOWNERS-soft"><span>CODEOWNERS-soft</span></a><span> and git-blame familiarity.</span></p><p>We still use #dev-stamp-exchange when the agent can&#8217;t auto-accept or route, but it&#8217;s way less active now. Last month, the StampHog agent took care of 1.6K PRs on its own &#8211; that&#8217;s <em>1.6K fewer Slack interruptions</em> for our engineers.</p><blockquote><p><strong><span>The takeaway: </span></strong><span>Let an agent can take care of low-context PR approvals and routing to reduce distractions. Use deterministic checks to route sensitive code to humans.</span></p></blockquote><h3>Steal this</h3><p><span>The code for StampHog is available </span><a href="https://github.com/PostHog/posthog/blob/master/tools/pr-approval-agent/"><span>here</span></a><span>. Many of its inner workings are specific to PostHog, so instead of copying it, here's a prompt to start customizing one for your repo based on ours:</span></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;markdown&quot;,&quot;nodeId&quot;:&quot;046c8374-4e36-43e2-aa0d-e8591ecd2be7&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-markdown">Read https://github.com/PostHog/posthog/blob/master/tools/pr-approval-agent/README.md and build the equivalent for the repo at &lt;path&gt;. 

Copy the architecture; preserve its safety invariants exactly (fail closed, never request changes or merge, LLM can tighten gates but never loosen). 

Their deny-list and thresholds are calibrated to their codebase &#8212; re-derive for me: mine my git history for high-blast-radius deny candidates and calibrate size/tier ceilings from my merged PRs, then propose the full gate config for my sign-off before writing any code. 

At the same time, ask me whatever you can't derive from the repo &#8212; at minimum the CI system and trigger label, escalation routing if there's no CODEOWNERS, and which LLM/SDK to use and how CI gets its credentials. 

Leave the result as uncommitted files on my working tree.</code></pre></div><div><hr></div><h2>4. Verify by observation, not reasoning</h2><p><a href="https://posthog.com/newsletter/building-ai-agents?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=code-review">Agents</a> are good at explaining why their code works. The explanation is often convincing... but also wrong. </p><p>If you run the code end to end, you&#8217;ll frequently find errors the agent never reasoned about, or output that&#8217;s just slightly not what you asked for.</p><p><span>That&#8217;s why </span><a href="https://posthog.com/community/profiles/43453?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=code-review"><span>Daniel Visca</span></a><span>&#8216;s rule of thumb is observability over</span><strong><span> </span></strong><span>reasoning</span><strong><span>.</span></strong><span> Don&#8217;t accept an argument that the code works when you can </span><em><span>watch</span></em><span> it work.</span></p><p><span>The gold standard is something you can observe directly, like sending a real API request and reading the response. If the behavior is in front of you, you don&#8217;t have to trust the agent&#8217;s rationale at all. But this has a scaling problem since a 3,000-line PR would be challenging to trust and observe.</span></p><p><span>His approach is to make agents decompose the work. For example, for a large change (like building a metrics pipeline end to end), he instructs the agent to produce a stack of small, single-purpose PRs and then uses</span><a href="https://graphite.dev"><span> Graphite</span></a><span> for its &#8220;stacking&#8221; functionality. This makes each diff independently runnable and observable:</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!d1yr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc414177a-0c80-4351-b7dd-ba6897b46357_2010x668.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!d1yr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc414177a-0c80-4351-b7dd-ba6897b46357_2010x668.png 424w, https://substackcdn.com/image/fetch/$s_!d1yr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc414177a-0c80-4351-b7dd-ba6897b46357_2010x668.png 848w, https://substackcdn.com/image/fetch/$s_!d1yr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc414177a-0c80-4351-b7dd-ba6897b46357_2010x668.png 1272w, https://substackcdn.com/image/fetch/$s_!d1yr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc414177a-0c80-4351-b7dd-ba6897b46357_2010x668.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!d1yr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc414177a-0c80-4351-b7dd-ba6897b46357_2010x668.png" width="1456" height="484" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c414177a-0c80-4351-b7dd-ba6897b46357_2010x668.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:484,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:235179,&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://newsletter.posthog.com/i/206243478?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc414177a-0c80-4351-b7dd-ba6897b46357_2010x668.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_!d1yr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc414177a-0c80-4351-b7dd-ba6897b46357_2010x668.png 424w, https://substackcdn.com/image/fetch/$s_!d1yr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc414177a-0c80-4351-b7dd-ba6897b46357_2010x668.png 848w, https://substackcdn.com/image/fetch/$s_!d1yr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc414177a-0c80-4351-b7dd-ba6897b46357_2010x668.png 1272w, https://substackcdn.com/image/fetch/$s_!d1yr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc414177a-0c80-4351-b7dd-ba6897b46357_2010x668.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>At each step of the stack, you can run a real check and confirm the output matches what you expect. Then, as you merge bottom-up, each layer only builds on behavior that&#8217;s already been verified.</span></p><p><span>This way, early mistakes can&#8217;t compound, and when something does break, you&#8217;re debugging one small diff instead of the whole change.</span></p><p><span>As a bonus, this lets StampHog from #3 auto-approve the small and focused PRs. You end up with two different checks: the agent reasoning about the code first, and a human observing its actual behavior.</span></p><blockquote><p><strong><span>The takeaway: </span></strong><span>When you can't trust an agent's reasoning, don't read more code; decompose the change until you can watch each piece run. Observation scales better than review.</span></p></blockquote><h3>Steal this</h3><p>You can set this up by using Graphite to stack smaller PRs produced by your agents with these instructions:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;markdown&quot;,&quot;nodeId&quot;:&quot;1b335181-461e-4a16-82f2-ac429484172f&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-markdown">Split work into a stack of small PRs, each under 400 changed lines and focused on a single change, building only on the PRs below it. 

Every PR must ship with its own tests and end with a way to observe it working directly &#8212; a command to run and the output I should expect.</code></pre></div><p><span>This approach is especially valuable for frontend work since deterministic tests don&#8217;t always capture the visual or behavioral functionality you&#8217;re looking for.</span></p><p><span>You can use this prompt to copy the </span><a href="https://github.com/PostHog/posthog/blob/master/.agents/skills/qa-frontend/SKILL.md"><span>qa-frontend</span></a><span> skill </span><a href="https://posthog.com/community/profiles/33209?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=code-review"><span>Pawel Cebula</span></a><span> created for this. It&#8217;s a huge timesaver to have an agent run the code and take screenshots and GIFs for you:</span></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;markdown&quot;,&quot;nodeId&quot;:&quot;4f8df943-d5bf-4d8e-89a2-fe666b63a3a7&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-markdown">Read https://github.com/PostHog/posthog/blob/master/.agents/skills/qa-frontend/SKILL.md and build the equivalent for the repo at &lt;path&gt;. Copy the architecture and preserve every safety invariant it states exactly.

Its file-classification, route-finding, local-stack/login, and evidence-upload rules are calibrated to PostHog &#8212; re-derive mine: mine my repo for the diff-pattern &#8594; frontend-test-type map, route heuristics, and the "never auto-edit" deny-list (from my high-blast-radius areas). Propose the full config for my sign-off before writing any code.

Ask me whatever you can't derive from the repo &#8212; at minimum: which browser MCP to drive, how my local stack starts and on what URL, how the app authenticates locally, and how PR mode checks out PRs and posts comments (platform + CLI/token).

Leave the result as uncommitted files on my working tree.</code></pre></div><p><em><span>Words by </span><a href="https://x.com/jinayoon_"><span>Jina Yoon</span></a><span> who was, admittedly, the bottleneck for this post.</span></em></p><div><hr></div><h2><span>&#129770;  Blogs worth human review</span></h2><ul><li><p><strong><a href="https://posthog.com/blog/why-we-rebuilt-our-data-warehouse?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=code-review"><span>Why we rebuilt our data warehouse and how it unlocks self-driving products</span></a><span> &#8211; Eric Duong</span></strong></p></li><li><p><strong><a href="https://dylanamartin.com/2026/03/24/agentic-failure-modes.html"><span>Agentic Failure Modes</span></a><span> &#8211; Dylan Martin</span></strong></p></li><li><p><strong><a href="https://lucumr.pocoo.org/2026/7/4/better-models-worse-tools/"><span>Better Models: Worse Tools</span></a><span> &#8211; Armin Ronacher</span></strong></p></li><li><p><strong><a href="https://addyo.substack.com/p/agentic-code-review"><span>Agentic Code Review</span></a><span> &#8211; Addy Osmani</span></strong></p></li><li><p><strong><a href="https://x.com/geoffreylitt/status/2072522251300409556"><span>Understanding is the new bottleneck</span></a><span> &#8211; Geoffrey Litt</span></strong></p></li></ul><div><hr></div><h2><span>&#129302; We can&#8217;t automate these yet</span></h2><ul><li><p><strong><a href="https://posthog.com/careers/ai-research-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=code-review"><span>AI Research Engineer</span></a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/technical-customer-success-manager-americas?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=code-review"><span>Technical Customer Success Manager - Americas</span></a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/context-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=code-review"><span>Context Engineer</span></a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/revenue-ops-manager-(sales-focused)?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=code-review"><span>Revenue Ops Manager (sales focused)</span></a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/developer-who-connects-with-other-developers?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=code-review">Developer who connects with other developers</a></strong></p></li></ul><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.posthog.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Subscribe for more stealable dev tips</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p><a href="https://research.google/blog/can-large-language-models-identify-and-correct-their-mistakes/">Tyen et al., "LLMs cannot find reasoning errors, but can correct them given the error location" (2024)</a></p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p><a href="https://www.amazon.science/publications/enhancing-llm-as-a-judge-via-multi-agent-collaboration">Qian et al., &#8220;Enhancing LLM-as-a-judge via multi-agent collaboration&#8221; (2025)</a></p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p><a href="https://arxiv.org/abs/2404.18796">Verga et al., &#8220;Replacing Judges with Juries: Evaluating LLM Generations with a Panel of Diverse Models&#8221; (2024)</a></p></div></div>]]></content:encoded></item><item><title><![CDATA[We used context engineering to 5x conversion and 2x activation]]></title><description><![CDATA[The magic behind our AI onboarding wizard]]></description><link>https://newsletter.posthog.com/p/we-used-ai-to-5x-conversion-and-2x</link><guid isPermaLink="false">https://newsletter.posthog.com/p/we-used-ai-to-5x-conversion-and-2x</guid><dc:creator><![CDATA[Edwin Lim]]></dc:creator><pubDate>Wed, 24 Jun 2026 20:01:49 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/8b27cd51-6130-413b-bd94-a61af1985aa9_2912x2096.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><span>It all started with a friction log.</span></p><p><span>A year ago, </span><a href="https://posthog.com/community/profiles/32497?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=context-engineering"><span>Josh Snyder</span></a><span>, then on the growth team, binged session recordings of users trying to onboard to PostHog. The long list of failure modes was painful.</span></p><p><span>But it jolted an idea loose: what if AI could handle the onboarding for you? So we built an AI onboarding wizard.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Poz0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b4402a7-a6d8-4173-bb4e-dd9cae3e6164_1481x880.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Poz0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b4402a7-a6d8-4173-bb4e-dd9cae3e6164_1481x880.png 424w, https://substackcdn.com/image/fetch/$s_!Poz0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b4402a7-a6d8-4173-bb4e-dd9cae3e6164_1481x880.png 848w, https://substackcdn.com/image/fetch/$s_!Poz0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b4402a7-a6d8-4173-bb4e-dd9cae3e6164_1481x880.png 1272w, https://substackcdn.com/image/fetch/$s_!Poz0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b4402a7-a6d8-4173-bb4e-dd9cae3e6164_1481x880.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Poz0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b4402a7-a6d8-4173-bb4e-dd9cae3e6164_1481x880.png" width="1456" height="865" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1b4402a7-a6d8-4173-bb4e-dd9cae3e6164_1481x880.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:865,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:331362,&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://newsletter.posthog.com/i/203333056?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b4402a7-a6d8-4173-bb4e-dd9cae3e6164_1481x880.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_!Poz0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b4402a7-a6d8-4173-bb4e-dd9cae3e6164_1481x880.png 424w, https://substackcdn.com/image/fetch/$s_!Poz0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b4402a7-a6d8-4173-bb4e-dd9cae3e6164_1481x880.png 848w, https://substackcdn.com/image/fetch/$s_!Poz0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b4402a7-a6d8-4173-bb4e-dd9cae3e6164_1481x880.png 1272w, https://substackcdn.com/image/fetch/$s_!Poz0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b4402a7-a6d8-4173-bb4e-dd9cae3e6164_1481x880.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>The </span><a href="https://posthog.com/wizard?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=context-engineering"><span>PostHog Wizard</span></a><span> is an AI agent that fully integrates PostHog into any codebase with a single CLI command. No manual SDK installation, no docs spelunking. Just </span><code>npx @posthog/wizard</code><span>.</span></p><p><span>Early versions were primitive, but today&#8217;s wizard completes two hours of work in just 8 minutes. It&#8217;s a genuinely magical experience. People LOVE it.</span></p><p><span>Building it taught us some important lessons about how to build agents people genuinely love (with great ROI, too!), starting with the most important lesson of all...</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZOpn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9392eb22-9717-47ed-ada6-02ba3dd359f5_1345x638.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZOpn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9392eb22-9717-47ed-ada6-02ba3dd359f5_1345x638.png 424w, https://substackcdn.com/image/fetch/$s_!ZOpn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9392eb22-9717-47ed-ada6-02ba3dd359f5_1345x638.png 848w, https://substackcdn.com/image/fetch/$s_!ZOpn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9392eb22-9717-47ed-ada6-02ba3dd359f5_1345x638.png 1272w, https://substackcdn.com/image/fetch/$s_!ZOpn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9392eb22-9717-47ed-ada6-02ba3dd359f5_1345x638.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZOpn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9392eb22-9717-47ed-ada6-02ba3dd359f5_1345x638.png" width="1345" height="638" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9392eb22-9717-47ed-ada6-02ba3dd359f5_1345x638.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:638,&quot;width&quot;:1345,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:409113,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.posthog.com/i/203333056?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9392eb22-9717-47ed-ada6-02ba3dd359f5_1345x638.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_!ZOpn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9392eb22-9717-47ed-ada6-02ba3dd359f5_1345x638.png 424w, https://substackcdn.com/image/fetch/$s_!ZOpn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9392eb22-9717-47ed-ada6-02ba3dd359f5_1345x638.png 848w, https://substackcdn.com/image/fetch/$s_!ZOpn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9392eb22-9717-47ed-ada6-02ba3dd359f5_1345x638.png 1272w, https://substackcdn.com/image/fetch/$s_!ZOpn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9392eb22-9717-47ed-ada6-02ba3dd359f5_1345x638.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>Lesson #1: Reasoning isn&#8217;t the bottleneck</h2><p><span>We initially tried solving everything at the agent layer &#8211; better </span><a href="https://posthog.com/blog/optimizing-agent-cost?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=context-engineering"><span>progressive disclosure</span></a><span> techniques, multi-step planning, subagents, pruning, compaction &#8211; but the gains were marginal.</span></p><p><span>The biggest improvements came from simply giving the agent more context. A lot more. That told us something about the shape of the problem.</span></p><p><span>With 20+ products, 17+ SDKs, and 25+ frameworks, there are thousands of ways to integrate PostHog, and each setup requires some piece of technical trivia, like:</span></p><ul><li><p><span>Where should PostHog initialize? Client, server, both, or serverless?</span></p></li><li><p><span>How do events get sent? Direct, or through a reverse proxy?</span></p></li><li><p><span>How are pages rendered? SSR or SSG? RSC?</span></p></li></ul><p><span>The agent routinely got these details wrong because it was operating in a context deficit. So we started engineering the context that powered it.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DK_8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bb056fe-b646-4155-b497-9c1b3c52b4a7_1454x722.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DK_8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bb056fe-b646-4155-b497-9c1b3c52b4a7_1454x722.png 424w, https://substackcdn.com/image/fetch/$s_!DK_8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bb056fe-b646-4155-b497-9c1b3c52b4a7_1454x722.png 848w, https://substackcdn.com/image/fetch/$s_!DK_8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bb056fe-b646-4155-b497-9c1b3c52b4a7_1454x722.png 1272w, https://substackcdn.com/image/fetch/$s_!DK_8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bb056fe-b646-4155-b497-9c1b3c52b4a7_1454x722.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DK_8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bb056fe-b646-4155-b497-9c1b3c52b4a7_1454x722.png" width="1454" height="722" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8bb056fe-b646-4155-b497-9c1b3c52b4a7_1454x722.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:722,&quot;width&quot;:1454,&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_!DK_8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bb056fe-b646-4155-b497-9c1b3c52b4a7_1454x722.png 424w, https://substackcdn.com/image/fetch/$s_!DK_8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bb056fe-b646-4155-b497-9c1b3c52b4a7_1454x722.png 848w, https://substackcdn.com/image/fetch/$s_!DK_8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bb056fe-b646-4155-b497-9c1b3c52b4a7_1454x722.png 1272w, https://substackcdn.com/image/fetch/$s_!DK_8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bb056fe-b646-4155-b497-9c1b3c52b4a7_1454x722.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p style="text-align: center;"><em><span>(The wizard is </span><a href="https://github.com/PostHog/wizard?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=context-engineering"><span>open source</span></a><span>. You should steal it!)</span></em></p><p><span>Our Docs team of technical writers became a Docs &amp; Wizard team of context engineers &#8211; same people, different mission. Their job became building a library of context for agents, and a delivery system that made it accessible.</span></p><p><span>The result was a company-wide context layer that could pull from everything we maintained: docs, source code, SDK references, example apps, anything that could widen the scope of what the agent could handle.</span></p><blockquote><p><strong><span>Remember: </span></strong><span>If your agent is tackling a high-variance problem like onboarding, reasoning usually isn&#8217;t the bottleneck. Context supply is.</span></p></blockquote><div><hr></div><h2><span>Lesson #2: Don&#8217;t hardcode knowledge</span></h2><p><span>The naive way to supply more context (which we did) was to hardcode it into its harness.</span></p><p><span>In </span><a href="https://posthog.com/blog/correct-llm-code-generation?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=context-engineering"><span>v1</span></a><span>, the wizard&#8217;s context and code were locked together, so the two couldn&#8217;t scale independently. Supporting a new framework or product in the wizard meant shipping a whole new agent.</span></p><p><span>Our answer was the </span><a href="https://github.com/PostHog/context-mill/tree/main"><span>context mill</span></a><span>, an assembly-line service for turning scattered PostHog knowledge into portable, versioned zip files that agents can consume remotely.</span></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EJFu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5f5c922-fab1-47d8-bc83-f1e512b40181_1909x448.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EJFu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5f5c922-fab1-47d8-bc83-f1e512b40181_1909x448.png 424w, https://substackcdn.com/image/fetch/$s_!EJFu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5f5c922-fab1-47d8-bc83-f1e512b40181_1909x448.png 848w, https://substackcdn.com/image/fetch/$s_!EJFu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5f5c922-fab1-47d8-bc83-f1e512b40181_1909x448.png 1272w, https://substackcdn.com/image/fetch/$s_!EJFu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5f5c922-fab1-47d8-bc83-f1e512b40181_1909x448.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EJFu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5f5c922-fab1-47d8-bc83-f1e512b40181_1909x448.png" width="1456" height="342" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a5f5c922-fab1-47d8-bc83-f1e512b40181_1909x448.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:342,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:87824,&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://newsletter.posthog.com/i/203333056?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5f5c922-fab1-47d8-bc83-f1e512b40181_1909x448.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_!EJFu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5f5c922-fab1-47d8-bc83-f1e512b40181_1909x448.png 424w, https://substackcdn.com/image/fetch/$s_!EJFu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5f5c922-fab1-47d8-bc83-f1e512b40181_1909x448.png 848w, https://substackcdn.com/image/fetch/$s_!EJFu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5f5c922-fab1-47d8-bc83-f1e512b40181_1909x448.png 1272w, https://substackcdn.com/image/fetch/$s_!EJFu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5f5c922-fab1-47d8-bc83-f1e512b40181_1909x448.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><span>Here&#8217;s how the context mill works:</span></p><ol><li><p><span>It pulls context from our docs, source code, Open API specs, example apps, and other maintained sources.</span></p></li><li><p><span>It assembles the source material into a collection of zip files and cuts a versioned GitHub release.</span></p></li><li><p><span>It delivers each one as a skill or registers it with an MCP server as a resource.</span></p></li><li><p><span>It reaches every downstream agent without a redeploy or update.</span></p></li></ol><p><span>This lets us generate large libraries of skills that cover our entire platform with just a few simple build scripts. Then, at runtime, the wizard can browse a &#8220;skill menu&#8221; from the context mill&#8217;s manifest and choose the best skill for the job.</span></p><p><span>For example, if there&#8217;s a framework we don&#8217;t support yet, like serverless Next.js, we load the context into the mill and send it straight to the agent. It&#8217;s continuous context delivery.</span></p><p><span>The same pipeline also delivers skills to our </span><a href="https://github.com/PostHog/ai-plugin"><span>AI plugins</span></a><span>, </span><a href="https://posthog.com/code?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=context-engineering"><span>PostHog Code</span></a><span>, and our </span><a href="https://posthog.com/docs/model-context-protocol?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=context-engineering"><span>MCP</span></a><span> server.</span></p><blockquote><p><strong><span>Remember:</span></strong><span> The fastest way to make an agent obsolete is to hardcode its knowledge. Decouple the context from your harness and assemble it from sources of truth.</span></p></blockquote><div><hr></div><h2><span>Lesson #3: Fix context drift at the source</span></h2><p><span>The context mill solved packaging and distribution, but the wizard was still instrumenting out-of-date SDK versions and settings. We realized its context was going stale further upstream, at the source.</span></p><p><span>The culprit was something we&#8217;re very proud of: we ship fast. Like, </span><a href="https://posthog.com/newsletter/hidden-danger-of-shipping-fast?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=context-engineering"><span>weirdly fast</span></a><span>. Our cracked engineers were moving faster than our documentation could keep up with, which meant drift crept into the context mill&#8217;s output.</span></p><p><span>So we added a docs agent to close the loop on knowledge management.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!b753!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc13f0b7b-8f32-436a-b273-51ccee2a27d3_1251x788.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!b753!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc13f0b7b-8f32-436a-b273-51ccee2a27d3_1251x788.png 424w, https://substackcdn.com/image/fetch/$s_!b753!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc13f0b7b-8f32-436a-b273-51ccee2a27d3_1251x788.png 848w, https://substackcdn.com/image/fetch/$s_!b753!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc13f0b7b-8f32-436a-b273-51ccee2a27d3_1251x788.png 1272w, https://substackcdn.com/image/fetch/$s_!b753!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc13f0b7b-8f32-436a-b273-51ccee2a27d3_1251x788.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!b753!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc13f0b7b-8f32-436a-b273-51ccee2a27d3_1251x788.png" width="1251" height="788" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c13f0b7b-8f32-436a-b273-51ccee2a27d3_1251x788.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:788,&quot;width&quot;:1251,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:199184,&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://newsletter.posthog.com/i/203333056?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc13f0b7b-8f32-436a-b273-51ccee2a27d3_1251x788.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_!b753!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc13f0b7b-8f32-436a-b273-51ccee2a27d3_1251x788.png 424w, https://substackcdn.com/image/fetch/$s_!b753!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc13f0b7b-8f32-436a-b273-51ccee2a27d3_1251x788.png 848w, https://substackcdn.com/image/fetch/$s_!b753!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc13f0b7b-8f32-436a-b273-51ccee2a27d3_1251x788.png 1272w, https://substackcdn.com/image/fetch/$s_!b753!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc13f0b7b-8f32-436a-b273-51ccee2a27d3_1251x788.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>It uses a system of deep research subagents with RAG powered by </span><a href="https://inkeep.com/"><span>Inkeep</span></a><span>. The docs agent retrieves embeddings across our entire platform and internal repos, follows our style guide, and uses skills and MCPs to draft documentation.</span></p><p><span>Now every merged feature PR creates a corresponding docs PR, cross-referenced across multiple sources, diffed against existing pages, and ready for a human to review.</span></p><p><span>Within weeks, our docs velocity matched our code velocity. We&#8217;re at an all-time high in both.</span></p><blockquote><p><strong><span>Remember: </span></strong><span>If your context drifts, so does every agent consuming it. Build tight feedback loops, human-reviewed where necessary, between your sources and their maintained knowledge bases.</span></p></blockquote><div><hr></div><h2><span>Lesson #4: Reuse context to compose new skills</span></h2><p><span>Our context mill was delivering fresh but unstructured context at first. We needed a way to shape it into skills the agent could run.</span></p><p><span>So we gave the wizard a declarative YAML spec &#8211; a recipe for which pieces of context to pull together and how to assemble them into skills.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5fbB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27cdda2e-0566-4fcb-bbd4-438a2092f200_975x639.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5fbB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27cdda2e-0566-4fcb-bbd4-438a2092f200_975x639.png 424w, https://substackcdn.com/image/fetch/$s_!5fbB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27cdda2e-0566-4fcb-bbd4-438a2092f200_975x639.png 848w, https://substackcdn.com/image/fetch/$s_!5fbB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27cdda2e-0566-4fcb-bbd4-438a2092f200_975x639.png 1272w, https://substackcdn.com/image/fetch/$s_!5fbB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27cdda2e-0566-4fcb-bbd4-438a2092f200_975x639.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5fbB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27cdda2e-0566-4fcb-bbd4-438a2092f200_975x639.png" width="975" height="639" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/27cdda2e-0566-4fcb-bbd4-438a2092f200_975x639.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:639,&quot;width&quot;:975,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:230413,&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://newsletter.posthog.com/i/203333056?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27cdda2e-0566-4fcb-bbd4-438a2092f200_975x639.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_!5fbB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27cdda2e-0566-4fcb-bbd4-438a2092f200_975x639.png 424w, https://substackcdn.com/image/fetch/$s_!5fbB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27cdda2e-0566-4fcb-bbd4-438a2092f200_975x639.png 848w, https://substackcdn.com/image/fetch/$s_!5fbB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27cdda2e-0566-4fcb-bbd4-438a2092f200_975x639.png 1272w, https://substackcdn.com/image/fetch/$s_!5fbB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27cdda2e-0566-4fcb-bbd4-438a2092f200_975x639.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Say we want to teach the wizard how to set up </span><a href="https://posthog.com/docs/error-tracking?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=context-engineering"><span>Error Tracking</span></a><span>. The context spec might include:</span></p><ul><li><p><span>A product overview</span></p></li><li><p><span>The relevant SDK reference</span></p></li><li><p><span>An example app</span></p></li></ul><p><span>But error tracking doesn&#8217;t work the same way in every language, so the spec also defines variants. The shared content stays put, and each variation swaps in its own specifics:</span></p><ul><li><p><strong><span>Shared</span></strong><span>: the product overview, the core instructions</span></p></li><li><p><strong><span>Python</span></strong><span>: the Python SDK reference, a Flask example app</span></p></li><li><p><strong><span>JavaScript</span></strong><span>: the JS SDK reference, a React example app</span></p></li></ul><p><span>The context mill then stitches everything into a collection of skills. Namespacing keeps the Python skill and the JavaScript skill from getting tangled up, even though they came from the same context recipe.</span></p><p><span>That&#8217;s how the wizard went from supporting 5 frameworks to 25+ in a few days. Composing context from shared pieces was more flexible and efficient than writing from scratch, even with AI&#8217;s help.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-6-t!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a64391c-9059-4c89-83d4-b62bf4511b2c_1532x544.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-6-t!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a64391c-9059-4c89-83d4-b62bf4511b2c_1532x544.png 424w, https://substackcdn.com/image/fetch/$s_!-6-t!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a64391c-9059-4c89-83d4-b62bf4511b2c_1532x544.png 848w, https://substackcdn.com/image/fetch/$s_!-6-t!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a64391c-9059-4c89-83d4-b62bf4511b2c_1532x544.png 1272w, https://substackcdn.com/image/fetch/$s_!-6-t!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a64391c-9059-4c89-83d4-b62bf4511b2c_1532x544.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-6-t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a64391c-9059-4c89-83d4-b62bf4511b2c_1532x544.png" width="1456" height="517" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1a64391c-9059-4c89-83d4-b62bf4511b2c_1532x544.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:517,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:336177,&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://newsletter.posthog.com/i/203333056?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a64391c-9059-4c89-83d4-b62bf4511b2c_1532x544.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_!-6-t!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a64391c-9059-4c89-83d4-b62bf4511b2c_1532x544.png 424w, https://substackcdn.com/image/fetch/$s_!-6-t!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a64391c-9059-4c89-83d4-b62bf4511b2c_1532x544.png 848w, https://substackcdn.com/image/fetch/$s_!-6-t!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a64391c-9059-4c89-83d4-b62bf4511b2c_1532x544.png 1272w, https://substackcdn.com/image/fetch/$s_!-6-t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a64391c-9059-4c89-83d4-b62bf4511b2c_1532x544.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Once we had building blocks, we started seeing context shapes that should exist but didn&#8217;t, kind of like how building a REST API makes you notice endpoints inside your data model.</span></p><p><span>Take our </span><a href="https://github.com/PostHog/context-mill/pull/130"><span>audit-3000</span></a><span> skill from our recent hackathon. It chains multiple product guides, privacy pages, pricing, and a dozen other docs into a hyper-robust workflow that audits a PostHog setup for data integrity. It also comes with arcade games, because why not?</span></p><p><span>The skill&#8217;s shape and scope completely surprised us. But to the team who built it, it was obvious because the pieces were already there. The spec just made the combination easy to see.</span></p><blockquote><p><strong><span>Remember: </span></strong><span>Make context easy to compose, so anyone can mix and match knowledge and rapidly expand what your agents can do. Once experimentation is cheap, you can build powerful new skills based on intuition.</span></p></blockquote><div><hr></div><h2><span>Lesson #5: Eliminate context silos</span></h2><p><span>Going in, we assumed making the wizard work would mean creating context. We spent most of our time digging it out.</span></p><p><span>Like data, context is generated everywhere, but most of it sits stuck in silos.</span></p><p><span>We found those barriers everywhere at PostHog. The API references live in the codebase, the installation steps in the docs, and the troubleshooting steps in a runbook. All of it valuable context to the wizard, all of it trapped in separate systems.</span></p><p><span>We connected the gaps with a network of APIs, MCPs, CI/CD, and gateways, so context can circulate across the company. It looks less like a monolith and more like an ecosystem.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZItA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd02ecc74-89a5-4736-a333-6220a67c126f_1321x831.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZItA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd02ecc74-89a5-4736-a333-6220a67c126f_1321x831.png 424w, https://substackcdn.com/image/fetch/$s_!ZItA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd02ecc74-89a5-4736-a333-6220a67c126f_1321x831.png 848w, https://substackcdn.com/image/fetch/$s_!ZItA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd02ecc74-89a5-4736-a333-6220a67c126f_1321x831.png 1272w, https://substackcdn.com/image/fetch/$s_!ZItA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd02ecc74-89a5-4736-a333-6220a67c126f_1321x831.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZItA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd02ecc74-89a5-4736-a333-6220a67c126f_1321x831.png" width="1321" height="831" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d02ecc74-89a5-4736-a333-6220a67c126f_1321x831.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:831,&quot;width&quot;:1321,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:75883,&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://newsletter.posthog.com/i/203333056?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd02ecc74-89a5-4736-a333-6220a67c126f_1321x831.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_!ZItA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd02ecc74-89a5-4736-a333-6220a67c126f_1321x831.png 424w, https://substackcdn.com/image/fetch/$s_!ZItA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd02ecc74-89a5-4736-a333-6220a67c126f_1321x831.png 848w, https://substackcdn.com/image/fetch/$s_!ZItA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd02ecc74-89a5-4736-a333-6220a67c126f_1321x831.png 1272w, https://substackcdn.com/image/fetch/$s_!ZItA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd02ecc74-89a5-4736-a333-6220a67c126f_1321x831.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>It&#8217;s the same plumbing you already use for general software infrastructure, but landscaped for context, so it can run downhill to wherever it&#8217;s needed.</span></p><p><span>When a PR is merged, or a docs page is updated at PostHog, that context can reach an agent within minutes.</span></p><p><span>With the wizard&#8217;s context layer as shared infrastructure, we can ship a new customer-facing agent to production in an afternoon.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NEld!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b5a5b70-8b11-4049-b9f2-2a7924e7c61c_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NEld!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b5a5b70-8b11-4049-b9f2-2a7924e7c61c_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!NEld!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b5a5b70-8b11-4049-b9f2-2a7924e7c61c_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!NEld!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b5a5b70-8b11-4049-b9f2-2a7924e7c61c_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!NEld!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b5a5b70-8b11-4049-b9f2-2a7924e7c61c_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NEld!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b5a5b70-8b11-4049-b9f2-2a7924e7c61c_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3b5a5b70-8b11-4049-b9f2-2a7924e7c61c_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:247136,&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://newsletter.posthog.com/i/203333056?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b5a5b70-8b11-4049-b9f2-2a7924e7c61c_1920x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NEld!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b5a5b70-8b11-4049-b9f2-2a7924e7c61c_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!NEld!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b5a5b70-8b11-4049-b9f2-2a7924e7c61c_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!NEld!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b5a5b70-8b11-4049-b9f2-2a7924e7c61c_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!NEld!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b5a5b70-8b11-4049-b9f2-2a7924e7c61c_1920x1080.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Arguably the most powerful source of context we unlocked wasn&#8217;t even technical, it was our </span><a href="https://posthog.com/handbook?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=context-engineering"><span>company handbook</span></a><span>.</span></p><p><span>Because our business playbooks are open source alongside our docs, the same context system that produces skills for Next.js integrations can produce skills to support enterprise customers, or run marketing campaigns.</span></p><p><span>Today our </span><a href="https://posthog.com/teams?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=context-engineering"><span>small teams</span></a><span> are building their own fleet of wizards. Many as forward-deployed agents to help users with support, outreach, sales playbooks, and other business motions.</span></p><p><span>Turns out being a </span><a href="https://posthog.com/founders/how-to-run-a-transparent-company?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=context-engineering"><span>transparent company</span></a><span> also makes you agent-ready.</span></p><blockquote><p><strong><span>Remember:</span></strong><span> The context with the most leverage is the context you already have. Building shared infrastructure will free the context trapped within your systems to accelerate agent development across teams.</span></p></blockquote><div><hr></div><h2><span>Lesson #6: Investing in context pays off</span></h2><p><span>The wizard is one of the highest-impact things we&#8217;ve shipped, and the context behind it is the main reason why.</span></p><p><span>Here&#8217;s how it changed our onboarding:</span></p><ul><li><p><strong><span>5x paid conversion</span></strong><span>: 14.2% of wizard users convert to paid usage vs 2.6%</span></p></li><li><p><strong><span>2x faster activation</span></strong><span>: first event in 1.9 hours vs 3.8, with 94% activating within one hour vs 67%</span></p></li><li><p><strong><span>80% larger</span></strong><span> </span><strong><span>MRR</span></strong><span> in the first paying month</span></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_!qcsX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a19b89f-5592-4037-a9d3-536595f481b1_2002x876.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qcsX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a19b89f-5592-4037-a9d3-536595f481b1_2002x876.png 424w, https://substackcdn.com/image/fetch/$s_!qcsX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a19b89f-5592-4037-a9d3-536595f481b1_2002x876.png 848w, https://substackcdn.com/image/fetch/$s_!qcsX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a19b89f-5592-4037-a9d3-536595f481b1_2002x876.png 1272w, https://substackcdn.com/image/fetch/$s_!qcsX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a19b89f-5592-4037-a9d3-536595f481b1_2002x876.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qcsX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a19b89f-5592-4037-a9d3-536595f481b1_2002x876.png" width="1456" height="637" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7a19b89f-5592-4037-a9d3-536595f481b1_2002x876.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:637,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:118185,&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://newsletter.posthog.com/i/203333056?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a19b89f-5592-4037-a9d3-536595f481b1_2002x876.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_!qcsX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a19b89f-5592-4037-a9d3-536595f481b1_2002x876.png 424w, https://substackcdn.com/image/fetch/$s_!qcsX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a19b89f-5592-4037-a9d3-536595f481b1_2002x876.png 848w, https://substackcdn.com/image/fetch/$s_!qcsX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a19b89f-5592-4037-a9d3-536595f481b1_2002x876.png 1272w, https://substackcdn.com/image/fetch/$s_!qcsX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a19b89f-5592-4037-a9d3-536595f481b1_2002x876.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Building a context layer is high-leverage for any company shipping agents, but it takes real investment and a shift in how you think about the work.</span></p><p><span>We created a whole </span><a href="https://posthog.com/teams/docs-wizard?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=context-engineering"><span>new team</span></a><span> for it. It&#8217;s a kind of work that didn&#8217;t exist a year ago, and it&#8217;s only going to get bigger as more of what companies ship runs on agents.</span></p><p><span>The job is context.</span></p><p><em>Words by Edwin Lim, who listed &#8220;context engineer&#8221; as an occupation and then had to explain it to his landlord over the phone.</em></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.posthog.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Subscribe for more magical tips</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>&#128187; Other jobs at PostHog</h2><ul><li><p><strong><a href="https://posthog.com/careers/ai-research-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=context-engineering">AI Research Engineer</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/technical-customer-success-manager?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=context-engineering">Technical Customer Success Manager</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/product-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=context-engineering">Product Engineer</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/revenue-ops-manager-(sales-focused)?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=context-engineering">Revenue Ops Manager (sales focused)</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/technical-account-executive?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=context-engineering">Technical Account Executive</a></strong></p></li></ul><div><hr></div><h2>&#10133; Add these to your context layer</h2><ul><li><p><strong><a href="https://posthog.com/product-engineers/what-is-distributed-tracing?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=context-engineering">What is distributed tracing? (A guide for engineers)</a> &#8211; Daniel Visca</strong></p></li><li><p><strong><a href="https://lucumr.pocoo.org/2026/6/23/the-coming-loop/">The Coming Loop</a> &#8211; Armin Ronacher</strong></p></li><li><p><strong><a href="https://posthog.com/blog/what-if-your-product-built-itself?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=context-engineering">What if your product built itself?</a> &#8211; Josh Snyder, Cleo Lant </strong></p></li><li><p><strong><a href="https://posthog.com/blog/social-media-metrics-are-all-bad?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=context-engineering">All social media metrics are bad</a> &#8211; Liam Graham</strong></p></li><li><p><strong><a href="https://posthog.com/blog/what-is-a-scout?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=context-engineering">What is a scout? A technical deep dive</a> &#8211; Andy Maguire</strong></p></li><li><p><strong><a href="https://posthog.com/blog/everything-is-build-mode?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=context-engineering">Everything (and everyone) is build mode now</a> &#8211; Cleo Lant</strong></p></li></ul>]]></content:encoded></item><item><title><![CDATA[Why we're bullish on loops]]></title><description><![CDATA[WTF are loops, why is everyone arguing about them, and why do they actually matter?]]></description><link>https://newsletter.posthog.com/p/why-were-bullish-on-loops</link><guid isPermaLink="false">https://newsletter.posthog.com/p/why-were-bullish-on-loops</guid><dc:creator><![CDATA[Ian Vanagas]]></dc:creator><pubDate>Wed, 17 Jun 2026 17:48:56 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/67da4d23-4902-4607-9536-1440c2fb5a8c_2912x2096.jpeg" 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_!DZd_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e8d8e1-40a3-4033-8205-5df87d0bbd40_1272x574.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DZd_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e8d8e1-40a3-4033-8205-5df87d0bbd40_1272x574.png 424w, https://substackcdn.com/image/fetch/$s_!DZd_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e8d8e1-40a3-4033-8205-5df87d0bbd40_1272x574.png 848w, https://substackcdn.com/image/fetch/$s_!DZd_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e8d8e1-40a3-4033-8205-5df87d0bbd40_1272x574.png 1272w, https://substackcdn.com/image/fetch/$s_!DZd_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e8d8e1-40a3-4033-8205-5df87d0bbd40_1272x574.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DZd_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e8d8e1-40a3-4033-8205-5df87d0bbd40_1272x574.png" width="1272" height="574" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b3e8d8e1-40a3-4033-8205-5df87d0bbd40_1272x574.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:574,&quot;width&quot;:1272,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DZd_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e8d8e1-40a3-4033-8205-5df87d0bbd40_1272x574.png 424w, https://substackcdn.com/image/fetch/$s_!DZd_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e8d8e1-40a3-4033-8205-5df87d0bbd40_1272x574.png 848w, https://substackcdn.com/image/fetch/$s_!DZd_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e8d8e1-40a3-4033-8205-5df87d0bbd40_1272x574.png 1272w, https://substackcdn.com/image/fetch/$s_!DZd_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e8d8e1-40a3-4033-8205-5df87d0bbd40_1272x574.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>When the creators of both OpenClaw and Claude Code speak, people listen. And last week <a href="https://x.com/steipete/status/2063697162748260627">Peter Steinberger</a> and Boris Cherny were <a href="https://www.youtube.com/watch?v=PfWVVI9ALd8&amp;t=1s">both talking about</a> the same concept: loops. </p><p>Their argument? You shouldn&#8217;t be prompting agents to write code, but building loops that prompt themselves to write code, so agents can complete long running tasks and you can use multiple agents at once to go further, faster.</p><h2>What&#8217;s needed to engineer a loop?</h2><p>You need four things:</p><h3>1. A goal</h3><p>Agents are capable, but you need to scope the loop so they know what you want them achieve. A loop without a goal is a slop cannon.</p><h3>2. Context</h3><p>Context is fuel and loops are often starved of it. Context can include tools, skills, analytics data, errors, memories &#8211; any information that helps the agent find work and complete the loop. It&#8217;s best to curate context and feed it throughout, rather than dump it all upfront. The agent needs to be able to fetch and react to new inputs.</p><h3>3.  Evaluation</h3><p>This is how the agent checks itself. <a href="https://posthog.com/blog/testing-ai-agents?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=loops">Tests</a>, evals, metrics, <a href="https://posthog.com/blog/stop-ai-slop?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=loops">LLM-as-judge</a>, playgrounds. Test-driven development is <em>so</em> <em>back</em>, or maybe it never left? This is a big difference between loops and prompting: agents do the verification, not engineers.</p><h3>4. An agent (obviously)</h3><p>The most basic is using something like Claude Code with a <code>while true</code> (aka <a href="https://ghuntley.com/ralph/">Ralph</a>) or using <code>/goal</code>. More complicated is purpose-built harnesses and context systems &#8211; e.g. an agent on a cron that pulls signals from your product data and emit work to subagents, or a loop that codegens its own test suite to verify itself. </p><p>Good examples of loops include:</p><ul><li><p><strong>PR babysitter.</strong> The goal is to get a pull request to pass tests and &#8220;get CI green.&#8221; The context is the changes (diff) as well as the testing suite, and the evaluation is done by the CI.</p></li><li><p><strong>Bug fixer.</strong> The goal is to fix the bug. The context is the bug report and error trace. The evaluation is the test suite, snapshots, logs.</p></li><li><p><strong>Flaky test hunter.</strong> The goal is to kill flaky tests. The context is CI history and retry logs. The eval is consecutive green runs.</p></li><li><p><strong>Performance autoresearcher.</strong> The goal is to beat a benchmark. The context is the system, metrics, and budget. The eval is whether it is faster, better, etc. on that metric. We recently used Karpathy&#8217;s autoresearcher loop and it <a href="https://posthog.com/blog/karpathy-autoresearch-query-engine-bug?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=loops">fixed a 3-year-old bug in our query engine</a> and increased performance by 11%.</p></li></ul><h2>Why is everyone talking about loops right now?</h2><p>Because it works. Yes, Peter and Boris lit the fire, but they&#8217;re doing so because it&#8217;s a real thing. The real &#8220;why now&#8221; is new and improved capabilities:</p><ol><li><p><strong>Models are better at long running tasks</strong>.<strong> </strong>METR finds that <a href="https://metr.org/time-horizons/">Opus 4.6 can complete 50% of tasks that take 12 hours</a>, over 6x the 1 hour 40 minutes of Opus 4 from a year ago. Fable (RIP) pushed this even further.</p></li><li><p><strong>Stories about huge tasks completed</strong>. Stripe performed a <a href="https://www.anthropic.com/news/claude-fable-5-mythos-5">codebase-wide migration in a day</a> that would take a team two months by hand. Lovable found it can now one shot apps that previously took hundreds of prompts to build.</p></li><li><p><strong>Loops are built-in now</strong>. Claude Code shipped a <code>/loop</code> command, both it and Codex have automations, and there&#8217;s even a <a href="https://github.com/anthropics/claude-code/tree/main/plugins/ralph-wiggum">Ralph plugin for Claude Code</a>.</p></li><li><p><strong>Subagents separate the loop from the work</strong>. The main loop can spin up subagents that do the work and report back, saving tokens and preventing degradation.</p></li><li><p><strong>Harnesses are maturing</strong>. Compaction keeps context windows from filling. Skills and <a href="https://posthog.com/blog/machine-copy-paste-mcp-intro">MCP</a> enable agents to use more tools. Cloud execution lets you kick off a loop and walk away.</p></li></ol><p>Loops didn&#8217;t magic themselves into existence based on a couple of tweets. They&#8217;re an expression of real industry-wide progress.</p><h2>Loops are not just a new AI thing</h2><p>Critics deride loops as a ploy from OpenAI and Anthropic to get everyone tokenmaxxing, but we think there&#8217;s a greater goal here: <a href="https://posthog.com/blog/self-driving-product?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=loops">self-driving products</a>. </p><p>Rather than an engineer needing to prompt an agent to progress a project, the agent can prompt itself. The product improves itself without input. User problems get solved faster and yes, numbers go up.</p><p>And here&#8217;s the thing, <a href="https://posthog.com/product-engineer/what-is-a-product-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=loops">product engineers</a> already complete this loop manually by:</p><ol><li><p>Collecting data through analytics and talking to users</p></li><li><p>Building and shipping improvements to their products based on that data</p></li><li><p>Evaluating how that improvement performed to guide future development</p></li><li><p>Repeating constantly</p></li></ol><p>PostHog has helped product engineers complete this loop for years now, so we think we&#8217;re in a great position to help agents with it too. It&#8217;s why we&#8217;re betting on building features that help make your product self-driving, like <a href="https://posthog.com/slack?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=loops">our Slack app</a>, <a href="https://posthog.com/code?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=loops">PostHog Code</a>, and <a href="https://posthog.com/replay-vision?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=loops">Replay Vision</a>. Yes, we&#8217;re a little AI-pilled.</p><p>There are, of course, limits. Loops aren&#8217;t about to eliminate all engineering work, but they can put the 1% gains on cruise control: the bugs, UX issues, <a href="https://posthog.com/blog/slack-app-beta?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=loops">paper cuts</a>, and conversion tweaks. The things that drain engineering hours, but rarely need strategic input.</p><p>The more you can automate these tasks, the more time you can spend on more impactful and (frankly) interesting work. The &#8220;self&#8221; in self-driving doesn&#8217;t mean autonomy from the engineer, it&#8217;s autonomy from user instruction as the starting point.</p><h2>Code was never the problem</h2><p>The opposition to loops is easy to understand: it&#8217;s another shift in the way software is built. Being told they should be &#8220;designing loops&#8221; makes engineers feel like they&#8217;re being replaced. The work is increasingly abstracted away from writing code.</p><p>But the rise of product engineers already showed that writing code was only a small portion of the work. The direction, taste, and empathy of a product engineer remain critical for building successful products in a loop-driven future.</p><p><em>Words by Ian Vanagas whose favorite type of loop is froot.</em></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.posthog.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Subscribe to power the loop that produces more posts like this one.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[LLMs are picking winners. Here’s how to become one]]></title><description><![CDATA[A startup's guide to answer engine optimization]]></description><link>https://newsletter.posthog.com/p/llms-are-picking-winners-heres-how</link><guid isPermaLink="false">https://newsletter.posthog.com/p/llms-are-picking-winners-heres-how</guid><dc:creator><![CDATA[Natalia Amorim]]></dc:creator><pubDate>Mon, 08 Jun 2026 18:11:58 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/540f98b0-57fc-4156-99a6-b499d4736334_1569x1048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In the last two years, our traffic from LLMs grew 41x. Every quarter set a new record with no signs of slowing down.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8AOB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc7437a-2953-4385-913e-18cd245ee9f7_1456x1048.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8AOB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc7437a-2953-4385-913e-18cd245ee9f7_1456x1048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8AOB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc7437a-2953-4385-913e-18cd245ee9f7_1456x1048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8AOB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc7437a-2953-4385-913e-18cd245ee9f7_1456x1048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8AOB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc7437a-2953-4385-913e-18cd245ee9f7_1456x1048.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8AOB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc7437a-2953-4385-913e-18cd245ee9f7_1456x1048.jpeg" width="1456" height="1048" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dfc7437a-2953-4385-913e-18cd245ee9f7_1456x1048.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1048,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;AI chatbot traffic count&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="AI chatbot traffic count" title="AI chatbot traffic count" srcset="https://substackcdn.com/image/fetch/$s_!8AOB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc7437a-2953-4385-913e-18cd245ee9f7_1456x1048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8AOB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc7437a-2953-4385-913e-18cd245ee9f7_1456x1048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8AOB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc7437a-2953-4385-913e-18cd245ee9f7_1456x1048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8AOB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdfc7437a-2953-4385-913e-18cd245ee9f7_1456x1048.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If you&#8217;re a skeptic like me, you&#8217;re probably about to ask: <em>&#8220;WeLL, BuT dOeS iT cOnvErT?&#8221;</em></p><p>Yes, yes it does. Better than almost anything else we have.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xlrz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c67a89a-9a68-462e-bf7e-b38023216433_1456x1048.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xlrz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c67a89a-9a68-462e-bf7e-b38023216433_1456x1048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!xlrz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c67a89a-9a68-462e-bf7e-b38023216433_1456x1048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!xlrz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c67a89a-9a68-462e-bf7e-b38023216433_1456x1048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!xlrz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c67a89a-9a68-462e-bf7e-b38023216433_1456x1048.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xlrz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c67a89a-9a68-462e-bf7e-b38023216433_1456x1048.jpeg" width="1456" height="1048" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4c67a89a-9a68-462e-bf7e-b38023216433_1456x1048.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1048,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;LLM conversion rates&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="LLM conversion rates" title="LLM conversion rates" srcset="https://substackcdn.com/image/fetch/$s_!xlrz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c67a89a-9a68-462e-bf7e-b38023216433_1456x1048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!xlrz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c67a89a-9a68-462e-bf7e-b38023216433_1456x1048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!xlrz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c67a89a-9a68-462e-bf7e-b38023216433_1456x1048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!xlrz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c67a89a-9a68-462e-bf7e-b38023216433_1456x1048.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I&#8217;m not telling you this to humble brag <em>(well, maybe a little)</em>. I&#8217;m telling you because the inverse is also true.</p><p>PostHog has <a href="https://posthog.com/products?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=aeo">14 products and counting</a>, and (sadly) not all of them are recommended by LLMs at the same scale or rate. While most models know us for <a href="http://posthog.com/product-analytics?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=aeo">product analytics</a>, <a href="https://posthog.com/session-replay?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=aeo">session replay</a>, <a href="http://posthog.com/error-tracking?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=aeo">error tracking</a>, and <a href="https://posthog.com/feature-flags?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=aeo">feature flags</a>, fewer acknowledge we also offer a <a href="https://posthog.com/data-stack?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=aeo">data warehouse</a>, <a href="https://posthog.com/ai-observability?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=aeo">AI observability</a>, <a href="https://posthog.com/logs?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=aeo">logs</a>, and a lot more.</p><p>This is likely the case for your product too. Changing it requires dipping into the mystical new field of answer engine optimization (AEO), which I&#8217;ve learned a lot about as the person responsible for it at PostHog over the last year.</p><h2>1. Do LLMs even know you exist?</h2><p>Your first step should be finding out if you&#8217;re being mentioned at all.</p><ol><li><p>Go to ChatGPT, Claude, and Gemini (make sure memory is off or private mode is on).</p></li><li><p>Run 3-5 basic prompts a real customer would use like &#8220;best X tool&#8221; or &#8220;alternative to Y&#8221; or &#8220;recommended Z product.&#8221; Being more specific is <em>less</em> helpful here.</p></li><li><p>See where you show up, are missing, or are misrepresented.</p></li></ol><p>If you want a more robust opinion, pick one of the dozens of AEO tools that have launched in the last year.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> A decent tool runs hundreds of prompts for you every day, which gives a clearer picture into your LLM visibility over time and across models.</p><p>Don&#8217;t overthink this, choose a tool that fits your budget comfortably and matches your usual analysis workflow.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!puTk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedef3539-1388-4c8b-a791-18fbe782d05d_2048x1474.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!puTk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedef3539-1388-4c8b-a791-18fbe782d05d_2048x1474.png 424w, https://substackcdn.com/image/fetch/$s_!puTk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedef3539-1388-4c8b-a791-18fbe782d05d_2048x1474.png 848w, https://substackcdn.com/image/fetch/$s_!puTk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedef3539-1388-4c8b-a791-18fbe782d05d_2048x1474.png 1272w, https://substackcdn.com/image/fetch/$s_!puTk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedef3539-1388-4c8b-a791-18fbe782d05d_2048x1474.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!puTk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedef3539-1388-4c8b-a791-18fbe782d05d_2048x1474.png" width="1456" height="1048" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/edef3539-1388-4c8b-a791-18fbe782d05d_2048x1474.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1048,&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_!puTk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedef3539-1388-4c8b-a791-18fbe782d05d_2048x1474.png 424w, https://substackcdn.com/image/fetch/$s_!puTk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedef3539-1388-4c8b-a791-18fbe782d05d_2048x1474.png 848w, https://substackcdn.com/image/fetch/$s_!puTk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedef3539-1388-4c8b-a791-18fbe782d05d_2048x1474.png 1272w, https://substackcdn.com/image/fetch/$s_!puTk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedef3539-1388-4c8b-a791-18fbe782d05d_2048x1474.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The LLMs and your AEO tool will reveal you almost certainly aren&#8217;t in the place you want to be (we aren&#8217;t). This doesn&#8217;t mean you&#8217;re doomed, it&#8217;s where the rest of this post comes in.</p><p>Models rely on both their training data (often from 6+ months ago) and search to create responses. To get into the game, you need your product to show up in the places LLMs are looking.</p><p>How do you do this?</p><h2>2. SEO isn&#8217;t dead, it just got a new job</h2><p>Here&#8217;s the least sexy but most obvious piece of advice: <strong>most of <a href="https://posthog.com/newsletter/seo-for-startups">traditional SEO</a> still works.</strong></p><p>Good structure, clear writing, semantic HTML, internal linking, fast load times, answering the damn question instead of burying it under 400 words of <em>&#8220;in today&#8217;s fast-paced digital landscape&#8230;&#8221;</em> all still matters.</p><p>The takeaway here isn&#8217;t &#8220;SEO is dead, long live AEO.&#8221; It&#8217;s that SEO and AEO are drinking from the same well, the difference is how they drink it.</p><p>Now, the unit of consumption is a chunk, not a page. Your content needs to be citable in pieces, not just useful as a whole.</p><p>Which means the &#8220;AEO checklist&#8221;<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a> most of the industry already agrees on looks something like:</p><ul><li><p><strong>Make your content scannable.</strong> Subheadings, short paragraphs, lists where lists belong.</p></li><li><p><strong>Use natural language.</strong> Write like a person explaining something to another person.</p></li><li><p><strong>Answer questions directly.</strong> If someone asks &#8220;what is X,&#8221; tell them in the first sentence. Supporting context comes after.</p></li><li><p><strong>Structure for retrieval.</strong> H2s that are actual questions, definitions that can stand alone, summary tables, clear data, FAQs.</p></li><li><p><strong>Be specific.</strong> Models favor content with concrete details (real numbers, named tools, specific scenarios) over vague gesturing. <strong>&#8220;Most teams hate GA4&#8221;</strong> is forgettable; <strong>&#8220;73% of teams using GA4 fantasize about leaving&#8221;</strong> is citable. <em>(I made that up. Google legal team, don&#8217;t @ me... it&#8217;s probably true anyway.)</em></p></li></ul><p>I'm not going to pretend I'm reinventing the wheel over here; everything I just listed would also be considered <a href="https://posthog.com/newsletter/seo-for-startups?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=aeo">good SEO advice</a> in 2019. The stakes are just higher now, and we have the benefit of hindsight to back it up.</p><p>Spoiler: if you&#8217;re looking for examples for how to do this... you&#8217;re reading it right now.</p><h2>3. Pick your battles</h2><p>If "the basics" above sound underwhelming, you're not alone.</p><p>Most people read a list like that and immediately wonder what else is there to do &#8211; and lucky for them, AEO has no shortage of side quests to embark on:</p><ul><li><p>Optimize your Reddit presence</p></li><li><p>Claim your Wikipedia page</p></li><li><p>Build a YouTube strategy</p></li><li><p>Get mentioned in traditional press</p></li><li><p>Chase down that one blog post a guy wrote on Medium in 2023 that&#8217;s outranking your product page</p></li></ul><p>There's this underlying pressure to show up on every surface that might influence how LLMs talk about you &#8211; and it's true, they all might. That's the catch.</p><p>When you don&#8217;t really know what&#8217;s feeding the models, everything is a potential input, which means everything becomes a candidate for your time.</p><p>Here&#8217;s the rule I&#8217;ve settled on: <strong>clean your house first</strong>. Making sure your owned content is genuinely great is step one. Everything else comes after.</p><p>That doesn&#8217;t mean ignore the extra stuff forever; it means <strong>do them when you have the capacity to do them well</strong>, not when you&#8217;re panicking that your competitor has a Reddit thread and you don&#8217;t.</p><h2>4. Call the bullshit, especially your own</h2><p>There has never been an easier time to be a charlatan in this industry. It is trivially easy to say <em>&#8220;I increased prompt visibility 50x&#8221;</em> when you&#8217;re the one who chose the prompts &#8211; and god knows if anyone actually asked them.</p><p><em>&#8220;Who is the best Brazilian-Canadian content marketer with copper hair and a birthmark on her left hip?&#8221;</em> OH MY GOD IT&#8217;S ME!</p><p>I optimized the result to be me. Groundbreaking AEO work.</p><p>See what I did there?</p><p>In a world with no real prompt volume data <em>(and no, please don&#8217;t come at me with tales of clickstream</em><a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a><em>)</em>, there are no definitive results either.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fwcP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5dda62e-1315-4df3-973e-ab0a3741d7de_978x730.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fwcP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5dda62e-1315-4df3-973e-ab0a3741d7de_978x730.png 424w, https://substackcdn.com/image/fetch/$s_!fwcP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5dda62e-1315-4df3-973e-ab0a3741d7de_978x730.png 848w, https://substackcdn.com/image/fetch/$s_!fwcP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5dda62e-1315-4df3-973e-ab0a3741d7de_978x730.png 1272w, https://substackcdn.com/image/fetch/$s_!fwcP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5dda62e-1315-4df3-973e-ab0a3741d7de_978x730.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fwcP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5dda62e-1315-4df3-973e-ab0a3741d7de_978x730.png" width="978" height="730" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c5dda62e-1315-4df3-973e-ab0a3741d7de_978x730.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:730,&quot;width&quot;:978,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Prompt volume data&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Prompt volume data" title="Prompt volume data" srcset="https://substackcdn.com/image/fetch/$s_!fwcP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5dda62e-1315-4df3-973e-ab0a3741d7de_978x730.png 424w, https://substackcdn.com/image/fetch/$s_!fwcP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5dda62e-1315-4df3-973e-ab0a3741d7de_978x730.png 848w, https://substackcdn.com/image/fetch/$s_!fwcP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5dda62e-1315-4df3-973e-ab0a3741d7de_978x730.png 1272w, https://substackcdn.com/image/fetch/$s_!fwcP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5dda62e-1315-4df3-973e-ab0a3741d7de_978x730.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The whole discipline is mostly propped up on assumptions and operating on vibes. Which is fine (we&#8217;re early) but it means your job is to be the most honest person in every room you&#8217;re in.</p><p>That means questioning <em>everything</em>, especially the stuff that makes you look good. When your own dashboard tells you something flattering, be twice as suspicious as when it tells you something bad.</p><p>When a vendor shows you a case study, ask <em>50x over what baseline? Measured how?</em> Especially watch for &#8220;we tracked it&#8221; being passed off as &#8220;we caused it&#8221; &#8211; a lot of &#8220;AEO impact&#8221; case studies are correlation dressed up as causation.</p><p>And when the honest answer is &#8220;I don&#8217;t know yet,&#8221; say that.</p><p>This will save you a lot of pain that comes from building a strategy on a lie you told yourself.</p><h2>5. You can just&#8230; ask</h2><p>I&#8217;m not great at the whole not knowing thing, so I worked around it. We added a conditional question to our onboarding flow: whenever someone says they heard about us through AI, we ask them which prompt they used.</p><p>To my surprise, people answer. In detail. Sometimes long, long paragraphs of detail.</p><p>Now we have first-party data on the prompts actually leading people to us. Real sentences typed by real humans with real credit cards.</p><p>As of today, <strong>9,214</strong> of them to be exact (and we&#8217;ve only been doing this for 3 months).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wnCk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7030fa0-8426-45c5-a869-6b71d5b9ba06_776x472.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wnCk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7030fa0-8426-45c5-a869-6b71d5b9ba06_776x472.png 424w, https://substackcdn.com/image/fetch/$s_!wnCk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7030fa0-8426-45c5-a869-6b71d5b9ba06_776x472.png 848w, https://substackcdn.com/image/fetch/$s_!wnCk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7030fa0-8426-45c5-a869-6b71d5b9ba06_776x472.png 1272w, https://substackcdn.com/image/fetch/$s_!wnCk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7030fa0-8426-45c5-a869-6b71d5b9ba06_776x472.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wnCk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7030fa0-8426-45c5-a869-6b71d5b9ba06_776x472.png" width="776" height="472" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c7030fa0-8426-45c5-a869-6b71d5b9ba06_776x472.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:472,&quot;width&quot;:776,&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_!wnCk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7030fa0-8426-45c5-a869-6b71d5b9ba06_776x472.png 424w, https://substackcdn.com/image/fetch/$s_!wnCk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7030fa0-8426-45c5-a869-6b71d5b9ba06_776x472.png 848w, https://substackcdn.com/image/fetch/$s_!wnCk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7030fa0-8426-45c5-a869-6b71d5b9ba06_776x472.png 1272w, https://substackcdn.com/image/fetch/$s_!wnCk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7030fa0-8426-45c5-a869-6b71d5b9ba06_776x472.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Every morning, our PostHog Slack automation drops a report with 50&#8211;100+ real prompts submitted by users who signed up on the previous day. <a href="https://posthog.com/ai?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=aeo">PostHog AI</a> helps me identify patterns and pull out useful little nuggets of information, which I feed straight back into our strategy.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JGSt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac7f151a-2e4a-4be8-b3ba-eb953a3a30f1_1602x1012.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JGSt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac7f151a-2e4a-4be8-b3ba-eb953a3a30f1_1602x1012.png 424w, https://substackcdn.com/image/fetch/$s_!JGSt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac7f151a-2e4a-4be8-b3ba-eb953a3a30f1_1602x1012.png 848w, https://substackcdn.com/image/fetch/$s_!JGSt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac7f151a-2e4a-4be8-b3ba-eb953a3a30f1_1602x1012.png 1272w, https://substackcdn.com/image/fetch/$s_!JGSt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac7f151a-2e4a-4be8-b3ba-eb953a3a30f1_1602x1012.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JGSt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac7f151a-2e4a-4be8-b3ba-eb953a3a30f1_1602x1012.png" width="1456" height="920" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ac7f151a-2e4a-4be8-b3ba-eb953a3a30f1_1602x1012.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:920,&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_!JGSt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac7f151a-2e4a-4be8-b3ba-eb953a3a30f1_1602x1012.png 424w, https://substackcdn.com/image/fetch/$s_!JGSt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac7f151a-2e4a-4be8-b3ba-eb953a3a30f1_1602x1012.png 848w, https://substackcdn.com/image/fetch/$s_!JGSt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac7f151a-2e4a-4be8-b3ba-eb953a3a30f1_1602x1012.png 1272w, https://substackcdn.com/image/fetch/$s_!JGSt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac7f151a-2e4a-4be8-b3ba-eb953a3a30f1_1602x1012.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>It&#8217;s an amazing feedback loop. The best part is that it cost roughly zero dollars to set up, and it&#8217;s become one of the most (if not the most) valuable strategic inputs in my entire reporting stack.</p><p>It has also been a goldmine of unfiltered user thoughts, which I love.</p><p>Best was the user who found out about PostHog in Fortnite voice chat, specifically talking to a Darth Vader NPC about analyzing the Fortnite economy. I think about him often.</p><h2>6. AEO reporting is a quilt, not a blanket</h2><p>No single data source tells the full story. Not yet, anyway.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nGef!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3d2b938-06af-4d86-ad94-96bbc3e40355_1456x1416.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nGef!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3d2b938-06af-4d86-ad94-96bbc3e40355_1456x1416.jpeg 424w, https://substackcdn.com/image/fetch/$s_!nGef!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3d2b938-06af-4d86-ad94-96bbc3e40355_1456x1416.jpeg 848w, https://substackcdn.com/image/fetch/$s_!nGef!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3d2b938-06af-4d86-ad94-96bbc3e40355_1456x1416.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!nGef!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3d2b938-06af-4d86-ad94-96bbc3e40355_1456x1416.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nGef!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3d2b938-06af-4d86-ad94-96bbc3e40355_1456x1416.jpeg" width="1456" height="1416" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a3d2b938-06af-4d86-ad94-96bbc3e40355_1456x1416.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1416,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Reporting stack&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Reporting stack" title="Reporting stack" srcset="https://substackcdn.com/image/fetch/$s_!nGef!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3d2b938-06af-4d86-ad94-96bbc3e40355_1456x1416.jpeg 424w, https://substackcdn.com/image/fetch/$s_!nGef!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3d2b938-06af-4d86-ad94-96bbc3e40355_1456x1416.jpeg 848w, https://substackcdn.com/image/fetch/$s_!nGef!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3d2b938-06af-4d86-ad94-96bbc3e40355_1456x1416.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!nGef!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa3d2b938-06af-4d86-ad94-96bbc3e40355_1456x1416.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><strong>Referrer traffic</strong> catches some of it, but not everything is properly tagged.</p></li><li><p><strong>Self-reported attribution</strong> catches more, but not everyone answers the question.</p></li><li><p><strong>Bot analytics</strong> (who&#8217;s crawling you, how often, for what) helps you understand what the models are <em>seeing</em>, which is a different question than what the models are <em>saying</em>.</p></li><li><p><strong>Prompt visibility tools</strong> tell you what the models are saying, but only for the prompts you thought to track.</p></li></ul><p>We can poke holes in every one of these sources.</p><p>Is it annoying? Yes, very. The last decade of clean(ish) attribution coddled us &#8211; anyone in growth, marketing, or analytics got used to a dashboard where everything reconciled. AEO isn&#8217;t going to give us that anytime soon.</p><p>If you&#8217;re a founder watching your team try to report on this, give them grace; if you&#8217;re the one reporting on it, godspeed.</p><p>So does that mean you don&#8217;t report on it? No. Sometimes you tell the story even if all you have is duct tape and a dream.</p><p>The good news is that this has gotten dramatically easier <a href="https://posthog.com/docs/model-context-protocol?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=aeo">thanks to MCPs</a>. If your data sources have them, your agent can fetch from each one and help you see the bigger picture.</p><p>Mine pulls from <a href="https://posthog.com/blog/aeo-advice?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=aeo#3-dont-overthink-the-tools">Gauge</a> for prompt visibility; Google Search Console for clicks, impressions, and rankings; and <a href="https://posthog.com/docs/model-context-protocol?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=aeo">PostHog</a> for traffic, conversion, product-level breakdowns, our self-attribution survey, and prompt data for the qualitative side.</p><p>It&#8217;s not magic, and it&#8217;s not always clear cut, but it&#8217;s a hell of a lot better than copy-pasting between four tabs and praying the numbers line up.</p><h2>7. Be prepared to start over</h2><p>A few months in, I realized we were tracking hundreds of AI-generated prompts, but they had little overlap with the prompts real people were actually using to find us. <em>(How did I figure that out? See #4 and #5.)</em></p><p>Which meant six months of historical data aged like milk.</p><p>When you&#8217;re working in a discipline this new, any data feels sacred, so admitting to my team and myself that ours needed to be scrapped was a tough pill to swallow. It would&#8217;ve been easier if there was a playbook to defer to; there isn&#8217;t.</p><p>But we started over anyway, and <a href="https://posthog.com/blog/aeo-advice?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=aeo#frequently-asked-aeo-questions">the new approach</a> is already producing more useful data than the old one ever did.</p><p>Zoom out and the same principle applies to everything else in AEO. The models change constantly; a feature that didn&#8217;t exist last week can completely rewire the landscape you thought you&#8217;d figured out. A win today may not be a win tomorrow.</p><p>What I&#8217;m trying to say here is that <strong>adaptability isn&#8217;t a nice-to-have</strong>. In mature channels, being attached to your v1 is inefficient; in a new one like AEO, it can be fatal.</p><p>The key is to not fear it, but to expect it.</p><p><em>Words by Natalia, who believes in throwing pasta at the wall and seeing what sticks (figuratively and literally)</em></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.posthog.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Subscribe for more winning content</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>&#129302; More content that LLMs will read, but you should too</h2><ul><li><p><strong><a href="https://posthog.com/blog/karpathy-autoresearch-query-engine-bug?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=aeo">Karpathy&#8217;s Autoresearch found a 3-year-old bug in our query engine (and improved performance by 11%)</a> - Robbie Coomber</strong></p></li><li><p><strong><a href="https://posthog.com/blog/pm-pmm-collaboration?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=aeo">Collaboration sucks, but PMs and PMMs need each other</a> - Sara Miteva</strong></p></li><li><p><strong><a href="https://posthog.com/blog/slack-app-beta?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=aeo">We put PostHog in Slack and now everyone&#8217;s an engineer</a> - Cleo Lant</strong></p></li><li><p><strong><a href="https://posthog.com/blog/joe-os-analytics?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=aeo">I didn&#8217;t understand the OS I built with AI until the MCP gave it analytics</a> - Joe Martin</strong></p></li><li><p><strong><a href="https://www.figma.com/blog/what-matters-when-anyone-can-build">What matters when anyone can build</a> - Yuhki Yamashita</strong></p></li></ul><div><hr></div><h2>&#129428; Jobs at PostHog</h2><ul><li><p><strong><a href="https://posthog.com/careers/product-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=aeo">Product Engineer</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/technical-customer-success-manager?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=aeo">Technical Customer Success Manager</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/backend-engineer-ingestion?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=aeo">Backend Engineer &#8212; Ingestion</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/forward-deployed-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=aeo">Forward Deployed Engineer</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/backend-engineer-billing?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=aeo">Backend Engineer &#8212; Billing</a></strong></p></li></ul><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>I went with <a href="https://www.withgauge.com?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=aeo">Gauge</a> for one reason that mattered to me more than anything else: their team builds <em>with</em> us, not <em>at</em> us. More on that <a href="https://posthog.com/blog/aeo-advice?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=aeo#3-dont-overthink-the-tools">here</a>.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>For a deeper look at how we approach all of this in practice, check out <a href="https://posthog.com/handbook/content/seo-guide?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=aeo">our AEO/SEO writing guide</a>.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>&#8220;Clickstream&#8221; is the catch-all term for behavioral data scraped (often without users realizing) from browser extensions, ISPs, or app SDKs. Vendors who sell AEO tools love it because it&#8217;s the only data source that even pretends to estimate prompt volume. The problem: the panels can be limited (relative to the user populations they&#8217;re trying to model), geographically skewed (mostly US, mostly Chrome users), and demographically self-selected. Extrapolating &#8220;global ChatGPT prompt volume&#8221; from a sample of a few million people who installed an extension that promised free coupons is, in my opinion, shaky at best, so tread lightly when using it as a source of truth.</p></div></div>]]></content:encoded></item><item><title><![CDATA[24 tips for giving S-tier demos]]></title><description><![CDATA[An engineer's guide to giving S-tier project demos]]></description><link>https://newsletter.posthog.com/p/how-to-demo</link><guid isPermaLink="false">https://newsletter.posthog.com/p/how-to-demo</guid><dc:creator><![CDATA[Jina Yoon]]></dc:creator><pubDate>Thu, 28 May 2026 18:01:25 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/7b486099-4af3-4730-bd94-85219da88749_1456x1048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A good demo can be the difference between a project shipping or shutting down, and a startup getting funded or going nowhere.</p><p>Yet most developers don&#8217;t invest in learning how to demo well &#8211; probably because we enjoy building things more than presenting them.</p><p>I watched 50+ <a href="https://posthog.com/newsletter/hackathons?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=how-to-demo">hackathon</a> demos back to back at our offsite last week and, after that many in a row, some patterns became super obvious. </p><p>Here's a practical list of what set the S-tier demos apart from the rest.</p><div><hr></div><h2>The basic structure</h2><p>1. Pick one main point you want people to remember and make everything else in your demo revolve around it. Typically, this should be the problem you&#8217;re solving and how you&#8217;re solving it.</p><p>2. Get to your main point as soon as possible. No one needs the whole story behind the idea &#8211; if you need context, keep it 1-2 sentences max.</p><p>3. Treat the demo like a pitch, not a product walkthrough. The goal isn&#8217;t to just show off the cool thing you made, it&#8217;s to get people excited about it. </p><p>4. End with something immediately actionable. It can be as literal as a QR code, or simply calling for contributors and inviting audience questions.</p><p>One team during our offsite hackathon created a system that lets you interact with PostHog over any messaging app, so they put up a phone number in their last slide (which I texted right away):</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bpPS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d173f69-7714-4bb8-a1cb-d789fd1d8a1a_1584x865.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bpPS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d173f69-7714-4bb8-a1cb-d789fd1d8a1a_1584x865.png 424w, https://substackcdn.com/image/fetch/$s_!bpPS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d173f69-7714-4bb8-a1cb-d789fd1d8a1a_1584x865.png 848w, https://substackcdn.com/image/fetch/$s_!bpPS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d173f69-7714-4bb8-a1cb-d789fd1d8a1a_1584x865.png 1272w, https://substackcdn.com/image/fetch/$s_!bpPS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d173f69-7714-4bb8-a1cb-d789fd1d8a1a_1584x865.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bpPS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d173f69-7714-4bb8-a1cb-d789fd1d8a1a_1584x865.png" width="1456" height="795" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3d173f69-7714-4bb8-a1cb-d789fd1d8a1a_1584x865.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;:350975,&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://newsletter.posthog.com/i/199406149?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d173f69-7714-4bb8-a1cb-d789fd1d8a1a_1584x865.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_!bpPS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d173f69-7714-4bb8-a1cb-d789fd1d8a1a_1584x865.png 424w, https://substackcdn.com/image/fetch/$s_!bpPS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d173f69-7714-4bb8-a1cb-d789fd1d8a1a_1584x865.png 848w, https://substackcdn.com/image/fetch/$s_!bpPS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d173f69-7714-4bb8-a1cb-d789fd1d8a1a_1584x865.png 1272w, https://substackcdn.com/image/fetch/$s_!bpPS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d173f69-7714-4bb8-a1cb-d789fd1d8a1a_1584x865.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The MCP Analytics team even announced that their project was already rolled out to 25% of PostHog users. <a href="https://posthog.com/newsletter/hackathons?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=how-to-demo#the-best-hackathon-projects-ship">Shipping before you even demo</a> adds a huge "wow" factor, especially if you can show real user data flowing.</p><div><hr></div><h2>Storytelling tactics</h2><p>5. Lead with a shared pain point that everyone in the audience understands. </p><p>Two of our designers built a web app that automatically tags and indexes illustrations. They opened their demo by asking who has had trouble finding a specific hedgehog in their <s>chaotic</s> lovely &#8220;Hoggies&#8221; Figma file. Everyone raised their hand.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KMaG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F777852b3-ebb6-4016-ba7a-c8858210f059_1584x865.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KMaG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F777852b3-ebb6-4016-ba7a-c8858210f059_1584x865.png 424w, https://substackcdn.com/image/fetch/$s_!KMaG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F777852b3-ebb6-4016-ba7a-c8858210f059_1584x865.png 848w, https://substackcdn.com/image/fetch/$s_!KMaG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F777852b3-ebb6-4016-ba7a-c8858210f059_1584x865.png 1272w, https://substackcdn.com/image/fetch/$s_!KMaG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F777852b3-ebb6-4016-ba7a-c8858210f059_1584x865.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KMaG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F777852b3-ebb6-4016-ba7a-c8858210f059_1584x865.png" width="1456" height="795" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/777852b3-ebb6-4016-ba7a-c8858210f059_1584x865.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;:658763,&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://newsletter.posthog.com/i/199406149?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F777852b3-ebb6-4016-ba7a-c8858210f059_1584x865.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_!KMaG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F777852b3-ebb6-4016-ba7a-c8858210f059_1584x865.png 424w, https://substackcdn.com/image/fetch/$s_!KMaG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F777852b3-ebb6-4016-ba7a-c8858210f059_1584x865.png 848w, https://substackcdn.com/image/fetch/$s_!KMaG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F777852b3-ebb6-4016-ba7a-c8858210f059_1584x865.png 1272w, https://substackcdn.com/image/fetch/$s_!KMaG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F777852b3-ebb6-4016-ba7a-c8858210f059_1584x865.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>6. Borrow a familiar concept to explain a new one. For example, one hackathon team explored building our own take on <a href="https://posthog.com/blog/making-claude-cowork-actually-useful?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=how-to-demo">Claude Cowork</a> inside <a href="https://posthog.com/code?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=how-to-demo">PostHog Code</a>, so they creatively named their project PostHog Work. </p><p>7. Create a separate demo app, especially if you&#8217;re showing off a dev tool. </p><p>Dev tools are easier to grasp once people see them applied. For example, one team created a tool to instruct and deploy agents that manually test your UI. The idea only clicked once they showed it on a separate demo app called OnlyHogs (it&#8217;s fake, I checked):</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7SPu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06e8e839-9e9e-4a9e-9831-38632116fba2_2165x761.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7SPu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06e8e839-9e9e-4a9e-9831-38632116fba2_2165x761.png 424w, https://substackcdn.com/image/fetch/$s_!7SPu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06e8e839-9e9e-4a9e-9831-38632116fba2_2165x761.png 848w, https://substackcdn.com/image/fetch/$s_!7SPu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06e8e839-9e9e-4a9e-9831-38632116fba2_2165x761.png 1272w, https://substackcdn.com/image/fetch/$s_!7SPu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06e8e839-9e9e-4a9e-9831-38632116fba2_2165x761.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7SPu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06e8e839-9e9e-4a9e-9831-38632116fba2_2165x761.png" width="1456" height="512" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/06e8e839-9e9e-4a9e-9831-38632116fba2_2165x761.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:589925,&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://newsletter.posthog.com/i/199406149?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06e8e839-9e9e-4a9e-9831-38632116fba2_2165x761.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_!7SPu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06e8e839-9e9e-4a9e-9831-38632116fba2_2165x761.png 424w, https://substackcdn.com/image/fetch/$s_!7SPu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06e8e839-9e9e-4a9e-9831-38632116fba2_2165x761.png 848w, https://substackcdn.com/image/fetch/$s_!7SPu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06e8e839-9e9e-4a9e-9831-38632116fba2_2165x761.png 1272w, https://substackcdn.com/image/fetch/$s_!7SPu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06e8e839-9e9e-4a9e-9831-38632116fba2_2165x761.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>8. Use &#8220;you&#8221; framing to put the audience in the right perspective. Instead of saying &#8220;we built an app to manage support tickets&#8221;, one team asked the audience to &#8220;imagine you&#8217;re on-call and you&#8217;re trying to resolve six incidents at once.&#8221;</p><p>9. Demo against the alternative. Show the painful 6-step current workflow side-by-side with your 1-step version. Comparisons create stakes; without them, the audience has no reference for whether what you built is actually good.</p><p>10. Save how it works for later. Like how magicians never reveal their tricks, you shouldn&#8217;t tell people how you built it (at least, not up front). Sharing a link to a video, or blog post, where you explain this can make a good ending CTA for your demo.</p><div><hr></div><h2>Setup and delivery</h2><p>11. Channel your inner <a href="https://www.youtube.com/watch?v=Vhh_GeBPOhs">Steve Ballmer</a>. A great demo is often just a good one from someone with a lot of energy.</p><p>12. Don&#8217;t apologize. &#8220;Sorry, it&#8217;s still kind of rough,&#8221; trains the audience to lower expectations before you&#8217;ve shown anything. Just start.</p><p>13. Make it obvious when you&#8217;re done. This prevents that awkward moment when people aren&#8217;t sure if it&#8217;s time to clap.<strong> </strong>End with a closing sentence, descending intonation, or celebratory visual:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vT1p!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7faf038c-6b9e-4882-a38e-99985eb47e64_1584x865.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vT1p!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7faf038c-6b9e-4882-a38e-99985eb47e64_1584x865.png 424w, https://substackcdn.com/image/fetch/$s_!vT1p!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7faf038c-6b9e-4882-a38e-99985eb47e64_1584x865.png 848w, https://substackcdn.com/image/fetch/$s_!vT1p!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7faf038c-6b9e-4882-a38e-99985eb47e64_1584x865.png 1272w, https://substackcdn.com/image/fetch/$s_!vT1p!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7faf038c-6b9e-4882-a38e-99985eb47e64_1584x865.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vT1p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7faf038c-6b9e-4882-a38e-99985eb47e64_1584x865.png" width="1456" height="795" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7faf038c-6b9e-4882-a38e-99985eb47e64_1584x865.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;:494808,&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://newsletter.posthog.com/i/199406149?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7faf038c-6b9e-4882-a38e-99985eb47e64_1584x865.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_!vT1p!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7faf038c-6b9e-4882-a38e-99985eb47e64_1584x865.png 424w, https://substackcdn.com/image/fetch/$s_!vT1p!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7faf038c-6b9e-4882-a38e-99985eb47e64_1584x865.png 848w, https://substackcdn.com/image/fetch/$s_!vT1p!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7faf038c-6b9e-4882-a38e-99985eb47e64_1584x865.png 1272w, https://substackcdn.com/image/fetch/$s_!vT1p!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7faf038c-6b9e-4882-a38e-99985eb47e64_1584x865.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>14. Do everything in your power to please the demo gods. We even have a <a href="https://posthog.com/handbook/marketing/speaker-guide?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=how-to-demo#demo-setup-checklist">demo setup checklist</a> just for this:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;markdown&quot;,&quot;nodeId&quot;:&quot;c269ce17-7812-4cc4-81a6-32b723f1040d&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-markdown">[ ] Use a demo project, not a live account with customer data
[ ] Disable notifications on your laptop
[ ] Silence your phone
[ ] Bookmark your demo URL &#8212; don't type it live
[ ] Know what happens if WiFi dies (screenshots as backup)
[ ] Zoom your browser to 125&#8211;150% so the back row can read it
[ ] Test the projector before anyone arrives</code></pre></div><p>15. Use real data wherever possible. Obviously fake data just looks lame.</p><p>When the HogNet team demoed their hackathon-in-a-box rental service concept, they created a website with pricing and shipping logistics. This felt way more realistic than if they had used lorem ipsum:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LH7N!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81acb265-1b82-4b6d-9778-7bd1c366a9c9_1584x865.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LH7N!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81acb265-1b82-4b6d-9778-7bd1c366a9c9_1584x865.png 424w, https://substackcdn.com/image/fetch/$s_!LH7N!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81acb265-1b82-4b6d-9778-7bd1c366a9c9_1584x865.png 848w, https://substackcdn.com/image/fetch/$s_!LH7N!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81acb265-1b82-4b6d-9778-7bd1c366a9c9_1584x865.png 1272w, https://substackcdn.com/image/fetch/$s_!LH7N!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81acb265-1b82-4b6d-9778-7bd1c366a9c9_1584x865.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LH7N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81acb265-1b82-4b6d-9778-7bd1c366a9c9_1584x865.png" width="1456" height="795" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/81acb265-1b82-4b6d-9778-7bd1c366a9c9_1584x865.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;:834459,&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://newsletter.posthog.com/i/199406149?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81acb265-1b82-4b6d-9778-7bd1c366a9c9_1584x865.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_!LH7N!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81acb265-1b82-4b6d-9778-7bd1c366a9c9_1584x865.png 424w, https://substackcdn.com/image/fetch/$s_!LH7N!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81acb265-1b82-4b6d-9778-7bd1c366a9c9_1584x865.png 848w, https://substackcdn.com/image/fetch/$s_!LH7N!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81acb265-1b82-4b6d-9778-7bd1c366a9c9_1584x865.png 1272w, https://substackcdn.com/image/fetch/$s_!LH7N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81acb265-1b82-4b6d-9778-7bd1c366a9c9_1584x865.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>16. Pre-load and cache as much as you can (without taking away from the demo, of course). It&#8217;s like how TV chefs prepare their ingredients in advance to make every second on air interesting. </p><p>Common places where you can eliminate dead time include agent responses, long queries, and slow builds.</p><p>17. Practice out loud at least once. It helps you build confidence in what you&#8217;re saying, so it comes out naturally.</p><p>18. Don&#8217;t let perfectionism stop you from demoing. Everyone presents at our hackathons, no matter what shape their project was in. Demos are for in-progress work anyways.</p><div><hr></div><h2>Make it fun</h2><p>19. Avoid showing plain old code. Even if your project doesn&#8217;t have a UI, there&#8217;s simply no excuse for skipping visuals anymore. You can generate an architecture diagram in seconds: </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!U80Y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ea892e8-ccc2-415e-9fe5-e92c378fc166_2048x1120.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!U80Y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ea892e8-ccc2-415e-9fe5-e92c378fc166_2048x1120.png 424w, https://substackcdn.com/image/fetch/$s_!U80Y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ea892e8-ccc2-415e-9fe5-e92c378fc166_2048x1120.png 848w, https://substackcdn.com/image/fetch/$s_!U80Y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ea892e8-ccc2-415e-9fe5-e92c378fc166_2048x1120.png 1272w, https://substackcdn.com/image/fetch/$s_!U80Y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ea892e8-ccc2-415e-9fe5-e92c378fc166_2048x1120.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!U80Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ea892e8-ccc2-415e-9fe5-e92c378fc166_2048x1120.png" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1ea892e8-ccc2-415e-9fe5-e92c378fc166_2048x1120.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:796,&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_!U80Y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ea892e8-ccc2-415e-9fe5-e92c378fc166_2048x1120.png 424w, https://substackcdn.com/image/fetch/$s_!U80Y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ea892e8-ccc2-415e-9fe5-e92c378fc166_2048x1120.png 848w, https://substackcdn.com/image/fetch/$s_!U80Y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ea892e8-ccc2-415e-9fe5-e92c378fc166_2048x1120.png 1272w, https://substackcdn.com/image/fetch/$s_!U80Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ea892e8-ccc2-415e-9fe5-e92c378fc166_2048x1120.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>20. Don&#8217;t just show plain old slides, either. Active demos always win. Anyone can talk about a cool idea; the point of a demo is to build it and <em>show</em> it.</p><p>21. Default screen recording tools suck. There are plenty of apps like <a href="https://screen.studio/">Screen Studio</a> that zoom in and add animations so it&#8217;s easier to see what&#8217;s going on:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yS__!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed29ab4-c031-4de6-8af0-8cdad2f47ce0_1584x865.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yS__!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed29ab4-c031-4de6-8af0-8cdad2f47ce0_1584x865.png 424w, https://substackcdn.com/image/fetch/$s_!yS__!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed29ab4-c031-4de6-8af0-8cdad2f47ce0_1584x865.png 848w, https://substackcdn.com/image/fetch/$s_!yS__!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed29ab4-c031-4de6-8af0-8cdad2f47ce0_1584x865.png 1272w, https://substackcdn.com/image/fetch/$s_!yS__!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed29ab4-c031-4de6-8af0-8cdad2f47ce0_1584x865.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yS__!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed29ab4-c031-4de6-8af0-8cdad2f47ce0_1584x865.png" width="1456" height="795" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4ed29ab4-c031-4de6-8af0-8cdad2f47ce0_1584x865.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;:298986,&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://newsletter.posthog.com/i/199406149?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed29ab4-c031-4de6-8af0-8cdad2f47ce0_1584x865.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_!yS__!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed29ab4-c031-4de6-8af0-8cdad2f47ce0_1584x865.png 424w, https://substackcdn.com/image/fetch/$s_!yS__!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed29ab4-c031-4de6-8af0-8cdad2f47ce0_1584x865.png 848w, https://substackcdn.com/image/fetch/$s_!yS__!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed29ab4-c031-4de6-8af0-8cdad2f47ce0_1584x865.png 1272w, https://substackcdn.com/image/fetch/$s_!yS__!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ed29ab4-c031-4de6-8af0-8cdad2f47ce0_1584x865.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>22. Your visuals don&#8217;t need to be beautiful. They just need to highlight what&#8217;s important. This demo had simple graphics, but each callout provided useful information:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MkRC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b826dc9-b6db-4660-93d8-2e33708a0571_1584x865.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MkRC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b826dc9-b6db-4660-93d8-2e33708a0571_1584x865.png 424w, https://substackcdn.com/image/fetch/$s_!MkRC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b826dc9-b6db-4660-93d8-2e33708a0571_1584x865.png 848w, https://substackcdn.com/image/fetch/$s_!MkRC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b826dc9-b6db-4660-93d8-2e33708a0571_1584x865.png 1272w, https://substackcdn.com/image/fetch/$s_!MkRC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b826dc9-b6db-4660-93d8-2e33708a0571_1584x865.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MkRC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b826dc9-b6db-4660-93d8-2e33708a0571_1584x865.png" width="1456" height="795" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6b826dc9-b6db-4660-93d8-2e33708a0571_1584x865.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;:425384,&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://newsletter.posthog.com/i/199406149?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b826dc9-b6db-4660-93d8-2e33708a0571_1584x865.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_!MkRC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b826dc9-b6db-4660-93d8-2e33708a0571_1584x865.png 424w, https://substackcdn.com/image/fetch/$s_!MkRC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b826dc9-b6db-4660-93d8-2e33708a0571_1584x865.png 848w, https://substackcdn.com/image/fetch/$s_!MkRC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b826dc9-b6db-4660-93d8-2e33708a0571_1584x865.png 1272w, https://substackcdn.com/image/fetch/$s_!MkRC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6b826dc9-b6db-4660-93d8-2e33708a0571_1584x865.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>23. Audio is underrated. One team generated a sea shanty voiceover, while another project that does quick calls for AI-powered user research made their demo fully audio-only.</p><p>24. Do more weird. No one asked for clips of <a href="https://www.linkedin.com/in/dmarticus">Dylan</a> sipping pi&#241;a coladas in the background, but the <a href="https://posthog.com/code?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=how-to-demo">PostHog Code</a> mobile app team did it anyway. It&#8217;s also the demo I remember most. &#127865;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-zpm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3003cef1-0ed6-4428-8635-eefaf4bd7343_1584x865.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-zpm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3003cef1-0ed6-4428-8635-eefaf4bd7343_1584x865.png 424w, https://substackcdn.com/image/fetch/$s_!-zpm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3003cef1-0ed6-4428-8635-eefaf4bd7343_1584x865.png 848w, https://substackcdn.com/image/fetch/$s_!-zpm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3003cef1-0ed6-4428-8635-eefaf4bd7343_1584x865.png 1272w, https://substackcdn.com/image/fetch/$s_!-zpm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3003cef1-0ed6-4428-8635-eefaf4bd7343_1584x865.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-zpm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3003cef1-0ed6-4428-8635-eefaf4bd7343_1584x865.png" width="1456" height="795" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3003cef1-0ed6-4428-8635-eefaf4bd7343_1584x865.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;:1416420,&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://newsletter.posthog.com/i/199406149?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3003cef1-0ed6-4428-8635-eefaf4bd7343_1584x865.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_!-zpm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3003cef1-0ed6-4428-8635-eefaf4bd7343_1584x865.png 424w, https://substackcdn.com/image/fetch/$s_!-zpm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3003cef1-0ed6-4428-8635-eefaf4bd7343_1584x865.png 848w, https://substackcdn.com/image/fetch/$s_!-zpm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3003cef1-0ed6-4428-8635-eefaf4bd7343_1584x865.png 1272w, https://substackcdn.com/image/fetch/$s_!-zpm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3003cef1-0ed6-4428-8635-eefaf4bd7343_1584x865.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Words by <a href="https://x.com/jinayoon_">Jina Yoon</a>, who had to overcome her fear of public speaking without these tips.</em></p><div><hr></div><h2>&#128161; More memorable content</h2><ul><li><p><strong><a href="https://posthog.com/blog/local-flag-evals-rust?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=how-to-demo">From 270GB RAM to 5GB: Moving local flag evaluation from Django to Rust</a> &#8211; Patricio Tarantino</strong></p></li><li><p><strong><a href="https://posthog.com/blog/ai-native-hiring?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=how-to-demo">Being AI-native matters more than experience</a> &#8211; Fraser Hopper</strong></p></li><li><p><strong><a href="https://posthog.com/founders/growth-metrics-for-startups?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=how-to-demo">A guide to growth metrics for startups that don&#8217;t fit in</a> &#8211; Mine Kansu</strong></p></li><li><p><strong><a href="https://posthog.com/blog/aeo-advice?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=how-to-demo">How to grow your AEO function (without losing your mind)</a> &#8211; Natalia Amorim</strong></p></li><li><p><strong><a href="https://posthog.com/blog/minimum-viable-product-marketing?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=how-to-demo">The do&#8217;s and don&#8217;ts of minimum viable product marketing</a> &#8211; Joe Martin</strong></p></li><li><p><strong><a href="https://posthog.com/blog/future-of-support-is-human?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=how-to-demo">Stop adding AI between you and your customers</a> &#8211; Abigail Richardson</strong></p></li></ul><blockquote></blockquote><div><hr></div><h2>&#127796; Join our next offsite</h2><ul><li><p><strong><a href="https://posthog.com/careers/ai-research-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=how-to-demo">AI Research Engineer</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/backend-engineer-ingestion?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=how-to-demo">Backend Engineer (Ingestion)</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/forward-deployed-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=how-to-demo">Forward Deployed Engineer</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/technical-customer-success-manager?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=how-to-demo">Technical Customer Success Manager</a></strong></p></li></ul><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.posthog.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Subscribe for more S-tier tips</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The stuff nobody tells you about startup marketing]]></title><description><![CDATA[Doing weird stuff on the internet is optional but recommended]]></description><link>https://newsletter.posthog.com/p/the-stuff-nobody-tells-you-about</link><guid isPermaLink="false">https://newsletter.posthog.com/p/the-stuff-nobody-tells-you-about</guid><dc:creator><![CDATA[Charles Cook]]></dc:creator><pubDate>Wed, 06 May 2026 18:01:37 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/81aa278c-cc30-4ac1-b99c-c929bb846051_2912x2096.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Every few weeks, a founder emails me some version of the same thing:</p><p>&#8220;We&#8217;re getting early traction. How do we start doing marketing?&#8221;</p><p>Most advice is written for people at companies that already know what they&#8217;re doing. You don&#8217;t. That&#8217;s fine. I didn&#8217;t either when I joined PostHog in 2020, and somehow I&#8217;m still here!</p><p>This is everything about marketing that I&#8217;d tell the Charles who doesn&#8217;t know anything in 2020.</p><div><hr></div><h2>1. You <em>do</em> have experience</h2><p>People who contact me think marketing is a thing they haven&#8217;t started yet.</p><p>I used to think the same, but it turns out a bunch of things we were already doing at PostHog <em>was</em> marketing. We just didn&#8217;t think of it like that.</p><p>Our <a href="https://news.ycombinator.com/item?id=22376732">launch post</a> on Hacker News? Marketing.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-pGN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcbdb0f6-3347-4082-aac5-df63698d5cf7_1389x982.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-pGN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcbdb0f6-3347-4082-aac5-df63698d5cf7_1389x982.png 424w, https://substackcdn.com/image/fetch/$s_!-pGN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcbdb0f6-3347-4082-aac5-df63698d5cf7_1389x982.png 848w, https://substackcdn.com/image/fetch/$s_!-pGN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcbdb0f6-3347-4082-aac5-df63698d5cf7_1389x982.png 1272w, https://substackcdn.com/image/fetch/$s_!-pGN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcbdb0f6-3347-4082-aac5-df63698d5cf7_1389x982.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-pGN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcbdb0f6-3347-4082-aac5-df63698d5cf7_1389x982.png" width="1389" height="982" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dcbdb0f6-3347-4082-aac5-df63698d5cf7_1389x982.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:982,&quot;width&quot;:1389,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:340858,&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://newsletter.posthog.com/i/196421903?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcbdb0f6-3347-4082-aac5-df63698d5cf7_1389x982.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_!-pGN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcbdb0f6-3347-4082-aac5-df63698d5cf7_1389x982.png 424w, https://substackcdn.com/image/fetch/$s_!-pGN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcbdb0f6-3347-4082-aac5-df63698d5cf7_1389x982.png 848w, https://substackcdn.com/image/fetch/$s_!-pGN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcbdb0f6-3347-4082-aac5-df63698d5cf7_1389x982.png 1272w, https://substackcdn.com/image/fetch/$s_!-pGN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdcbdb0f6-3347-4082-aac5-df63698d5cf7_1389x982.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>An unusually deep <a href="https://posthog.com/handbook?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=marketing-for-beginners">employee handbook</a> on a weird-looking website? Also marketing.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Q1ta!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5008195-2ea8-445c-a58b-e8d436e57b97_1210x810.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Q1ta!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5008195-2ea8-445c-a58b-e8d436e57b97_1210x810.png 424w, https://substackcdn.com/image/fetch/$s_!Q1ta!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5008195-2ea8-445c-a58b-e8d436e57b97_1210x810.png 848w, https://substackcdn.com/image/fetch/$s_!Q1ta!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5008195-2ea8-445c-a58b-e8d436e57b97_1210x810.png 1272w, https://substackcdn.com/image/fetch/$s_!Q1ta!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5008195-2ea8-445c-a58b-e8d436e57b97_1210x810.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Q1ta!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5008195-2ea8-445c-a58b-e8d436e57b97_1210x810.png" width="1210" height="810" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c5008195-2ea8-445c-a58b-e8d436e57b97_1210x810.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:810,&quot;width&quot;:1210,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:130052,&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://newsletter.posthog.com/i/196421903?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5008195-2ea8-445c-a58b-e8d436e57b97_1210x810.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_!Q1ta!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5008195-2ea8-445c-a58b-e8d436e57b97_1210x810.png 424w, https://substackcdn.com/image/fetch/$s_!Q1ta!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5008195-2ea8-445c-a58b-e8d436e57b97_1210x810.png 848w, https://substackcdn.com/image/fetch/$s_!Q1ta!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5008195-2ea8-445c-a58b-e8d436e57b97_1210x810.png 1272w, https://substackcdn.com/image/fetch/$s_!Q1ta!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc5008195-2ea8-445c-a58b-e8d436e57b97_1210x810.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Posting what is basically your diary to your company website? Marketingggggg!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!T0FV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4242199-db53-4304-bbcd-c42317e609b0_811x664.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!T0FV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4242199-db53-4304-bbcd-c42317e609b0_811x664.png 424w, https://substackcdn.com/image/fetch/$s_!T0FV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4242199-db53-4304-bbcd-c42317e609b0_811x664.png 848w, https://substackcdn.com/image/fetch/$s_!T0FV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4242199-db53-4304-bbcd-c42317e609b0_811x664.png 1272w, https://substackcdn.com/image/fetch/$s_!T0FV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4242199-db53-4304-bbcd-c42317e609b0_811x664.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!T0FV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4242199-db53-4304-bbcd-c42317e609b0_811x664.png" width="811" height="664" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f4242199-db53-4304-bbcd-c42317e609b0_811x664.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:664,&quot;width&quot;:811,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:310881,&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://newsletter.posthog.com/i/196421903?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4242199-db53-4304-bbcd-c42317e609b0_811x664.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_!T0FV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4242199-db53-4304-bbcd-c42317e609b0_811x664.png 424w, https://substackcdn.com/image/fetch/$s_!T0FV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4242199-db53-4304-bbcd-c42317e609b0_811x664.png 848w, https://substackcdn.com/image/fetch/$s_!T0FV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4242199-db53-4304-bbcd-c42317e609b0_811x664.png 1272w, https://substackcdn.com/image/fetch/$s_!T0FV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4242199-db53-4304-bbcd-c42317e609b0_811x664.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Marketing is simply closing the gap between what you&#8217;re building and the people who&#8217;d care about it. Our handbook is a good example: James and Tim knew early users might doubt there was a real company behind PostHog, so they published all internal processes and values on the main website to build credibility fast. </p><p>So no, you don&#8217;t need a fancy strategy, brand guidelines, a content calendar, or a paid budget. Just figure out what your audience finds interesting and talk about it. Plus, when you treat marketing this way, your brand will be that much more authentic. </p><div><hr></div><h2>2. Depth-first &gt; breadth-first</h2><p>So you have something working. Yay.</p><p>The instinct at this point is to write a list of 5-10 other channels to try in the hope that one of them also works. This is a great way to end up, six months later, with a pile of stuff that didn&#8217;t work and no idea why.</p><p>It&#8217;s much better to do more of the thing that&#8217;s already showing signs of life. If you went mildly viral on LinkedIn, keep posting every day. If a podcast appearance converted, email another hundred. If a blog post got picked up, write the next one. And the next one.</p><p>That&#8217;s what we did early on to get <a href="https://newsletter.posthog.com/p/how-we-got-our-first-1000-users?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=marketing-for-beginners">our first 1,000 users</a>. When we saw early success with our HN launch, James kept serial posting founder blogs about everything behind the scenes:</p><ul><li><p>A reflection <a href="https://posthog.com/blog/after-the-hn-launch?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=marketing-for-beginners">after the HN launch</a> on what made it successful, and what we wanted to do with the momentum.</p></li><li><p>An explainer about <a href="https://posthog.com/blog/raising-3m-for-os?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=marketing-for-beginners">how we raised $3M in seed funding as an open source company</a> (including all the tactical details of VC meetings to the boring paperwork).</p></li><li><p>A retro about <a href="https://posthog.com/founders/story-about-pivots?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=marketing-for-beginners">how we pivoted through six failed product ideas</a> before landing on open source product analytics.</p></li></ul><p>Going niche forces you to develop something unique in a way that others can&#8217;t copy. A big company could never write a &#8220;founder blog&#8221; series the way we did &#8211; being small and relatively unknown allowed us to be as transparent as we are.</p><p>So go deep, not wide, and resist the temptation to half-ass a bunch of things.</p><div><hr></div><h2>3. Match your channels to your sales motion</h2><p>The right first channels depend on whether you&#8217;re running a PLG (<a href="https://posthog.com/founders/product-led-growth?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=marketing-for-beginners">product-led growth</a>) or sales-led motion. If you&#8217;re not sure which one you are yet , you need to <a href="https://posthog.com/newsletter/ideal-customer-profile-framework?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=marketing-for-beginners">define your ICP</a> first &#8211; it&#8217;s your map converting potential users into paying customers.</p><p>If you&#8217;re PLG, your early wins are going to come from places where your users already hang out: Hacker News, Reddit, X, dev communities, tutorials, docs, etc. The goal here is to widen the beginning of your funnel. Other things that help with this include branding, ads, and word of mouth growth. If done well, customers will come to you rather than the other way around.</p><p>(We are obviously hideously biased, but if you are seeing early signs of PLG working, keep going! It&#8217;s an incredibly efficient way to build a business.)</p><p>If you&#8217;re sales-led, from what I&#8217;ve heard from marketers at other companies, your early wins are going to come from more targeted approaches. You&#8217;ll be the one going up to them. Think direct outreach, industry events, partnerships, and the founder&#8217;s own network. Get on the podcasts your buyers listen to. Turn up to AWS Re:invent. &#128548;&#128293;</p><p>In either case, however, don&#8217;t start with SEO. SEO is also one of those domains that takes a very long time, and requires you to know what you&#8217;re doing. It is <em>very</em> hard to vibe-SEO. Same goes for AEO. See <a href="https://posthog.com/newsletter/seo-for-startups?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=marketing-for-beginners">Non-obvious SEO advice for startups </a>for more on this.</p><div><hr></div><h2>4. Think in terms of experiments</h2><p>Just like how you measure success for product launches, you need a similar mindset for marketing.</p><p>Before you start anything new, write down your prediction for what &#8220;worked&#8221; would look like. A simple yes or no question like:</p><p>&#8220;Did more people who look like our ICP sign up, use our product, and become enthusiastic recommenders?&#8221;</p><p>It doesn&#8217;t need to be a metric target &#8211; in fact, I&#8217;d strongly discourage it at this stage (sorry, John Doerr). You haven&#8217;t done this before so any number you&#8217;d choose is basically made up. You just need to design your goal so that it&#8217;s unambiguous whether you succeeded or failed.</p><p>As for how long to run an experiment, six weeks is usually enough time to tell. We&#8217;ve never had something run for longer where the results magically became good. You can always shut off your experiment if you&#8217;re getting clear signals before then.</p><p>But if you can&#8217;t obviously say &#8220;it worked&#8221; by then, you&#8217;ve either designed the experiment poorly, or the answer is no &#8211; which is great, actually! You now know <em>not</em> to do the thing again. The worst outcome of marketing is actually &#8220;I&#8217;m not sure.&#8221; That ends up producing a pile of half-working content that nobody can justify turning off.</p><p>This will also keep you from spreading too thin while still making forward progress (&#224; la depth-first). For example, when we started doing paid ads, we ran 2-3 small experiments at a time in phases instead of launching on all ad platforms at once.</p><p>The first experiment for each platform was to get targeting right: were we getting clicks from people who looked like our ICP? If not, we&#8217;d keep adjusting the audience, keywords, and placements until we got it right.</p><p>Once a channel passed that initial bar, we&#8217;d move on to optimizing with better copy, lower cost per acquisition, etc. We only started experimenting on new platforms once we felt like the previous one was in a good state for &#8220;maintenance mode&#8221;.</p><div><hr></div><h2>5. Attribution is a lie</h2><p>As you start to think about marketing in terms of experiments, you&#8217;ll inevitably run into problems with attribution.</p><p>Let me explain. Say someone sees your viral tweet on X, looks up your company, clicks on a Google Ad, and signs up. Your analytics are going to attribute that user to the Google Ad, but this is a lie since it really started with the tweet.</p><p>If you&#8217;re not careful about this, you&#8217;ll end up drawing the wrong conclusions about your data and spending money in all the wrong places. This is how people end up burning their money on paid ads.</p><p>Accept that attribution is a 7/10 problem, not a 10/10 one. Don&#8217;t try to build or buy a model with fancy multi-touch attribution software. You don&#8217;t need one.</p><p>What you <em>do</em> need is a &#8220;where did you hear about us?&#8221; text box in your signup flow. This is the single highest-signal piece of marketing data you will collect, and it costs nothing. Make it optional &#8211; 5 to 10% of people will fill it in. <em>Read them every week.</em></p><p>Adding this was essential for our early growth. The responses (and <a href="https://newsletter.posthog.com/p/talk-to-users?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=marketing-for-beginners">conversations that followed</a>) confirmed for us that developers hated feeling &#8220;sold&#8221; to, but they inherently found our startup journey interesting.</p><p>So, two rules of thumb for dealing with the attribution mirage:</p><ol><li><p>Trust attribution when the signal is overwhelming. Ignore when it&#8217;s ambiguous.</p></li><li><p>If your &#8220;where did you hear about us?&#8221; box and your attribution data agree, believe them. If they don&#8217;t, believe the box.</p></li></ol><div><hr></div><h2>6. Don&#8217;t outsource to an agency</h2><p>This is the other thing founders email me about: &#8220;Should we hire a marketing agency to do blah?&#8221;</p><p>No. Well, not yet.</p><p>An agency can&#8217;t build your positioning, understand your users, or decide what &#8220;good&#8221; looks like for your brand. That&#8217;s your job, and you can&#8217;t delegate it until you&#8217;ve done it yourself.</p><p>As a bonus, when you learn what types of marketing works well for your target audience, it will also improve your product decisions. It&#8217;s an extension of <a href="https://posthog.com/newsletter/talk-to-users?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=marketing-for-beginners">talking to your users</a>.</p><p>If you hand your earliest marketing to an agency, the output will be generic, the feedback loop will be slow, and you&#8217;ll learn nothing.</p><p>Only use agencies for things you genuinely can&#8217;t do internally, like we <a href="https://posthog.com/founders/dev-marketing-paid-ads#an-agency-will-solve-all-your-problems?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=marketing-for-beginners">eventually did for paid ads</a>. Managing them was a time intensive task that didn&#8217;t require much PostHog-specific context and clearly benefited from long-term experience. It just made sense for us to outsource this at $5k/month as it&#8217;s not a skill we necessarily felt the need to grow in-house.</p><p>Never use agencies to replace thinking you haven&#8217;t done yet.</p><div><hr></div><h2>7. When to make the first hire</h2><p>Founders always want to hire a marketing person too early. Like, the-microsecond-they-have-budget early. Personally, for a hire to be worth it, I think you need these first:</p><ul><li><p>Users who actually use the product</p></li><li><p>Users who enthusiastically recommend it to other people</p></li><li><p>Users who pay for it</p></li><li><p>&#8230; and ideally, they&#8217;re doing all of the above despite the product still being a bit janky</p></li></ul><p>When you do hire your first marketer, hire a generalist.</p><p>Titles are not terribly useful in your search here. In different companies, this person might be called a content marketer, a product marketer, or a growth marketer.</p><p>What you actually want is someone who can write, think in funnels, talk to users, and figure things out without a playbook. You don&#8217;t want someone who&#8217;s a specialist in one channel, because you don&#8217;t yet know which channel matters. Specialists are also more likely to depend on playbooks.</p><p>Our first marketing hire was <a href="https://www.linkedin.com/in/joemartinwords/">Joe</a>, who had a background across journalism, content marketing, copywriting, and product marketing. We didn&#8217;t have a ton of direction for him, so he spent as much time talking to engineers as writing copy, because figuring out what we actually needed was part of the job.</p><p>Your first hire should also be someone who is pretty experienced since you won&#8217;t have a long-term strategy to present to them. The most you can provide is context on what&#8217;s been working well, and it&#8217;ll be up to them to figure out the rest.</p><p><em>Words by <a href="https://www.linkedin.com/in/wololo/">Charles Cook</a>, generic exec person at PostHog, who has a suspicious amount of opinions about marketing for someone with an MBA.</em></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.posthog.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Subscribe for more interesting stuff delivered to your inbox every other week.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>&#129428; Jobs at PostHog </h2><ul><li><p><strong><a href="https://posthog.com/careers/ai-research-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=marketing-for-beginners">AI Research Engineer</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/technical-customer-success-manager">Technical CSM</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/payroll-manager?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=marketing-for-beginners">Payroll Manager</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/partnership-marketer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=marketing-for-beginners">Partnership Marketer</a></strong></p></li></ul><div><hr></div><h2>&#128218; More good stuff to read </h2><ul><li><p><strong><a href="https://posthog.com/blog/posthogs-next-chapter?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=marketing-for-beginners">PostHog's next chapter</a> &#8211; James Hawkins</strong></p></li><li><p><strong><a href="https://posthog.com/blog/self-driving-product">PostHog Code and the self-driving product</a> &#8211; Cleo Lant</strong></p></li><li><p><strong><a href="https://posthog.com/blog/making-claude-cowork-actually-useful?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=marketing-for-beginners">Making Claude Cowork actually useful</a> &#8211; Charles Cook</strong></p></li><li><p><strong><a href="https://posthog.com/blog/duckdb-vs-clickhouse?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=marketing-for-beginners">DuckDB vs ClickHouse: Why we use both at PostHog</a> &#8211; Mathew Pregasen</strong></p></li><li><p><strong><a href="https://www.news.aakashg.com/p/in-app-surveys-guide?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=marketing-for-beginners">In-App Surveys: The Playbook from 4M PostHog Responses</a> &#8211; Aakash Gupta</strong></p></li><li><p><strong><a href="https://dziban.net/posts/yabu/">Yabu: A language designed to make LLM agents iterate faster</a> &#8211; Marce Coll</strong></p></li><li><p><strong><a href="https://github.com/AndrewVos/endless-toil">Endless Toil: Hear your agent suffer through your code</a> &#8211; Andrew Vos</strong></p></li></ul>]]></content:encoded></item><item><title><![CDATA[Great companies are built in hackathons]]></title><description><![CDATA[You should run more hackathons. Here&#8217;s how to do them well.]]></description><link>https://newsletter.posthog.com/p/great-companies-are-built-in-hackathons</link><guid isPermaLink="false">https://newsletter.posthog.com/p/great-companies-are-built-in-hackathons</guid><dc:creator><![CDATA[Ian Vanagas]]></dc:creator><pubDate>Tue, 21 Apr 2026 18:12:27 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/7bf0320b-e7db-4bee-9814-0a38c84bb44c_2912x2096.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>PostHog hackathons have generated millions in revenue. <a href="https://posthog.com/session-replay?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=hackathons">Session Replay</a>, <a href="https://posthog.com/data-stack?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=hackathons">Data Warehouse</a>, <a href="https://posthog.com/logs?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=hackathons">Logs</a>, <a href="https://posthog.com/workflows?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=hackathons">Workflows</a>, and <a href="https://posthog.com/ai?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=hackathons">PostHog AI</a> wouldn&#8217;t exist without them.</p><p>We take multiple days out of every year to do them. They are days our team looks forward to all year. They&#8217;re an integral part of our culture.</p><p>Yet for many companies and people, hackathons are seen as a waste of time. A distraction from important &#8220;real work.&#8221; An act of performative participation.</p><p>This is because they think about and do hackathons wrong.</p><div><hr></div><h2>Hackathons are an innovation engine, but only if separate from work</h2><p>Hackathons fail when they&#8217;re not separate from regular work or used as cover to accelerate existing work. We have two simple rules to prevent this:</p><ol><li><p><strong>You should work on totally new things. </strong>Hackathons are for ambitious, weird ideas, trying new things, and learning new technologies. Pitching ideas on the roadmap is forbidden.</p></li><li><p><strong>You should focus 100% on the hackathon. </strong>We protect people from regular work by running our hackathons during <a href="https://posthog.com/handbook/company/offsites?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=hackathons">offsites</a>, where we have dedicated time and coverage plans for support and incidents. DigitalOcean employs <a href="https://www.digitalocean.com/blog/company-hackathons?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=hackathons">work embargoes</a> for hackathons run in an office.</p></li></ol><p>These rules fuel the innovation engine because people are unconstrained by their day-to-day work, and have a safe space to work on ambitious bets without distractions.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!o_UU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b5db2f4-03d3-415a-9168-0695ae483e7b_1032x1030.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!o_UU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b5db2f4-03d3-415a-9168-0695ae483e7b_1032x1030.png 424w, https://substackcdn.com/image/fetch/$s_!o_UU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b5db2f4-03d3-415a-9168-0695ae483e7b_1032x1030.png 848w, https://substackcdn.com/image/fetch/$s_!o_UU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b5db2f4-03d3-415a-9168-0695ae483e7b_1032x1030.png 1272w, https://substackcdn.com/image/fetch/$s_!o_UU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b5db2f4-03d3-415a-9168-0695ae483e7b_1032x1030.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!o_UU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b5db2f4-03d3-415a-9168-0695ae483e7b_1032x1030.png" width="1032" height="1030" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5b5db2f4-03d3-415a-9168-0695ae483e7b_1032x1030.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1030,&quot;width&quot;:1032,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1843784,&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://newsletter.posthog.com/i/194905377?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b5db2f4-03d3-415a-9168-0695ae483e7b_1032x1030.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_!o_UU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b5db2f4-03d3-415a-9168-0695ae483e7b_1032x1030.png 424w, https://substackcdn.com/image/fetch/$s_!o_UU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b5db2f4-03d3-415a-9168-0695ae483e7b_1032x1030.png 848w, https://substackcdn.com/image/fetch/$s_!o_UU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b5db2f4-03d3-415a-9168-0695ae483e7b_1032x1030.png 1272w, https://substackcdn.com/image/fetch/$s_!o_UU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b5db2f4-03d3-415a-9168-0695ae483e7b_1032x1030.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We&#8217;ve seen first-hand how running hackathons like this can lead to transformative new products and features that influence the direction of the whole company.</p><p>In PostHog&#8217;s earliest days, an engineer decided to build Session Replay during a hackathon based on user feedback, despite co-CEO James arguing it would take too long and split the focus of the company.</p><p>It ended up being wildly popular, with over 50,000 daily active users, and led us to become the multi-product company we are today. As an early Facebook engineer noted, <a href="https://arc.net/l/quote/zqzhqlxe">code wins arguments</a> and hackathons are a great venue for this to play out.</p><blockquote><p><strong>Remember this:</strong> Give permission and cover for your team to focus on the hackathon and ignore day-to-day work. Not doing so leads to low participation, burnout, and unambitious hackathon projects.</p></blockquote><div><hr></div><h2>Hackathons are for everyone</h2><p>When you think about hackathons, you picture a bunch of engineers huddled around laptops, coding up a storm. This is mostly what our hackathons look like with one difference: they&#8217;re not just for engineers.</p><p><a href="https://posthog.com/newsletter/engineeringification-of-everything?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=hackathons">LLMs let anyone build software</a>. When this is combined with specific domain expertise and a sprinkle of motivation, it leads to the dozens of hackathon projects our &#8220;non-technical&#8221; team members have built, including:</p><ul><li><p>Games like Three Button Dungeon, Awkwardness Avoider, and Flappy Hog for <a href="https://posthog.com/deskhog?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=hackathons">DeskHog</a>, our open-source developer toy.</p></li><li><p><a href="https://x.com/nizzyabi/status/1943312440709558643">Instagram Stories</a> for PostHog showcasing our latest features in a format everyone&#8217;s familiar with.</p></li><li><p><a href="https://posthog.com/dpa?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=hackathons">A DPA generator</a> that automates and brings joy to an otherwise boring legal document.</p></li></ul><p>Non-technical team members can require more encouragement to pitch projects and support to ensure they can contribute, but the cultural benefits of getting them involved are worth it.</p><p>Getting unfamiliar parts of the organization to work together breaks down silos between technical and non-technical teammates. <a href="https://www.digitalocean.com/blog/company-hackathons">DigitalOcean</a> finds &#8220;the teams that have created truly innovative products and addressed real, practical problems are cross-functional teams with members from all across the company.&#8221; <a href="https://venturebeat.com/dev/inside-the-hackathon-that-keeps-twilio-innovating">Twilio</a> actively discourages &#8220;lone wolf&#8221; ideas to make this happen, as do we.</p><p>Beyond the hackathon, getting non-technical people building opens their eyes to what&#8217;s possible and encourages them to explore more. Trying out new technologies often leads to adopting them in day-to-day work. That&#8217;s why companies like <a href="https://building.jane.app/hackathon-part-1-janes-company-wide-ai-hackathon/">Jane</a>, <a href="https://www.linkedin.com/posts/uberengineering_last-week-ubers-global-tech-teams-came-activity-7409300313096040448-n6wR">Uber</a>, and <a href="https://www.linkedin.com/feed/update/urn:li:activity:7316494445594501120/">Vanta</a> are all driving AI adoption with hackathons.</p><p>Ultimately, we agree with <a href="https://slack.com/blog/collaboration/lessons-from-five-years-of-hackathons-at-slack">Slack</a>, who found that &#8220;the more people participate, the better your outcomes&#8221; &#8211; both during the hackathon and beyond.</p><blockquote><p><strong>Remember this: </strong>Encourage everyone to participate in hackathons, including people who would never see themselves as hackathon participants. Give them the tools they need to succeed (like Claude Code) and create cross-functional teams.</p></blockquote><div><hr></div><p><em>Curious what a PostHog hackathon actually looks like? We filmed a behind-the-scenes documentary about one and you can watch it below:</em></p><div id="youtube2-dGaSxBs3OsU" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;dGaSxBs3OsU&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/dGaSxBs3OsU?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><h2>Demos aren&#8217;t optional</h2><p>At our <a href="https://posthog.com/blog/mykonos-hackathon?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=hackathons">2024 hackathon</a>, the &#8220;RealTimeHog 3000&#8221; team built a livestream service that displayed events as soon as they hit our ingestion Kafka topic using server-sent events.</p><p>It was cool when they showed this by getting people to click around on the demo site they built, it was even cooler when they had a &#8220;one more thing&#8221; moment and showed off a globe on <code>posthog.com</code> of all the events being captured worldwide into our US and EU Cloud services.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gKij!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc160ff9-ccba-43b6-8034-d559192ad060_1354x1104.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gKij!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc160ff9-ccba-43b6-8034-d559192ad060_1354x1104.png 424w, https://substackcdn.com/image/fetch/$s_!gKij!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc160ff9-ccba-43b6-8034-d559192ad060_1354x1104.png 848w, https://substackcdn.com/image/fetch/$s_!gKij!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc160ff9-ccba-43b6-8034-d559192ad060_1354x1104.png 1272w, https://substackcdn.com/image/fetch/$s_!gKij!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc160ff9-ccba-43b6-8034-d559192ad060_1354x1104.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gKij!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc160ff9-ccba-43b6-8034-d559192ad060_1354x1104.png" width="1354" height="1104" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cc160ff9-ccba-43b6-8034-d559192ad060_1354x1104.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1104,&quot;width&quot;:1354,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1566961,&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://newsletter.posthog.com/i/194905377?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc160ff9-ccba-43b6-8034-d559192ad060_1354x1104.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_!gKij!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc160ff9-ccba-43b6-8034-d559192ad060_1354x1104.png 424w, https://substackcdn.com/image/fetch/$s_!gKij!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc160ff9-ccba-43b6-8034-d559192ad060_1354x1104.png 848w, https://substackcdn.com/image/fetch/$s_!gKij!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc160ff9-ccba-43b6-8034-d559192ad060_1354x1104.png 1272w, https://substackcdn.com/image/fetch/$s_!gKij!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc160ff9-ccba-43b6-8034-d559192ad060_1354x1104.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Requiring demos is a forcing function. You want to have something worth showing off, so initially ambitious plans quickly become more realistic to ship something real.</p><p>They&#8217;re also fun. When someone says &#8220;this is available now&#8221; or &#8220;we already have users using this,&#8221; there are always &#8220;ooohs&#8221; and &#8220;ahhhs.&#8221; People love a little showmanship and it&#8217;s fun to be in the spotlight.</p><p>While demos are mandatory, judging and prizes are optional and arguably undesirable. <a href="https://posthog.com/newsletter/43-lessons-about-hiring-for-startups?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=hackathons">We hire people</a> to &#8220;<a href="https://posthog.com/handbook/values?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=hackathons">be the driver</a>.&#8221; They don&#8217;t need artificial motivation like gift cards or merch to do that. We also don&#8217;t want people to only build projects they think will win, or what the bosses want to see.</p><p>When you give a self-motivated and autonomous team time and space to work on what they think is best, they&#8217;ll surprise and delight you with what they build. The results of our hackathons are proof of that.</p><blockquote><p><strong>Remember this:</strong> Let people know they&#8217;ll be demoing at the start and make sure everyone does. As a bonus, keep track of what people demo. It&#8217;s easy for these valuable ideas to get lost. Writing about what people built also makes for <a href="https://posthog.com/blog/mykonos-hackathon?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=hackathons">great</a> <a href="https://posthog.com/blog/rome-hackathon?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=hackathons">blog</a> <a href="https://posthog.com/blog/aruba-hackathon?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=hackathons">content</a>.</p></blockquote><div><hr></div><h2>The best hackathon projects ship</h2><p>A common complaint about hackathons is that they are a waste of time. You spend a lot of time and effort that&#8217;s all lost after a few days, but it doesn&#8217;t have to be like that.</p><p>What does this look like in reality? Our <a href="https://posthog.com/logs?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=hackathons">Logs</a> product can give you an idea:</p><ol><li><p>By the end of the 2025 offsite hackathon, the team had built OTEL log capture into ClickHouse, a query API, and a basic frontend.</p></li><li><p>After the offsite, the team felt it was worth continuing as Frank was looking into an internal logging solution anyways. He thought it could be &#8220;good enough&#8221; within one sprint.</p></li><li><p>Two weeks later, it was! It had the features we needed: filtering, search, and speed.</p></li><li><p>Logs then went on the backburner, but Tim mentioned it as a product we wanted to build soon and customers requested it.</p></li><li><p>Four months later, Frank revisited it, which was made easier because the product had already shipped internally. Ahead of Q4 planning, Logs was identified as a priority, made its own team, and moved quickly towards a proper launch.</p></li></ol><p>We don&#8217;t have a perfect hackathon-to-production pipeline. Instead we rely on a <a href="https://posthog.com/product-engineer/what-is-a-product-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=hackathons">product engineer</a> &#8220;being the driver,&#8221; pushing the project forward, and having the freedom to do so.</p><p>This wouldn&#8217;t have been possible without some slack after the hackathon to wrap up the project, ship what we&#8217;ve built, and make longer term plans. Doing this makes it easier to revisit and improve in the future.</p><p>Getting real customer demand was a big help, even if that customer was us. We looked at what Datadog would charge us for Logs and saw it was a minimum of $260,000 per month, providing a big incentive to work on it.</p><p>We don&#8217;t expect all projects to ship to production, deadend hackathon projects are part of the messy process of innovation, but everyone starts knowing that great projects can end up in production.</p><blockquote><p><strong>Remember this:</strong> Encourage people to &#8220;be the driver&#8221; to take their project as far as they can and give them some slack after the hackathon for them to do it.</p></blockquote><div><hr></div><h2>Make hackathons a tradition</h2><p>Out of 17 projects from at our <a href="https://www.youtube.com/watch?v=dGaSxBs3OsU">2025 hackathon in Mexico</a>, 10 were shared in our <code>#hackathon-ideas</code> Slack channel in advance.</p><p>This is the power of making a hackathon a tradition. People are more likely to share ideas throughout the year when they have a space for it and know they might actually get worked on. Good ideas can come at any time and often sound like weird ideas.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PEKU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb4ebc3c-8e4a-4eeb-ba0a-cc910294e222_1104x656.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PEKU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb4ebc3c-8e4a-4eeb-ba0a-cc910294e222_1104x656.png 424w, https://substackcdn.com/image/fetch/$s_!PEKU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb4ebc3c-8e4a-4eeb-ba0a-cc910294e222_1104x656.png 848w, https://substackcdn.com/image/fetch/$s_!PEKU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb4ebc3c-8e4a-4eeb-ba0a-cc910294e222_1104x656.png 1272w, https://substackcdn.com/image/fetch/$s_!PEKU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb4ebc3c-8e4a-4eeb-ba0a-cc910294e222_1104x656.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PEKU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb4ebc3c-8e4a-4eeb-ba0a-cc910294e222_1104x656.png" width="1104" height="656" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/db4ebc3c-8e4a-4eeb-ba0a-cc910294e222_1104x656.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:656,&quot;width&quot;:1104,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:315918,&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://newsletter.posthog.com/i/194905377?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb4ebc3c-8e4a-4eeb-ba0a-cc910294e222_1104x656.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_!PEKU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb4ebc3c-8e4a-4eeb-ba0a-cc910294e222_1104x656.png 424w, https://substackcdn.com/image/fetch/$s_!PEKU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb4ebc3c-8e4a-4eeb-ba0a-cc910294e222_1104x656.png 848w, https://substackcdn.com/image/fetch/$s_!PEKU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb4ebc3c-8e4a-4eeb-ba0a-cc910294e222_1104x656.png 1272w, https://substackcdn.com/image/fetch/$s_!PEKU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb4ebc3c-8e4a-4eeb-ba0a-cc910294e222_1104x656.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This is not an original idea. <a href="https://www.facebook.com/notes/10158791571967200/">Early Facebook hackathons</a> featured an internal wiki to share ideas. Some of their &#8220;most-loved products&#8221; started this way like Video, the Like button, Chat, Hip Hop for PHP, and even Timeline.</p><p>The added benefits of making your hackathon a tradition are:</p><ul><li><p>People are less restless working on things because they know they&#8217;ll have a chance to flex their other muscles at hackathons.</p></li><li><p>Many hackathon ideas are just inspiration for features that should be built as part of a team&#8217;s day-to-day work. A roadmap often misses the ambitious ideas hackathons encourage.</p></li><li><p>It&#8217;s a perk and cultural cornerstone. The hackathons show we value autonomy and give people the time to make the most of it. It also creates lore, like the time our AI chatbot was insistent PostHog&#8217;s mascot was a character named &#8220;Hoge.&#8221;</p></li></ul><blockquote></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MNrv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df54718-6eb9-4f7a-a633-4278e3ce592f_1238x464.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MNrv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df54718-6eb9-4f7a-a633-4278e3ce592f_1238x464.png 424w, https://substackcdn.com/image/fetch/$s_!MNrv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df54718-6eb9-4f7a-a633-4278e3ce592f_1238x464.png 848w, https://substackcdn.com/image/fetch/$s_!MNrv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df54718-6eb9-4f7a-a633-4278e3ce592f_1238x464.png 1272w, https://substackcdn.com/image/fetch/$s_!MNrv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df54718-6eb9-4f7a-a633-4278e3ce592f_1238x464.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MNrv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df54718-6eb9-4f7a-a633-4278e3ce592f_1238x464.png" width="1238" height="464" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0df54718-6eb9-4f7a-a633-4278e3ce592f_1238x464.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:464,&quot;width&quot;:1238,&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_!MNrv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df54718-6eb9-4f7a-a633-4278e3ce592f_1238x464.png 424w, https://substackcdn.com/image/fetch/$s_!MNrv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df54718-6eb9-4f7a-a633-4278e3ce592f_1238x464.png 848w, https://substackcdn.com/image/fetch/$s_!MNrv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df54718-6eb9-4f7a-a633-4278e3ce592f_1238x464.png 1272w, https://substackcdn.com/image/fetch/$s_!MNrv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0df54718-6eb9-4f7a-a633-4278e3ce592f_1238x464.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Making your hackathon a tradition turns them into a promise: that the company will keep making space for the weird and wonderful things they believe in, not just what&#8217;s on the roadmap. This is what really helps a hackathon turn into a foundation for building a great company.</p><blockquote><p><strong>Remember this:</strong> Start referring to your hackathon as your &#8220;annual hackathon.&#8221; Manifest it. Create a #hackathon-ideas Slack channel and post your random &#8220;we should build this&#8221; ideas in there.</p></blockquote><p><em>Words by <a href="https://x.com/ianvanagas">Ian Vanagas</a>, who has not forgotten about Hoge.</em></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.posthog.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Subscribe for everything you need to crush your next hackathon</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><div><hr></div><h2>&#129428; Jobs at PostHog</h2><p>Join us at our next hackathon with this one easy trick (applying):</p><ul><li><p><strong><a href="https://posthog.com/careers/product-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=hackathons">Product Engineer</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/technical-account-manager?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=hackathons">Technical Account Manager</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/payroll-manager?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=hackathons">Payroll Manager</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/backend-engineer-ingestion?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=hackathons">Backend Engineer - Ingestion</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/bdr?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=hackathons">BDR</a></strong></p></li></ul><div><hr></div><h2>&#128715;&#65039; Late night reads to procrastinate to</h2><ul><li><p><strong><a href="https://posthog.com/blog/testing-ai-agents?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=hackathons">A beginner&#8217;s guide to testing AI agents</a> - Radu Raicea</strong></p></li><li><p><strong><a href="https://posthog.com/blog/your-lifecycle-emails-are-wrong?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=hackathons">You&#8217;re doing lifecycle emails wrong</a> - Sara Miteva</strong></p></li><li><p><strong><a href="https://posthog.com/blog/untangling-rayon-and-tokio?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=hackathons">Untangling Tokio and Rayon in production: From 2s latency spikes to 94ms flat</a> - Matheus Batista</strong></p></li><li><p><strong><a href="https://alexcwatt.com/hack-days/">Hack Days</a> - Alex Watt</strong></p></li><li><p><strong><a href="https://craigmod.com/essays/software_bonkers/">Software Bonkers</a> - Craig Mod</strong></p></li></ul>]]></content:encoded></item><item><title><![CDATA[The golden rules of agent-first product engineering]]></title><description><![CDATA[Five principles to develop your product intuition for agents]]></description><link>https://newsletter.posthog.com/p/the-golden-rules-of-agent-first-product</link><guid isPermaLink="false">https://newsletter.posthog.com/p/the-golden-rules-of-agent-first-product</guid><dc:creator><![CDATA[Jina Yoon]]></dc:creator><pubDate>Wed, 08 Apr 2026 19:01:23 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/29ab8f16-efac-4eaa-a09c-6124ef07b6de_2912x2096.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Companies building for agents often treat them as a bolt-on feature.</p><p>This is a mistake.</p><p>Agents today are more like a new form factor &#8211; an interaction layer that sits between your product and your users: </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jNb2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f74cbd-ced6-4d38-ab24-4414a6685a75_923x379.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jNb2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f74cbd-ced6-4d38-ab24-4414a6685a75_923x379.png 424w, https://substackcdn.com/image/fetch/$s_!jNb2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f74cbd-ced6-4d38-ab24-4414a6685a75_923x379.png 848w, https://substackcdn.com/image/fetch/$s_!jNb2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f74cbd-ced6-4d38-ab24-4414a6685a75_923x379.png 1272w, https://substackcdn.com/image/fetch/$s_!jNb2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f74cbd-ced6-4d38-ab24-4414a6685a75_923x379.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jNb2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f74cbd-ced6-4d38-ab24-4414a6685a75_923x379.png" width="923" height="379" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/48f74cbd-ced6-4d38-ab24-4414a6685a75_923x379.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:379,&quot;width&quot;:923,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:28089,&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://newsletter.posthog.com/i/193549431?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f74cbd-ced6-4d38-ab24-4414a6685a75_923x379.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_!jNb2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f74cbd-ced6-4d38-ab24-4414a6685a75_923x379.png 424w, https://substackcdn.com/image/fetch/$s_!jNb2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f74cbd-ced6-4d38-ab24-4414a6685a75_923x379.png 848w, https://substackcdn.com/image/fetch/$s_!jNb2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f74cbd-ced6-4d38-ab24-4414a6685a75_923x379.png 1272w, https://substackcdn.com/image/fetch/$s_!jNb2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F48f74cbd-ced6-4d38-ab24-4414a6685a75_923x379.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>That means you need to build for agents as a <em>primary</em> surface, not an afterthought.</p><p>When done right, this opens up a whole new space of possibilities for your product, like autonomous work and asynchronous flows.</p><p>Implement it poorly and you&#8217;ll lose users&#8217; trust due to slow, buggy experiences and incorrect results.</p><p>We learned this the hard way and overhauled our AI architecture <a href="https://posthog.com/blog/8-learnings-from-1-year-of-agents-posthog-ai?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first">two</a> <a href="https://posthog.com/newsletter/building-ai-agents?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first">times</a> in the last year. Now, our <a href="https://posthog.com/ai?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first">agent</a> and <a href="https://posthog.com/docs/model-context-protocol?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first">MCP</a> have 6K+ daily active users.</p><p>Here are the golden rules of agent-first product engineering we learned along the way.</p><div><hr></div><h2>1. Let agents do everything users can</h2><p>If a human can do something in your product, an agent should be able to do it as well.</p><p>For example, let&#8217;s say you ask an agent to set up an <a href="https://posthog.com/experiments?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first">A/B test</a> for a <a href="https://posthog.com/newsletter/pricing-advice?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first">new pricing page</a>.</p><p>The agent would use the PostHog MCP to create the <a href="https://posthog.com/feature-flags?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first">feature flag</a>, create the experiment, link it to the flag it just created, and set up the insight and metrics.</p><p>Now imagine if the <code>experiment-create</code> tool was missing because we just hadn&#8217;t prioritized it yet. The agent creates the flag and insight, but must stop and ask you to go to posthog.com, create the experiment yourself, and paste the experiment ID.</p><p>This is annoying and defeats the entire point.</p><p>The benefit of agents is that they reduce the time, attention, and expertise needed to complete a task. If your product doesn&#8217;t give agents the same capabilities as users, you&#8217;ll always be limited by the human in the loop.</p><p>Of course, there are situations where requiring human input makes sense, like if you&#8217;re dealing with sensitive data. But these should be deliberate exceptions, not accidental gaps.</p><h3>What this looks like in practice</h3><p>In practice, this means nearly everything in your API needs to be accessible to agents.</p><p>That doesn&#8217;t mean converting every endpoint into an MCP tool; we made that mistake in v1. (More on why that's bad in the next rule.)</p><p>Here&#8217;s how we do it now in v2:</p><ol><li><p>Our <a href="https://posthog.com/handbook/engineering/ai/implementing-mcp-tools?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first#code-generation-pipeline">pipeline</a> autogenerates an OpenAPI spec from our typed Django endpoints.</p></li><li><p>It then converts them into TypeScript validation (Zod) schemas.</p></li><li><p>In parallel, product teams have to manually opt-in each endpoint via YAML config files. Nothing is exposed by default.</p></li><li><p>The pipeline then combines the Zod schemas + YAML configs to generate the final TypeScript tool handlers.</p></li></ol><p>The result is a set of tool handlers &#8211; one file per product area<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> &#8211; ready to go in our MCP server. Agents are able to do anything that a human can through the PostHog API, even if the tools don&#8217;t exactly match the endpoints 1:1.</p><div><hr></div><h2>2. Meet agents at their level of abstraction</h2><p>To build an agent-first experience, you have to find the semantic layer where agents already reason best and meet them there.</p><p>This saves a ton of context (a precious resource) but the benefits are more than practical. They&#8217;re fundamental. The more &#8220;raw&#8221; your product&#8217;s agent interface is, the more creative potential you unlock.</p><p>Think about giving a child a Lego set for their birthday. If it comes with tires and axles already glued together, they&#8217;re going to make cars, trucks, and airplanes &#8211; vehicles that everyone has seen before.</p><p>If the parts come separated, they&#8217;re free to mix and match to build motorcycles, tire swings,<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a> snow sleds, and who knows what else?</p><h3>What this looks like in practice</h3><p>In the old version of our MCP, to answer &#8220;why did signups drop last week?&#8221;, an agent had to make four separate calls: <code>projects-get</code>, <code>insight-get</code>, and <code>insight-query</code> (twice).</p><p><code>get-insight</code> or <code>get-funnel</code> may be meaningful to humans navigating the PostHog UI, but to an agent, it&#8217;s just an unnecessary translation step.</p><p>So in our MCP v2, we let agents query PostHog data in <a href="https://posthog.com/newsletter/building-ai-features?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first#2-identify-problems-that-ai-might-solve">a language they already speak fluently</a>: SQL.</p><p>By exposing our product at this layer of abstraction, we were able to turn off all our read/get endpoints off since they get subsumed by <a href="https://github.com/PostHog/posthog/blob/master/services/mcp/src/tools/posthogAiTools/executeSql.ts">executeSql.ts</a>.</p><p>Now, answering &#8220;why did signups drop last week?&#8221; can be answered with just a single, elegant query:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;sql&quot;,&quot;nodeId&quot;:&quot;c610fc92-f518-4319-935d-2d8cd8ced09f&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-sql">SELECT
    toStartOfWeek(timestamp) AS week,
    countIf(event = 'signed_up') AS signups
FROM events
WHERE timestamp &gt;= now() - INTERVAL 2 WEEK
GROUP BY week
ORDER BY week</code></pre></div><div><hr></div><h2>3. Front-load universal context</h2><p>In the early days of AI, developers had to front-load <em>everything</em> into agents to compensate for smaller context windows and less capable models.</p><p>But as the technology keeps improving, there&#8217;s a new trend that removes as much context as possible and trusts the model to figure out the rest.</p><p>That works for general-purpose agents since they&#8217;re designed to be flexible. Anthropic can&#8217;t predict everything that everyone is <a href="https://posthog.com/newsletter/ai-coding-mistakes?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first">using Claude for</a>.</p><p>But if you&#8217;re building an agent experience for your specific product, the problem space is much smaller. You already know the key scenarios, tools, and use cases.</p><p>So for <a href="https://posthog.com/product-engineer/what-is-a-product-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first">product engineers</a>, you can strike that balance by front-loading what you know every session will need, and defer the rest.</p><h3>What this looks like in practice</h3><p>We didn&#8217;t think about it this way at first, so our v1 system prompt was four lines that essentially said &#8220;Here are some tools for using PostHog, GLHF.&#8221;</p><p>Every agent would waste time and tokens to rediscover the same things every time they connected.</p><p>In v2, we made use of the fact that anyone connecting to the PostHog MCP is there to query their PostHog data. That&#8217;s the whole point.</p><p>Now, we load these at the start of every PostHog MCP session:</p><ul><li><p><strong>PostHog-specific taxonomy.</strong> What&#8217;s a feature flag, experiment, <a href="https://posthog.com/session-replay?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first">session replay</a>, etc.</p></li><li><p><strong>Our SQL syntax.</strong> How to use <a href="https://posthog.com/docs/sql?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first">our custom translation layer over ClickHouse SQL</a>.</p></li><li><p><strong>Critical querying rules.</strong> Hard constraints that apply to every query (e.g., always filter by time range).</p></li></ul><p>Everything else gets pulled later. We let the agent figure out when.</p><div><hr></div><h2>4. Writing skills is a human skill</h2><p>Skills help you fill the gap between what your product can do and what an agent can do out of the box with your tools:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EhKh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb23b7d60-1b02-477f-b37f-98e9dfab5690_569x436.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EhKh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb23b7d60-1b02-477f-b37f-98e9dfab5690_569x436.png 424w, https://substackcdn.com/image/fetch/$s_!EhKh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb23b7d60-1b02-477f-b37f-98e9dfab5690_569x436.png 848w, https://substackcdn.com/image/fetch/$s_!EhKh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb23b7d60-1b02-477f-b37f-98e9dfab5690_569x436.png 1272w, https://substackcdn.com/image/fetch/$s_!EhKh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb23b7d60-1b02-477f-b37f-98e9dfab5690_569x436.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EhKh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb23b7d60-1b02-477f-b37f-98e9dfab5690_569x436.png" width="569" height="436" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b23b7d60-1b02-477f-b37f-98e9dfab5690_569x436.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:436,&quot;width&quot;:569,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:28587,&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://newsletter.posthog.com/i/193549431?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb23b7d60-1b02-477f-b37f-98e9dfab5690_569x436.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_!EhKh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb23b7d60-1b02-477f-b37f-98e9dfab5690_569x436.png 424w, https://substackcdn.com/image/fetch/$s_!EhKh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb23b7d60-1b02-477f-b37f-98e9dfab5690_569x436.png 848w, https://substackcdn.com/image/fetch/$s_!EhKh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb23b7d60-1b02-477f-b37f-98e9dfab5690_569x436.png 1272w, https://substackcdn.com/image/fetch/$s_!EhKh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb23b7d60-1b02-477f-b37f-98e9dfab5690_569x436.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The biggest mistake people make is writing them like step-by-step manuals. If you&#8217;re too prescriptive, agents will follow your instructions too rigidly and lose the ability to improvise (see rule #3).</p><p>Instead, think of it like onboarding a new employee who&#8217;s already highly qualified.</p><p>A bad manager micromanages every process &#8212; do A, then B, never C, and always D. A good manager trusts the hire and only steps in with the specific things they couldn&#8217;t have known on their own.</p><p>That&#8217;s <a href="https://posthog.com/handbook/engineering/ai/writing-skills?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first">what good skills look like</a>.</p><p>They should only contain context that a human can provide since an agent can&#8217;t discover by itself, such as:</p><ul><li><p><strong>Idiosyncratic knowledge.</strong> Internal acronyms, naming conventions, and style guides.</p></li><li><p><strong>Edge cases.</strong> The uncommon places where things break, and how to handle them.</p></li><li><p><strong><a href="https://posthog.com/newsletter/good-taste-great-products?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first">Taste</a> and craft. </strong>Not just how to use your product correctly, but how to use it well.</p></li></ul><div><hr></div><h3>What this looks like in practice</h3><p>To figure out what goes into a skill, ask yourself: what would an agent get wrong about your product without you?</p><p>For us, it&#8217;s in the connective tissue between our products, the domain knowledge buried in our data, and our niche developer takes. For Linear, it&#8217;s the opinionated issue hierarchy. For Figma, it&#8217;s their design system coherence.</p><p>As an example, here&#8217;s a line we added to <a href="https://github.com/PostHog/posthog/blob/master/services/mcp/definitions/prompts/query-retention.md">query-retention.md</a>:</p><blockquote><p>For <a href="https://posthog.com/newsletter/wtf-is-activation?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first">activation</a> and <a href="https://posthog.com/docs/product-analytics/retention?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first">retention</a> events, use the <code>$pageview</code> event by default. Avoid infrequent or inconsistent events like <code>signed in</code> unless asked explicitly, as they skew the data.</p></blockquote><p>Without this guidance, an agent would just use whatever event the user mentions, which is usually misleading. Retention would look worse than it actually is, and there&#8217;s no way a user would know unless they&#8217;d done this analysis themselves before.</p><p>By adding this line in the skill, we&#8217;re embedding a PostHog Certified&#8482; opinion about what good metrics and analysis actually look like. This ensures agents use our product correctly, and users aren&#8217;t inadvertently misled.</p><div><hr></div><h2>5. Treat agents like real users</h2><p>In traditional software, even if user behavior isn&#8217;t predictable, the code is. With AI, you lose that stability; the same inputs <a href="https://posthog.com/blog/correct-llm-code-generation?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first">won&#8217;t produce the same outputs anymore</a>.</p><p>This means <a href="https://posthog.com/blog/testing-ai-agents?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first">classic testing methods will leave a gap</a>, so you need new ways to catch the things automated tests no longer will.</p><p>You need to treat the agent like you would treat a user. <a href="https://posthog.com/newsletter/talk-to-users?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first">Talk to them</a>, build empathy for them, and develop an intuition of what they want.</p><p>This helps you see your product like they would and get familiar with all the interaction patterns and quirks they have.</p><h3>What this looks like in practice</h3><p>Here are a few habits and behaviors we adopt at PostHog to achieve this:</p><ul><li><p><strong><a href="https://posthog.com/product-engineers/dogfooding?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first">Dogfooding</a> headlessly.</strong> When testing our agent features, we reach for the CLI before the UI. This puts us in the same environment the agent operates in and exposes us to the same types of errors, syntax, and friction they&#8217;d experience. It&#8217;s how we caught an issue internally and found that our MCP tool descriptions were eating up way more tokens than it should.</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_!LMkd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F917de8f4-bbdc-402f-8120-97eb8ae21da9_2605x1973.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LMkd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F917de8f4-bbdc-402f-8120-97eb8ae21da9_2605x1973.png 424w, https://substackcdn.com/image/fetch/$s_!LMkd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F917de8f4-bbdc-402f-8120-97eb8ae21da9_2605x1973.png 848w, https://substackcdn.com/image/fetch/$s_!LMkd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F917de8f4-bbdc-402f-8120-97eb8ae21da9_2605x1973.png 1272w, https://substackcdn.com/image/fetch/$s_!LMkd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F917de8f4-bbdc-402f-8120-97eb8ae21da9_2605x1973.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LMkd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F917de8f4-bbdc-402f-8120-97eb8ae21da9_2605x1973.png" width="1456" height="1103" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/917de8f4-bbdc-402f-8120-97eb8ae21da9_2605x1973.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1103,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:6930522,&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://newsletter.posthog.com/i/193549431?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F917de8f4-bbdc-402f-8120-97eb8ae21da9_2605x1973.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_!LMkd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F917de8f4-bbdc-402f-8120-97eb8ae21da9_2605x1973.png 424w, https://substackcdn.com/image/fetch/$s_!LMkd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F917de8f4-bbdc-402f-8120-97eb8ae21da9_2605x1973.png 848w, https://substackcdn.com/image/fetch/$s_!LMkd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F917de8f4-bbdc-402f-8120-97eb8ae21da9_2605x1973.png 1272w, https://substackcdn.com/image/fetch/$s_!LMkd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F917de8f4-bbdc-402f-8120-97eb8ae21da9_2605x1973.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><blockquote></blockquote><ul><li><p><strong>Doing <a href="https://posthog.com/blog/standup-bot-revenge?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first#tracing">manual trace reviews</a>.</strong> We hold a weekly &#8220;traces hour&#8221; where we go through real user sessions that have user feedback ratings. For example, we found a case where PostHog AI confidently told a user that feature flags don&#8217;t support <a href="https://posthog.com/docs/feature-flags/scheduled-flag-changes?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first">scheduled releases</a> and then backtracked. Automated tests wouldn&#8217;t have caught that since the agent did respond; the response was just incorrect.<s><br></s></p></li><li><p><strong><a href="https://posthog.com/blog/testing-ai-agents?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first">Feeding our intuition into a loop</a>.</strong> We then amplify the value of those manual reviews by building evals based on what our human eyes caught &#8211; both the good and the bad. Once, we found a session where PostHog AI correctly intervened when it spotted a weird data pattern that the user hadn&#8217;t noticed. We turned that into an eval case so that future model or prompt changes don&#8217;t regress the good behaviors we want to keep.</p></li></ul><p><em>Words by <a href="https://x.com/jinayoon_">Jina Yoon</a> who hereby declares herself agentpilled.</em></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.posthog.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Subscribe for more gilded content</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>&#128220; Related texts</h2><ul><li><p><strong><a href="https://justin.poehnelt.com/posts/rewrite-your-cli-for-ai-agents/">You Need to Rewrite Your CLI for AI Agents</a> &#8211; Justin Poehnelt</strong></p></li><li><p><strong><a href="https://newsletter.pragmaticengineer.com/p/mcp-deepdive">Building MCP servers in the real world</a> &#8211; Gergely Orosz and Elin Nilsson (The Pragmatic Engineer)</strong></p></li><li><p><strong><a href="https://engineering.block.xyz/blog/blocks-playbook-for-designing-mcp-servers">Block&#8217;s Playbook for Designing MCP Servers</a> &#8211; Salman Mohammed and Kalvin Chau (Block)</strong></p></li><li><p><strong> <a href="https://www.arcade.dev/patterns">Patterns for Agentic Tools</a> &#8211; Arcade </strong></p></li><li><p><strong><a href="https://posthog.com/blog/standup-bot-revenge?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first">I hate the standup bot (so I built an agent to do it for me) </a>&#8211; Andy Maguire<br></strong></p></li></ul><h2>&#129428; Join the order</h2><ul><li><p><strong><a href="https://posthog.com/careers/product-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first">Product Engineer</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/product-manager-(ex-founder-or-ex-product-engineer)?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first">Product Manager (ex-founder or ex-product engineer)</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/technical-account-manager?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first">Technical Account Manager</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/security-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first">Security Engineer</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/ai-product-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first">AI Product Engineer</a><a href="https://posthog.com/careers/security-engineerhttps://posthog.com/careers/ai-research-engineer"><br></a></strong></p></li></ul><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>As a nice bonus, this pipeline keeps tool ownership with the people closest to the product, which fits <a href="https://posthog.com/newsletter/small-teamshttps://posthog.com/careers/ai-product-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-first">our small team culture</a>.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>We fact checked with our resident Lego experts who confirmed that it is indeed possible to build <a href="https://www.youtube.com/watch?v=4Xb-OdMEE7U">a tire swing out of Legos</a>.</p></div></div>]]></content:encoded></item><item><title><![CDATA[What we wish we knew about building AI agents]]></title><description><![CDATA[Lessons learned from two years of building AI agents at PostHog]]></description><link>https://newsletter.posthog.com/p/what-we-wish-we-knew-before-building</link><guid isPermaLink="false">https://newsletter.posthog.com/p/what-we-wish-we-knew-before-building</guid><dc:creator><![CDATA[Ian Vanagas]]></dc:creator><pubDate>Tue, 24 Mar 2026 18:04:41 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/c76757e8-e900-405e-b4a2-e97823ebf2f0_1456x1048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>One thing on every startup&#8217;s mind: Should we build an AI agent?</p><p>We had this thought two years ago, released an &#8220;AI product assistant&#8221; 6 months later, iterated, and then relaunched as <a href="https://posthog.com/ai?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-lessons">PostHog AI</a> in November last year.</p><p>We learned a lot along the way that we wished we knew when we started. With that knowledge, we could have&#8230;</p><ol><li><p>Launched months earlier.</p></li><li><p>Provided a better early experience to users.</p></li><li><p>Made progress on capabilities faster.</p></li></ol><p>To help you build a better agent faster, we&#8217;re sharing what we wished we had known about building AI agents.</p><h2>1. Should you build an MCP server instead?</h2><p>Should you even build an AI agent into your product? The capabilities of agents are unquestionably valuable but this does not mean you need to build a custom one. Making your product accessible to agents is often a better option.</p><p>Could your agent capabilities just be an <a href="https://posthog.com/docs/model-context-protocol?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-lessons">MCP server</a>? These are simpler to build and require less maintenance, and for us, is used as much as our built-in agent, PostHog AI. For example, 34% of dashboards created by AI were done through our MCP server (18% of all dashboards created).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!br3m!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb9a8666-c384-4c20-aa69-d4860b8e570a_1513x999.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!br3m!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb9a8666-c384-4c20-aa69-d4860b8e570a_1513x999.png 424w, https://substackcdn.com/image/fetch/$s_!br3m!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb9a8666-c384-4c20-aa69-d4860b8e570a_1513x999.png 848w, https://substackcdn.com/image/fetch/$s_!br3m!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb9a8666-c384-4c20-aa69-d4860b8e570a_1513x999.png 1272w, https://substackcdn.com/image/fetch/$s_!br3m!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb9a8666-c384-4c20-aa69-d4860b8e570a_1513x999.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!br3m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb9a8666-c384-4c20-aa69-d4860b8e570a_1513x999.png" width="1456" height="961" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eb9a8666-c384-4c20-aa69-d4860b8e570a_1513x999.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:961,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:233980,&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://newsletter.posthog.com/i/191968306?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb9a8666-c384-4c20-aa69-d4860b8e570a_1513x999.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_!br3m!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb9a8666-c384-4c20-aa69-d4860b8e570a_1513x999.png 424w, https://substackcdn.com/image/fetch/$s_!br3m!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb9a8666-c384-4c20-aa69-d4860b8e570a_1513x999.png 848w, https://substackcdn.com/image/fetch/$s_!br3m!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb9a8666-c384-4c20-aa69-d4860b8e570a_1513x999.png 1272w, https://substackcdn.com/image/fetch/$s_!br3m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feb9a8666-c384-4c20-aa69-d4860b8e570a_1513x999.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Sources of dashboards created last week</figcaption></figure></div><p>MCP servers are great if you expect your users to be developers or people combining your product with others in their &#10024;<em>agentic workflows</em>&#10024;. Just as importantly, MCP servers validate demand for further agentic capabilities.</p><p>Custom agents are better when your users are <a href="https://posthog.com/newsletter/engineeringification-of-everything?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-lessons">non-engineers</a>, when compliance blocks external agents, or when you need full control of the user experience (for example, custom image generation).</p><p>Even when you decide to go custom, consider if simpler alternatives fit your use case:</p><ul><li><p>For one-shot Q&amp;A like generating product descriptions, try a simple LLM call with good prompting</p></li><li><p>For a single task like SQL or code generation, use a specialized model with structured output</p></li><li><p>For a multi-step but predictable flow like email classification plus response drafting, create a hardcoded workflow with LLM steps</p></li></ul><p>Although PostHog AI is an agent now, we validated demand for it with a simpler use case and system. We built a workflow for data-related questions like &#8220;How many people signed up last week?&#8221; which lead directly to insight generation.</p><p>Only once this workflow saw adoption and users demanded other use cases (like answering docs questions or <a href="https://posthog.com/docs/feature-flags/creating-feature-flags?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-lessons">creating feature flags</a>) did the team build an agent.</p><h2>2. Your harness is not your moat</h2><p>Once you decide to build an agent, the next question is how will it work. The answer to this is an agent harness: the code and infrastructure that combines with a model to help it understand and use your product.</p><p>You aren&#8217;t going to win because you&#8217;ve created some genius new harness, especially if you&#8217;re building your first AI agent. Don&#8217;t use innovation points here. Anthropic wrote a <a href="https://platform.claude.com/docs/en/agent-sdk/overview">perfectly good SDK</a>, and both <a href="https://www.anthropic.com/engineering/building-effective-agents">Anthropic</a> and <a href="https://ampcode.com/notes/how-to-build-an-agent">AmpCode</a> have helpful guides.</p><p>If we were restarting today, we would have skipped building a custom harness and made MCP the canonical interface. We learned this the hard way through three iterations of PostHog AI this year.</p><p>The <a href="https://posthog.com/blog/8-learnings-from-1-year-of-agents-posthog-ai?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-lessons">first harness</a> was a coordinator that routed user messages to specialized sub-agents, but this created a black box problem as the coordinator couldn&#8217;t see what sub-agents were doing leading to context loss and confusion.</p><p>The <a href="https://posthog.com/handbook/engineering/ai/architecture?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-lessons">second</a> was a single agent loop with self contained modes and tools within each mode. This solved the visibility issue, but didn&#8217;t scale. If we didn&#8217;t write a tool, the capability wouldn&#8217;t exist. This led us to spending a lot of time writing tools (44 by the end) rather than improving in other ways.</p><p>Our third and current harness uses the Claude Agent SDK with MCP tools and skills. This change came from two realizations:</p><ol><li><p><strong>Our agent could be more creative.</strong> The Claude Agent SDK gives PostHog AI access to a code-execution sandbox. The agent can use it to query with SQL and run custom scripts, unlocking new capabilities without us needing to build them.</p></li><li><p><strong>Agents are a primary persona.</strong> Our &#8220;users&#8221; are increasingly agents, whether that is through PostHog AI or <a href="https://posthog.com/docs/model-context-protocol?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-lessons">our MCP server</a>. Our work here should converge and support both using a single architecture.</p></li></ol><p>The flexibility of the sandbox plus the scalability of MCP tools and skill standards (which I&#8217;ll explain more about later) solves the issues of the second harness and positions us better for an agent-first future.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-WJX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19c1b5d2-b203-46aa-9aa8-5e62404c7b06_2188x958.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-WJX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19c1b5d2-b203-46aa-9aa8-5e62404c7b06_2188x958.png 424w, https://substackcdn.com/image/fetch/$s_!-WJX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19c1b5d2-b203-46aa-9aa8-5e62404c7b06_2188x958.png 848w, https://substackcdn.com/image/fetch/$s_!-WJX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19c1b5d2-b203-46aa-9aa8-5e62404c7b06_2188x958.png 1272w, https://substackcdn.com/image/fetch/$s_!-WJX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19c1b5d2-b203-46aa-9aa8-5e62404c7b06_2188x958.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-WJX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19c1b5d2-b203-46aa-9aa8-5e62404c7b06_2188x958.png" width="1456" height="637" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/19c1b5d2-b203-46aa-9aa8-5e62404c7b06_2188x958.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:637,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:104283,&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://newsletter.posthog.com/i/191968306?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19c1b5d2-b203-46aa-9aa8-5e62404c7b06_2188x958.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_!-WJX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19c1b5d2-b203-46aa-9aa8-5e62404c7b06_2188x958.png 424w, https://substackcdn.com/image/fetch/$s_!-WJX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19c1b5d2-b203-46aa-9aa8-5e62404c7b06_2188x958.png 848w, https://substackcdn.com/image/fetch/$s_!-WJX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19c1b5d2-b203-46aa-9aa8-5e62404c7b06_2188x958.png 1272w, https://substackcdn.com/image/fetch/$s_!-WJX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19c1b5d2-b203-46aa-9aa8-5e62404c7b06_2188x958.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>3. Your context is your advantage</h2><p>When building an agent, there&#8217;s ultimately one question you need to answer to succeed: How does this beat Claude?</p><p>Context is the most important part of an answer. The combination of your app&#8217;s functionality and user data create a unique blend no other product can match.</p><p>Although you have product and user context sitting around, you need structure and format it to be useful for the agent. We do this with:</p><ol><li><p><strong><a href="https://github.com/PostHog/posthog/blob/master/products/data_warehouse/mcp/tools.yaml">MCP tools</a>. </strong>Capabilities <a href="https://posthog.com/handbook/engineering/ai/implementing-mcp-tools?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-lessons">selected and extracted from the PostHog API</a> to expose all possible actions that agents can perform in PostHog. Examples include list feature flags, create a survey, or execute an SQL query.</p></li><li><p><strong><a href="https://github.com/PostHog/posthog/blob/master/products/posthog_ai/skills/query-examples/SKILL.md">Skills</a>.</strong> Markdown files <a href="https://posthog.com/handbook/engineering/ai/writing-skills?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-lessons">we write to teach the agent complete workflows</a> and how to use our product. These include query patterns, system table schemas, examples, and MCP tool references. They are templates rendered at build time, so they can pull live context from the codebase like model schemas.</p></li><li><p><strong><a href="https://github.com/PostHog/posthog/blob/master/ee/hogai/context/context.py">Layered runtime context injection</a>. </strong>The frontend sends the user&#8217;s current view and state such as dashboards, insights, <a href="https://posthog.com/session-replay?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-lessons">session recordings</a>, and filters. This is enriched with actual queries results and project metadata like timezone and organization name.</p></li><li><p><strong><a href="https://github.com/PostHog/posthog/blob/master/ee/hogai/tools/read_taxonomy/mcp_tool.py">A taxonomy tool</a>. </strong>This lets the agent explore the user&#8217;s event names, properties, and property values on demand rather than stuffing them all into the prompt upfront.</p></li><li><p><strong><a href="https://github.com/PostHog/posthog/blob/master/ee/hogai/chat_agent/memory/nodes.py">A memory onboarding flow</a>.</strong> This collects company and product context through conversation and persists it across sessions, so the agent builds understanding of each user&#8217;s setup over time.</p></li></ol><p>Without this structured product context, the agent struggles to understand both our product and the user&#8217;s goals. It can get lost on simple questions because the context behind those questions is complex.</p><p>Reality has a surprising amount of detail and people define tasks in ambiguous ways. How would you answer &#8220;where do users drop off in CFMP<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> conversion&#8221; without context?</p><h2>4. Set up observability and evaluation from day one</h2><p>These are essential as AI agents are non-deterministic and can <a href="https://posthog.com/newsletter/ai-coding-mistakes?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-lessons">fail in unpredictable ways</a>. Without visibility into this, you can&#8217;t improve them or catch regressions.</p><p>We didn&#8217;t have observability and evaluation early and regretted it. We wish we had:</p><ul><li><p><a href="https://posthog.com/docs/llm-analytics/traces?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-lessons">Tracing</a> for every LLM call with inputs, outputs, latency, and cost</p></li><li><p>Trace IDs that span the full conversation</p></li><li><p>The ability to replay and debug <a href="https://posthog.com/docs/llm-analytics/sessions?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-lessons">specific interactions</a></p></li><li><p>A <a href="https://posthog.com/docs/llm-analytics/clusters?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-lessons">curated datasets</a> of real user queries</p></li><li><p>Automated scorers like <a href="https://posthog.com/blog/stop-ai-slop?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-lessons">LLM-as-judge</a> and deterministic checks</p></li></ul><p>Basically, <a href="https://posthog.com/llm-analytics?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-lessons">LLM analytics</a>.</p><p>Unfortunately, LLM analytics alone isn&#8217;t enough. Reality is gnarly and to deal with it, our team often looks at real usage.</p><p>They run a &#8220;traces hour,&#8221; where they meet, manually analyze LLM traces (AKA real user interactions), and find areas to improve. <a href="https://posthog.com/docs/llm-analytics/evaluations?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-lessons">Evals</a> make the most sense when they stem from these investigations.</p><p>Like building any successful product, understanding a user&#8217;s experience is critical to building a successful agent.</p><h2>5. It doesn&#8217;t matter how cool your capabilities are</h2><p>After getting buried in technical details, it&#8217;s important to poke your head out and remember who you&#8217;re building for. You&#8217;re not building for some hypothetical &#8220;coolest AI agent&#8221; contest, you&#8217;re building for your users.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Wka-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593d31ae-b447-4042-9919-fa998e9e44bc_1600x899.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Wka-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593d31ae-b447-4042-9919-fa998e9e44bc_1600x899.png 424w, https://substackcdn.com/image/fetch/$s_!Wka-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593d31ae-b447-4042-9919-fa998e9e44bc_1600x899.png 848w, https://substackcdn.com/image/fetch/$s_!Wka-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593d31ae-b447-4042-9919-fa998e9e44bc_1600x899.png 1272w, https://substackcdn.com/image/fetch/$s_!Wka-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593d31ae-b447-4042-9919-fa998e9e44bc_1600x899.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Wka-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593d31ae-b447-4042-9919-fa998e9e44bc_1600x899.png" width="1456" height="818" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/593d31ae-b447-4042-9919-fa998e9e44bc_1600x899.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:818,&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_!Wka-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593d31ae-b447-4042-9919-fa998e9e44bc_1600x899.png 424w, https://substackcdn.com/image/fetch/$s_!Wka-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593d31ae-b447-4042-9919-fa998e9e44bc_1600x899.png 848w, https://substackcdn.com/image/fetch/$s_!Wka-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593d31ae-b447-4042-9919-fa998e9e44bc_1600x899.png 1272w, https://substackcdn.com/image/fetch/$s_!Wka-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F593d31ae-b447-4042-9919-fa998e9e44bc_1600x899.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>What users want is often at odds with what&#8217;s coolest. The most common pain points users faced weren&#8217;t our agent&#8217;s range of capabilities or functionality, but things like:</p><ul><li><p>Inconsistent performance</p></li><li><p>Unexpected failures</p></li><li><p>Generic error messages without clear explanation</p></li><li><p>Unclear capabilities leading to complex queries failing</p></li><li><p>Lack of signs of uncertainty, source of insights, and progress</p></li></ul><p>While new capabilities are cool, ensuring your agent actually solves your customer&#8217;s problems is even cooler. Ultimately, building an AI agent is not just a showcase of your AI skillz, but a <a href="https://posthog.com/blog/what-is-a-product-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-lessons">product engineering problem</a>. This requires you to talk to users, ship features they want, and iterate.</p><p><em>Words by <a href="https://x.com/ianvanagas">Ian Vanagas</a> who has plenty of agentic capabilities himself if you ask nicely.</em></p><div><hr></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://newsletter.posthog.com/p/what-we-wish-we-knew-before-building?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Share with someone building an agent to save them a few months </p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://newsletter.posthog.com/p/what-we-wish-we-knew-before-building?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://newsletter.posthog.com/p/what-we-wish-we-knew-before-building?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><div><hr></div><h2>&#129428; Jobs at PostHog</h2><p>Unlike many AI companies, we don&#8217;t think agents are going to take over every job in the next 6 months. In fact, we&#8217;re hiring!</p><ul><li><p><strong><a href="https://posthog.com/careers/product-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-lessons">Product Engineer</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/security-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-lessons">Security Engineer</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/finops-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-lessons">FinOps Engineer</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/technical-account-manager?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-lessons">Technical Account Manager</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/forward-deployed-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-lessons">Forward Deployed Engineer</a></strong></p></li></ul><div><hr></div><h2>&#128218; More good reads</h2><ul><li><p><strong><a href="https://posthog.com/blog/llm-analytics-clustering-how-it-works?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-lessons">How we built automatic clustering for LLM traces</a> &#8211; Andy Maguire</strong></p></li><li><p><strong><a href="https://itnext.io/mcp-is-dead-long-live-mcp-a67bd74a6576">MCP is Dead; Long Live MCP!</a> &#8211; Charles Chen</strong></p></li><li><p><strong><a href="https://www.linkedin.com/pulse/production-telemetry-spec-survived-vidhya-ranganathan-vvkyc/">Production Telemetry Is the Spec That Survived</a> &#8211; Vidhya R.</strong></p></li><li><p><strong><a href="https://justin.poehnelt.com/posts/rewrite-your-cli-for-ai-agents/">You Need to Rewrite Your CLI for AI Agents</a> &#8211; Justin Poehnelt</strong></p></li><li><p><strong><a href="https://posthog.com/blog/8-learnings-from-1-year-of-agents-posthog-ai?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=agent-lessons">8 learnings from 1 year of agents</a> &#8211; Michael Matloka</strong></p></li></ul><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>What&#8217;s CFMP? Exactly my point &#128521;.</p></div></div>]]></content:encoded></item><item><title><![CDATA[WTF does a product manager do? (and why engineers should care)]]></title><description><![CDATA[Skills for developers from the product manager playbook]]></description><link>https://newsletter.posthog.com/p/an-engineers-guide-to-product-management</link><guid isPermaLink="false">https://newsletter.posthog.com/p/an-engineers-guide-to-product-management</guid><dc:creator><![CDATA[Jina Yoon]]></dc:creator><pubDate>Wed, 11 Mar 2026 21:11:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!K4n9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4a363d3-63ed-4d48-a8c7-492c61fea786_2912x2096.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In our last issue, Ian Vanagas wrote about how <a href="https://posthog.com/newsletter/engineeringification-of-everything?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm">engineering has escaped the codebase.</a> How engineering tools, mindset, and identity increasingly shape every function, especially at startups.</p><p>We&#8217;ve seen this first-hand at <a href="https://posthog.com?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm">PostHog</a>, but it&#8217;s not an isolated trend. The lines between product management and engineering are blurring, too.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a></p><p>Thanks to LLMs, figuring out what to build is now a greater bottleneck than how to build it, and it&#8217;s forcing engineers to think more like product managers (PMs).</p><p>In this issue, we&#8217;ll help you take advantage of what product managers have already figured out by going over the top three skills in their playbook.</p><div><hr></div><h2>1. Gather the right context</h2><p>Providing context is a product manager&#8217;s most important job.</p><p>What exactly do we mean by context? In the same way that sailors used to navigate by the stars, engineers depend on <strong>context</strong> to make the right product decisions.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!K4n9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4a363d3-63ed-4d48-a8c7-492c61fea786_2912x2096.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!K4n9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4a363d3-63ed-4d48-a8c7-492c61fea786_2912x2096.jpeg 424w, https://substackcdn.com/image/fetch/$s_!K4n9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4a363d3-63ed-4d48-a8c7-492c61fea786_2912x2096.jpeg 848w, https://substackcdn.com/image/fetch/$s_!K4n9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4a363d3-63ed-4d48-a8c7-492c61fea786_2912x2096.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!K4n9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4a363d3-63ed-4d48-a8c7-492c61fea786_2912x2096.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!K4n9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4a363d3-63ed-4d48-a8c7-492c61fea786_2912x2096.jpeg" width="1456" height="1048" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e4a363d3-63ed-4d48-a8c7-492c61fea786_2912x2096.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1048,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1676442,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://newsletter.posthog.com/i/190640421?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4a363d3-63ed-4d48-a8c7-492c61fea786_2912x2096.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!K4n9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4a363d3-63ed-4d48-a8c7-492c61fea786_2912x2096.jpeg 424w, https://substackcdn.com/image/fetch/$s_!K4n9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4a363d3-63ed-4d48-a8c7-492c61fea786_2912x2096.jpeg 848w, https://substackcdn.com/image/fetch/$s_!K4n9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4a363d3-63ed-4d48-a8c7-492c61fea786_2912x2096.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!K4n9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4a363d3-63ed-4d48-a8c7-492c61fea786_2912x2096.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Good context points teams in the right direction; great context can change a company&#8217;s entire trajectory.</p><p>Take Duolingo for example.</p><p>In <a href="https://www.lennysnewsletter.com/p/how-duolingo-reignited-user-growth">a guest edition of Lenny&#8217;s Newsletter</a>, Duolingo&#8217;s Head of Product, Jorge Mazal, recounted how the company fixed its stalling growth problem. The team initially focused on friend referrals, premium trials, and in-game mechanics. Nothing worked, and daily active users (DAU) continued to decline.</p><p>But then Mazal and the data science team discovered that current user retention rates (CURR) were <em>5x more impactful</em> on DAU than any other projected metric. That single piece of context completely shifted the product roadmap.</p><p>Instead of trying to acquire new users, the team invested in keeping <em>existing</em> learners hooked with leaderboards, daily streaks, and &#8211; of course &#8211; passive-aggressive push notifications from everybody&#8217;s favorite lime green owl.</p><p>Four years later, Duolingo successfully exited with massive 4.5x DAU gainz.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qIfS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff02bb757-9483-43ae-85db-c4a0f8b09f95_811x373.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qIfS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff02bb757-9483-43ae-85db-c4a0f8b09f95_811x373.png 424w, https://substackcdn.com/image/fetch/$s_!qIfS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff02bb757-9483-43ae-85db-c4a0f8b09f95_811x373.png 848w, https://substackcdn.com/image/fetch/$s_!qIfS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff02bb757-9483-43ae-85db-c4a0f8b09f95_811x373.png 1272w, https://substackcdn.com/image/fetch/$s_!qIfS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff02bb757-9483-43ae-85db-c4a0f8b09f95_811x373.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qIfS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff02bb757-9483-43ae-85db-c4a0f8b09f95_811x373.png" width="811" height="373" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f02bb757-9483-43ae-85db-c4a0f8b09f95_811x373.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:373,&quot;width&quot;:811,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:148796,&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://newsletter.posthog.com/i/190640421?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff02bb757-9483-43ae-85db-c4a0f8b09f95_811x373.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_!qIfS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff02bb757-9483-43ae-85db-c4a0f8b09f95_811x373.png 424w, https://substackcdn.com/image/fetch/$s_!qIfS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff02bb757-9483-43ae-85db-c4a0f8b09f95_811x373.png 848w, https://substackcdn.com/image/fetch/$s_!qIfS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff02bb757-9483-43ae-85db-c4a0f8b09f95_811x373.png 1272w, https://substackcdn.com/image/fetch/$s_!qIfS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff02bb757-9483-43ae-85db-c4a0f8b09f95_811x373.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Product metrics like CURR and DAU in Duolingo&#8217;s story are just one form of context. There are many more, such as:</p><ul><li><p><strong>Competitor landscape.</strong> <em>What are our competitors doing, and should we do that, too? </em>In <a href="https://techcrunch.com/2016/08/02/silicon-copy/">an interview with TechCrunch</a>, Instagram&#8217;s CEO described how the company copied and outperformed Snapchat Stories in 2016.</p></li><li><p><strong>User research.</strong> <em>What do prospective users say they want?</em> Buffer <a href="https://buffer.com/resources/talking-to-users/">interviewed 30+ content creators</a> to discover what people actually want from creative AI assistants.</p></li><li><p><strong>Industry news.</strong> <em>What&#8217;s happening in the industry that we should pay attention to? </em>When generative AI took off in 2023, Canva <a href="https://www.canva.com/newsroom/news/canva-2023-wrap/">turned it into its core feature</a> and doubled revenue in two years ($1.7B &#8594; $3.3B).</p></li><li><p><strong>Customer feedback. </strong><em>What do current customers say they want, and is it actually what they want? </em>When Linear users requested &#8220;custom fields&#8221;, they dug deeper and <a href="https://linear.app/now/building-what-customers-need">built Customer Requests</a> to track support tickets, Slack messages, and calls.</p></li></ul><p>Gathering context can be difficult since it&#8217;s not always obvious what information is useful at any given point in time.<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a> You could spend weeks analyzing bug reports to improve feature adoption, only to realize after one user interview that it was a discoverability problem all along.</p><p>The good news is that you can develop an intuition for this by tracking what types of context led to measurable success through accountability loops (we&#8217;ll cover what that looks like in the next section).</p><h3>Takeaway for engineers</h3><p>Don&#8217;t wait around for someone else to give you the right context for your product. Instead, generate it yourself by creating your own systems for discovery.</p><p>In addition to helping you ship faster, this gives you an unfiltered view of the data. For example, <a href="https://posthog.com/newsletter/talk-to-users?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm">talking to users</a> provides clearer insight than reading secondhand notes from your PM since information gets lost at each step along the way:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!g3wa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b80c1a6-12a9-4286-a47f-177e35918f1c_1181x543.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!g3wa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b80c1a6-12a9-4286-a47f-177e35918f1c_1181x543.png 424w, https://substackcdn.com/image/fetch/$s_!g3wa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b80c1a6-12a9-4286-a47f-177e35918f1c_1181x543.png 848w, https://substackcdn.com/image/fetch/$s_!g3wa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b80c1a6-12a9-4286-a47f-177e35918f1c_1181x543.png 1272w, https://substackcdn.com/image/fetch/$s_!g3wa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b80c1a6-12a9-4286-a47f-177e35918f1c_1181x543.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!g3wa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b80c1a6-12a9-4286-a47f-177e35918f1c_1181x543.png" width="1181" height="543" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3b80c1a6-12a9-4286-a47f-177e35918f1c_1181x543.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:543,&quot;width&quot;:1181,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:75804,&quot;alt&quot;:&quot;Information is compressed at each stage from user to PM to engineer.&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://newsletter.posthog.com/i/190640421?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74b09f76-cedc-4f4d-8adb-d65ddf7e990a_1251x665.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Information is compressed at each stage from user to PM to engineer." title="Information is compressed at each stage from user to PM to engineer." srcset="https://substackcdn.com/image/fetch/$s_!g3wa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b80c1a6-12a9-4286-a47f-177e35918f1c_1181x543.png 424w, https://substackcdn.com/image/fetch/$s_!g3wa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b80c1a6-12a9-4286-a47f-177e35918f1c_1181x543.png 848w, https://substackcdn.com/image/fetch/$s_!g3wa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b80c1a6-12a9-4286-a47f-177e35918f1c_1181x543.png 1272w, https://substackcdn.com/image/fetch/$s_!g3wa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b80c1a6-12a9-4286-a47f-177e35918f1c_1181x543.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Another reason engineers should do this is that your teammates might not understand the technical options and constraints as well as you do. Sometimes only the person with the full context of a problem can ask the right questions.</p><blockquote><p><strong>Try this: </strong>Book 2 <a href="https://pauldambra.dev/2026/02/how-i-do-user-interviews.html">user interviews</a> per week. Run a feedback survey for your product and review <a href="https://posthog.com/newsletter/how-to-uncover-your-users-real-problems?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm">survey data</a> every sprint. Set up an <a href="https://posthog.com/blog/stop-ai-slop?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm">LLM eval</a> that detects when users struggle. Create a weekly email digest for competitor blogs.</p></blockquote><div><hr></div><h2>2. Track success with feedback loops</h2><p>All that context is useless if your team doesn&#8217;t know if they&#8217;re winning.</p><p>Product managers at PostHog track and ensure success<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-3" href="#footnote-3" target="_self">3</a> by running <a href="https://posthog.com/handbook/product/per-product-growth-reviews?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm">growth reviews</a>: monthly meetings where they go over revenue trends, user feedback, usage metrics, and <a href="https://posthog.com/newsletter/quarterly-planning-mistakes?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm">quarterly goals</a> with the engineers building the product. </p><p>If the numbers aren&#8217;t moving in the right direction, the PM presents a well-researched explanation to the team so that they can come up with an informed hypothesis and solution:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jtlx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0495eaa-733f-4123-88f4-af73af4786a5_863x593.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jtlx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0495eaa-733f-4123-88f4-af73af4786a5_863x593.png 424w, https://substackcdn.com/image/fetch/$s_!jtlx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0495eaa-733f-4123-88f4-af73af4786a5_863x593.png 848w, https://substackcdn.com/image/fetch/$s_!jtlx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0495eaa-733f-4123-88f4-af73af4786a5_863x593.png 1272w, https://substackcdn.com/image/fetch/$s_!jtlx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0495eaa-733f-4123-88f4-af73af4786a5_863x593.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jtlx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0495eaa-733f-4123-88f4-af73af4786a5_863x593.png" width="863" height="593" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b0495eaa-733f-4123-88f4-af73af4786a5_863x593.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:593,&quot;width&quot;:863,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:143592,&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://newsletter.posthog.com/i/190640421?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0495eaa-733f-4123-88f4-af73af4786a5_863x593.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_!jtlx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0495eaa-733f-4123-88f4-af73af4786a5_863x593.png 424w, https://substackcdn.com/image/fetch/$s_!jtlx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0495eaa-733f-4123-88f4-af73af4786a5_863x593.png 848w, https://substackcdn.com/image/fetch/$s_!jtlx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0495eaa-733f-4123-88f4-af73af4786a5_863x593.png 1272w, https://substackcdn.com/image/fetch/$s_!jtlx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0495eaa-733f-4123-88f4-af73af4786a5_863x593.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>When the team meets again in the following month, they&#8217;ll review what worked and what didn&#8217;t. Each iteration levels up the product &#8211; and the team&#8217;s product sense, too.</p><p>Here&#8217;s an example from our <a href="https://posthog.com/docs/error-tracking?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm">Error Tracking</a> team:</p><ol><li><p><strong>The problem: </strong><a href="https://posthog.com/community/profiles/34160?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm">Cory</a>, the PM, noticed that <a href="https://posthog.com/product-engineers/churn-rate-vs-retention-rate?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm">churn rates</a> were disproportionately high, even though new customer acquisition was strong.</p></li><li><p><strong>The context: </strong>A series of customer interviews all pointed to the same theme: trust. Users were leaving because of rough edges, such as missing recordings or unhandled stack trace edge cases.</p></li><li><p><strong>The hypothesis:</strong> This is a product-quality problem, not a &#8220;missing features&#8221; problem. Systematically improving papercuts, ergonomics, and reliability will reduce churn.</p></li><li><p><strong>The solution:</strong> The team catalogued every trust-related issue from customer feedback and shipped dozens of fixes (see below). Churn improved from 21% to 10% in the following quarter.</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fpGL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F963d53a5-a343-4dd5-be98-623143f63a03_854x478.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fpGL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F963d53a5-a343-4dd5-be98-623143f63a03_854x478.png 424w, https://substackcdn.com/image/fetch/$s_!fpGL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F963d53a5-a343-4dd5-be98-623143f63a03_854x478.png 848w, https://substackcdn.com/image/fetch/$s_!fpGL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F963d53a5-a343-4dd5-be98-623143f63a03_854x478.png 1272w, https://substackcdn.com/image/fetch/$s_!fpGL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F963d53a5-a343-4dd5-be98-623143f63a03_854x478.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fpGL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F963d53a5-a343-4dd5-be98-623143f63a03_854x478.png" width="854" height="478" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/963d53a5-a343-4dd5-be98-623143f63a03_854x478.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:478,&quot;width&quot;:854,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:86410,&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://newsletter.posthog.com/i/190640421?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F963d53a5-a343-4dd5-be98-623143f63a03_854x478.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_!fpGL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F963d53a5-a343-4dd5-be98-623143f63a03_854x478.png 424w, https://substackcdn.com/image/fetch/$s_!fpGL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F963d53a5-a343-4dd5-be98-623143f63a03_854x478.png 848w, https://substackcdn.com/image/fetch/$s_!fpGL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F963d53a5-a343-4dd5-be98-623143f63a03_854x478.png 1272w, https://substackcdn.com/image/fetch/$s_!fpGL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F963d53a5-a343-4dd5-be98-623143f63a03_854x478.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Without Cory&#8217;s investigation, the team could have easily spent months on new features that they <em>thought</em> would solve the churn problem, without addressing the root cause.</p><p>Feedback loops like these create accountability and, in turn, give developers more autonomy. Engineers at PostHog can <a href="https://posthog.com/newsletter/product-management-is-broken?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm">make product decisions more freely</a> (without PMs micromanaging roadmaps) since the system ensures they&#8217;re always contributing to the company&#8217;s bottom line.</p><h3>Takeaway for engineers</h3><p>You can turn every sprint into a mini growth review by setting aside time to define and <a href="https://posthog.com/handbook/engineering/development-process?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm#evaluate-success">evaluate success</a> in each session.</p><p>We do this at PostHog by classifying each milestone with one of the following:</p><ul><li><p><strong>Nailed it:</strong> We hit the goal spectacularly. High fives all round.</p></li><li><p><strong>Scraped it: </strong>We almost hit the goal, but we need to do a bit more to tidy up.</p></li><li><p><strong>Failed it:</strong> We were nowhere near hitting the goal, but we learned some valuable lessons. Back to the drawing board for this one.</p></li></ul><p>This ensures we&#8217;re learning from each cycle and <a href="https://posthog.com/newsletter/50-product-learnings?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm">not just shipping mindlessly</a>. It&#8217;s way more useful than just marking tasks as &#8220;Completed&#8221;.</p><blockquote><p><strong>Try this</strong>: In your next sprint, apply the concept of feedback loops by defining and evaluating success for each task. Then in the next sprint, review if you met those goals (and if not, what you learned or how you&#8217;ll <a href="https://posthog.com/handbook/engineering/product-engineering?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm#ship-things-iteratively-and-follow-up">follow up</a>).</p><p>You could <a href="https://posthog.com/product-engineers/ab-testing-mistakes?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm">run an A/B test</a> to compare behavior between groups, <a href="https://posthog.com/newsletter/how-we-decide-what-to-build?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm#5-test-with-minimal-effort">test early prototypes</a> to get user feedback, <a href="https://posthog.com/product-engineers/dogfooding?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm">dogfood your product</a> to get internal data, or <a href="https://posthog.com/newsletter/talk-to-users#7-talking-to-users-doesnt-stop-at-user-interviews?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm">message a customer</a> to see if you addressed their issue.</p></blockquote><div><hr></div><h2>3. Communicate towards action</h2><p>To make all of the above actually work, you need to <a href="https://posthog.com/newsletter/communication-mistakes?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm#6-not-making-communication-actionable">make communication actionable</a>. We know this sounds like classic PM fluff, but give us a minute to explain.</p><p>It&#8217;s easy for anyone to state a problem:</p><blockquote><p>&#8220;We&#8217;re losing enterprise deals to competitors because we&#8217;re missing features.&#8221;</p></blockquote><p>But this doesn&#8217;t help engineers understand what to build or why. </p><p>Communicating towards action looks like:</p><blockquote><p>&#8220;We&#8217;ve lost five deals worth $200k in the last three months over SSO, audit logs, and role-based permissions. We should prioritize these over shipping v2 of the MCP for our core segment since we already have strong retention there. The enterprise requests are more aligned with company-wide goals for Q2.&#8221;</p></blockquote><p>This is better, but why? It reduces friction by surfacing important information from the start:</p><ul><li><p><strong>Stating the impact.</strong> Not &#8220;we are losing deals&#8221;, but &#8220;we lost three enterprise contracts.&#8221;</p></li><li><p><strong><a href="https://posthog.com/newsletter/how-to-give-feedback?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm#3-youre-not-being-specific-enough">Being specific</a>. </strong>They don&#8217;t just state that features are missing; they investigate and list the top three.</p></li><li><p><strong>Sharing relevant context. </strong>The revenue loss, strong core retention, and the Q2 company-wide goal are all factors that will help make the decision.</p></li><li><p><strong>Making trade-offs visible.</strong> The former doesn&#8217;t mention competing priorities; the latter points out exactly what to choose between.</p></li><li><p><strong><a href="https://posthog.com/newsletter/communication-mistakes?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm#3-lacking-an-opinion">Having an opinion</a>. </strong>Instead of just vaguely asking &#8220;Thoughts?&#8221;, they express which option they think is better and why.</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_!K9t9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9f1bcdf-4cca-483a-b766-674f8361868c_811x412.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!K9t9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9f1bcdf-4cca-483a-b766-674f8361868c_811x412.png 424w, https://substackcdn.com/image/fetch/$s_!K9t9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9f1bcdf-4cca-483a-b766-674f8361868c_811x412.png 848w, https://substackcdn.com/image/fetch/$s_!K9t9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9f1bcdf-4cca-483a-b766-674f8361868c_811x412.png 1272w, https://substackcdn.com/image/fetch/$s_!K9t9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9f1bcdf-4cca-483a-b766-674f8361868c_811x412.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!K9t9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9f1bcdf-4cca-483a-b766-674f8361868c_811x412.png" width="811" height="412" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f9f1bcdf-4cca-483a-b766-674f8361868c_811x412.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:412,&quot;width&quot;:811,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:149092,&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://newsletter.posthog.com/i/190640421?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9f1bcdf-4cca-483a-b766-674f8361868c_811x412.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_!K9t9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9f1bcdf-4cca-483a-b766-674f8361868c_811x412.png 424w, https://substackcdn.com/image/fetch/$s_!K9t9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9f1bcdf-4cca-483a-b766-674f8361868c_811x412.png 848w, https://substackcdn.com/image/fetch/$s_!K9t9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9f1bcdf-4cca-483a-b766-674f8361868c_811x412.png 1272w, https://substackcdn.com/image/fetch/$s_!K9t9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9f1bcdf-4cca-483a-b766-674f8361868c_811x412.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This is where all three skills come together. Product managers know <em>what </em>information to provide thanks to all the <strong>context</strong> they&#8217;ve gathered and <strong>feedback loops</strong> they&#8217;ve experienced. And <em>how</em> they deliver it &#8211; by <strong>communicating actionably</strong> &#8211; makes all the difference.</p><h3>Takeaway for engineers</h3><p>Since action is the goal, it&#8217;s best to default to shipping when you can. That&#8217;s why pull requests are the <a href="https://posthog.com/newsletter/communication-mistakes?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm#6-not-making-communication-actionable">S-tier form of communication</a> at PostHog. (Email is F-tier, obviously.)</p><p>But when the next step is unclear and you need to bring it up for discussion, <em>work backwards. </em>Think about what types of context and success criteria a PM would provide to make the information as actionable as possible.</p><blockquote><p><strong>Try this: </strong>Next time you&#8217;re about to post &#8220;should we do X?&#8221;, make it actionable by including:</p><ol><li><p>The specific problem and its impact</p></li><li><p>What you&#8217;ve already investigated</p></li><li><p>At least one other option and the trade-offs</p></li><li><p>Which one you&#8217;d pick and why</p></li></ol></blockquote><p><em>Words by <a href="https://substack.com/@jinajay">Jina Yoon</a>, reformed PM who once learned the dark arts and now shares the secrets with you.</em></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.posthog.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Subscribe for more forbidden product knowledge</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>&#128218; From the library</h2><ul><li><p><strong><a href="https://www.iankduncan.com/engineering/2026-02-07-your-best-thinking-is-wasted-on-the-wrong-decisions/">Your Best Thinking Is Wasted on the Wrong Decisions</a> &#8211;&nbsp;Ian Duncan</strong></p></li><li><p><strong><a href="https://www.focusedchaos.co/p/product-management-is-communication">Product Management is Communication </a>&#8211; Ben Yoskovitz</strong></p></li><li><p><strong><a href="https://www.lennysnewsletter.com/p/how-close-is-ai-to-replacing-product">How close is AI to replacing product managers?</a> &#8211;&nbsp;Lenny Rachitsky &amp; Mike Taylor</strong></p></li><li><p><strong><a href="https://grith.ai/blog/clinejection-when-your-ai-tool-installs-another">A GitHub Issue Title Compromised 4,000 Developer Machines </a>&#8211;&nbsp;grith.ai</strong></p></li><li><p><strong><a href="https://posthog.com/blog/llm-analytics-clustering-how-it-works?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm">How we built automatic clustering for LLM traces</a> &#8211; Andy Maguire</strong></p></li></ul><div><hr></div><h2><strong>&#129428;</strong> Join the prickle</h2><ul><li><p><strong><a href="https://posthog.com/careers/product-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm">Product Engineer</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/sales-lead?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm">Sales Lead</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/application-security-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm">Application Security Engineer</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/dev-advocate-(youtube-team)?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm">Dev Advocate (YouTube Team)</a></strong></p></li><li><p><strong><a href="https://posthog.com/careers/mobile-engineer?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm">Mobile Engineer</a></strong></p><p></p></li></ul><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>A recent <a href="https://www.figma.com/blog/2025-shifting-roles-report/">survey by Figma</a> found that 64% of designers, developers, and marketers say their work spans multiple product roles. </p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>PM work typically follows a pattern based on what stage of the<a href="https://posthog.com/handbook/product/releasing-new-products-and-features?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm"> product lifecycle</a> the team is in. This can help narrow down what types of context will be most relevant.</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-3" href="#footnote-anchor-3" class="footnote-number" contenteditable="false" target="_self">3</a><div class="footnote-content"><p>At PostHog, product managers are also in charge of the most direct lever to revenue: <a href="https://posthog.com/newsletter/pricing-advice?utm_source=posthog-newsletter&amp;utm_medium=post&amp;utm_campaign=guide_to_pm">pricing</a>.</p></div></div>]]></content:encoded></item></channel></rss>