<?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[Intent Driven]]></title><description><![CDATA[Making software at the speed of thought. Weekly insights for creators ready to build anything they imagine.]]></description><link>https://newsletter.specstory.com</link><image><url>https://substackcdn.com/image/fetch/$s_!uevc!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f59c4ed-5941-4b39-bf89-e38f53d63123_512x512.png</url><title>Intent Driven</title><link>https://newsletter.specstory.com</link></image><generator>Substack</generator><lastBuildDate>Tue, 19 May 2026 04:10:02 GMT</lastBuildDate><atom:link href="https://newsletter.specstory.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Jake Levirne]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[specstory@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[specstory@substack.com]]></itunes:email><itunes:name><![CDATA[Jake Levirne]]></itunes:name></itunes:owner><itunes:author><![CDATA[Jake Levirne]]></itunes:author><googleplay:owner><![CDATA[specstory@substack.com]]></googleplay:owner><googleplay:email><![CDATA[specstory@substack.com]]></googleplay:email><googleplay:author><![CDATA[Jake Levirne]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Turning a White-Glove Process Into a Self-Serve Workflow]]></title><description><![CDATA[Denise is CEO and co-founder of Variata, an AI-powered testing platform.]]></description><link>https://newsletter.specstory.com/p/turning-a-white-glove-process-into</link><guid isPermaLink="false">https://newsletter.specstory.com/p/turning-a-white-glove-process-into</guid><dc:creator><![CDATA[Jake Levirne]]></dc:creator><pubDate>Tue, 24 Mar 2026 01:18:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!8Ixy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff25e0069-e3d5-464e-949d-4ef246e8c716_2816x1536.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Denise is CEO and co-founder of Variata, an AI-powered testing platform. Her product lets teams validate their websites and apps by describing what they want tested instead of writing brittle, step-by-step automation scripts. Variata AI figures out how to navigate the site, run the flows, and report what broke.</p><p>It works. Enterprise customers love it. But there&#8217;s a catch: every new customer goes through a white-glove onboarding where Denise&#8217;s team manually authors the test scenarios alongside them. They identify the highest-value flows, tune the inputs to the right level of specificity, and build a working setup that would&#8217;ve taken weeks for in-house QA teams to develop in just a day&#8217;s time.</p><p>That process produces great outcomes and teams are already saving lots of time with Variata. But now Denise is thinking about 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_!8Ixy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff25e0069-e3d5-464e-949d-4ef246e8c716_2816x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8Ixy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff25e0069-e3d5-464e-949d-4ef246e8c716_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!8Ixy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff25e0069-e3d5-464e-949d-4ef246e8c716_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!8Ixy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff25e0069-e3d5-464e-949d-4ef246e8c716_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!8Ixy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff25e0069-e3d5-464e-949d-4ef246e8c716_2816x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8Ixy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff25e0069-e3d5-464e-949d-4ef246e8c716_2816x1536.png" width="1456" height="794" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f25e0069-e3d5-464e-949d-4ef246e8c716_2816x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:794,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:7669631,&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.specstory.com/i/191787330?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff25e0069-e3d5-464e-949d-4ef246e8c716_2816x1536.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_!8Ixy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff25e0069-e3d5-464e-949d-4ef246e8c716_2816x1536.png 424w, https://substackcdn.com/image/fetch/$s_!8Ixy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff25e0069-e3d5-464e-949d-4ef246e8c716_2816x1536.png 848w, https://substackcdn.com/image/fetch/$s_!8Ixy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff25e0069-e3d5-464e-949d-4ef246e8c716_2816x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!8Ixy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff25e0069-e3d5-464e-949d-4ef246e8c716_2816x1536.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>So she set out to build the self-serve version including an authoring tool that would help users create their own test scenarios without her team in the room. She&#8217;s done discovery across paying customers, free trial users, and casual evaluators. She&#8217;s identified a spectrum of user inputs ranging from &#8220;just test my site&#8221; to granular click-by-click scripts. She&#8217;s built three prototype classifiers to guide users toward the sweet spot.</p><p>These are all the pieces. The question is how they fit together.</p><p>Denise and I help each other as founders, and this month we used her self-service challenge as the topic of our conversation. It gave me a chance to work through a real product planning scenario that will help us build Stoa (our conversational planning tool) and it gave her an outside perspective. This session led us past some strong product principles so  I decided to write it up and share it.</p><div><hr></div><h2><strong>The Spectrum Problem</strong></h2><p>Here&#8217;s the tension Denise was staring at. Variata&#8217;s AI works best when it gets input at a middle level of abstraction &#8212; milestones and expected outcomes, not pixel-level instructions. &#8220;Verify the sign-up flow works and the user lands on the dashboard&#8221; is better than &#8220;click the email field, type <a href="mailto:test@gmail.com">test@gmail.com</a>, click the password field, type abc123, click Submit.&#8221; The specific version latches onto details that change constantly. The milestone version is durable.</p><p>But users don&#8217;t naturally land in that middle zone. QA engineers tend to over-specify. Product managers and executives tend to under-specify. And the &#8220;just test my site&#8221; crowd gives almost nothing to work with.</p><p>So the question Denise was trying to answer: how do you build an AI-assisted authoring experience that nudges users toward the level of detail that actually produces reliable tests?</p><p>She&#8217;d prototyped three approaches. (1) A binary gate that gives a simple yes/no depending on whether your test prompt is sufficient. (2) A gap coach that shows you specifically what&#8217;s missing. And (3) a clarifying Q&amp;A coach that asks questions until it has enough to work with.</p><p>Before evaluating any of them, though, there&#8217;s a more fundamental question we decided to tackle.</p><div><hr></div><h2><strong>Whose Problem Is This?</strong></h2><p>It&#8217;s easy to describe this challenge in system terms: <em>how do we ensure users provide input that maximizes Variata&#8217;s success rate?</em> That framing is accurate. It&#8217;s also a trap, because it centers the product&#8217;s needs rather than the user&#8217;s.</p><p>Flip it around. What&#8217;s the user actually trying to do?</p><p>Denise described a Product Leader she&#8217;d spoken with- someone who manually runs twenty user flows every morning. An hour of clicking through their own site with a coffee, testing that the promo codes work, the checkout completes, the filters behave. Not because it&#8217;s in their job description. Because they feel personally responsible for their site.</p><p>That person&#8217;s problem isn&#8217;t &#8220;I need to author test scenarios at the right level of abstraction for an AI system.&#8221; Their problem is: <em>I have a process that works, I want it to keep working, and I&#8217;d like my morning back.</em></p><p>That reframe matters because it changes what success looks like. The authoring tool isn&#8217;t asking users to learn a new skill. It&#8217;s asking them to hand over something they already do and trust that it&#8217;ll be done right.</p><blockquote><p><strong>Reframe the problem from the user&#8217;s side before designing solutions.</strong> &#8220;How do we get better input for our system&#8221; and &#8220;how do I get my morning back&#8221; lead to very different products.</p></blockquote><div><hr></div><h2><strong>Who Exactly Are You Building For?</strong></h2><p>Denise had mapped out several personas: QA testers, product managers, developers, enterprise buyers, self-serve evaluators. She&#8217;d segmented by release cadence and personal risk. The users who keep coming back are the ones who have to sign off on revenue-driving releases at least monthly.</p><p>But &#8220;people who sign off on releases&#8221; is still a broad group. And a self-serve product can only have one front door.</p><p>The narrowing question: who, specifically, is going to try this tool on their own, fall in love with it, and then fight to get it adopted inside their company?</p><p>Not the QA engineer; at least not at first. Some will resist a tool that automates their core job. The person who will champion Variata from the bottom up is the product leader or VP who does QA out of intrinsic motivation. They&#8217;re doing it because nobody else will, they care about quality, and they&#8217;d happily hand it off to a system they trust.</p><p>That person also happens to have the organizational leverage to push deals forward from below while the Variata sales team works with executives from above.</p><blockquote><p><strong>Pick the champion, not the job title.</strong> The user most likely to adopt and evangelize your self-serve product isn&#8217;t always the one whose role most obviously matches your category. Look for intrinsic motivation plus organizational influence.</p></blockquote><div><hr></div><h2><strong>What Already Works</strong></h2><p>Here&#8217;s where the conversation got interesting. Before evaluating the three prototypes, it&#8217;s worth asking: what happens in the manual version that works so well?</p><p>When Denise&#8217;s team onboards a new customer by hand, what does the session actually look like? What&#8217;s on the screen? Where does the input come from?</p><p>Her answer was surprising. Users don&#8217;t typically pull up their live product and walk through it together. Instead, they show up with requirements documents from Jira tickets, specs, runbooks, and email attachments describing features they need tested. Sometimes the features don&#8217;t even exist in a live environment yet. The user is working from a written description of something they didn&#8217;t build and may never have seen running.</p><p>So Denise&#8217;s team takes that document and, sitting alongside the user, translates it into testable scenarios at the right level of abstraction. They author a few together so the user can see the pattern. Then they send the user off to do the rest as homework.</p><p>That&#8217;s the workflow. And it reframes the entire product challenge into one sentence: <strong>help people turn their requirements documents into testable scenarios.</strong></p><p>Not &#8220;build a chatbot that asks smart questions.&#8221; Not &#8220;create a test recorder that watches you click.&#8221; Just: take the artifact the user already has and transform it into something Variata can run.</p><blockquote><p><strong>Study your manual process before automating it.</strong> The best self-serve products don&#8217;t invent new workflows. They bottle the proven ones. If your team already knows what works in the white-glove version, the product&#8217;s job is to encode that, not reimagine it from scratch.</p></blockquote><div><hr></div><h2><strong>The Case Against Questions</strong></h2><p>Back to the three prototypes: (1) a pass/fail binary gate on your testing inputs, (2) a coach that shows you the gaps between your input and expected structure, and (3) a Q&amp;A workflow. With the problem compressed to &#8220;requirements in, testable scenarios out,&#8221; each approach looks different.</p><p>The binary gate is clearly too blunt. Telling someone &#8220;not enough detail, try again&#8221; when you have an LLM that can reason about exactly what&#8217;s missing is, as Denise put it, &#8220;a little bit lazy.&#8221;</p><p>The clarifying Q&amp;A flow is more sophisticated. It mimics the experience of Claude Code or Codex- thinking, then surfacing questions like &#8220;What&#8217;s the expected outcome of a successful sign-up?&#8221; with selectable options. It feels smart.</p><p>But there&#8217;s a structural problem with questions: how do you know when to stop asking them? There&#8217;s a fine line between &#8220;your questions are helpful&#8221; and &#8220;your questions are annoying,&#8221; and that line moves depending on the user&#8217;s patience and context. Ask too few and you don&#8217;t have enough to work with. Ask too many and the user gives up.</p><p>More importantly, questions don&#8217;t teach. If the AI asks clarifying questions today, it&#8217;ll have to ask clarifying questions again tomorrow. The user never learns what a good testable scenario looks like. Instead they just get walked through one instance.</p><p>The gap coaching approach does something different. It shows the user a target that lets them build a mental model; here&#8217;s what a complete, well-formed scenario looks like. This, along with highlights of the specific gaps in what they provided can be powerful. Instead of an interrogation, it&#8217;s a progress bar toward a visible standard.</p><p>That means the user learns the shape of a good scenario. Next time through, they need less help. The product is building user capability, not user dependency.</p><blockquote><p><strong>Show what good looks like instead of interrogating toward it.</strong> A coaching UI that reveals the target teaches users to self-serve over time. An open-ended Q&amp;A creates a recurring dependency on the system. The best onboarding doesn&#8217;t just get users through &#8212; it makes them better.</p></blockquote><div><hr></div><h2><strong>The Bigger Pattern</strong></h2><p>Denise walked into this conversation with a clear picture of Variata&#8217;s overall story and ROI journey. All we did together was zoom into one specific moment in that journey and get concrete about who&#8217;s there, what they&#8217;re holding, and what they need next.</p><p>The pieces were all present in her research. The Product Leader with the morning coffee ritual. The requirements docs that users show up with. The white-glove process that already works. The insight that coaching beats interrogation.</p><p>Sometimes product work isn&#8217;t about generating new ideas. It&#8217;s about compressing what you already know until the next move becomes obvious.</p><div><hr></div><p>Want a workspace to have your own product clarity sessions? Try <a href="https://somehow.sh">https://somehow.sh</a></p>]]></content:encoded></item><item><title><![CDATA[Please Review the Safety Card Before Airdropping Your Prototype]]></title><description><![CDATA[At a recent product and engineering leadership roundtable, a PM director said: &#8220;I built a prototype that shows exactly what I want, with more clarity than any PRD I&#8217;ve ever written and my engineers weren&#8217;t excited.]]></description><link>https://newsletter.specstory.com/p/please-review-the-safety-card-before</link><guid isPermaLink="false">https://newsletter.specstory.com/p/please-review-the-safety-card-before</guid><dc:creator><![CDATA[Jake Levirne]]></dc:creator><pubDate>Mon, 16 Mar 2026 18:19:02 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!eW8H!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776aeee8-25d0-4ded-b73c-51a12f42a237_1279x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>At a recent product and engineering leadership roundtable, a PM director said: &#8220;I built a prototype that shows exactly what I want, with more clarity than any PRD I&#8217;ve ever written and my engineers weren&#8217;t excited. They were <em>resistant</em>.&#8221;</p><p>Then a long debate followed about changing roles and AI code quality and the shifting job market. But I don&#8217;t think any of that was the real reason for resistance. I asked a simple question: &#8220;when did you share your prototype?&#8221;</p><p>A confused look and then a hesitant, &#8220;after I finished building it.&#8221;</p><p>And there was the problem: <strong>what feels like resistance is actually an ask for inclusion.</strong></p><p>Not &#8220;give me a more detailed specification&#8221;, not &#8220;fix your prototype&#8217;s broken code&#8221;, but &#8220;bring me along for the ride&#8221;.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eW8H!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776aeee8-25d0-4ded-b73c-51a12f42a237_1279x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eW8H!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776aeee8-25d0-4ded-b73c-51a12f42a237_1279x720.png 424w, https://substackcdn.com/image/fetch/$s_!eW8H!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776aeee8-25d0-4ded-b73c-51a12f42a237_1279x720.png 848w, https://substackcdn.com/image/fetch/$s_!eW8H!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776aeee8-25d0-4ded-b73c-51a12f42a237_1279x720.png 1272w, https://substackcdn.com/image/fetch/$s_!eW8H!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776aeee8-25d0-4ded-b73c-51a12f42a237_1279x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eW8H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776aeee8-25d0-4ded-b73c-51a12f42a237_1279x720.png" width="1279" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/776aeee8-25d0-4ded-b73c-51a12f42a237_1279x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1279,&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_!eW8H!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776aeee8-25d0-4ded-b73c-51a12f42a237_1279x720.png 424w, https://substackcdn.com/image/fetch/$s_!eW8H!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776aeee8-25d0-4ded-b73c-51a12f42a237_1279x720.png 848w, https://substackcdn.com/image/fetch/$s_!eW8H!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776aeee8-25d0-4ded-b73c-51a12f42a237_1279x720.png 1272w, https://substackcdn.com/image/fetch/$s_!eW8H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F776aeee8-25d0-4ded-b73c-51a12f42a237_1279x720.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><p>Think about what happens when a PM drops a fully-formed prototype on an engineer&#8217;s desk. The PM has spent hours, maybe days, in conversation with an AI tool, exploring options, hitting dead ends, making tradeoffs, arriving at a solution that feels <em>right</em> to them. They&#8217;ve weathered the whole storm of the creative process.</p><p>Then they hand over the sunny outcome and say: &#8220;Here. Build this.&#8221;</p><p>The engineer looks at it and feels... something. Not excitement. Something more like being airdropped into the eye of someone else&#8217;s brain storm. The air is calm here, but they can see the wreckage of decisions they weren&#8217;t part of. Why this data model? Why this flow and not the obvious alternative? What got tried and rejected? What tradeoffs were made, and who decided?</p><p>The prototype answers &#8220;what.&#8221; It doesn&#8217;t answer any of the &#8220;whys.&#8221; And without the &#8220;whys,&#8221; the engineer can&#8217;t do their job because engineering is the art of making good local decisions when you hit unexpected constraints, and you can only do that if you understand the <em>intent</em> behind the thing you&#8217;re building.</p><p><strong>Nobody likes to be airdropped into the middle of someone else&#8217;s storm.</strong> But everyone loves a good story &#8212; a clear sequence of thinking they can follow, with a beginning, a middle, and a chance to shape the ending.</p><div><hr></div><p>Every great PM already knows this. It&#8217;s why the best PRD reviews have never been signoff sessions. They&#8217;re conversations where the team pokes at the solution together: &#8220;What happens when the user doesn&#8217;t have an account?&#8221; &#8220;What if the API call fails mid-flow?&#8221; &#8220;This edge case seems ambiguous; can we nail it down right now?&#8221;</p><p>Traditionally we justified this discussion in terms of cost. Clarifying questions, surfaced in a review, cost an hour to resolve. The same questions surfaced after engineering is underway cost a week. Surfaced in QA? A month. Now, with the cost of rework plummeting, it feels like these tradeoffs no longer hold. But there was another subtler reason for these meetings.</p><p>The PRD review worked because the document <em>felt</em> open. It was words on a page. It was clearly a draft of thinking, not a finished product. People felt invited to push back, ask questions, and shape the direction. The document said, implicitly: &#8220;This is what I&#8217;m thinking. Help me think better.&#8221;</p><p>A working prototype sends the opposite signal. It looks <em>done</em>. It runs. It has buttons that click and screens that flow. Even if the PM knows it&#8217;s held together with duct tape and AI hallucinations, the engineer sees something that looks finished and hears: &#8220;I&#8217;ve already decided. Just make it production-ready.&#8221;</p><p>That&#8217;s the resistance. It&#8217;s not about the prototype. It&#8217;s about being handed a conclusion without the reasoning.</p><div><hr></div><p>So what do you do? You don&#8217;t stop prototyping. The ability to express product thinking as working software is a genuine superpower that we shouldn&#8217;t lose.</p><p>But you <strong>turn over your thinking in stages</strong>, even if those stages happened quickly.</p><p>At SpecStory, we&#8217;ve been working on this problem, and we call the practice an <strong>intent review</strong>. It&#8217;s distinct from a code review. A code review asks: &#8220;Did we build it right?&#8221; An intent review asks: &#8220;Are we building the right thing and does everyone understand <em>why</em>?&#8221;</p><p>Here&#8217;s what that looks like in practice:</p><p><strong>Share the problem before the solution.</strong> Before anyone sees the prototype, share the customer insight or the problem statement that motivated it. Give the team the same starting point you had. Let them sit with the problem for even a few minutes before you show them your answer.</p><p><strong>Show your exploration, not just your conclusion.</strong> What did you try that didn&#8217;t work? What tradeoffs did you make? What alternatives did you consider? This is the &#8220;story&#8221; part &#8212; the sequence of thinking that makes the conclusion make sense. If you explored three approaches and chose one, show all three. Let the engineer see <em>why</em> this one won.</p><p><strong>Name your confidence level.</strong> There&#8217;s a huge difference between &#8220;this is what I think we should build&#8221; and &#8220;these are two approaches I&#8217;m deciding between&#8221; and &#8220;this is an initial exploration, let&#8217;s iterate.&#8221; Naming where you are changes how people engage with what you&#8217;re showing them.</p><p><strong>Invite the storm, don&#8217;t shelter people from it.</strong> The messiness of the creative process isn&#8217;t a bug, it&#8217;s where the best engineering input happens. When an engineer sees the problem space, not just the solution, they bring constraints and possibilities that make the product better. That&#8217;s not resistance. That&#8217;s collaboration.</p><div><hr></div><p>Our new tools don&#8217;t change our humanity. AI can collapse the time between idea and prototype from weeks to hours, but it can&#8217;t collapse the human need to understand <em>why</em> before committing to <em>what</em>. An engineer who understands the intent behind a prototype will make a hundred good decisions during implementation that you never anticipated. An engineer who&#8217;s just been handed a thing to rebuild will ask you about every single one.</p><p>The fastest path to production isn&#8217;t a better prototype. It&#8217;s a team that shares your understanding of the problem.</p><p>So the next time you&#8217;re excited to show your team something you built (and you should be), pause for just a moment. Don&#8217;t airdrop them into the eye of your storm.</p><p>Tell them the story of the storm first. Then show them where you landed. Then ask them where <em>they</em> think you should go.</p><p>That&#8217;s not slower. That&#8217;s how you get there together.</p>]]></content:encoded></item><item><title><![CDATA[Mitchell Hashimoto on the AI-Assisted Future of Open Source]]></title><description><![CDATA[What the Ghostty creator learned reviewing hundreds of AI-generated pull requests, and why he thinks Git might need a successor]]></description><link>https://newsletter.specstory.com/p/mitchell-hashimoto-on-the-ai-assisted</link><guid isPermaLink="false">https://newsletter.specstory.com/p/mitchell-hashimoto-on-the-ai-assisted</guid><dc:creator><![CDATA[Jake Levirne]]></dc:creator><pubDate>Mon, 20 Oct 2025 18:48:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!xxu_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16adfc9e-ba59-4ccd-82d0-a69362fc0534_1288x1470.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Mitchell Hashimoto wakes up early. Before his toddler stirs, before breakfast, he opens his laptop and checks what landed in the Ghostty repository overnight. Ghostty, a GPU-accelerated terminal emulator, has become one of the most active open source projects in its category. Most mornings, Hashimoto sends new GitHub issues to an AI agent for a first pass. The hit rate hovers around 10 to 20 percent. It is not perfect, but it helps him triage and spot patterns faster than he could alone.</p><p>It is a small ritual with larger meaning. Hashimoto is not fighting the rise of AI in open source. He is studying it, learning where it helps, and drawing careful lines around where it does not.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.specstory.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Intent Driven! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>A new rule for a new era</h2><p>Earlier this year, Mitchell Hashimoto introduced a new requirement to the <a href="https://github.com/ghostty-org/ghostty/pull/8289">Ghostty&#8217;s contributor guide</a>: every pull request must disclose when AI tools were used. The idea was practical. Too many submissions looked fine on the surface but fell apart under review. He could tell that some contributors had pasted AI code they did not fully understand.</p><blockquote><p>&#8220;Before AI, I might get one bad PR every six months,&#8221; he said. &#8220;Now it feels like every other week.&#8221;</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xxu_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16adfc9e-ba59-4ccd-82d0-a69362fc0534_1288x1470.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xxu_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16adfc9e-ba59-4ccd-82d0-a69362fc0534_1288x1470.png 424w, https://substackcdn.com/image/fetch/$s_!xxu_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16adfc9e-ba59-4ccd-82d0-a69362fc0534_1288x1470.png 848w, https://substackcdn.com/image/fetch/$s_!xxu_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16adfc9e-ba59-4ccd-82d0-a69362fc0534_1288x1470.png 1272w, https://substackcdn.com/image/fetch/$s_!xxu_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16adfc9e-ba59-4ccd-82d0-a69362fc0534_1288x1470.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xxu_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16adfc9e-ba59-4ccd-82d0-a69362fc0534_1288x1470.png" width="1288" height="1470" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/16adfc9e-ba59-4ccd-82d0-a69362fc0534_1288x1470.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1470,&quot;width&quot;:1288,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:368497,&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.specstory.com/i/176671826?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16adfc9e-ba59-4ccd-82d0-a69362fc0534_1288x1470.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_!xxu_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16adfc9e-ba59-4ccd-82d0-a69362fc0534_1288x1470.png 424w, https://substackcdn.com/image/fetch/$s_!xxu_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16adfc9e-ba59-4ccd-82d0-a69362fc0534_1288x1470.png 848w, https://substackcdn.com/image/fetch/$s_!xxu_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16adfc9e-ba59-4ccd-82d0-a69362fc0534_1288x1470.png 1272w, https://substackcdn.com/image/fetch/$s_!xxu_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16adfc9e-ba59-4ccd-82d0-a69362fc0534_1288x1470.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The change was not about policing people. It was about context for reviewers who put their time and attention into a review. In the same pull request, he wrote, &#8220;The disclosure is to help maintainers assess how much attention to give a PR. While we aren&#8217;t obligated to in any way, I try to assist inexperienced contributors and coach them to the finish line. But if it&#8217;s just an AI on the other side, I don&#8217;t need to put in that effort.&#8221;</p><p>Behind the policy was a deeper frustration. He had seen an explosion of what he calls &#8220;AI slop&#8221; - code that looked plausible but lacked understanding. &#8220;There&#8217;s good-intention slop and bad-intention slop,&#8221; he said in his talk with us at SpecStory. &#8220;The difference is whether the person tried to understand what they were doing.&#8221;</p><p>That distinction matters. Hashimoto recalled a contributor who left the community after receiving harsh feedback on a low-quality PR. &#8220;Stuff like that makes me feel bad because I think it wouldn&#8217;t have happened ten years ago,&#8221; he said. &#8220;Back then, I would have been more patient. But now that bad contributions happen so often, I lose my patience immediately.&#8221;</p><p>Within weeks of the rule taking effect, about fifty percent of all Ghostty pull requests included an AI disclosure. The numbers confirmed what he suspected: AI had become a routine part of contribution. The question was no longer <em>if</em> it should be used, but <em>how</em>.</p><blockquote><p><strong>For Maintainers:</strong> Disclosure is essential, but it is only the first step. The challenge is helping good-faith contributors without drowning in noise.</p><p><strong>For Contributors:</strong> Show your work. Help reviewers see your thinking, not just your diff.</p></blockquote><p>Since that initial change, Hashimoto has continued to shape Ghostty&#8217;s culture around transparency. In his blog post <a href="https://mitchellh.com/writing/non-trivial-vibing">Vibing a Non-Trivial Ghostty Feature</a>, he described how he uses tools like Amp to design and implement complex features, documenting the messy and experimental steps that most developers hide. The post captured the same philosophy that drives Ghostty&#8217;s contributor policy: AI can be part of the process, but contributors should show how it influenced their work so that reviewers can understand the intent behind each change.</p><div><hr></div><h2>Seeing the intent behind the code</h2><p>What frustrates Hashimoto is not that people use AI, but the absence of visible reasoning.</p><blockquote><p>&#8220;As a reviewer, I do not care what the AI said. The AI output is noise. I want to see the contributor&#8217;s thinking.&#8221;</p></blockquote><p>When he opens a PR, he looks for signs of understanding: the prompts, the decisions, the corrections along the way. Bad PRs, he said, tend to show a &#8220;slop zone&#8221; where the contributor is clearly fishing for code without comprehension. &#8220;I want to see that you understand what you&#8217;re doing, or at least trying to.&#8221;</p><p>Well-structured AI sessions, by contrast, build trust. They reveal thought process and intention. For Hashimoto, that trail of reasoning is what separates a responsible contributor from a careless one. The checkbox saying &#8220;AI used&#8221; is not enough. What matters is the visible proof that a human actually thought through the work.</p><blockquote><p><strong>For Contributors:</strong> Don&#8217;t just say you used AI. Show how you used it. Your prompts tell the story of your thinking.</p></blockquote><div><hr></div><h2>Learning to drive with AI</h2><p>Hashimoto is not only a maintainer, reviewing AI-assisted work. He uses AI daily and experiments with different workflows. For planning and exploration, he often runs multiple coding agents side by side, comparing their results. &#8220;Usually no one agent wins,&#8221; he said. &#8220;One captures the main idea. Another remembers an edge case. I pull the best parts together by hand.&#8221;</p><p>This ensemble approach costs more time and compute, but it helps him triangulate solutions. It also highlights a broader truth: AI is not a single oracle, but a chorus of imperfect advisors.</p><p>When it comes to implementation, he enforces one rule on himself. &#8220;If the AI writes something I do not understand, I stop and study it,&#8221; he said. &#8220;I try to recreate it myself. If I cannot reach the same diff, I need to learn more.&#8221;</p><p>Despite being an experienced systems programmer, he calls himself &#8220;a very inexperienced JavaScript front-end person.&#8221; When the AI generates front-end code, he reads through it line by line to understand the imports, data flow, and dependencies before committing anything.</p><p>He treats AI not as an answer machine but as a learning accelerator. It lets him build something real first, then study it deeply enough to make it his own.</p><blockquote><p><strong>For Contributors:</strong> Never commit code you cannot explain. AI should help you learn faster, not think less.</p></blockquote><div><hr></div><h2>Better scaffolding for contributors</h2><p>Rather than hope contributors discover effective workflows by chance, Hashimoto has started shipping small helper tools directly in the Ghostty repository.</p><p>One of his favourites is a <a href="https://ampcode.com/news/custom-slash-commands">custom Amp slash command</a> he built that fetches GitHub issues and reformats them into clean Markdown for AI planning sessions. &#8220;I use it five times a day,&#8221; he said. Commands like this give contributors a clean starting point for structured reasoning before they even begin generating code.</p><p>Hashimoto draws a line between tooling that guides good habits and tools that just generate noise. &#8220;The engagement-bait trend of massive prompt libraries,&#8221; he said, &#8220;that&#8217;s just noise.&#8221;</p><p>Scaffolding, for him, is not about automation but about making good behavior easy and visible. The right structure helps contributors think more clearly and makes their reasoning visible to others. When the repository itself encodes these habits, people do not just read the guidelines, they practice them with every contribution.</p><blockquote><p>For Maintainers: Don&#8217;t just write contribution rules or guidelines. Build and ship the actual tools that embody your project&#8217;s best practices for AI-assisted contribution.</p></blockquote><div><hr></div><h2>The next generation of developer tooling</h2><h3>Prompt blame: tracing code back to intent</h3><p>Hashimoto&#8217;s vision for better tooling starts with accountability. He envisions a future system where version control can tell you not just <em>who</em> wrote a line of code, but <em>why</em>.</p><blockquote><p>&#8220;It would be useful to point at a line of code and say what part generated this,&#8221; he said.</p></blockquote><p>He calls one idea &#8220;prompt blame,&#8221; a nod to git blame. Instead of only showing who wrote a line, it would show which prompt created it and where the human stepped in. That kind of trace and visibility answers a familiar review question. Why did this change happen in the first place?</p><blockquote><p>&#8220;Current AI tools show all the machine diffs but hide the human ones,&#8221; he said. &#8220;You lose the part where the human is actually thinking.&#8221;</p></blockquote><h3>Annotating AI sessions: the human commentary layer</h3><p>For Hashimoto, visibility is not just about machine behavior but also human intent. He advocates for annotation, giving humans a way to mark parts of an AI session with notes such as: &#8220;This part was experimental. This part was me learning. This part actually informed the final PR.&#8221; It&#8217;s the difference between showing just your final answer and showing your thought process.. These annotations exist for the next human who reads the code.</p><h3>Interleaving human and AI edits</h3><p>The other gap he points to is temporal. Most coding tools show the AI&#8217;s diffs but not the developer&#8217;s.</p><blockquote><p>&#8220;It shows all the AI diffs but doesn&#8217;t show the human diffs,&#8221; he said. &#8220;You lose the part where the human is actually thinking.&#8221;</p></blockquote><p>Hashimoto imagines a unified history that interleaves both, where every refactor, correction, or course change by a person sits alongside the AI&#8217;s suggestions. Code review would then show a full collaboration, not a one-sided transcript.</p><div><hr></div><h2>The opening beyond Git</h2><p>Experience with AI-assisted reviews has pushed Hashimoto toward a larger conclusion. Traditional version control was not designed for rapid human and machine collaboration.</p><blockquote><p>&#8220;If someone wanted to invent a new version control system, this is the biggest opening since Git,&#8221; he said.</p></blockquote><p>Git tracks authors and commits. It does not track the reasoning or conversations that produced them.</p><p>Git was built for snapshots, not for continuous, conversational iteration between humans and machines. Hashimoto&#8217;s advice to the team behind <a href="https://github.com/martinvonz/jj">Jujutsu</a>, where he serves as an advisor, reflects this thinking: make it agent-friendly. In his words, a modern system should &#8220;over-aggressively create commits&#8221;, capturing every micro-diff so humans and agents can safely experiment, revert, and compare ideas.</p><p>The real opportunity, he says, lies in metadata. &#8220;How do you attach the prompts? How do you attach co-authorship?&#8221; Git was not built to track the dialogue that produces a change. A new system could.</p><div><hr></div><h3>Intent: version control for the AI era</h3><p>That question: how to attach prompts, reasoning, and co-authorship to real code history is exactly what SpecStory&#8217;s upcoming project <strong>Intent</strong> is designed to solve.</p><p><strong>Intent</strong> is a new version control system built from the ground up for AI-assisted development. It automatically captures every AI conversation, links it to code changes, and creates a searchable decision timeline. Built on <strong>CRDTs (Conflict-free Replicated Data Types)</strong>, it synchronizes work continuously without merge conflicts.</p><p>Where Git relies on human discipline to document changes, Intent captures context automatically. Imagine asking months later, <em>&#8220;Why did we choose JWT instead of sessions?&#8221;</em> and seeing the full conversation that led there: the alternatives discussed, the reasoning behind the choice, and the exact lines of code that came from it.</p><p><strong>Key capabilities include:</strong></p><ul><li><p><strong>Automatic versioning:</strong> Every save becomes a versioned checkpoint.</p></li><li><p><strong>AI conversation tracking:</strong> Links code diffs to their originating chat sessions.</p></li><li><p><strong>Conversational search:</strong> Queries like &#8220;When did we add authentication?&#8221; return the full decision trail.</p></li><li><p><strong>CRDT-based sync:</strong> Real-time collaboration with no merge conflicts.</p></li><li><p><strong>Human-in-the-loop history:</strong> Interleaves AI-generated and human edits into one continuous timeline.</p></li></ul><p>In many ways, <em>Intent</em> turns Hashimoto&#8217;s wishlist: prompt blame, session annotation, human-AI interleaving into infrastructure. It makes reasoning first-class, so context never gets lost.</p><blockquote><p><strong>For Maintainers:</strong> Version control should capture not just the code, but the conversations that shaped it.</p><p><strong>For Contributors:</strong> The best contribution is one that shows how you thought not just what you typed.</p></blockquote><div><hr></div><h2>The future of transparent collaboration</h2><p>After hundreds of AI-assisted reviews, Hashimoto&#8217;s view is clear. Open source does not have an AI problem. It has a transparency problem. The goal is not to forbid AI. The goal is to make the human judgment in the loop visible.</p><p>He imagines a norm where sharing AI sessions is as common as sharing diffs, where maintainers can check not only what changed but why, and where contributors can demonstrate the care behind their work. &#8220;If people shared their sessions, it would help a lot,&#8221; he said. &#8220;I would have loved to see how my open source heroes actually built a feature.&#8221;</p><p>Culture and tooling will meet in the middle. Disclosure sets expectations. Reasoning trails and richer metadata make those expectations practical. That is the direction SpecStory is betting on. When the thinking travels with the code, teams move faster, communities stay healthier, and code review becomes a conversation grounded in intent rather than guesswork.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.specstory.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Intent Driven! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[SpecStory in Action: How a Deleted Repo Was Rebuilt from History]]></title><description><![CDATA[Losing code isn&#8217;t the end when the reasoning behind it is preserved.]]></description><link>https://newsletter.specstory.com/p/specstory-in-action-how-a-deleted</link><guid isPermaLink="false">https://newsletter.specstory.com/p/specstory-in-action-how-a-deleted</guid><dc:creator><![CDATA[Antaripa Saha]]></dc:creator><pubDate>Mon, 06 Oct 2025 09:18:05 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!6wHY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb663b90-d9de-476b-bc2a-b56c2d39b090_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>AI-assisted coding is powerful, but anyone who&#8217;s spent time with it knows that it&#8217;s not always predictable. What looks like a productive session can sometimes take a sharp turn. For one developer, that turn meant watching a repository vanish.</p><p>This is the story of how SpecStory turned that moment from disaster into recovery.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.specstory.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Intent Driven! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>Building AI at Scale</h2><p>One of our user, an ML Engineer at a leading LLM company spends his days building and training large language models. His workflow involves running agent-driven coding experiments at scale. Dozens of sandboxes, multiple sub-agents, millions of tokens being processed. It&#8217;s a high-output environment where mistakes are costly.</p><p>In the middle of one of these experiments, the coding agent deleted the entire repository.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6wHY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb663b90-d9de-476b-bc2a-b56c2d39b090_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6wHY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb663b90-d9de-476b-bc2a-b56c2d39b090_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!6wHY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb663b90-d9de-476b-bc2a-b56c2d39b090_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!6wHY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb663b90-d9de-476b-bc2a-b56c2d39b090_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!6wHY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb663b90-d9de-476b-bc2a-b56c2d39b090_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6wHY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb663b90-d9de-476b-bc2a-b56c2d39b090_1024x1024.png" width="572" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bb663b90-d9de-476b-bc2a-b56c2d39b090_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:572,&quot;bytes&quot;:1062520,&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.specstory.com/i/175362658?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb663b90-d9de-476b-bc2a-b56c2d39b090_1024x1024.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_!6wHY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb663b90-d9de-476b-bc2a-b56c2d39b090_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!6wHY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb663b90-d9de-476b-bc2a-b56c2d39b090_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!6wHY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb663b90-d9de-476b-bc2a-b56c2d39b090_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!6wHY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb663b90-d9de-476b-bc2a-b56c2d39b090_1024x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>The Accident</h2><blockquote><p>&#8220;In some shocking way, we had one agent running and it deleted the repo. At the same time, we had issues reading from GitHub, so we couldn&#8217;t just pull it back.&#8221;</p></blockquote><p>It wasn&#8217;t just a missing file or a bad commit. The repository was gone and the work they had been building just vanished. At the same time, they had issues reading from GitHub, so GitHub recovery wasn&#8217;t an option either. The codebase looked permanently lost.</p><p>For a team building foundational AI models, this was the kind of setback that could derail weeks of work.</p><h2>Recovery Through SpecStory</h2><p>Instead of starting from scratch, the engineer turned to SpecStory.</p><blockquote><p>&#8220;We put in the SpecStory histories that had recorded everything and asked our AI, Can you recreate all the code? It actually rebuilt the whole repo. That basically saved us.&#8221;</p></blockquote><p>Because SpecStory had been running in the background, every AI-assisted coding session which had every prompt, correction, tool call, and code output, was preserved as a Markdown history with timestamp.</p><p>Those histories weren&#8217;t just records of what the agent produced. They captured the entire development flow:</p><ul><li><p>The commands and tool calls that had shaped the code</p></li><li><p>The corrections when the AI got something wrong</p></li><li><p>The design decisions debated and accepted along the way</p></li></ul><p>Those histories didn&#8217;t just log the code, but the reasoning that produced the code and together, those were enough context for the AI to regeneratethe entire lost repo. What began as a simple history log became an <strong>accidental backup system</strong>.</p><h2>Continuity in Fragile Environments</h2><p>For this engineer, the benefits didn&#8217;t end there. His day-to-day workflow involves SSHing into GPU clusters where <strong>development pods frequently reset</strong>. Every reset wipes out Cursor&#8217;s chat history, forcing developers to restart without any context.</p><p>SpecStory changed that. By maintaining histories across all folders, it let him reconnect, resync, and immediately pick up where he left off. Even when the infrastructure churned underneath, SpecStory gave him continuity.</p><h2>From Logs to LLM Training Data</h2><p>The most unexpected use case came when SpecStory became part of the LLM training pipeline:</p><ul><li><p>Each sandbox run generated long traces of AI reasoning and code</p></li><li><p>After each run, SpecStory synced and captured those traces</p></li><li><p>The logs were converted into user-assistant format and <strong>fed directly into post-training datasets</strong> for their models.</p></li></ul><p>What began as a convenience for developers grew into infrastructure for LLM training, providing high-quality synthetic conversations rooted in real coding tasks.</p><h2>Lessons From the Workflow</h2><p>This engineer&#8217;s story shows the multiple dimensions of value that SpecStory brings:</p><ul><li><p><strong>Disaster Recovery</strong>: When an AI agent wiped a repo, SpecStory&#8217;s preserved histories made recovery possible.</p></li><li><p><strong>Persistent Context</strong>: In unstable dev environments, SpecStory acts as a durable memory layer when other tools lose state.</p></li><li><p><strong>Data Pipeline</strong>: At massive scale, SpecStory logs double as structured training data for fine-tuning LLMs.</p></li></ul><h2>The Bigger Picture</h2><p>This story highlights a truth about AI-assisted coding: speed alone is not enough. Things go wrong, agents misfire, and tools fail. When that happens, the difference between starting over and moving forward depends on whether you have preserved the reasoning behind your code.</p><p>SpecStory does more than capture prompts. It records the why by preserving the flow of ideas, corrections, and intent. For our user, that record turned into a lifeline. For other teams, it can mean faster reviews, reproducible experiments, and protection against invisible technical debt.</p><p>As AI accelerates how we write code, understanding the choices behind that code becomes even more important. SpecStory ensures that the reasoning is not lost, and in moments like this, it can even save the code itself. Resilience in AI coding comes from context, and that is what SpecStory preserves.</p><p><strong>Learn more:</strong><br>SpecStory Docs: <a href="https://docs.specstory.com/">https://docs.specstory.com/</a><br>GitHub: <a href="https://github.com/specstoryai/getspecstory">https://github.com/specstoryai/getspecstory</a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.specstory.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Intent Driven! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[How to be an Open Source Hero: Contributing AI-Generated Code with Care]]></title><description><![CDATA[Responsible AI Practices for Trustworthy Collaboration]]></description><link>https://newsletter.specstory.com/p/how-to-be-an-open-source-hero-contributing</link><guid isPermaLink="false">https://newsletter.specstory.com/p/how-to-be-an-open-source-hero-contributing</guid><dc:creator><![CDATA[Jake Levirne]]></dc:creator><pubDate>Thu, 02 Oct 2025 09:48:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!GtAg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde14b72e-cff9-473a-ad83-2915af3489d4_880x862.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>AI coding tools are now part of everyday development. They help contributors explore new codebases, draft solutions quickly, and learn unfamiliar patterns. For people opening pull requests as contributors, that makes it easier than ever to participate. For maintainers, it often means more work reviewing code that may not always be complete or reliable.</p><p>The question is not whether AI belongs in open source, it&#8217;s already there. The real question is how to use it responsibly so that your contributions add value rather than create extra work.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GtAg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde14b72e-cff9-473a-ad83-2915af3489d4_880x862.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GtAg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde14b72e-cff9-473a-ad83-2915af3489d4_880x862.png 424w, https://substackcdn.com/image/fetch/$s_!GtAg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde14b72e-cff9-473a-ad83-2915af3489d4_880x862.png 848w, https://substackcdn.com/image/fetch/$s_!GtAg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde14b72e-cff9-473a-ad83-2915af3489d4_880x862.png 1272w, https://substackcdn.com/image/fetch/$s_!GtAg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde14b72e-cff9-473a-ad83-2915af3489d4_880x862.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GtAg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde14b72e-cff9-473a-ad83-2915af3489d4_880x862.png" width="880" height="862" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/de14b72e-cff9-473a-ad83-2915af3489d4_880x862.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:862,&quot;width&quot;:880,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1079728,&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.specstory.com/i/175089364?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde14b72e-cff9-473a-ad83-2915af3489d4_880x862.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_!GtAg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde14b72e-cff9-473a-ad83-2915af3489d4_880x862.png 424w, https://substackcdn.com/image/fetch/$s_!GtAg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde14b72e-cff9-473a-ad83-2915af3489d4_880x862.png 848w, https://substackcdn.com/image/fetch/$s_!GtAg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde14b72e-cff9-473a-ad83-2915af3489d4_880x862.png 1272w, https://substackcdn.com/image/fetch/$s_!GtAg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde14b72e-cff9-473a-ad83-2915af3489d4_880x862.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>If You&#8217;re Contributing with AI</h2><p>The key to contributing responsibly is transparency. Maintainers do not need you to hide your tools, they need to understand your process.</p><ul><li><p><strong>Always disclose what you used:</strong> Put it directly in your pull request description. Be specific: &#8220;Used Claude Code to generate the initial algorithm, wrote tests manually.&#8221; If you used AI for comments or documentation, say that too. Honesty sets the right expectations and builds trust.</p></li><li><p><strong>Show your process:</strong> Sharing your chat history can be surprisingly useful. Export your conversation from Cursor or Claude Code and link it in your PR. Tools like SpecStory make this simple by automatically saving your full session. Maintainers can then see how you arrived at your solution, which makes reviews faster and also helps others learn from your approach.</p></li><li><p><strong>Check the quality yourself:</strong> AI is not a substitute for your judgment. Review every line, write and test the edge cases. If something feels unclear, ask your assistant to explain it until you understand. Use that review as a chance to learn and strengthen your own reasoning. If you still cannot explain the code in your own words, it is not ready to submit. This is what separates helpful contributions from noise.</p></li></ul><p>Here is a simple way to phrase disclosure in your PR:</p><ul><li><p>Minimal: &#8220;Claude Code assisted with this implementation.&#8221;</p></li><li><p>Better: &#8220;Used ChatGPT to understand the codebase, implemented the solution manually.&#8221;</p></li><li><p>Best: &#8220;Cursor suggested this approach (see linked chat history saved in SpecStory), and I modified it significantly to fit our use case.&#8221;</p></li></ul><h2>If You&#8217;re a Maintainer</h2><p>Maintainers need to guide contributors clearly. Otherwise, every review risks turning into a guessing game about where the code came from.</p><ul><li><p><strong>Set expectations up front:</strong> Add an AI section to your <code>CONTRIBUTING.md</code>. Explain that disclosure is required and why it matters. Point to examples of what good AI-assisted contributions look like. Mitchell Hashimoto&#8217;s Ghostty project is a good model: it requires disclosure and treats it as a normal part of collaboration.</p></li><li><p><strong>Review with care:</strong> Watch for telltale signs of low-effort AI code through inconsistent styles, over-complicated functions, or generic comments. When in doubt, ask for clarification. It is perfectly acceptable to reject contributions that add more burden than value. Remember, you are building for people, not training a model.</p></li><li><p><strong>Build community norms:</strong> The healthiest projects treat disclosure as routine, not shameful. Encourage contributors to share how they used AI, celebrate high-quality examples, and make sure newer developers learn what responsible usage looks like.</p></li></ul><h2>A Practical Guide to Disclosure</h2><p>Not every use of AI requires disclosure. Simple autocomplete, syntax fixes, or variable name suggestions are part of everyday tooling. What does require disclosure is any substantial code generation, help with debugging, documentation, or architectural decisions. If AI shaped the contribution in a meaningful way, let others know.</p><h2>Making It Work for Everyone</h2><p>For contributors, treat AI like a junior developer. Let it propose ideas, but supervise carefully. Learn from what it suggests and build your own skills alongside it. Remember that on the other side of your pull request is a human maintainer with limited time.</p><p>For projects, AI-assisted contributions can become opportunities for growth. Share prompting strategies that work well. Build lightweight project guides so AI tools have the right context. And when a contributor does it right, highlight their PR as a positive example.</p><h2>The Path Forward</h2><p>AI is not replacing open source contributors. It is giving them new ways to participate. The challenge is making sure that speed does not come at the cost of quality. Sustainable collaboration depends on transparency, respect, and careful review.</p><p>Tools like SpecStory help by preserving not just the code, but the reasoning behind it. That context makes contributions easier to review, easier to learn from, and easier to trust.</p><p>The principle is simple: use AI as an assistant, not as a shortcut. Be clear about when and how you used it, check the quality yourself, and always remember there are people on the other side of your pull request.</p><p>That way you are not just making a contribution but you are helping projects thrive, and that is how you become the hero of the projects you care about.</p>]]></content:encoded></item><item><title><![CDATA[SpecStory in Action: From AI Session to Blog Post]]></title><description><![CDATA[Capturing the Why Behind What We Build]]></description><link>https://newsletter.specstory.com/p/specstory-in-the-wild-from-ai-session</link><guid isPermaLink="false">https://newsletter.specstory.com/p/specstory-in-the-wild-from-ai-session</guid><dc:creator><![CDATA[Antaripa Saha]]></dc:creator><pubDate>Mon, 29 Sep 2025 17:12:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!alTo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F091b68d1-3649-4d49-9cef-aa04a3cef5a4_676x636.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!alTo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F091b68d1-3649-4d49-9cef-aa04a3cef5a4_676x636.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!alTo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F091b68d1-3649-4d49-9cef-aa04a3cef5a4_676x636.png 424w, https://substackcdn.com/image/fetch/$s_!alTo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F091b68d1-3649-4d49-9cef-aa04a3cef5a4_676x636.png 848w, https://substackcdn.com/image/fetch/$s_!alTo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F091b68d1-3649-4d49-9cef-aa04a3cef5a4_676x636.png 1272w, https://substackcdn.com/image/fetch/$s_!alTo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F091b68d1-3649-4d49-9cef-aa04a3cef5a4_676x636.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!alTo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F091b68d1-3649-4d49-9cef-aa04a3cef5a4_676x636.png" width="676" height="636" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/091b68d1-3649-4d49-9cef-aa04a3cef5a4_676x636.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:636,&quot;width&quot;:676,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:598100,&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.specstory.com/i/174830846?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F091b68d1-3649-4d49-9cef-aa04a3cef5a4_676x636.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_!alTo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F091b68d1-3649-4d49-9cef-aa04a3cef5a4_676x636.png 424w, https://substackcdn.com/image/fetch/$s_!alTo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F091b68d1-3649-4d49-9cef-aa04a3cef5a4_676x636.png 848w, https://substackcdn.com/image/fetch/$s_!alTo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F091b68d1-3649-4d49-9cef-aa04a3cef5a4_676x636.png 1272w, https://substackcdn.com/image/fetch/$s_!alTo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F091b68d1-3649-4d49-9cef-aa04a3cef5a4_676x636.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Most people think AI coding is all about speed and treat their AI coding sessions as disposable. You generate the code you need, close the tab, and move on.</p><p>Isaac, one of the early SpecStory users, took a different path. After finishing a build session, he looked back at the SpecStory history and realized it wasn&#8217;t just a log of prompts and responses. It was a record of false starts, arguments with his AI pair programmer, and the reasoning behind each decision.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.specstory.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Intent Driven! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>That history turned out to be more than a transcript. It became the outline of a blog post.</p><blockquote><p>&#8220;The code shows what I built. The conversation shows why and how.&#8221; &#8212; Isaac Flath</p></blockquote><h2>What Isaac Did With His History</h2><p>Isaac realized his SpecStory history was more than just a transcript. It captured the full flow of his coding session: the back-and-forth corrections, the points where the AI got things wrong, and the debates where he had to defend or rethink his design choices. He turned those conversation history into a blog post.</p><p>Here is how the history helped him:</p><ul><li><p><strong>Concrete examples:</strong> The conversation transcript preserved the exact prompts and corrections he used, giving his writing authenticity and clarity.</p></li><li><p><strong>Capturing the process:</strong> The history included tool calls, failed attempts, and course corrections. These became vivid examples in his article, things he would have forgotten without a record.</p></li><li><p><strong>A natural outline:</strong> The decisions and debates formed a structure he could build on directly.</p></li><li><p><strong>Faster writing.</strong> With the history as source material, all he needed was to add his reflections and polish the language. The heavy lifting was already done.</p></li></ul><p>You can read Isaac&#8217;s full breakdown here: <a href="https://elite-ai-assisted-coding.dev/p/turning-an-ai-conversation-into-a?utm_source=chatgpt.com">Turning an AI Conversation into a Blog Post</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_!H4kc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc77e8270-71e7-4be2-a6ad-121428eeed31_1284x1352.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!H4kc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc77e8270-71e7-4be2-a6ad-121428eeed31_1284x1352.png 424w, https://substackcdn.com/image/fetch/$s_!H4kc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc77e8270-71e7-4be2-a6ad-121428eeed31_1284x1352.png 848w, https://substackcdn.com/image/fetch/$s_!H4kc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc77e8270-71e7-4be2-a6ad-121428eeed31_1284x1352.png 1272w, https://substackcdn.com/image/fetch/$s_!H4kc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc77e8270-71e7-4be2-a6ad-121428eeed31_1284x1352.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!H4kc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc77e8270-71e7-4be2-a6ad-121428eeed31_1284x1352.png" width="1284" height="1352" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c77e8270-71e7-4be2-a6ad-121428eeed31_1284x1352.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1352,&quot;width&quot;:1284,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:304724,&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.specstory.com/i/174830846?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc77e8270-71e7-4be2-a6ad-121428eeed31_1284x1352.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_!H4kc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc77e8270-71e7-4be2-a6ad-121428eeed31_1284x1352.png 424w, https://substackcdn.com/image/fetch/$s_!H4kc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc77e8270-71e7-4be2-a6ad-121428eeed31_1284x1352.png 848w, https://substackcdn.com/image/fetch/$s_!H4kc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc77e8270-71e7-4be2-a6ad-121428eeed31_1284x1352.png 1272w, https://substackcdn.com/image/fetch/$s_!H4kc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc77e8270-71e7-4be2-a6ad-121428eeed31_1284x1352.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>What Isaac&#8217;s Story Shows</h2><p>Isaac&#8217;s experience highlights something every developer can use: AI sessions are not throwaway. With SpecStory, they can become valuable assets.</p><ul><li><p>Histories preserve intent. They capture not just the output but the thinking that shaped it.</p></li><li><p>Details make stories stronger. Prompts and debates can be pulled directly into writing, tutorials, or documentation.</p></li><li><p>Logs become raw material. A single AI session can produce both working code and a draft article to share.</p></li></ul><h2>Conclusion</h2><p>SpecStory preserves the reasoning behind your code. This is the real value of SpecStory. It does more than log your AI prompts. It captures the decisions, debates, and intent that normally vanish once the tab is closed. That record is what makes your work reusable, reviewable, and teachable.</p><p>Most coding tools help you move faster in the moment. SpecStory ensures that the knowledge behind your work is not lost to the moment. It transforms AI sessions from disposable interactions into durable context you and your team can rely on weeks or months later.</p><p>The result is more than efficiency. It is a stronger codebase, faster reviews, smoother onboarding, and a shared memory of why things were built the way they were.</p><p>In a world where AI keeps accelerating how we write code, SpecStory safeguards something enduring: the understanding and intent that make code maintainable. Speed matters, but context endures.</p><p><strong>Learn more:</strong><br>SpecStory Docs: <a href="https://docs.specstory.com/">https://docs.specstory.com/</a><br>GitHub: <a href="https://github.com/specstoryai/getspecstory">https://github.com/specstoryai/getspecstory</a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.specstory.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Intent Driven! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Agile is a Sledgehammer: We Need a Toolbox]]></title><description><![CDATA[How teams can move faster using mixed methodologies]]></description><link>https://newsletter.specstory.com/p/agile-is-a-sledgehammer-we-need-a</link><guid isPermaLink="false">https://newsletter.specstory.com/p/agile-is-a-sledgehammer-we-need-a</guid><dc:creator><![CDATA[Jake Levirne]]></dc:creator><pubDate>Sun, 28 Sep 2025 20:38:05 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Jcin!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb35595b6-abb3-4d02-9180-8e5fea179e69_1600x676.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>tl;dr:</strong> Agile is almost always misapplied today. Most teams aren&#8217;t actually learning, they&#8217;re just going through the motions. A quick test: ask your team for the three most surprising things they&#8217;ve learned in the last two sprints. If they can&#8217;t answer, you&#8217;re either using Agile where it&#8217;s not needed or using it badly. Don&#8217;t mistake tactical churn for strategy. Use Agile only when rapid learning is the goal, and reach for better tools when the job demands it:</p><ul><li><p><strong>For strategy:</strong> Stop pretending backlogs are roadmaps. Use a venture-style model to drive big bets and clarity.</p></li><li><p><strong>For well-understood work:</strong> Skip the Agile theater and overhead. Shape Up + Lean, or just plan properly.</p></li><li><p><strong>For optimization:</strong> Switch gears into growth hacking with metrics, hypotheses, and experiments.<br><br></p></li></ul><p>The goal isn&#8217;t to &#8220;be Agile.&#8221; It&#8217;s to choose the right tool, at the right time, for the right job.</p><div><hr></div><p>In the world of software development, Agile has long been hailed as the ultimate solution to our productivity woes. It&#8217;s the Swiss Army knife of methodologies, the panacea for all project management ills. But here&#8217;s a hard truth: Agile is a hammer and sometimes we need a different tool.</p><h2>The Rise of Agile: A Brief History</h2><p>To understand why Agile has become such a blunt instrument, we need to look at its origins. Back in the 1990s, when grunge was king and the internet was just learning to crawl, software development was dominated by the waterfall model. Imagine building software like constructing a skyscraper: meticulous planning, rigid phases, and a prayer that nothing changes along the way.</p><p>Waterfall promised thorough upfront planning and cost estimation. It was the comfort blanket for businesses making investment decisions. Should we build new product Y or expand features of product X? Just look at the detailed Gantt chart and you&#8217;ll know!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Jcin!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb35595b6-abb3-4d02-9180-8e5fea179e69_1600x676.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Jcin!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb35595b6-abb3-4d02-9180-8e5fea179e69_1600x676.png 424w, https://substackcdn.com/image/fetch/$s_!Jcin!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb35595b6-abb3-4d02-9180-8e5fea179e69_1600x676.png 848w, https://substackcdn.com/image/fetch/$s_!Jcin!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb35595b6-abb3-4d02-9180-8e5fea179e69_1600x676.png 1272w, https://substackcdn.com/image/fetch/$s_!Jcin!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb35595b6-abb3-4d02-9180-8e5fea179e69_1600x676.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Jcin!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb35595b6-abb3-4d02-9180-8e5fea179e69_1600x676.png" width="1456" height="615" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b35595b6-abb3-4d02-9180-8e5fea179e69_1600x676.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:615,&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_!Jcin!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb35595b6-abb3-4d02-9180-8e5fea179e69_1600x676.png 424w, https://substackcdn.com/image/fetch/$s_!Jcin!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb35595b6-abb3-4d02-9180-8e5fea179e69_1600x676.png 848w, https://substackcdn.com/image/fetch/$s_!Jcin!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb35595b6-abb3-4d02-9180-8e5fea179e69_1600x676.png 1272w, https://substackcdn.com/image/fetch/$s_!Jcin!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb35595b6-abb3-4d02-9180-8e5fea179e69_1600x676.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>But there was a tiny problem: software isn&#8217;t a skyscraper that can be fully architected up front. Requirements change, technologies evolve, and markets shift faster than you can say &#8220;Y2K bug&#8221;. Learning must be baked into parts of the process. Waterfall projects often ended up delivering outdated solutions to problems that no longer existed.</p><p>Enter Agile, the rebellious teenager of software methodologies. Born from the Agile Manifesto in 2001, it promised flexibility, customer collaboration, and the ability to respond to change. It was a breath of fresh air in a world of suffocating processes.</p><h2>The Agile Advantage: When the Sledgehammer Hits the Nail</h2><p>Let&#8217;s be clear: Agile, when applied correctly, can be incredibly powerful. Imagine a team working on a new feature for a rapidly evolving market. Requirements are fuzzy, user needs are still being discovered, and the competition is breathing down your neck.</p><p>In this scenario, Scrum (the most popular Agile framework) shines. Two-week sprints allow for rapid learning. Daily stand-ups keep everyone aligned. Sprint reviews provide regular checkpoints with stakeholders. It&#8217;s a beautiful dance of collaboration and adaptation.</p><p>But here&#8217;s the rub: not all projects are created equal. Sometimes, the rapid changes in requirements stem from internal dysfunction, unclear company direction, or simply a lack of proper planning. And this is where our Agile hammer starts to crack the foundation instead of building it.</p><h2>When Agile Goes Awry: The Pitfalls of Misapplication</h2><p>In my years as a product leader across companies of all sizes, I&#8217;ve seen Agile misapplied over and over again. Here are the common pitfalls:</p><ol><li><p><strong>The Two-Week Tunnel Vision</strong>: Teams become so focused on the sprint cycle that they lose sight of the bigger picture. They&#8217;re driving on a backcountry road at night with only a flashlight to guide their way.</p></li></ol><ol start="2"><li><p><strong>Agile Theater</strong>: Daily stand-ups become status reports. Sprint planning becomes a rushed affair of throwing tickets into a sprint. Retrospectives become venting sessions with no real improvements.</p></li></ol><ol start="3"><li><p><strong>The Planning Paradox</strong>: Scrum was designed for execution, not strategic planning. Yet, many organizations try to shoehorn their entire product strategy into this framework. It&#8217;s like trying to write a novel using only Post-it notes.</p></li></ol><ol start="4"><li><p><strong>One Size Fits None</strong>: Agile is often applied indiscriminately, whether the project involves cutting-edge innovation or routine maintenance. We&#8217;re using a hammer to both hang a picture and plaster the wall.</p></li></ol><h2>The Fatal Flaws: Strategic Myopia and Misplaced Flexibility</h2><p>The most damaging aspect of Agile&#8217;s misapplication comes in two flavors:</p><h3>Failure Mode 1: Agile for Strategic Planning</h3><p>One of the worst agile failures I&#8217;ve seen is a lack of strategic planning. Teams continually gather input from customers and stakeholders and capture it to their backlog. Then this backlog is used to create the team&#8217;s roadmap. This is backwards. Annual or quarterly planning requires a broader perspective, one that Agile&#8217;s iterative approach simply isn&#8217;t designed to provide.</p><p>But the problem goes deeper than just misapplying Agile. The root issue lies in how organizations approach strategic planning altogether. Typical quarterly planning processes cascade down the org chart, with each layer of management asking the one below it, &#8220;what&#8217;s your strategy and roadmap.&#8221; Ultimately this ends with teams themselves, unarmed and unprepared, being asked to answer these questions with little or no company direction or strategy. Here&#8217;s where things go off the rails:</p><ol><li><p><strong>Unarmed Teams</strong>: Teams are asked to strategize without being equipped with the right tools or context. They&#8217;re expected to produce a roadmap out of thin air.</p></li></ol><ol start="2"><li><p><strong>The Agile Crutch</strong>: In the absence of better options, teams fall back on what they know &#8211; Agile. They squint at their backlog, trying to divine a strategic roadmap from a list of tasks. And what&#8217;s worse, most agile approaches dictate full team participation in all activities, translating into a massive waste of time creating a fake roadmap.</p></li></ol><ol start="3"><li><p><strong>Perfunctory Planning</strong>: With limited time and resources, this &#8220;planning&#8221; becomes a box-ticking exercise. Teams want to minimize the time wasted on it and so treat it as an afterthought rather than the critical activity that it is.</p></li></ol><ol start="4"><li><p><strong>The Management Cop-Out</strong>: Managers and leaders often contribute little more than a crappy template and a litany of Google Docs comments. Their primary role becomes concatenating the results from their teams, adding little strategic value.</p></li></ol><ol start="5"><li><p><strong>Misaligned Outcomes</strong>: The result? A collection of bottom-up tactical plans masquerading as strategy, often misaligned with the company&#8217;s broader goals and market realities.</p></li></ol><p>This approach fundamentally misunderstands the nature of strategic planning. It&#8217;s like asking a chef to plan next month&#8217;s menu by looking at today&#8217;s grocery list.</p><h3>Failure Mode 2: Agile for Well-Understood Deliverables</h3><p>Not every project is a journey into the unknown. Sometimes, the requirements are clear, the technology is familiar, and the path is well-trodden. In these cases, the overhead of Agile ceremonies can actually slow things down.</p><p>The misapplication of Agile here is more than just a minor inefficiency, it&#8217;s a fundamental mismatch that creates a host of issues:</p><ol><li><p><strong>Limited Visibility</strong>: Agile, particularly Scrum, typically provides visibility only into the next two-week sprint. For well-defined projects, this artificial shortsightedness is unnecessary and counterproductive. We&#8217;re choosing to wear blinders when we could have a clear view of the road ahead.</p></li></ol><ol start="2"><li><p><strong>False Sense of Flexibility</strong>: We treat these projects as if they&#8217;re in constant flux, when in reality, they&#8217;re not. This mindset often leads to unnecessary pivots and changes, introducing instability where stability would be more beneficial.</p></li></ol><ol start="3"><li><p><strong>The Planning Crutch</strong>: Agile can become an excuse to avoid thorough upfront planning. We tell ourselves, &#8220;We&#8217;ll figure it out as we go along,&#8221; even when we have enough information to make solid plans from the start. If you start building a deck without a rough plan, just be ready for many trips back to the lumber yard.</p></li></ol><ol start="4"><li><p><strong>Misallocated Effort</strong>: The time and energy spent on Agile ceremonies (daily stand-ups, sprint planning, retrospectives) for well-understood work is often disproportionate to the value they provide. We don&#8217;t need a committee meeting to change the batteries on our smoke detector.</p></li></ol><ol start="5"><li><p><strong>Lost Predictability</strong>: One of the key benefits of working on well-understood problems is the ability to predict timelines and outcomes more accurately. By defaulting to Agile, we forfeit this advantage, choosing perpetual uncertainty over achievable predictability.</p></li></ol><p>It&#8217;s important to note that advocating for more upfront planning doesn&#8217;t mean a full return to Waterfall. There&#8217;s a middle ground where we push ourselves to ask and answer tough questions early on, without falling into the trap of trying to plan every detail in advance.</p><p>By recognizing when a project is well-understood, we can choose a more appropriate methodology that allows for clearer long-term visibility, more accurate predictions, and less ceremonial overhead. This approach not only saves time and resources but also provides the broader organization with the predictability it needs for effective planning and coordination.</p><h2>The Way Forward: Precision Tools for Precision Work</h2><p>So, if Agile isn&#8217;t always the answer, what is? We need a more nuanced approach, one that matches the methodology to the nature of the work. Based on the successes and failures that I&#8217;ve seen and lived, here&#8217;s what I propose:</p><h3><strong>The Venture Model for Strategic Planning</strong></h3><p>Seeing new product development through the eyes of an investor can provide a more effective framework for strategic planning and innovation. This approach:</p><ul><li><p>Better characterizes the inherent risks and uncertainties</p></li><li><p>Allows for different criteria and metrics at various stages of product maturity</p></li><li><p>Provides a framework for making informed bets on innovation</p></li></ul><p>Let&#8217;s dive deeper into how the venture model works and how companies can adapt it:</p><h3>Key Aspects of the Venture Model</h3><ol><li><p><strong>Clear Stage Awareness</strong>: Venture-backed companies know exactly what stage they&#8217;re at (pre-seed, seed, Series A, Series B, etc.) and what their next focus should be. This clarity drives their strategy and execution.</p></li></ol><ol start="2"><li><p><strong>Fixed Investments</strong>: Unlike the open-ended budgets often seen in corporate projects, ventures receive fixed investments tied to specific milestones.</p></li></ol><ol start="3"><li><p><strong>Pitching for Resources</strong>: Teams must pitch to raise money at key inflection points, forcing them to articulate their progress and future plans clearly.</p></li></ol><ol start="4"><li><p><strong>Embracing Failure</strong>: Ventures that don&#8217;t prove themselves out at a given stage are allowed to fail, ensuring resources are allocated efficiently.</p></li></ol><ol start="5"><li><p><strong>Lean Teams</strong>: Venture teams are typically just big enough for the task at hand. Roles often blur as people do whatever it takes to move the project forward.</p></li></ol><ol start="6"><li><p><strong>Aligned Incentives</strong>: Team members are heavily invested in a successful outcome, with personal rewards tied directly to the venture&#8217;s success.</p></li></ol><ol start="7"><li><p><strong>High Autonomy</strong>: While investors (acting as board members) can provide input, they don&#8217;t dictate day-to-day operations. Control is exercised primarily through funding decisions and the ability to replace leadership.</p></li></ol><h3>Adapting the Venture Model for Companies</h3><p>When implementing a venture model within a company, it&#8217;s crucial to recognize and leverage the unique advantages of the corporate environment while being aware of potential limitations:</p><ol><li><p><strong>Simulating Investor Breadth</strong>: While startups can pitch to hundreds of potential investors, internal ventures have a limited pool. Companies can simulate this breadth by empowering multiple executives with independent investment budgets.</p></li></ol><ol start="2"><li><p><strong>Expanding Pitch Exposure</strong>: Real VCs hear thousands of pitches annually. To broaden perspective, companies could consider allowing outsiders to pitch ideas as well. This could be more insightful and more interesting than traditional job interviews.</p></li></ol><ol start="3"><li><p><strong>Leveraging Horizontal Assets</strong>: Unlike standalone startups, internal ventures can tap into valuable company-wide assets:</p></li></ol><ul><li><p>Recognized Brand</p></li><li><p>Existing Distribution channels</p></li><li><p>Customer Data</p></li><li><p>Compliance support</p></li><li><p>Ties into existing customer workflows</p></li><li><p>Network effects across users and partners</p></li><li><p>Amortized overhead (e.g. facilities, HR, legal)</p></li></ul><p>It&#8217;s crucial that the entire portfolio of internal ventures leverages these strengths.</p><ul><li><p><strong>Utilizing Horizontal Support Teams</strong>: Companies have an advantage over traditional VC networks in their ability to provide robust internal support. Organize these horizontal teams as services that internal ventures can easily plug into, similar to best-in-class SaaS solutions.</p></li></ul><p>By adopting this venture model approach, companies can foster a more dynamic, accountable, and innovative environment for strategic planning and new product development. It allows for clearer goal-setting, more efficient resource allocation, and a balance between autonomy and accountability that often eludes traditional corporate structures.</p><p>Learn more: I haven&#8217;t found a great source for details on the Venture Model inside companies. For now, learn all you can about <a href="https://stripe.com/guides/atlas/pitching">pitching startup ideas</a> and <a href="https://www.leanfoundry.com/books/running-lean">running lean</a>.</p><h3><strong>Shape Up + Lean When It&#8217;s Time to Execute in a Clear Direction</strong></h3><p>For projects with clearer parameters, a combination of Shape Up and Lean principles can provide a more effective approach than traditional Agile methods.</p><h3>Shape Up: A Brief Overview</h3><p>Shape Up is a methodology that emphasizes thoughtful upfront planning (shaping) followed by focused execution. It was developed by 37signals as an alternative to traditional agile methodologies. Here are the key aspects of Shape Up:</p><ol><li><p><strong>Shaping is Distinct from Implementing</strong>: Shaping is a separate activity that happens before any project begins. It&#8217;s about defining the problem, roughing out a solution, and setting boundaries.</p></li></ol><ol start="2"><li><p><strong>Blurred Lines Between What and How</strong>: Unlike traditional approaches where product managers define &#8220;what&#8221; and developers figure out &#8220;how,&#8221; Shape Up encourages a more integrated approach where these lines blur during the shaping process.</p></li></ol><ol start="3"><li><p><strong>Dedicated Time for Shaping</strong>: Shaping drives the process and is not an afterthought. It gets dedicated time and attention, ensuring that projects are well-defined before they begin.</p></li></ol><ol start="4"><li><p><strong>Small Team for Shaping</strong>: The entire team doesn&#8217;t participate in shaping. Instead, an individual or a very small group does this work, allowing for more focused and efficient planning.</p></li></ol><ol start="5"><li><p><strong>Complete Projects, Not Tasks</strong>: Teams are given complete projects, not a list of tasks. The shaping process provides clear business challenges, boundaries, and guidelines without prescribing an overly detailed solution.</p></li></ol><ol start="6"><li><p><strong>Projects as Commitments</strong>: Projects that don&#8217;t get completed in the allotted time (typically weeks) don&#8217;t automatically continue. This creates a sense of urgency and helps prevent scope creep.</p></li></ol><ol start="7"><li><p><strong>Flexible Implementation</strong>: While Shape Up provides a framework for planning and scoping, teams have the flexibility to choose their working methodology for the implementation phase.</p></li></ol><h3>Integrating Lean Principles</h3><p>As noted, once a project has been shaped, teams can adopt any methodology they choose. But one especially effective approach is to use Lean principles for the implementation phase. Lean, with its focus on eliminating waste and continuous improvement, complements the Shape Up methodology well. Here&#8217;s how they can work together:</p><ol><li><p><strong>Kanban for Workflow Management</strong>: Use a Kanban board to visualize and manage the workflow of the shaped project. This aligns with Lean&#8217;s principle of visualizing work and limiting work in progress.</p></li></ol><ol start="2"><li><p><strong>Continuous Flow</strong>: Instead of fixed sprints, adopt a continuous flow of work, pulling new tasks as capacity becomes available. This reduces the overhead of sprint planning and aligns with the Shape Up ethos of giving teams complete projects.</p></li></ol><ol start="3"><li><p><strong>Just-in-Time Planning</strong>: While the overall project is shaped upfront, detailed task planning can happen just-in-time, aligning with Lean principles and allowing for adaptability within the project boundaries.</p></li></ol><ol start="4"><li><p><strong>Focus on Value</strong>: Both Shape Up and Lean emphasize delivering value to the customer and the business. Use this shared focus to guide decision-making throughout the project.</p></li></ol><ol start="5"><li><p><strong>Continuous Improvement</strong>: Be judicious with team retrospectives to identify areas for process improvement. Lean principles would encourage just enough reflection at just the right time and no more. Rather than wait for or plan separate retros, encourage process improvement at any time.</p></li></ol><p>By combining Shape Up&#8217;s thoughtful upfront planning with Lean&#8217;s efficient execution principles, teams can benefit from:</p><ul><li><p>Clearer long-term visibility (typically 6-8 weeks)</p></li><li><p>More accurate predictions of project outcomes</p></li><li><p>Reduced ceremonial overhead compared to traditional Agile methods</p></li><li><p>Improved focus on delivering value</p></li><li><p>Greater flexibility in day-to-day work management</p></li></ul><p>This approach not only saves time and resources but also provides the broader organization with the predictability it needs for effective planning and coordination, all while maintaining the flexibility to adapt to changes within the project scope.</p><p>Learn more: <a href="https://basecamp.com/shapeup">Shape Up</a> from 37signals and a good article on <a href="https://www.toptal.com/agile/guide-managing-development-kanban-trello">using Trello to implement Kanban</a>.</p><h3><strong>Growth hacking for product optimization</strong></h3><p>When your main objective is to improve adoption or usage of your product, it&#8217;s time to switch gears into growth hacking mode. This approach is fundamentally different from new product or feature development, focusing instead on measurable outcomes, hypotheses, and experiments.</p><h3>Understanding the Product Funnel and AARRR Metrics</h3><p>At the core of growth hacking is the product funnel, often represented by the &#8220;Startup Metrics for Pirates&#8221; or AARRR:</p><ol><li><p><strong>Acquisition</strong>: How do users find you?</p></li><li><p><strong>Activation</strong>: Do users have a great first experience?</p></li><li><p><strong>Retention</strong>: Do users come back?</p></li><li><p><strong>Referral</strong>: Do users tell others?</p></li><li><p><strong>Revenue</strong>: Can you monetize?</p></li></ol><p>These metrics provide a framework for understanding and optimizing each stage of the user journey.</p><h3>The Growth Hacking Process</h3><p>Here&#8217;s how to approach growth hacking effectively:</p><ol><li><p><strong>Measure First</strong>: Before you can improve, you need to know where you stand. Establish baseline metrics for each stage of your funnel.</p></li></ol><ol start="2"><li><p><strong>Create Hypotheses</strong>: Formulate ideas about what might improve your metrics. Crucially, define desired outcomes upfront to avoid bias. A good hypothesis includes both the expected positive impact and potential negative effects on other metrics.</p></li></ol><ol start="3"><li><p><strong>Prioritize</strong>: Use your baseline measurements to prioritize hypotheses that are likely to have the highest impact. Focus on the areas of your funnel that need the most improvement or that align with your current business goals.</p></li></ol><ol start="4"><li><p><strong>Run Experiments</strong>: Design and execute tangible tests for your hypotheses. This is where the rubber meets the road in growth hacking.</p></li></ol><ol start="5"><li><p><strong>Analyze and Iterate</strong>: Based on the results of your experiments, refine your approach and start the cycle again.</p></li></ol><h3>Tips for Effective Growth Hacking</h3><ul><li><p><strong>Step Back from Your Product</strong>: Adopt an outside-in, customer-first view. What&#8217;s on your users&#8217; minds? What do they want, regardless of what you want them to want?</p></li></ul><ul><li><p><strong>Use Statistics Wisely</strong>: Learn enough about statistics to run experiments correctly, or find someone (or a tool) who can. If you can&#8217;t run quantitative experiments, qualitative ones can still provide insights.</p></li></ul><ul><li><p><strong>Balance Experimentation and Intuition</strong>: Just because you can experiment doesn&#8217;t mean you should. Use experience and intuition to short-circuit endless experimentation. Sometimes, you can turn a complex A/B/C/D test into a simple A/B test, saving time and resources.</p></li></ul><ul><li><p><strong>Know When to Switch Gears</strong>: If you find yourself unable to run meaningful experiments, it might be a sign that you&#8217;re using the wrong tool at the wrong time. Consider if you&#8217;re in a phase where Agile for learning might be more appropriate than optimization experiments.</p></li></ul><h3>When to Use Growth Hacking</h3><p>Growth hacking is most effective when:</p><ul><li><p>You have a product with a clear value proposition</p></li><li><p>You&#8217;re looking to optimize specific stages of your funnel</p></li><li><p>You have enough users to run statistically significant experiments</p></li><li><p>You&#8217;re able to implement and measure changes quickly</p></li></ul><p>By adopting this data-driven, experiment-focused approach, you can systematically improve your product&#8217;s performance and drive growth. Remember, the key is to stay focused on measurable outcomes and to always keep your users&#8217; needs at the forefront of your optimization efforts.</p><p>Learn more: <a href="https://growthtribe.io/blog/the-growth-hacking-process-a-step-by-step-guide">Step-by-step overview of growth hacking</a>. Or, for more depth, the free and paid materials from <a href="https://www.reforge.com/blog/growth-system">Reforge</a> are very good.</p><h3><strong>And Yes, Agile for Accelerated Learning</strong></h3><p>When the thing you need most is rapid learning in the face of a complex and quick-moving market, an agile approach can be well-suited to the task. However, the term &#8220;Agile&#8221; has been so overused and misapplied that it&#8217;s almost lost all meaning. There are entire books, consultancies, and corporate transformations dedicated to Agile adoption, often with conflicting advice.</p><h3>Assessing Your Current Approach</h3><p>If your current approach is working well and genuinely results in rapid learning, stick with it. Make minor tweaks and improvements as most agile methodologies would suggest. But how do you know if you&#8217;re getting the learning you need?</p><p>Here&#8217;s a quick test: Ask one of your agile teams to name the three most surprising things they&#8217;ve learned in the past two sprints. If you get nothing substantial back, it could mean one of two things:</p><ol><li><p>The team doesn&#8217;t actually need to learn and is using the agile sledgehammer unnecessarily.</p></li><li><p>They&#8217;re not using agile effectively for learning.</p></li></ol><h3>Starting Fresh with Scrum</h3><p>If you&#8217;re not getting the learning you need, consider adopting a new methodology wholesale. For a clean slate, I recommend Scrum. It&#8217;s concrete, clear, and well-established. Scrum provides a framework and terminology that your teams can quickly understand, with built-in mechanisms for continual improvement.</p><p>Key elements of Scrum include:</p><ul><li><p>Defined roles: Product Owner, Scrum Master, Scrum Team</p></li><li><p>Clear artifacts: Product Backlog, Sprint Backlog, Shippable Product</p></li><li><p>Standardized Rituals: Sprint Planning, Daily Standups, Sprint Review</p></li><li><p>Continuous learning: Sprint Retrospectives, Improvement and customization</p></li></ul><p>When adopting Scrum, resist the urge to cherry-pick practices at first. Give teams the opportunity to experience all aspects of vanilla Scrum before they drop or alter some parts. This may seem counterintuitive, but it&#8217;s actually easier to start with the whole thing and then make thoughtful changes, rather than trying to build up bit by bit.</p><h3>Tips for Effective Agile Learning</h3><ol><li><p><strong>Customer Collaboration</strong>: Ensure you have a real customer working closely with your agile team. This direct connection is crucial for rapid learning and validation.</p></li></ol><ol start="2"><li><p><strong>Measure Learning, Not Just Delivery</strong>: Focus on the speed of learning versus the speed of delivery. Agile is about delivering software that aligns with real customer needs, not just about quickly pushing out features.</p></li></ol><ol start="3"><li><p><strong>Embrace Uncertainty</strong>: Accept that in complex, fast-moving markets, you don&#8217;t have all the answers. Use agile practices to explore and learn rapidly.</p></li></ol><ol start="4"><li><p><strong>Frequent Reflection</strong>: Use sprint retrospectives not just to improve processes, but to explicitly discuss and document learnings about the market, customers, and product.</p></li></ol><h3>A Word of Caution</h3><p>Please, if you take nothing else from this, don&#8217;t force all of your teams to start practicing Scrum (or any other agile methodology) today. Acknowledge that different teams are at different phases in their own projects and need to choose the right tools for their specific situations.</p><p>Instead:</p><ol><li><p>Arm your teams with a variety of tools in their planning toolbox, including the ones we&#8217;ve discussed in this article.</p></li><li><p>Help them gain the wisdom to know when to switch tools.</p></li><li><p>Foster a culture where it&#8217;s okay to experiment with different methodologies and learn from the results.</p></li></ol><p>Remember, the goal is not to be &#8220;Agile&#8221; for the sake of it, but to create an environment where teams can learn rapidly and deliver value effectively. Sometimes that means using Scrum, sometimes it doesn&#8217;t. The key is having the flexibility and insight to choose the right approach for each unique situation.</p><p>Learn more: <a href="https://www.scrum-institute.org/contents/The_Scrum_Framework_by_International_Scrum_Institute.pdf">The Scrum Framework</a>, in detail.</p><h2>Conclusion: The Right Tool for the Right Job</h2><p>Agile isn&#8217;t inherently flawed; it&#8217;s how we&#8217;ve been wielding it that&#8217;s the problem. It&#8217;s time to expand our toolkit. By adopting a more nuanced approach, we can enjoy the benefits of Agile where it truly shines while using more appropriate methods for strategic planning and well-defined projects.</p><p>Remember, in the world of product development, one size does not fit all. Sometimes you need a sledgehammer, sometimes a screwdriver, and often, you need both. The key is knowing when to use each.</p><p>So the next time someone suggests &#8220;Let&#8217;s do this project Agile,&#8221; take a step back and consider: What&#8217;s the right tool for each phase of this project? Your future self (and your team, and your stakeholders) will thank you for choosing the right tools for the right jobs, rather than forcing the entire project into a single methodology.</p>]]></content:encoded></item><item><title><![CDATA[The Middle Way]]></title><description><![CDATA[How AI is Actually Changing Software Development]]></description><link>https://newsletter.specstory.com/p/the-middle-way</link><guid isPermaLink="false">https://newsletter.specstory.com/p/the-middle-way</guid><dc:creator><![CDATA[Jake Levirne]]></dc:creator><pubDate>Tue, 23 Sep 2025 12:03:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/NDRi_J3d2dc" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>We recently got together to talk about what's really happening with AI and software development. Not the hype, not the fear, just what we're seeing on the ground.</p><div id="youtube2-NDRi_J3d2dc" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;NDRi_J3d2dc&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/NDRi_J3d2dc?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><h2>Don't Harsh Our Vibes</h2><p>The "vibe" label sells short what's happening with coding agents. "Vibe" implies this technology is a toy&#8212;just faster autocomplete or smoother Stack Overflow. When you ship production software, you throw the vibes away and use your same old workflow.</p><p>Our experience is different. Agents are meaningfully changing how engineers build production software. Companies are reorganizing around agentic coding&#8212;this isn't a toy.</p><blockquote><p><em>Our friends at Assignar are using agentic coding workflows to build complex construction finance management software. GitHub Copilot coding agent, Cursor Bugbot, and Claude Code /security-review all play a role on the team. -Jake</em></p></blockquote><h2>But the Vibes Aren't Immaculate</h2><p>We're on the agentic bandwagon, but we can't just wait for big companies to throw billions at their models and call it a day.</p><p>Here's why: these models run at an unimaginable scale, but they remain constrained by the data that they have access to. They learn from code, documentation, Stack Overflow posts&#8212;anything written down. But if something isn't in the text, the model doesn't know about it.</p><p>And so much of what makes software engineering hard was never written down. The crucial context lives in engineers' heads, in Slack threads that get buried, in whiteboard sessions that were never photographed. The models can't learn what was never captured.</p><h2>Code Is Just an Approximation of Intent</h2><p>Our codebase isn't the truth&#8212;it's just what happens to run. The actual truth is the intent: what we wanted the software to do, what constraints we faced, what tradeoffs we made. When something breaks, you need this intent to fix it properly. Without it, you might fix the bug but break the use case, optimize the wrong thing, or undo a critical workaround.</p><blockquote><p><em>I&#8217;ve used agentic coding tools to build entire new features, like the markdown editor inside BearClaude, only to have it create a regression in the Chat History view (a completely unrelated part of the code base). When &#8220;vibing&#8221;, manual smoke tests are typically the answer for spotting regressions. But when software engineering with AI assistance, we need something more thoughtful. -Jake</em></p></blockquote><h2>The False Revolution: New Panes of Glass</h2><p>As engineers, our natural tendency is to solve problems with new layers of abstraction. Let the agents handle the messy details underneath while we work at a higher level. Ambitious projects like plain-lang&#8212;which lets you code in plain English sentences&#8212;are attempting precisely this, defining a natural language abstraction that simplifies everything below.</p><p>It's a compelling vision. But abstraction layers rarely eliminate complexity&#8212;they just relocate it.</p><blockquote><p><em>At Sym, we fell into this trap. We created elegant devtools for just-in-time AWS access. You could request permissions through our clean interface: "I need production database access." Beautiful.</em></p><p><em>Except first, teams had to untangle their existing AWS permissions. "We have a role called 'WebAppProd' with... who knows what permissions? Created three years ago, modified seventeen times, attached to twelve services." Before using our "simplification," they needed to understand both IAM and our abstraction of IAM. We'd added another pane of glass, not removed the complexity underneath. -Jon</em></p></blockquote><p>The same pattern awaits AI coding abstractions. As these natural language systems grow complex, they'll need all the same tools any codebase needs. Natural language debuggers. Natural language version control. Natural language merge conflicts. We end up reinventing the wheel at a new level of abstraction, now maintaining two layers of complexity instead of one.</p><h2>The Real Revolution: A New Abundance</h2><p>The middle way is paradoxical: it's revolutionary precisely because it's not trying to be revolutionary. It's about finally doing what we always knew we should do: Documentation. Tests. Clear specifications. Design discussions. Architecture decisions. Code reviews that review thinking, not just syntax.</p><p>We skip these because they're too expensive. But AI creates a new abundance. When documentation becomes nearly free, you stop rationing it. When test writing takes seconds, not hours, you stop skipping it.</p><blockquote><p><em>Now when I finish working on something, I ask the agent: "Update the tests and docs." "Can you help me DRY up this code?" This often takes seconds and sometimes uncovers an issue I missed. These tasks used to be the TODOs that haunt a codebase&#8212;things we'd "definitely get to in V2." The difference isn't that I'm working faster; it's that I'm actually completing the work. The boring, essential parts that make code maintainable are finally getting done. -Jon</em></p></blockquote><h2>What Actually Changes</h2><p>What changes:</p><ul><li><p>Code review becomes intent review&#8212;PRs without documentation get rejected</p></li><li><p>Context persists across time and team changes</p></li><li><p>Standards rise as costs drop&#8212;incomplete work becomes unacceptable</p></li><li><p>The "nice-to-haves" become table stakes</p></li></ul><p>What doesn't:</p><ul><li><p>Humans specifying intent&#8212;this gets more important, not less</p></li><li><p>The complexity of understanding existing systems</p></li><li><p>Software evolution and changing requirements</p></li><li><p>Bugs, edge cases, and the fundamental challenges of building software</p></li></ul><h2>What We Still Need to Figure Out</h2><h3>Feedback Loops</h3><p>Encoding intent at project start isn't enough. When you explain to an AI what you're building, when you iterate on approaches, when you ask it to explain existing code&#8212;all that context usually evaporates. What if it didn't?</p><p>What if these artifacts could be validated and refined over time? Fix a bug, update the intent. A new team member discovers gaps; they fill them in. This creates a virtuous cycle instead of entropy. We&#8217;ve learned from the agile revolution that overly precise up-front specification doesn&#8217;t leave room for learning and iterating. So the best intent-driven workflow needs to allow people to work iteratively and stay in flow while still capturing each new learning and decision.</p><blockquote><p>This is a big part of why we&#8217;ve built SpecStory as a connector to existing AI coding tools. It allows developers to stay focused on the task at hand, defining and delivering great software, while recording a clean log of that definition. This way, 2 months from now, when you need to remember &#8220;why did I decide to go with a JSON field in my database instead of multiple columns?&#8221; you can ask that exact question of your own AI chat history. -Jake</p></blockquote><h2>The Real Vibes Will Not Be Televised</h2><p>The televised version is what gets clicks&#8212;programming languages that look like English, YouTube demos of full apps built in an afternoon, breathless threads about replacing all engineers.</p><p>However, the real revolution occurs in the unglamorous daily practice. It's in the PR rejected because the documentation doesn't align with the intent. It's in the feedback loop that catches drift between code and docs. It's finally having time to write architecture decision records because agents handle the boilerplate.</p><p>Coding agents give us the resources to do all the things we always should have done. If we can encode software engineering components into something agents understand, we can truly "make it so."</p><p>How are you refining your simple daily practices to take advantage of the real power of AI-assisted software development?</p><div><hr></div><p><em>This piece grew out of a conversation about how AI is actually being used in software development today. We'd love to hear what you're seeing in your own work.</em></p><p><em>Jon is a founding engineer at Distill, a platform for learning about people and companies. Previously, he co-founded Sym, a devtool for security engineers, and led engineering teams in health tech, infrastructure, and enterprise software.</em></p><p><em>Jake is the co-founder of SpecStory, a tool that helps developers preserve and share their AI coding sessions. Before SpecStory, Jake led product teams at Docker and DigitalOcean.</em></p><p>Watch the conversation here: </p><div id="youtube2-AAvT0NMJUqA" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;AAvT0NMJUqA&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/AAvT0NMJUqA?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>]]></content:encoded></item><item><title><![CDATA[Intentional Underspecification]]></title><description><![CDATA[When bad prompting is actually good]]></description><link>https://newsletter.specstory.com/p/intentional-underspecification</link><guid isPermaLink="false">https://newsletter.specstory.com/p/intentional-underspecification</guid><dc:creator><![CDATA[Jake Levirne]]></dc:creator><pubDate>Mon, 04 Aug 2025 01:28:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!CRjM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3a00b6d-9b47-4f2f-95dd-fb79dd55f207_1392x752.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In AI-assisted development, we typically emphasize well-structured prompts with comprehensive context. Tools like SpecFlow exemplify this approach, enabling developers to provide rich contextual information. However, there are specific scenarios where intentionally underspecified prompts yield superior results through enabling AI experimentation and creative problem-solving.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CRjM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3a00b6d-9b47-4f2f-95dd-fb79dd55f207_1392x752.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CRjM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3a00b6d-9b47-4f2f-95dd-fb79dd55f207_1392x752.png 424w, https://substackcdn.com/image/fetch/$s_!CRjM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3a00b6d-9b47-4f2f-95dd-fb79dd55f207_1392x752.png 848w, https://substackcdn.com/image/fetch/$s_!CRjM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3a00b6d-9b47-4f2f-95dd-fb79dd55f207_1392x752.png 1272w, https://substackcdn.com/image/fetch/$s_!CRjM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3a00b6d-9b47-4f2f-95dd-fb79dd55f207_1392x752.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CRjM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3a00b6d-9b47-4f2f-95dd-fb79dd55f207_1392x752.png" width="1392" height="752" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d3a00b6d-9b47-4f2f-95dd-fb79dd55f207_1392x752.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:752,&quot;width&quot;:1392,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1323209,&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.specstory.com/i/169651012?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3a00b6d-9b47-4f2f-95dd-fb79dd55f207_1392x752.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_!CRjM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3a00b6d-9b47-4f2f-95dd-fb79dd55f207_1392x752.png 424w, https://substackcdn.com/image/fetch/$s_!CRjM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3a00b6d-9b47-4f2f-95dd-fb79dd55f207_1392x752.png 848w, https://substackcdn.com/image/fetch/$s_!CRjM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3a00b6d-9b47-4f2f-95dd-fb79dd55f207_1392x752.png 1272w, https://substackcdn.com/image/fetch/$s_!CRjM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3a00b6d-9b47-4f2f-95dd-fb79dd55f207_1392x752.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Understanding Intentional vs. Unintentional Underspecification</strong></p><p>The critical distinction lies in purposeful design. Intentional underspecification serves as a strategic tool for discovery, while unintentional vagueness leads to unpredictable or suboptimal outputs. This technique requires careful consideration of when precision is essential versus when exploration adds value.</p><p><strong>Practical Applications for Underspecified Prompts</strong></p><p><strong>1. Data Model Design</strong></p><ul><li><p><strong>Instead of:</strong> "Create a PostgreSQL schema with users, posts, and comments tables"</p></li><li><p><strong>Try:</strong> "Design a data structure for a community discussion platform"</p></li><li><p><strong>Benefit:</strong> AI may suggest alternative approaches like graph databases for relationship-heavy data or document stores for flexible content structures</p></li></ul><p><strong>2. UI/UX Design Exploration</strong></p><ul><li><p><strong>Instead of:</strong> "Create a React form with email and password fields using Material-UI"</p></li><li><p><strong>Try:</strong> "Design an onboarding experience for a meditation app"</p></li><li><p><strong>Benefit:</strong> AI might propose progressive disclosure patterns, biometric authentication options, visual breathing exercises during loading, or gamification elements you hadn't considered</p></li></ul><p><strong>3. Sample Data Generation</strong></p><ul><li><p><strong>Instead of:</strong> "Generate 10 user records with name, email, age, and registration date"</p></li><li><p><strong>Try:</strong> "Create realistic sample data for a fitness tracking application"</p></li><li><p><strong>Benefit:</strong> AI often includes relevant patterns you might overlook, like seasonal variations, user behavior clusters, edge cases</p></li></ul><p><strong>4. Architecture Decisions</strong></p><ul><li><p><strong>Instead of:</strong> "Implement this as a REST API with PostgreSQL"</p></li><li><p><strong>Try:</strong> "This system needs to handle real-time collaboration for distributed teams"</p></li><li><p><strong>Benefit:</strong> Opens possibilities for WebSocket implementations, event-driven architectures, or hybrid approaches</p></li></ul><p><strong>5. Technology Stack Selection</strong></p><ul><li><p><strong>Instead of:</strong> "Use React with Redux for state management"</p></li><li><p><strong>Try:</strong> "Build an interactive dashboard for data visualization"</p></li><li><p><strong>Benefit:</strong> May surface alternatives like Vue with Pinia or even specialized visualization frameworks</p></li></ul><p><strong>Implementation Strategy</strong></p><ol><li><p><strong>Identify Exploration Opportunities</strong></p><ul><li><p>Early-stage design decisions</p></li><li><p>Proof-of-concept development</p></li><li><p>Architecture evaluation phases</p></li><li><p>Creative problem-solving scenarios</p></li></ul></li><li><p><strong>Run Parallel Experiments</strong></p><ul><li><p>Submit the same underspecified prompt multiple times</p></li><li><p>Collect diverse approaches</p></li><li><p>Request comparative analysis of the generated solutions</p></li></ul></li><li><p><strong>Apply Constraints Post-Generation</strong></p><ul><li><p>After receiving initial suggestions, introduce your specific requirements</p></li><li><p>Ask the AI to evaluate options against your constraints</p></li><li><p>Iterate based on insights gained</p></li></ul></li><li><p><strong>Engage in Clarifying Dialogue</strong></p><ul><li><p>After receiving an initial proposal, prompt the AI to ask clarifying questions</p></li><li><p>Example follow-up: "What questions would you need answered to determine if this approach or an alternative would work better for my specific context?"</p></li><li><p>This technique surfaces hidden assumptions and unconsidered constraints</p></li><li><p>The AI's questions often reveal critical factors you hadn't explicitly considered</p></li></ul></li></ol><p><strong>Framework for Decision Making</strong></p><p>Consider these questions when deciding specification level:</p><ul><li><p>Is this a greenfield opportunity or constrained by existing systems?</p></li><li><p>Would alternative approaches provide significant value?</p></li><li><p>Are there established patterns that must be followed?</p></li><li><p>Is this exploratory work or production implementation?</p></li></ul><p><strong>Practical Example: Storage Solution Selection</strong></p><p>Rather than specifying "implement SQLite for local storage," consider:</p><ol><li><p>Describe the context: "Small application, local deployment, structured data with relationships"</p></li><li><p>Review AI suggestions: might propose SQLite, but also IndexedDB for browser-based apps, or embedded key-value stores</p></li><li><p>Engage in dialogue: "What questions would help determine the best storage solution for this use case?"</p></li><li><p>Evaluate trade-offs: request analysis of each option based on the clarified requirements</p></li><li><p>Make informed decision: choose based on comprehensive understanding rather than initial assumptions</p></li></ol><p><strong>Key Takeaways</strong></p><ul><li><p>Underspecification is a tool, not a default approach</p></li><li><p>Use it deliberately during exploration and design phases</p></li><li><p>Leverage AI as a thought partner for discovering possibilities</p></li><li><p>Engage in iterative dialogue to uncover hidden requirements</p></li><li><p>Always validate suggestions against your specific requirements</p></li></ul><p>This balanced approach to prompt engineering enables developers to harness AI's creative potential while maintaining control over critical decisions. The goal is not to abdicate responsibility but to expand the solution space before converging on optimal implementations. By treating AI as a collaborative partner that can both propose solutions and help refine requirements, we create a more robust decision-making process that combines human insight with machine exploration.</p>]]></content:encoded></item><item><title><![CDATA[When Anyone Can Build Software, Should I Still Build Software?]]></title><description><![CDATA[Why this is the beginning, and not the end of software craft]]></description><link>https://newsletter.specstory.com/p/when-anyone-can-build-software-should</link><guid isPermaLink="false">https://newsletter.specstory.com/p/when-anyone-can-build-software-should</guid><dc:creator><![CDATA[Jake Levirne]]></dc:creator><pubDate>Thu, 08 May 2025 14:32:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/wB7HstiwcXc" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It used to take special skills to build good software. It still does, just a different mix.</p><p>At one point I was a "serious hobbiest" photographer. I had grown up in a house with a darkroom, made an early switch to digital, and have had an SLR for most of my life.</p><p>But the proliferation of photographs - orders and orders of magnitudes more than there had been just a decade before left me creatively paralyzed, overwhelmed by the sense that every possible image had already been captured countless times.</p><p>Then I came to realize that the jagged edge that defined photography as art, had changed. The next photo artist wouldn't produce novelty in the same way Ansel Adams had decades before. Instead, projects that made use of millions of photographs became interesting, like Photosynth from Microsoft Research:</p><div id="youtube2-wB7HstiwcXc" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;wB7HstiwcXc&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/wB7HstiwcXc?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><p>Which eventually was used in Microsoft Flight Simulator to create buildings and terrain across the entire world.</p><p>I even started a company at this jagged edge&#8212; Art Moments let people turn their snapshots into artwork by printing them on watercolor paper and canvas (now a common offering from Shutterfly and others).</p><p>Entire forms of media, like Instagram, opened up and we found new ways to communicate with each other.</p><p>We're at the Photosynth moment for software.</p><p>And just as photography evolved from a specialized craft to a ubiquitous medium of expression, software development is undergoing a similar transformation.</p><p>Today, the barriers to creating software are dissolving. Tools that once required deep technical expertise now welcome newcomers with intuitive interfaces and assistive capabilities. The proliferation of AI code generation assistants, and large language models has democratized creation in ways unimaginable just a few years ago.</p><p>But this doesn't mean the end of craft&#8212;rather, it signals a shift in what we value. Just as the photographer's eye became more crucial than darkroom techniques, today's software creators are valued for their vision, problem-solving abilities, and human-centered design thinking over syntax mastery.</p><p>The most interesting software emerging today isn't distinguished merely by its technical implementation but by how deeply it understands human needs and contexts. The new literacy isn't just writing code&#8212;it's writing code that matters.</p><p>Some lament this change, just as photographers once mourned the loss of exclusivity. But I've come to see it differently. When millions can build, the question becomes not "Can you make software?" but "What will you make, and why does it matter?"</p><p>This democratization opens doors to voices previously excluded from the conversation. People with domain expertise but without traditional coding backgrounds can now build solutions to problems they intimately understand. Healthcare workers creating patient management systems. Teachers developing custom learning tools. Community organizers building platforms for collective action.</p><p>The future belongs not to those who can write the most elegant algorithms, but to those who can imagine new possibilities at the intersection of human needs and technological capabilities.</p><p>So rather than feeling sad or unmotivated by this sea change, I've found renewed purpose. Just as photography evolved into new art forms and communication channels, software development is becoming something richer, more diverse, and potentially more meaningful than before.</p><p>The skills that matter now are empathy, systems thinking, ethical reasoning, and creative problem-solving. Technical knowledge remains important, but as a means rather than an end.</p><p><strong>Empathy:</strong> Consider the story of Ava, who built an app to help seniors manage medications. Her first version, though technically flawless, confused its target users. Rather than blaming "user error," she spent a week observing her grandmother navigate the interface. She discovered assumptions she'd made about comfort with technology that simply weren't true. The redesigned app eliminated technical jargon, increased touch targets, and incorporated familiar physical metaphors like a pill box. Usage soared not because Ava wrote better code, but because she stepped outside her own perspective.</p><p><strong>Systems thinking:</strong> Take Marco, who was tasked with creating yet another customer management portal. Instead of building everything from scratch, he mapped the ecosystem of available tools and services. He orchestrated APIs from existing payment processors, integrated an open-source analytics platform, and leveraged authentication services rather than reinventing them. The result wasn't just a CRUD app, but an interconnected system that shared data across previously siloed departments. Marco's value wasn't in writing every line of code, but in understanding how pieces could work together to create something greater than the sum of its parts.</p><p><strong>Ethical reasoning:</strong> When Priya's team built an AI-powered hiring tool for a large corporation, initial tests showed it favored candidates from prestigious universities and those with traditionally male names in technical roles. Rather than deploying what seemed "objectively" effective, Priya insisted on examining these patterns. She advocated for rethinking what metrics constituted a "good" employee and diversifying the training data. The revised system identified candidates who had been historically overlooked yet performed excellently. The most valuable line of code Priya wrote wasn't an algorithm&#8212;it was a question about who their system might be leaving behind.</p><p><strong>Problem-solving:</strong> Jamal was developing software for a hospital when he noticed nurses spending hours manually entering data from one system to another. The conventional approach would have been to automate this specific task. But by asking "why does this transfer need to happen at all?" Jamal discovered two systems that should have been talking to each other but weren't. Rather than coding a sophisticated transfer tool, he created a simple integration between existing systems. The solution required relatively little code but saved thousands of hours and reduced errors. The most important problem he solved wasn't at the code level, but at the workflow level.</p><p>We're just beginning to see what this new era might bring. My vision for this future is both practical and transformative:</p><ul><li><p>Interfaces will feel intuitive not because they follow universal design principles, but because they're created by the very people who use them daily</p></li><li><p>Software will become ephemeral and situational&#8212;like snapshots, applications can serve their purpose for a moment without needing to be preserved in a digital museum</p></li><li><p>Complex systems will emerge through composition, as we build increasingly sophisticated solutions atop existing technologies rather than starting from scratch</p></li><li><p>Hyper-personalized software will proliferate, with applications tailored not just to demographic segments but to individuals and specific communities</p></li><li><p>We'll witness the rise of software ecosystems where millions of specialized applications can seamlessly work together, creating capabilities greater than any single platform</p></li></ul><h2>How to Adapt Now</h2><p>So how do you navigate this shift? How do you ensure you're riding this wave rather than being swept under by it?</p><p><strong>Embrace the disposable nature of code.</strong> Your work isn't precious&#8212;it's a means to an end. The artifact that matters is the solution, not the implementation. This mindset frees you to create multiple rapid prototypes, test hypotheses quickly, and pivot without emotional attachment to what you've built.</p><p><strong>Learn to build, regardless of your background.</strong> There's no longer an excuse to be merely a consumer of technology. Even if you never intend to code professionally, understanding how to create simple tools gives you agency in a software-mediated world. Start small&#8212;automate a repetitive task, build a simple app to solve your own problem.</p><p><strong>Practice just-in-time skill acquisition.</strong> Focus on making things you care about, and learn what you need as you go. The person who attempts to master everything before creating anything will be perpetually preparing. Instead, set ambitious goals and let necessity guide your learning path.</p><p>Like photography before it, software is becoming a medium through which we understand and reshape our world&#8212;not just a technical discipline, but a form of expression, connection, and transformation available to all.</p><p>The future is being written in more voices than ever before. Make sure yours is among them.</p>]]></content:encoded></item><item><title><![CDATA[🌀 Vibe Coding ≠ Team Flow]]></title><description><![CDATA[One dev&#8217;s flow state is another dev&#8217;s &#8220;wait, what did we just ship?&#8221;]]></description><link>https://newsletter.specstory.com/p/vibe-coding-team-flow</link><guid isPermaLink="false">https://newsletter.specstory.com/p/vibe-coding-team-flow</guid><dc:creator><![CDATA[Jake Levirne]]></dc:creator><pubDate>Tue, 08 Apr 2025 09:58:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!rG3v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47457cbb-72ce-4421-81c8-4e397709533f_1408x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>We&#8217;re in a golden era of <em>personal</em> flow.</p><p>AI tools like Cursor, Cody, and Copilot make it easier than ever to enter the zone and <em>stay there</em>. You can go from idea to prototype in hours. It feels amazing, almost like flying.</p><p>But here&#8217;s the thing we&#8217;ve learned firsthand: <strong>Just because one person is flying doesn't mean the whole team is moving forward.</strong></p><div><hr></div><p>At SpecStory, we&#8217;ve seen this dynamic play out on our own team.</p><p>One person might hit a hot streak with AI and prototype something over a weekend, creating a sense that we&#8217;re nearly finished.</p><p>But &#8220;done&#8221; is a mirage.</p><p>Because getting code into production means that it meets the bar, that it fits the plan, that works with the rest of our system. And it still takes lots of coordination. And AI doesn&#8217;t (yet) handle:</p><ul><li><p>Prioritization</p></li><li><p>Clear outcomes</p></li><li><p>Communication between teammates</p></li><li><p>Roles and responsibilities</p></li><li><p>Quality and supportability expectations</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_!rG3v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47457cbb-72ce-4421-81c8-4e397709533f_1408x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rG3v!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47457cbb-72ce-4421-81c8-4e397709533f_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!rG3v!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47457cbb-72ce-4421-81c8-4e397709533f_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!rG3v!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47457cbb-72ce-4421-81c8-4e397709533f_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!rG3v!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47457cbb-72ce-4421-81c8-4e397709533f_1408x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rG3v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47457cbb-72ce-4421-81c8-4e397709533f_1408x768.png" width="1408" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/47457cbb-72ce-4421-81c8-4e397709533f_1408x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:1408,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1948984,&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.specstory.com/i/158775639?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47457cbb-72ce-4421-81c8-4e397709533f_1408x768.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_!rG3v!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47457cbb-72ce-4421-81c8-4e397709533f_1408x768.png 424w, https://substackcdn.com/image/fetch/$s_!rG3v!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47457cbb-72ce-4421-81c8-4e397709533f_1408x768.png 848w, https://substackcdn.com/image/fetch/$s_!rG3v!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47457cbb-72ce-4421-81c8-4e397709533f_1408x768.png 1272w, https://substackcdn.com/image/fetch/$s_!rG3v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47457cbb-72ce-4421-81c8-4e397709533f_1408x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>A couple months ago, we rapidly prototyped our <em><a href="https://docs.specstory.com/features#share-and-editorialize-your-ai-conversations">sharing functionality</a></em> in just a few days.</p><p>We were pumped. It worked.</p><p>But it still took <strong>two more weeks</strong> before we could ship it.</p><p>Not because of blockers, but because the rest of the team needed time to process the work from their own perspectives: how it impacted design, how it fit into the broader experience, and how it would be supported.</p><div><hr></div><p><strong>So yeah, personal flow is real. But team flow? That&#8217;s the next frontier.</strong></p><p>I spoke with dev teams at Assignar and Instacart. They share the same feeling.</p><p>AI tools are delivering at the individual level.</p><p>But <em><a href="https://specstory.com/teams">teams</a></em> are still tripping over the same coordination problems we&#8217;ve always had.</p><div><hr></div><p>We think team flow looks different.</p><p>It&#8217;s not just everyone in personal flow at the same time. It&#8217;s shared clarity. Shared pace. Shared outcomes.</p><p>It involves:</p><ol><li><p><strong>Clearly preserving</strong> <strong>intent</strong> so teammates can easily follow your path</p></li><li><p><strong>Reducing friction </strong>between shaping ideas and building solutions</p></li><li><p><strong>Sharing ownership</strong> instead of merely handing off tasks</p></li></ol><p>SpecStory is our bet that <em><strong>team flow</strong></em> is the unlock.</p><p>The magic isn&#8217;t just in how fast <em>you</em> can move. It&#8217;s in how fast <em>we</em> can move <em>together</em>.</p><div><hr></div><p>&#128268; Does this resonate? We&#8217;re actively recruiting <a href="https://admin.typeform.com/form/UQiOWkSf/share">Design Partners</a> who believe <em>human review matters more than ever</em>. Help shape the next evolution of our product!</p>]]></content:encoded></item><item><title><![CDATA[The One-Pizza Team]]></title><description><![CDATA[How AI is Reshaping Product Development Squads]]></description><link>https://newsletter.specstory.com/p/the-one-pizza-team</link><guid isPermaLink="false">https://newsletter.specstory.com/p/the-one-pizza-team</guid><dc:creator><![CDATA[Jake Levirne]]></dc:creator><pubDate>Tue, 18 Mar 2025 15:07:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!LylZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43a70dea-08f4-471d-bac8-b511e4d03676_1118x1040.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Remember Amazon's famous "two-pizza rule"? Jeff Bezos introduced it to combat meeting bloat and keep teams small enough to feed with just two pizzas. For years, this has been the gold standard for efficient product teams - typically 1 designer, 1 PM, and 7-8 engineers. I've built and managed many of these teams, and they can absolutely rock.</p><p>But I believe we're headed for an even leaner future: <strong>the one-pizza team</strong>.</p><h2>Why Teams Will Shrink</h2><p>Let me be clear: I'm not in the "AI will take all our jobs" camp. In fact, I believe the opposite. Thanks to Jevons paradox - where technological efficiency improvements increase (rather than decrease) total resource consumption - we'll likely build <em>more</em> software than ever before, requiring <em>more</em> developers than we have today.</p><p>Ray Kurzweil predicts we're on a path to "imbue every atom in the universe with intelligence." Even if he's only half right, we have an unfathomable amount of software yet to build.</p><p>But the teams building it? They're about to transform dramatically.</p><h2>The New Team Composition</h2><p>Within a year, I predict a part-time designer, 1 PM, and just 1-2 engineers will accomplish what today's two-pizza teams deliver. Why? <strong>AI is changing the productivity equation.</strong></p><p>AI tools aren't just assisting with writing, designing, and coding - they're creating such a significant efficiency boost that our entire workflow paradigm must evolve to keep pace. The bottleneck is shifting from engineering capacity to something else entirely: <strong>attention and intent</strong>.</p><h2>The Mathematics of Small Teams</h2><p>Smaller teams have always been more efficient per person, largely because of communication overhead. Metcalfe's law helps explain this: the number of potential connections between team members grows exponentially with team size.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LylZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43a70dea-08f4-471d-bac8-b511e4d03676_1118x1040.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LylZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43a70dea-08f4-471d-bac8-b511e4d03676_1118x1040.jpeg 424w, https://substackcdn.com/image/fetch/$s_!LylZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43a70dea-08f4-471d-bac8-b511e4d03676_1118x1040.jpeg 848w, https://substackcdn.com/image/fetch/$s_!LylZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43a70dea-08f4-471d-bac8-b511e4d03676_1118x1040.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!LylZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43a70dea-08f4-471d-bac8-b511e4d03676_1118x1040.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LylZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43a70dea-08f4-471d-bac8-b511e4d03676_1118x1040.jpeg" width="1118" height="1040" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/43a70dea-08f4-471d-bac8-b511e4d03676_1118x1040.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1040,&quot;width&quot;:1118,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!LylZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43a70dea-08f4-471d-bac8-b511e4d03676_1118x1040.jpeg 424w, https://substackcdn.com/image/fetch/$s_!LylZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43a70dea-08f4-471d-bac8-b511e4d03676_1118x1040.jpeg 848w, https://substackcdn.com/image/fetch/$s_!LylZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43a70dea-08f4-471d-bac8-b511e4d03676_1118x1040.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!LylZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43a70dea-08f4-471d-bac8-b511e4d03676_1118x1040.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In a 10-person team, there are 45 possible communication channels. Cut that to 4 people? Just 6 channels - a dramatic reduction in coordination complexity.</p><p>But efficiency isn't the only benefit. Smaller teams typically experience:</p><p><strong>Higher motivation and ownership</strong> - With fewer people, individual contributions have greater visibility and impact</p><p><strong>Reduced free-riding</strong> - There's nowhere to hide in a small team</p><p><strong>Faster decision-making</strong> - Fewer stakeholders means quicker alignment</p><p>Remember Instagram? Three founders outpaced Facebook's entire photo-sharing teams because they combined these small-team advantages with a clean slate.</p><h2>The Small Team Challenges (And Solutions)</h2><p>Of course, smaller teams face significant challenges too. Two key problems:</p><ol><li><p><strong>Blind spots</strong>: falling prey to tunnel vision and the belief that &#8220;if you build it they will come.<br><em>Solution:</em> Get out of the building - regularly engage with users, stakeholders, and other teams to maintain perspective</p></li><li><p><strong>The build/maintain trap</strong>: small teams that move fast can produce a lot in a small period of time, only some of which is actually valuable.<br><em>Solution:</em> Don't get precious about code you've written. Be willing to restart when you hit local maxima. As your product grows quickly, resist the urge to maintain everything you've built.</p></li></ol><h2>Scaling Beyond One Team</h2><p>Here's where things get interesting. Individual teams will be smaller and more productive, but how do multiple teams coordinate to deliver something greater than what any single team could accomplish?</p><p>Success requires mastering two critical skills:</p><h3>Decomposition</h3><p>Breaking big problems into truly independent smaller ones allows teams to maintain their small-team advantages. Done poorly, multiple teams become one big, slow team with exponential communication channels.</p><h3>Synthesis</h3><p>This is the make-or-break skill. Teams must combine their separate products into coherent offerings with shared distribution channels. Without synthesis, you end up with disconnected products - essentially a venture capital portfolio rather than a unified business.</p><p>The most successful tech companies - Amazon, Apple, and IBM (in its prime) - mastered this synthesis. They created coherent ecosystems where products enhance each other through shared distribution, user bases, and data.</p><h2>The Bottom Line</h2><p>The AI revolution isn't just changing what we build but how we organize to build it. The one-pizza team is coming - smaller, more focused, and empowered by AI assistants to deliver what once required twice the headcount.</p><p>Companies that learn to orchestrate these hyper-efficient teams through skilled decomposition and synthesis won't just survive - they'll define the next era of product development.</p><p>What do you think? Have you seen evidence of this shift in your organization? I'd love to hear your thoughts.</p>]]></content:encoded></item><item><title><![CDATA[All that's left is care]]></title><description><![CDATA[Why giving a shit matters]]></description><link>https://newsletter.specstory.com/p/all-thats-left-is-care</link><guid isPermaLink="false">https://newsletter.specstory.com/p/all-thats-left-is-care</guid><dc:creator><![CDATA[Jake Levirne]]></dc:creator><pubDate>Thu, 06 Mar 2025 15:37:37 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!dR-J!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20ac1c6e-12b8-479d-8246-4ee2159ed7af_739x415.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>At SpecStory, we&#8217;re focused on helping teams build software. And of course, we ourselves are a team that&#8217;s building software. So we get to live through the same roller coaster rides as all of you as we adopt AI codegen in our workflows.</p><p>One question we ask ourselves is what are we building that&#8217;s defensible? What&#8217;s actually worth building. Especially given that in many cases, software that used to take weeks or months to code and ship can now be built in days or hours. Along these lines, Lenny shared a video from Alex Komoroske where he argues that in the age of AI, taste is the most important thing. </p><p>I&#8217;d like to take a slightly different angle on this because taste is subjective, taste is inactionable, taste is whimsical, and taste is something you have or you don&#8217;t.</p><p>Something more concrete than taste, and something that we can all practice, is caring. Caring deeply about who we&#8217;re building for, what they&#8217;re trying to accomplish, the pains, challenges, and triumphs they face, and the small interactions that make all of these things better.</p><h2>Taste</h2><ul><li><p>Comes from within.</p></li><li><p>If you don&#8217;t like it, tough.</p></li><li><p>Can change as the wind blows.</p></li><li><p>Form &gt; Function</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dR-J!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20ac1c6e-12b8-479d-8246-4ee2159ed7af_739x415.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dR-J!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20ac1c6e-12b8-479d-8246-4ee2159ed7af_739x415.jpeg 424w, https://substackcdn.com/image/fetch/$s_!dR-J!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20ac1c6e-12b8-479d-8246-4ee2159ed7af_739x415.jpeg 848w, https://substackcdn.com/image/fetch/$s_!dR-J!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20ac1c6e-12b8-479d-8246-4ee2159ed7af_739x415.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!dR-J!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20ac1c6e-12b8-479d-8246-4ee2159ed7af_739x415.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dR-J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20ac1c6e-12b8-479d-8246-4ee2159ed7af_739x415.jpeg" width="346" height="194.30311231393776" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/20ac1c6e-12b8-479d-8246-4ee2159ed7af_739x415.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:415,&quot;width&quot;:739,&quot;resizeWidth&quot;:346,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Salt Bae and the best Instagram campaign of the year... | Julio Viskovich&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="Salt Bae and the best Instagram campaign of the year... | Julio Viskovich" title="Salt Bae and the best Instagram campaign of the year... | Julio Viskovich" srcset="https://substackcdn.com/image/fetch/$s_!dR-J!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20ac1c6e-12b8-479d-8246-4ee2159ed7af_739x415.jpeg 424w, https://substackcdn.com/image/fetch/$s_!dR-J!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20ac1c6e-12b8-479d-8246-4ee2159ed7af_739x415.jpeg 848w, https://substackcdn.com/image/fetch/$s_!dR-J!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20ac1c6e-12b8-479d-8246-4ee2159ed7af_739x415.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!dR-J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20ac1c6e-12b8-479d-8246-4ee2159ed7af_739x415.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><h2>Caring</h2><ul><li><p>Focuses on others.</p></li><li><p>If you don&#8217;t like it, tell me.</p></li><li><p>Can be steadfast as everything else changes.</p></li><li><p>Function &gt; Form</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_!Ovd7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f5f5825-7358-434e-b4ff-5a5da6ab74d2_1126x1186.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ovd7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f5f5825-7358-434e-b4ff-5a5da6ab74d2_1126x1186.png 424w, https://substackcdn.com/image/fetch/$s_!Ovd7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f5f5825-7358-434e-b4ff-5a5da6ab74d2_1126x1186.png 848w, https://substackcdn.com/image/fetch/$s_!Ovd7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f5f5825-7358-434e-b4ff-5a5da6ab74d2_1126x1186.png 1272w, https://substackcdn.com/image/fetch/$s_!Ovd7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f5f5825-7358-434e-b4ff-5a5da6ab74d2_1126x1186.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ovd7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f5f5825-7358-434e-b4ff-5a5da6ab74d2_1126x1186.png" width="328" height="345.4777975133215" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0f5f5825-7358-434e-b4ff-5a5da6ab74d2_1126x1186.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1186,&quot;width&quot;:1126,&quot;resizeWidth&quot;:328,&quot;bytes&quot;:261850,&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.specstory.com/i/158053785?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f5f5825-7358-434e-b4ff-5a5da6ab74d2_1126x1186.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_!Ovd7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f5f5825-7358-434e-b4ff-5a5da6ab74d2_1126x1186.png 424w, https://substackcdn.com/image/fetch/$s_!Ovd7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f5f5825-7358-434e-b4ff-5a5da6ab74d2_1126x1186.png 848w, https://substackcdn.com/image/fetch/$s_!Ovd7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f5f5825-7358-434e-b4ff-5a5da6ab74d2_1126x1186.png 1272w, https://substackcdn.com/image/fetch/$s_!Ovd7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f5f5825-7358-434e-b4ff-5a5da6ab74d2_1126x1186.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>PostHog, which we use for free today, proactively sent me this email which anticipates my concerns and addresses them directly and helpfully.</p><p>Caring is a way to generate long term value. One of the best examples of this is Amazon, a company obsessed with caring (about customers). In most cases you&#8217;d be hard pressed to argue that Amazon has great taste&#8212; their UI designs have been utilitarian since day 1, AWS services all emphasize function over form, and their brand identity is practically nonexistent. Yet, despite this lack of aesthetic refinement, Amazon&#8217;s relentless <a href="https://www.youtube.com/watch?v=ADUfddD6Ivs">obsession with customers</a> has made it one of the most successful companies in history.</p><p>Now I&#8217;m presenting these at odds with each other and making the case for caring. But we can find examples of companies that have won on taste alone&#8212; every successful luxury brand. And we can find examples of companies that have a blend of both. Apple is known for its taste (along with its &#8220;you&#8217;re holding it wrong&#8221; attitude), but they clearly care about all the details that make their products usable and useful for their customers.</p><p>But here&#8217;s the rub&#8212; you can&#8217;t care about everything. When I talk about Amazon as a <em>caring</em> company, I mean that strictly with respect to their customers. They are notoriously uncaring about their warehouse workers and their employees. Or said another way, for better or worse they put their customers&#8217; needs far ahead of their employees&#8217;. </p><p>For SpecStory, caring is our approach. Specifically, we care deeply about the people who are breaking new ground today using AI code generation to build software. And this means sweating over <a href="https://marketplace.visualstudio.com/items/SpecStory.specstory-vscode/changelog">issues</a> they encounter when using our extension in the wild (even if that means that they&#8217;re saving multi-directory Workspaces as files while running Cursor on Windows with WSL). In fact we think of <em>fixing real world issues</em> as one way of creating value in SpecStory above and beyond what anyone could do if they just prompted an AI coding agent to &#8220;make a Cursor extension to save and share chat histories.&#8221;</p><p>But things move fast, and the world evolves quickly, so we need to get even clearer about <em>what we care about</em>. What happens when software is built in new ways, beyond the current AI codegen tools? What happens if we&#8217;re wrong about the timeframe for the widespread adoption of coding agents? What happens when different groups of AI-powered software builders have diverging needs? </p><p>We all need to figure out our path to creating long term value, and there are examples to draw on where tastemaking or caring, obsessively, have lead to that value. But I&#8217;d argue that &#8220;be tasteful&#8221; is less actionable than &#8220;be caring&#8221;. </p>]]></content:encoded></item><item><title><![CDATA[The Hill Climbing Trap]]></title><description><![CDATA[Startups, local maxima and navigating our path to success]]></description><link>https://newsletter.specstory.com/p/the-hill-climbing-trap</link><guid isPermaLink="false">https://newsletter.specstory.com/p/the-hill-climbing-trap</guid><dc:creator><![CDATA[Jake Levirne]]></dc:creator><pubDate>Tue, 25 Feb 2025 15:30:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!pkGg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38789d3c-1689-41c9-9727-2a4d11bc8594_1600x1018.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;m feeling pretty good about active user growth for the <a href="https://marketplace.visualstudio.com/items?itemName=SpecStory.specstory-vscode">SpecStory Cursor Extension</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_!pkGg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38789d3c-1689-41c9-9727-2a4d11bc8594_1600x1018.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pkGg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38789d3c-1689-41c9-9727-2a4d11bc8594_1600x1018.png 424w, https://substackcdn.com/image/fetch/$s_!pkGg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38789d3c-1689-41c9-9727-2a4d11bc8594_1600x1018.png 848w, https://substackcdn.com/image/fetch/$s_!pkGg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38789d3c-1689-41c9-9727-2a4d11bc8594_1600x1018.png 1272w, https://substackcdn.com/image/fetch/$s_!pkGg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38789d3c-1689-41c9-9727-2a4d11bc8594_1600x1018.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pkGg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38789d3c-1689-41c9-9727-2a4d11bc8594_1600x1018.png" width="1456" height="926" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/38789d3c-1689-41c9-9727-2a4d11bc8594_1600x1018.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:926,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:152611,&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.specstory.com/i/157709916?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38789d3c-1689-41c9-9727-2a4d11bc8594_1600x1018.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_!pkGg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38789d3c-1689-41c9-9727-2a4d11bc8594_1600x1018.png 424w, https://substackcdn.com/image/fetch/$s_!pkGg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38789d3c-1689-41c9-9727-2a4d11bc8594_1600x1018.png 848w, https://substackcdn.com/image/fetch/$s_!pkGg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38789d3c-1689-41c9-9727-2a4d11bc8594_1600x1018.png 1272w, https://substackcdn.com/image/fetch/$s_!pkGg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38789d3c-1689-41c9-9727-2a4d11bc8594_1600x1018.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>But as Andy Grove warns, <a href="https://www.amazon.com/Only-Paranoid-Survive-Exploit-Challenge/dp/0385483821">only the paranoid survive</a>. I&#8217;m paranoid about whether we&#8217;re climbing the right hill. </p><p>Are we doing 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_!GSAQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c1a29e8-dfa0-48e4-a2af-8949ed740672_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GSAQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c1a29e8-dfa0-48e4-a2af-8949ed740672_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!GSAQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c1a29e8-dfa0-48e4-a2af-8949ed740672_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!GSAQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c1a29e8-dfa0-48e4-a2af-8949ed740672_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!GSAQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c1a29e8-dfa0-48e4-a2af-8949ed740672_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GSAQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c1a29e8-dfa0-48e4-a2af-8949ed740672_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7c1a29e8-dfa0-48e4-a2af-8949ed740672_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:355587,&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;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.specstory.com/i/157709916?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c1a29e8-dfa0-48e4-a2af-8949ed740672_2752x1536.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_!GSAQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c1a29e8-dfa0-48e4-a2af-8949ed740672_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!GSAQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c1a29e8-dfa0-48e4-a2af-8949ed740672_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!GSAQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c1a29e8-dfa0-48e4-a2af-8949ed740672_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!GSAQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c1a29e8-dfa0-48e4-a2af-8949ed740672_2752x1536.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Only to find out we&#8217;re really here?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tKCf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04b815e8-e768-4a1f-ab04-a3f10caaf379_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tKCf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04b815e8-e768-4a1f-ab04-a3f10caaf379_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!tKCf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04b815e8-e768-4a1f-ab04-a3f10caaf379_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!tKCf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04b815e8-e768-4a1f-ab04-a3f10caaf379_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!tKCf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04b815e8-e768-4a1f-ab04-a3f10caaf379_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tKCf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04b815e8-e768-4a1f-ab04-a3f10caaf379_2752x1536.jpeg" width="728" height="406.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/04b815e8-e768-4a1f-ab04-a3f10caaf379_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:397618,&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;:false,&quot;internalRedirect&quot;:&quot;https://newsletter.specstory.com/i/157709916?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04b815e8-e768-4a1f-ab04-a3f10caaf379_2752x1536.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_!tKCf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04b815e8-e768-4a1f-ab04-a3f10caaf379_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!tKCf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04b815e8-e768-4a1f-ab04-a3f10caaf379_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!tKCf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04b815e8-e768-4a1f-ab04-a3f10caaf379_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!tKCf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04b815e8-e768-4a1f-ab04-a3f10caaf379_2752x1536.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We talk about it as a <a href="https://specstory.com/#about">team</a> frequently.</p><p>We know there&#8217;s much more to solve beyond helping individuals <a href="https://docs.specstory.com/features">save and share</a> their Cursor composer histories. That&#8217;s not the question. </p><p>The critical questions surround whether our Cursor extension will lead us to the <em>tallest peak or not</em>. Will we fall victim to the inertia of initial success? Will we be able to achieve our vision?</p><p>Our vision stated simply: <em>SpecStory helps entrepreneurial teams use all their tools and talents to build valuable software faster, together.</em></p><p>The team knows hill climbing<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a> only to reach a local maxima is a death knell for any VC backed startup. </p><p>If you&#8217;ve ever hiked, you know this approach will leave you higher than you started, but it runs the risk of stranding you on a false peak. This matters for SpecStory and other startups like us because we have limited runway to find product-market fit for a high value customer pain point. </p><p>Unlike the casual hiker who can backtrack to find their way to the summit, we&#8217;re on a much higher stakes climb with limited oxygen and provisions&#8212; getting as high as we can with our scant resources will determine our ultimate success.</p><p>Now back to our vision: SpecStory helps entrepreneurial teams use all their tools and talents to build valuable software faster, <em><strong>together</strong></em>. </p><p>That last word <em>says it all</em>. </p><p>In our case, the deadly local maxima would be to become the best toolkit in the world for individual <a href="https://tolacapital.com/2024/11/13/the-rise-of-the-software-composer-a-new-era-of-software-creation">software composers</a>. </p><p>And so we remind ourselves that helping <em>them</em> is just one step along the way toward helping teams. Those emerging teams &#8212; like us &#8212; that use AI code generation tools (Cursor, Windsurf, Copilot, etc), <em><strong>together</strong></em>, every day across a mix of newly forming roles.</p><p>To that end, we&#8217;re working to build more and more great features into SpecStory that teams can use <em><strong>together</strong></em> to accelerate the benefits of AI coding when used in more  complex real-world projects and workflows. </p><p>Keep an eye out for the first of these: a <code>/cursor/rules</code> generator that will both individuals and teams keep their AI assistants aligned with their intentions and decisions. </p><p>Newsletter subscribers will get a unique code to gain early access to the beta version of this feature. Happy climbing!</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><em>Refresher</em>: <a href="https://en.wikipedia.org/wiki/Hill_climbing">Hill climbing</a> is an algorithmic approach to find an optimal solution to a problem by (1) picking a starting point, (2) looking nearby for a higher (more optimal) point, (3) continuing until no nearby point is higher. </p></div></div>]]></content:encoded></item><item><title><![CDATA[From 4 Replies to 24,000 Members]]></title><description><![CDATA[How Tana built a thriving community by starting small]]></description><link>https://newsletter.specstory.com/p/from-4-replies-to-24000-members</link><guid isPermaLink="false">https://newsletter.specstory.com/p/from-4-replies-to-24000-members</guid><dc:creator><![CDATA[Jake Levirne]]></dc:creator><pubDate>Thu, 06 Feb 2025 14:06:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ETME!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1f45ede-5653-41e6-9866-6d4698406a41_2752x1536.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When Olav Sindre Kriken, Founder &amp; COO of <a href="https://tana.inc/community">Tana</a>, started building their community, he took an approach that might seem counterintuitive in today's growth-obsessed world: <em>he went small.</em> </p><p><em>Really small.</em> </p><p>I was lucky enough to chat with Olav recently and their journey is proof that anyone can build a passionate following by starting small, focusing on the right platforms, and doubling down on real relationships. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ETME!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1f45ede-5653-41e6-9866-6d4698406a41_2752x1536.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ETME!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1f45ede-5653-41e6-9866-6d4698406a41_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ETME!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1f45ede-5653-41e6-9866-6d4698406a41_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ETME!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1f45ede-5653-41e6-9866-6d4698406a41_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ETME!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1f45ede-5653-41e6-9866-6d4698406a41_2752x1536.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ETME!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1f45ede-5653-41e6-9866-6d4698406a41_2752x1536.jpeg" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b1f45ede-5653-41e6-9866-6d4698406a41_2752x1536.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&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_!ETME!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1f45ede-5653-41e6-9866-6d4698406a41_2752x1536.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ETME!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1f45ede-5653-41e6-9866-6d4698406a41_2752x1536.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ETME!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1f45ede-5653-41e6-9866-6d4698406a41_2752x1536.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ETME!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1f45ede-5653-41e6-9866-6d4698406a41_2752x1536.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Here&#8217;s how they did it.</p><h4><strong>1. Start Small&#8212;and Keep It Personal</strong></h4><p>Tana&#8217;s story began with Olav personally sending 400 DMs on Reddit. Only four people responded, but that didn&#8217;t matter. Those four became Tana&#8217;s first &#8220;true fans.&#8221; Early on, Olav and his team did things that weren&#8217;t scalable&#8212;like intense one-on-one support. By investing heavily in just a handful of users, they built an authentic foundation for the wider community.</p><div class="pullquote"><p>&#8220;Our product today looks like it does because of the community.&#8221;</p></div><p>Treat your early members like diamonds&#8212;nurture them and they&#8217;ll help shape your product in ways you never imagined.</p><h4><strong>2. Choose Your Platforms Strategically</strong></h4><p>Not every platform will fit your audience or brand. Tana passed on Discord to reach beyond developers and gamers, opting for Slack instead&#8212;even though Slack&#8217;s free version limits messages to 90 days. Sometimes you just need to embrace platform imperfections and pick one place to go all in, rather than trying to be everywhere at once.</p><h4><strong>3. Create Scarcity</strong></h4><p>There&#8217;s nothing quite like the allure of <em>&#8220;you can&#8217;t have it yet.&#8221;</em> </p><p>Tana grew a massive waitlist of 160,000 people and let individuals skip the line by joining the community and introducing themselves. Scarcity not only builds hype but raises perceived value&#8212;so consider whether charging for your product or access might actually boost interest over a free giveaway.</p><h4><strong>4. Build Community Structure and Roles</strong></h4><p>Not everyone in your community engages the same way. Tana created different tiers:</p><ul><li><p><strong>Navigators:</strong> Power users who help run the community.</p></li><li><p><strong>Ambassadors:</strong> Content creators who develop courses, templates, and resources.</p></li><li><p><strong>Core Members:</strong> The bulk of the community, who participate at varying levels.</p></li></ul><p>Reward top contributors with exclusive features, behind-the-scenes info, or direct meetings with the team. Monetary or swag incentives? </p><p>Not mandatory if you&#8217;re providing genuine value and recognition.</p><h4><strong>5. Let Your Community Evolve</strong></h4><p>A community that starts as product-focused can grow into something bigger&#8212;a place where people come to improve themselves and connect with others. Tana added channels around personal growth, as well as identity-specific groups (ADHD, regional channels) so people could find peers with shared interests. Feature requests and feedback got their own space to keep conversations organized.</p><h4><strong>6. Manage External Presence With Care</strong></h4><p>You can&#8217;t control every external platform, but you can engage thoughtfully. Tana targeted X (formerly Twitter) and LinkedIn for their tech-savvy manager audience. On Reddit, they collaborated with moderators instead of trying to take over. And because Slack doesn&#8217;t store older messages, they made it a habit to export and archive everything to BigQuery every 30 days to preserve valuable insights.</p><h4><strong>7. Keep Leaders Involved</strong></h4><p>Community thrives when leadership is front and center. Olav&#8212;co-founder himself&#8212;is active and visible. A simple greeting to every new member goes a long way toward showing people you value them. When you do roll out major changes, expect an outcry. Negative feedback isn&#8217;t necessarily bad&#8212;silence is worse. Encourage your team not to take criticism personally; it means people care.</p><h4><strong>8. Choose Tools That Serve You</strong></h4><p>While there are countless community tools out there, find the ones that align with your goals. Tana uses CommonRoom for its robust notification and engagement features. Don&#8217;t jump on every shiny new platform&#8212;pick what keeps you responsive and informed.</p><h4><strong>9. Foster Member-Led Content</strong></h4><p>One of the biggest wins for Tana was letting community members take the lead on courses, templates, and tutorials. Support your creators with early features and insider knowledge, rather than just handing out money. People love to tell the story of &#8220;being early&#8221; and growing alongside a brand or product.</p><h4><strong>10. Embrace Growth Systems</strong></h4><p>Scaling means organizing your community. Tana rolled out their &#8220;Navigator&#8221; program to manage the load as membership soared, recognizing that high engagement also means more vocal feedback. Remember that most uproar around changes is temporary&#8212;once users adapt to a new flow, things settle.</p><p>The biggest takeaway? <strong>Deep, authentic connections beat shallow numbers every time.</strong></p><h3><strong>Your Turn: Build a Community That Lasts</strong></h3><p>Ready to cultivate a connected, enthusiastic community of your own? </p><p>Don&#8217;t wait until everything is perfect. </p><p>Start with a few true fans, treat them like diamonds, and be present as a leader. </p><p>Master a single platform, encourage user-driven content, and harness the power of scarcity when it makes sense.</p><p><strong>Call to Action</strong></p><ol><li><p><strong>Pick a single platform</strong> to focus on this month&#8212;commit to daily interactions and personalized engagement.</p></li><li><p><strong>Identify your &#8220;true fans&#8221;</strong> and give them exclusive value or responsibilities, like moderating discussions or testing new features.</p></li><li><p><strong>Embrace feedback</strong>&#8212;positive or negative&#8212;because it means people care enough to speak up.</p></li></ol><p>Implement these steps, and watch your community transform from a handful of fans into a thriving, engaged network of advocates. Now is the time to act&#8212;go build your own Tana-style <em>community success</em> story!</p>]]></content:encoded></item><item><title><![CDATA[Stop Using AI Like a Code Vending Machine]]></title><description><![CDATA[The Six Modes of Software Composition and How to Use Them]]></description><link>https://newsletter.specstory.com/p/stop-using-ai-like-a-code-vending</link><guid isPermaLink="false">https://newsletter.specstory.com/p/stop-using-ai-like-a-code-vending</guid><dc:creator><![CDATA[Jake Levirne]]></dc:creator><pubDate>Sun, 26 Jan 2025 10:19:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ixmi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00f427f9-cb4f-4218-8bee-65d699a17596_2268x1240.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_!ixmi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00f427f9-cb4f-4218-8bee-65d699a17596_2268x1240.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ixmi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00f427f9-cb4f-4218-8bee-65d699a17596_2268x1240.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ixmi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00f427f9-cb4f-4218-8bee-65d699a17596_2268x1240.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ixmi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00f427f9-cb4f-4218-8bee-65d699a17596_2268x1240.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ixmi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00f427f9-cb4f-4218-8bee-65d699a17596_2268x1240.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ixmi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00f427f9-cb4f-4218-8bee-65d699a17596_2268x1240.jpeg" width="1456" height="796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/00f427f9-cb4f-4218-8bee-65d699a17596_2268x1240.jpeg&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;:311349,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ixmi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00f427f9-cb4f-4218-8bee-65d699a17596_2268x1240.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ixmi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00f427f9-cb4f-4218-8bee-65d699a17596_2268x1240.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ixmi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00f427f9-cb4f-4218-8bee-65d699a17596_2268x1240.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ixmi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F00f427f9-cb4f-4218-8bee-65d699a17596_2268x1240.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Chances are if you&#8217;re reading this, you already know something about <a href="https://tolacapital.com/2024/11/13/the-rise-of-the-software-composer-a-new-era-of-software-creation">Software Composition</a>. </p><p>Maybe you&#8217;ve even blasted ideas into <a href="https://support.anthropic.com/en/articles/9487310-what-are-artifacts-and-how-do-i-use-them">Claude Artifacts</a>, <a href="https://help.openai.com/en/articles/9930697-what-is-the-canvas-feature-in-chatgpt-and-how-do-i-use-it">ChatGPT Canvas</a>, <a href="https://v0.dev/">V0.dev</a>, <a href="https://lovable.dev/">Lovable.dev</a>, <a href="https://bolt.new/">Bolt.new</a> or if you&#8217;re off the waitlist, <a href="https://github.com/github_spark_waitlist_signup">GitHub Spark</a>. If you&#8217;ve only tapped into these chat-oriented programming tools to churn out quick React apps, you&#8217;re missing the bigger picture.</p><p>You&#8217;ve heard about Co-Pilot, Cursor, and Codieum. </p><p>Your mettle grows as you graduate from locked-down PaaS environments to your go-to AI IDE. </p><p>So what&#8217;s next? </p><p>How do you start, how do you progress, and in <strong>what modes</strong> does Software Composition truly excel?</p><h2>The Six Modes of Software Composition</h2><p>At <a href="https://specstory.com/">SpecStory</a>, <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Greg Ceccarelli&quot;,&quot;id&quot;:7159630,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24893c6a-1a71-4abc-8a44-1c1a5aea6a90_3365x3511.jpeg&quot;,&quot;uuid&quot;:&quot;ed2aa99c-f7d1-406c-841f-7efa9dc0f9fd&quot;}" data-component-name="MentionToDOM"></span>, myself and the team software compose daily &#8212; and not just for raw implementation. </p><p>Below is our opinionated breakdown of six distinct modes, how they connect, and how you should think while operating in each.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IBTf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F094b4d74-fb57-4f31-96c3-182ee5b7d926_1800x254.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IBTf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F094b4d74-fb57-4f31-96c3-182ee5b7d926_1800x254.jpeg 424w, https://substackcdn.com/image/fetch/$s_!IBTf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F094b4d74-fb57-4f31-96c3-182ee5b7d926_1800x254.jpeg 848w, https://substackcdn.com/image/fetch/$s_!IBTf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F094b4d74-fb57-4f31-96c3-182ee5b7d926_1800x254.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!IBTf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F094b4d74-fb57-4f31-96c3-182ee5b7d926_1800x254.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IBTf!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F094b4d74-fb57-4f31-96c3-182ee5b7d926_1800x254.jpeg" width="1200" height="168.95604395604394" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/094b4d74-fb57-4f31-96c3-182ee5b7d926_1800x254.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:205,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:48692,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IBTf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F094b4d74-fb57-4f31-96c3-182ee5b7d926_1800x254.jpeg 424w, https://substackcdn.com/image/fetch/$s_!IBTf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F094b4d74-fb57-4f31-96c3-182ee5b7d926_1800x254.jpeg 848w, https://substackcdn.com/image/fetch/$s_!IBTf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F094b4d74-fb57-4f31-96c3-182ee5b7d926_1800x254.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!IBTf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F094b4d74-fb57-4f31-96c3-182ee5b7d926_1800x254.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3>Mode 1 &#8212; Idea Refinement</h3><p><strong>Core Challenge:</strong> Picture yourself as an Enterprise PM hearing, &#8220;We need AI!&#8221; Your real job is to ask, &#8220;What problem are we solving?&#8221; Idea Refinement in the context of software composing means turning lofty, easy-to-dismiss dreams into practical, buildable proposals.</p><p><strong>The Mission: </strong>Turn &#8220;we need AI&#8221; into &#8220;we need to classify support tickets into three priority levels with 90% accuracy&#8221;. For those classified at low levels, route them to an AI support agent that is able to assist the customer or user.</p><p><strong>Software Composing Refinement</strong></p><ul><li><p>Use Claude/GPT or even Cursor (with access to the underlying models) to expand vague requirements into detailed user stories </p></li><li><p>Generate edge cases and potential failure modes for each part of the feature</p></li><li><p>Take that technical objective and use AI to generate scenario analyses that tie back into your high level business objectives </p></li></ul><p><strong>Action (Today):</strong> Pick your most ambiguous requirement and use an AI editor to spin out five different interpretations. Narrow it down to three testable outcomes.</p><h3>Mode 2 &#8212; Prototyping </h3><p><strong>Core Challenge:</strong> Building to learn isn&#8217;t the same as building to last. Most get stuck perfecting their prototypes. Don&#8217;t. Your job is to prove or disprove your riskiest assumptions as quickly as possible&#8212;like, within hours.</p><p><strong>The Mission:</strong> Hack together a working prototype in a single day that nails the core value proposition. Use synthetic data for realism (even if everything&#8217;s duct-taped behind the scenes).</p><p><strong>Software Composing Refinement</strong></p><ul><li><p>Let AI generate realistic synthetic data with a compelling narrative.</p></li><li><p> Build quick UIs that zero in on the critical path; ignore edge cases.</p></li><li><p>Create fake APIs returning pristine data for your happy path.</p></li><li><p>Have AI produce diverse test scenarios to stress your assumptions.</p></li></ul><p><strong>Action (Today):</strong> Take your riskiest feature. Build a throwaway prototype with AI-generated test data. Show it to a stakeholder tomorrow.</p><h3>Mode 3 &#8212; Disposable apps </h3><p><strong>Core Challenge: </strong>When <a href="https://www.meditationsontech.com/p/more-software-should-die-young">Greg talks about "disposable apps,"</a> he&#8217;s highlighting that sometimes code serves best by dying young. These apps go further than prototypes&#8212;they&#8217;re actually deployed and used but skip all the usual production guardrails. They prove paths to production while staying intentionally short-lived.</p><p><strong>The Mission:</strong> Ship usable software without production overhead. Forget lint rules, build optimizations, or CI/CD pipelines. Deploy fast to test environments. Learn from real usage, then toss it when you&#8217;re done.</p><p><strong>Software Composing Refinement</strong></p><ul><li><p>Break normal rules on purpose&#8212;document what standards you&#8217;re ignoring and why.</p></li><li><p>Deploy manually&#8212;no CI/CD pipeline required.</p></li><li><p>Replace code review with pair programming.</p></li><li><p>Embrace messiness; chase learning instead of cleanliness.</p></li><li><p>Have AI generate multiple architectural variants at speed.</p></li><li><p>Document insights about the problem domain, not just the code.</p></li></ul><p><strong>Action (Today):</strong> Pick a feature bogged down in analysis paralysis. Build and deploy a throwaway version that ignores your usual best practices. Get it in front of users in under a week. Use AI to move fast and note everything you learn.</p><h3>Mode 4 - Production Code</h3><p><strong>Core Challenge:</strong> Production code meets real users, real scale, and real consequences. You can (and should) use AI here&#8212;just don&#8217;t be na&#239;ve. &#8220;Trust but verify&#8221; is the name of the game.</p><p><strong>The Mission</strong>: Survive contact with reality while staying maintainable.</p><p><strong>Software Composing Refinement</strong></p><ul><li><p>Have AI scan your code for potential scaling issues.</p></li><li><p>Generate comprehensive test scenarios based on actual production patterns.</p></li><li><p>Ask AI to review error handling and propose more robust edge cases.</p></li><li><p>Build monitoring and observability from the jump.</p></li></ul><p><strong>Action (Today):</strong> Take your most successful prototype and list all the ways it&#8217;d break in production. Use AI to uncover additional failure points. Then do the real work:</p><ol><li><p><strong>Read every block of AI-generated code.</strong> If you don&#8217;t understand it, ask. AI often improves when challenged.</p></li><li><p><strong>Write comments.</strong> If you can&#8217;t explain it, you don&#8217;t truly get it.</p></li><li><p><strong>Think through security, performance, and maintainability.</strong></p></li><li><p><strong>Validate package versions.</strong> AI can get them wrong due to cutoff dates&#8212;Google is your friend.</p></li></ol><h3>Mode 5 - Operations &amp; Deployment</h3><p><strong>Core Challenge:</strong> Understanding how to get from local dev to cloud config is crucial. The challenge isn&#8217;t just shipping code to production but fully grasping the operational tapestry. Your advantage? AI can funnel the collective knowledge of ops teams worldwide right into your workflow.</p><p><strong>The Mission:</strong> Bridge development and operations. Make deployment and maintenance as core to your project as the code itself. And remember, coding-focused AI might not always have the best or newest answers for operational questions&#8212;sometimes ChatGPT in browsing mode is more relevant.</p><p><strong>Software Composing Refinement</strong></p><ul><li><p>Let AI interpret complicated cloud documentation into plain-English steps.</p></li><li><p>Generate Infrastructure-as-Code templates that align with your real needs.</p></li><li><p>Build dashboards with actual system health metrics, not just uptime checks.</p></li><li><p>Explain not just what you did, but why you did it this way.</p></li></ul><p><strong>Action (Today):</strong> Identify one manual step in your deployment process. Use AI in web-browsing mode to find a modern way to automate it. Whip up a proof of concept. Document the how and why.</p><h3>Mode 6 - Troubleshoot and Debug</h3><p><strong>Core Challenge:</strong> Debugging in software composition demands a partnership between human insight and AI guidance. Plain error messages aren&#8217;t enough. Your mission is to build systems that leave behind helpful breadcrumbs&#8212;logs, metrics, and context&#8212;so debugging becomes a guided investigation, not a blindfolded search.</p><p><strong>The Mission:</strong> Transform debugging from reactive firefighting into proactive system understanding. Leave a clear trail for anyone&#8212;human or AI&#8212;who might need to explore the system&#8217;s past behavior. Make logs that tell stories, not just record problems.</p><p><strong>Software Composing Refinement</strong></p><ul><li><p>Build Rich Context:</p><ul><li><p>Capture screenshots, environment details, and recent changes</p></li><li><p>Track system changes over time with semantic versioning</p></li><li><p>Document environment differences early.</p></li></ul></li><li><p>Strategic Logging:</p><ul><li><p>Log with breadcrumbs that AI (and humans) can follow.</p></li><li><p>Show state transitions with before/after context.</p></li><li><p>Capture relevant business context in technical logs</p></li></ul></li><li><p>Semantic Logging Patterns:</p><ul><li><p>Replace "Error in user authentication" with "Failed to verify JWT token for user {id} with error {specific_error}"</p></li><li><p>Add business context: "Premium feature {feature} access denied for free tier user {id}"</p></li><li><p>Include actionable data: "Rate limit exceeded: current rate {current} exceeds limit {limit} for API key {key}"</p></li><li><p>Log successful operations too: "Successfully processed {count} records in batch {id} taking {duration} ms"</p></li></ul></li></ul><p><strong>Action (Today):</strong> Take your most frequent error and rewrite its logging to deliver a complete narrative:</p><ol><li><p>Add rich context about when and where it occurs</p></li><li><p>Include relevant business and technical details</p></li><li><p>Create clear correlation between related events</p></li><li><p>Use AI to generate comprehensive test cases that would trigger this error</p></li><li><p>Document the pattern in your team's debugging playbook</p></li></ol><h2>Making the Modes Work</h2><p>If you&#8217;re still treating AI like a code vending machine, you&#8217;re missing the point. Every mode in software composition calls for a different relationship with your AI tools. Sometimes it&#8217;s about speedy exploration; other times, it&#8217;s methodical verification and deep understanding.</p><p>The magic isn&#8217;t in the prompt alone&#8212;it&#8217;s knowing which mode you&#8217;re in and adjusting your approach accordingly. AI IDEs and LLMs aren&#8217;t a single hammer. They&#8217;re a versatile toolkit you adapt to the job:</p><ul><li><p><strong>In Idea Refinement:</strong> AI is your sparring partner, challenging assumptions and generating fresh angles.</p></li><li><p><strong>In Prototyping:</strong> AI gives you rapid generation and synthetic data on demand.</p></li><li><p><strong>In Disposable Apps:</strong> Let AI churn out multiple approaches fast&#8212;no polishing needed.</p></li><li><p><strong>In Production:</strong> Collaborate with AI for thorough analysis and to spot tricky edge cases.</p></li><li><p><strong>In Operations:</strong> Lean on AI (especially with web-browsing) for up-to-date operational wisdom.</p></li><li><p><strong>In Debugging:</strong> Work alongside AI to craft and interpret rich, semantic debugging logs.</p></li></ul><p>Next time you open your IDE, ask yourself: <strong>Which mode am I in?</strong> </p><p>And how should that change the way I work with AI? </p><p>Your future self will thank you for the clarity.</p>]]></content:encoded></item><item><title><![CDATA[Using Cursor to Create Sample Data for your NextJS App]]></title><description><![CDATA[Building a prototype without the hassle of a database]]></description><link>https://newsletter.specstory.com/p/using-cursor-to-create-sample-data</link><guid isPermaLink="false">https://newsletter.specstory.com/p/using-cursor-to-create-sample-data</guid><dc:creator><![CDATA[Jake Levirne]]></dc:creator><pubDate>Sun, 12 Jan 2025 19:10:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!izsW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931ed71e-3901-4b25-9f18-df8c2620c5d9_2174x1710.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This is going to be a hands-on tutorial for getting sample data into a prototype application that you&#8217;re composing. We&#8217;ll demonstrate using a NextJS web application, but the same approach works for other application types, including desktop apps built using Electron or mobile apps built using Flutter.</p><p>Why would you want to do this? Because sometimes you just want to communicate an idea quickly without having to deal with the headache of a database. Colin Matthews says it well in a recent <a href="https://www.lennysnewsletter.com/p/a-guide-to-ai-prototyping-for-product">post</a> about Cursor and other tools:</p><blockquote><p>But what&#8217;s cooler is that you can use these tools to build functional prototypes from a Figma design, convert a rough hand-drawn sketch to a working app, translate a PRD document into an interactive prototype, or even build a usable internal tool for your team, with no coding ability</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!izsW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931ed71e-3901-4b25-9f18-df8c2620c5d9_2174x1710.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!izsW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931ed71e-3901-4b25-9f18-df8c2620c5d9_2174x1710.png 424w, https://substackcdn.com/image/fetch/$s_!izsW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931ed71e-3901-4b25-9f18-df8c2620c5d9_2174x1710.png 848w, https://substackcdn.com/image/fetch/$s_!izsW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931ed71e-3901-4b25-9f18-df8c2620c5d9_2174x1710.png 1272w, https://substackcdn.com/image/fetch/$s_!izsW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931ed71e-3901-4b25-9f18-df8c2620c5d9_2174x1710.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!izsW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931ed71e-3901-4b25-9f18-df8c2620c5d9_2174x1710.png" width="1456" height="1145" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/931ed71e-3901-4b25-9f18-df8c2620c5d9_2174x1710.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1145,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:641273,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!izsW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931ed71e-3901-4b25-9f18-df8c2620c5d9_2174x1710.png 424w, https://substackcdn.com/image/fetch/$s_!izsW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931ed71e-3901-4b25-9f18-df8c2620c5d9_2174x1710.png 848w, https://substackcdn.com/image/fetch/$s_!izsW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931ed71e-3901-4b25-9f18-df8c2620c5d9_2174x1710.png 1272w, https://substackcdn.com/image/fetch/$s_!izsW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931ed71e-3901-4b25-9f18-df8c2620c5d9_2174x1710.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Getting Started</h2><p>Install Cursor and get your laptop <a href="https://newsletter.specstory.com/p/getting-started-with-software-composition">setup</a> for composing a Node app. </p><p>Follow the instructions for creating a new <a href="https://ui.shadcn.com/docs/installation/next">NextJS app with ShadCN</a>. Specifically:</p><pre><code><code>npx shadcn@latest init -d</code></code></pre><p>And then when prompted, create a new project, <code>sample-cars:</code></p><pre><code><code>&#10004; The path /Users/name/dev/specstoryai does not contain a package.json file. Would you like to start a new Next.js project? &#8230; yes
&#10004; What is your project named? &#8230; sample-cars</code></code></pre><p>Add two simple components, <code>button</code> and <code>card</code>:</p><pre><code><code>cd sample-cars
npx shadcn@latest add button card</code></code></pre><p>And open your new project in Cursor:</p><pre><code>cursor .</code></pre><p>(If you haven&#8217;t already setup the <code>cursor</code> command on your machine, you can do so now inside Cursor by typing Ctrl/CMD-Shift-P to bring up the Palette and then running <code>Shell Command: Install &#8216;cursor&#8217; command</code>).</p><p>Start the development server:</p><pre><code>npm run dev </code></pre><p>You should see the Next.js sample app if you visit <code>http://localhost:3000</code>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qnPs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37e33f1c-fcc5-4dfd-b43b-1a59fc2d5ba9_3248x2004.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qnPs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37e33f1c-fcc5-4dfd-b43b-1a59fc2d5ba9_3248x2004.png 424w, https://substackcdn.com/image/fetch/$s_!qnPs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37e33f1c-fcc5-4dfd-b43b-1a59fc2d5ba9_3248x2004.png 848w, https://substackcdn.com/image/fetch/$s_!qnPs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37e33f1c-fcc5-4dfd-b43b-1a59fc2d5ba9_3248x2004.png 1272w, https://substackcdn.com/image/fetch/$s_!qnPs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37e33f1c-fcc5-4dfd-b43b-1a59fc2d5ba9_3248x2004.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qnPs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37e33f1c-fcc5-4dfd-b43b-1a59fc2d5ba9_3248x2004.png" width="1456" height="898" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/37e33f1c-fcc5-4dfd-b43b-1a59fc2d5ba9_3248x2004.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:898,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:492234,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qnPs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37e33f1c-fcc5-4dfd-b43b-1a59fc2d5ba9_3248x2004.png 424w, https://substackcdn.com/image/fetch/$s_!qnPs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37e33f1c-fcc5-4dfd-b43b-1a59fc2d5ba9_3248x2004.png 848w, https://substackcdn.com/image/fetch/$s_!qnPs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37e33f1c-fcc5-4dfd-b43b-1a59fc2d5ba9_3248x2004.png 1272w, https://substackcdn.com/image/fetch/$s_!qnPs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F37e33f1c-fcc5-4dfd-b43b-1a59fc2d5ba9_3248x2004.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Composing your prototype</h2><p>Now, you can prompt your way to a placeholder prototype, probably in one shot. Here&#8217;s what I did with Cursor composer in <strong>agent</strong> mode:</p><pre><code>Change this application, replacing @page.tsx with a UI that displays the heading "Collectible Cars" and then a list of 10 ShadCN cards that say "Car 1", "Car 2", etc.</code></pre><p>I made a specific mention of @page.tsx to get Cursor focused on the one file I wanted it to change. For the NextJS sample app, page.tsx contains almost everything that gets displayed, and by focusing Cursor on it we can avoid the creation of extra files, keeping the prototype simple and clean (from a project directory and file organization perspective).</p><p>I also explicitly referenced &#8220;ShadCN cards&#8221; because I like the styling of the UI components in that <a href="https://ui.shadcn.com/docs/components">library</a>. To keep Cursor focused, it helps to tell it which components you&#8217;d like on your page. Knowing ahead of time that I&#8217;d be using the <code>card</code>, I already installed it (above). If you ask Cursor to use a ShadCN component that&#8217;s not installed yet, it should walk you through installing it. Though in my experience, Cursor (with Claude 3.5 Sonnet) often suggests the wrong install command. If you get stuck on this, correct the AI by letting it know that the current ShadCN CLI component install command is <code>npx shadcn@latest add</code>. It&#8217;s even a good idea to add this to your <a href="https://cursor101.com/cursor/rules">.cursorrules file</a>.</p><p>After letting the composer agent run and accepting the edits, my application looks like this (yours may differ):</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xsFR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd23e0e6-735c-4d4a-84f8-8033e4714e98_3248x2004.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xsFR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd23e0e6-735c-4d4a-84f8-8033e4714e98_3248x2004.png 424w, https://substackcdn.com/image/fetch/$s_!xsFR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd23e0e6-735c-4d4a-84f8-8033e4714e98_3248x2004.png 848w, https://substackcdn.com/image/fetch/$s_!xsFR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd23e0e6-735c-4d4a-84f8-8033e4714e98_3248x2004.png 1272w, https://substackcdn.com/image/fetch/$s_!xsFR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd23e0e6-735c-4d4a-84f8-8033e4714e98_3248x2004.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xsFR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd23e0e6-735c-4d4a-84f8-8033e4714e98_3248x2004.png" width="1456" height="898" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cd23e0e6-735c-4d4a-84f8-8033e4714e98_3248x2004.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:898,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:656401,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xsFR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd23e0e6-735c-4d4a-84f8-8033e4714e98_3248x2004.png 424w, https://substackcdn.com/image/fetch/$s_!xsFR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd23e0e6-735c-4d4a-84f8-8033e4714e98_3248x2004.png 848w, https://substackcdn.com/image/fetch/$s_!xsFR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd23e0e6-735c-4d4a-84f8-8033e4714e98_3248x2004.png 1272w, https://substackcdn.com/image/fetch/$s_!xsFR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcd23e0e6-735c-4d4a-84f8-8033e4714e98_3248x2004.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Creating sample data</h3><p>This is a great start, but as you can see the placeholder cards are all identical. This doesn&#8217;t really get the concept across. Let&#8217;s prompt for some sample data:</p><pre><code>Add a new file that will hold JSON sample data for our application. Create an array of 10 cars using examples of classic cars from the 1950s and 1960s. For each car, store the make, model, engine type, years of manufacture, and a one sentence description.</code></pre><p>I&#8217;m pretty intentional here about asking for a new file, mainly to keep my project and directories clean, and about asking for JSON data which is a widely used standard format for saving data. I gave Cursor some specifics to guide the creation of sample data, including the properties I wanted (make, model, etc). But you can also often get good, if sometimes surprising, results with open-ended requests, like <code>Create an array of data for 10 classic cars</code>. Finally, asking for an <code>array</code> in this prompt was intentional. We likely would&#8217;ve gotten the same results asking for a <code>list of cars</code> or just <code>sample data for 10 cars</code>. But in this case I knew specifically what I wanted for this tutorial. In general, it&#8217;s worth experimenting with the level of specificity of your requests. Being overly specific, especially on a topic you don&#8217;t yet know well, can steer the AI in the wrong direction and prevent it from making better recommendations.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MtOa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29512912-d713-4378-9099-26b1a100f5e8_3248x2004.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MtOa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29512912-d713-4378-9099-26b1a100f5e8_3248x2004.png 424w, https://substackcdn.com/image/fetch/$s_!MtOa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29512912-d713-4378-9099-26b1a100f5e8_3248x2004.png 848w, https://substackcdn.com/image/fetch/$s_!MtOa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29512912-d713-4378-9099-26b1a100f5e8_3248x2004.png 1272w, https://substackcdn.com/image/fetch/$s_!MtOa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29512912-d713-4378-9099-26b1a100f5e8_3248x2004.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MtOa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29512912-d713-4378-9099-26b1a100f5e8_3248x2004.png" width="1456" height="898" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/29512912-d713-4378-9099-26b1a100f5e8_3248x2004.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:898,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1127146,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MtOa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29512912-d713-4378-9099-26b1a100f5e8_3248x2004.png 424w, https://substackcdn.com/image/fetch/$s_!MtOa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29512912-d713-4378-9099-26b1a100f5e8_3248x2004.png 848w, https://substackcdn.com/image/fetch/$s_!MtOa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29512912-d713-4378-9099-26b1a100f5e8_3248x2004.png 1272w, https://substackcdn.com/image/fetch/$s_!MtOa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F29512912-d713-4378-9099-26b1a100f5e8_3248x2004.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Displaying the sample data</h3><p>In this case, Cursor did a great job of generating a sample data file for us, but it didn&#8217;t make the leap to placing this sample data onto the page for us (in <code>/app/page.tsx</code>), so when we view the page we won&#8217;t see any change. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UZl3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8e833f6-6d6c-414e-8865-85cc658a1e0d_3248x2004.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UZl3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8e833f6-6d6c-414e-8865-85cc658a1e0d_3248x2004.png 424w, https://substackcdn.com/image/fetch/$s_!UZl3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8e833f6-6d6c-414e-8865-85cc658a1e0d_3248x2004.png 848w, https://substackcdn.com/image/fetch/$s_!UZl3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8e833f6-6d6c-414e-8865-85cc658a1e0d_3248x2004.png 1272w, https://substackcdn.com/image/fetch/$s_!UZl3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8e833f6-6d6c-414e-8865-85cc658a1e0d_3248x2004.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UZl3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8e833f6-6d6c-414e-8865-85cc658a1e0d_3248x2004.png" width="1456" height="898" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a8e833f6-6d6c-414e-8865-85cc658a1e0d_3248x2004.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:898,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:658374,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UZl3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8e833f6-6d6c-414e-8865-85cc658a1e0d_3248x2004.png 424w, https://substackcdn.com/image/fetch/$s_!UZl3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8e833f6-6d6c-414e-8865-85cc658a1e0d_3248x2004.png 848w, https://substackcdn.com/image/fetch/$s_!UZl3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8e833f6-6d6c-414e-8865-85cc658a1e0d_3248x2004.png 1272w, https://substackcdn.com/image/fetch/$s_!UZl3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8e833f6-6d6c-414e-8865-85cc658a1e0d_3248x2004.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Reading Cursor&#8217;s response carefully, we see that it did at least ask if we&#8217;d like it to make the update to the main page to use this data. If your Cursor session also deferred making use of the sample data, you can use a prompt similar to this one to get it to finish the task:</p><pre><code>Using this data, update the cards on our main page.</code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DX63!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68080cbc-d7a7-41b3-a5d6-5195b43bf2c2_3248x2004.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DX63!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68080cbc-d7a7-41b3-a5d6-5195b43bf2c2_3248x2004.png 424w, https://substackcdn.com/image/fetch/$s_!DX63!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68080cbc-d7a7-41b3-a5d6-5195b43bf2c2_3248x2004.png 848w, https://substackcdn.com/image/fetch/$s_!DX63!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68080cbc-d7a7-41b3-a5d6-5195b43bf2c2_3248x2004.png 1272w, https://substackcdn.com/image/fetch/$s_!DX63!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68080cbc-d7a7-41b3-a5d6-5195b43bf2c2_3248x2004.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DX63!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68080cbc-d7a7-41b3-a5d6-5195b43bf2c2_3248x2004.png" width="1456" height="898" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/68080cbc-d7a7-41b3-a5d6-5195b43bf2c2_3248x2004.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:898,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:786441,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DX63!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68080cbc-d7a7-41b3-a5d6-5195b43bf2c2_3248x2004.png 424w, https://substackcdn.com/image/fetch/$s_!DX63!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68080cbc-d7a7-41b3-a5d6-5195b43bf2c2_3248x2004.png 848w, https://substackcdn.com/image/fetch/$s_!DX63!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68080cbc-d7a7-41b3-a5d6-5195b43bf2c2_3248x2004.png 1272w, https://substackcdn.com/image/fetch/$s_!DX63!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68080cbc-d7a7-41b3-a5d6-5195b43bf2c2_3248x2004.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You might inevitably hit some hallucinations like we did with the Cadillac Eldorado, which was actually manufactured from 1952-2002. Fact check and manually correct the data file Cursor produced, until you&#8217;re satisfied.</p><h3>Images - the SVG placeholder trick</h3><p>Now some images would be nice. The fastest approach is to have Cursor generate a placeholder SVG for you and then display that on all the cards.</p><pre><code>Generate a new SVG file in /public that is a placeholder image we can display for all the car cards. Use it on all the cards on the page.</code></pre><p>For our type of application, a NextJS web app, any files in the <code>/public</code> folder will be available through the web server. For example, if you place <code>image.png</code> into the <code>/public</code> folder you&#8217;ll be able to access it at a URL like <code>http://localhost:3000/image.png</code>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9AEc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dc96a00-5e27-490e-ad66-1e6f96eab67b_3248x2004.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9AEc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dc96a00-5e27-490e-ad66-1e6f96eab67b_3248x2004.png 424w, https://substackcdn.com/image/fetch/$s_!9AEc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dc96a00-5e27-490e-ad66-1e6f96eab67b_3248x2004.png 848w, https://substackcdn.com/image/fetch/$s_!9AEc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dc96a00-5e27-490e-ad66-1e6f96eab67b_3248x2004.png 1272w, https://substackcdn.com/image/fetch/$s_!9AEc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dc96a00-5e27-490e-ad66-1e6f96eab67b_3248x2004.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9AEc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dc96a00-5e27-490e-ad66-1e6f96eab67b_3248x2004.png" width="1456" height="898" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4dc96a00-5e27-490e-ad66-1e6f96eab67b_3248x2004.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:898,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:650402,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9AEc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dc96a00-5e27-490e-ad66-1e6f96eab67b_3248x2004.png 424w, https://substackcdn.com/image/fetch/$s_!9AEc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dc96a00-5e27-490e-ad66-1e6f96eab67b_3248x2004.png 848w, https://substackcdn.com/image/fetch/$s_!9AEc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dc96a00-5e27-490e-ad66-1e6f96eab67b_3248x2004.png 1272w, https://substackcdn.com/image/fetch/$s_!9AEc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4dc96a00-5e27-490e-ad66-1e6f96eab67b_3248x2004.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Not very stylish, but at least it gets across some of the spacing and layout for our prototype. To take this to the next level, we can get images for each of these classic cars and copy them into the <code>/public</code> folder.</p><h3>Real images - the naming convention trick</h3><p>I attempted to use ChatGPT with &#8220;Search the Web&#8221; enabled to "<code>find an image for each one of these 10 classic cars</code>&#8221;. But the results were mixed, and more often than not it hallucinated dead links. A more accurate approach is to use the <a href="https://search.creativecommons.org/">Creative Commons Search Portal</a> and paste in the name of each car in your sample data set. Download each image, rename it to something like <code>make-model.jpg</code> or <code>make-model.png</code> (e.g. <code>chevrolet-corvette-c1.jpg</code>) and copy it into the<code> /public</code> directory in the top of your <code>sample-cars</code> project. This will let Cursor connect the JSON data with the right images.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Q5k4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27511dff-2a35-45aa-8582-313819d19a9e_576x352.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Q5k4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27511dff-2a35-45aa-8582-313819d19a9e_576x352.png 424w, https://substackcdn.com/image/fetch/$s_!Q5k4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27511dff-2a35-45aa-8582-313819d19a9e_576x352.png 848w, https://substackcdn.com/image/fetch/$s_!Q5k4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27511dff-2a35-45aa-8582-313819d19a9e_576x352.png 1272w, https://substackcdn.com/image/fetch/$s_!Q5k4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27511dff-2a35-45aa-8582-313819d19a9e_576x352.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Q5k4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27511dff-2a35-45aa-8582-313819d19a9e_576x352.png" width="576" height="352" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/27511dff-2a35-45aa-8582-313819d19a9e_576x352.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:352,&quot;width&quot;:576,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:52894,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Q5k4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27511dff-2a35-45aa-8582-313819d19a9e_576x352.png 424w, https://substackcdn.com/image/fetch/$s_!Q5k4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27511dff-2a35-45aa-8582-313819d19a9e_576x352.png 848w, https://substackcdn.com/image/fetch/$s_!Q5k4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27511dff-2a35-45aa-8582-313819d19a9e_576x352.png 1272w, https://substackcdn.com/image/fetch/$s_!Q5k4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F27511dff-2a35-45aa-8582-313819d19a9e_576x352.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If you&#8217;ve named the files to match the make and model in your JSON data, it&#8217;s now easy to prompt Cursor to reference them:</p><pre><code>The @public directory now has real images for some of the cars. Update the sample JSON data file to include links to images if available or to the placeholder SVG if not. Make these new images render on the cards on the page.</code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hHdN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ac7ad2-c74b-4e7c-bfc7-92f1645cff29_3248x2004.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hHdN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ac7ad2-c74b-4e7c-bfc7-92f1645cff29_3248x2004.png 424w, https://substackcdn.com/image/fetch/$s_!hHdN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ac7ad2-c74b-4e7c-bfc7-92f1645cff29_3248x2004.png 848w, https://substackcdn.com/image/fetch/$s_!hHdN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ac7ad2-c74b-4e7c-bfc7-92f1645cff29_3248x2004.png 1272w, https://substackcdn.com/image/fetch/$s_!hHdN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ac7ad2-c74b-4e7c-bfc7-92f1645cff29_3248x2004.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hHdN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ac7ad2-c74b-4e7c-bfc7-92f1645cff29_3248x2004.png" width="1456" height="898" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/08ac7ad2-c74b-4e7c-bfc7-92f1645cff29_3248x2004.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:898,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3925554,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hHdN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ac7ad2-c74b-4e7c-bfc7-92f1645cff29_3248x2004.png 424w, https://substackcdn.com/image/fetch/$s_!hHdN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ac7ad2-c74b-4e7c-bfc7-92f1645cff29_3248x2004.png 848w, https://substackcdn.com/image/fetch/$s_!hHdN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ac7ad2-c74b-4e7c-bfc7-92f1645cff29_3248x2004.png 1272w, https://substackcdn.com/image/fetch/$s_!hHdN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08ac7ad2-c74b-4e7c-bfc7-92f1645cff29_3248x2004.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Making sample data interactive</h3><p>Now let&#8217;s add the ability for the user to pick their favorite cars.</p><pre><code>We want to let the user select their favorite cars and bring them to the top of the page. Add a ShadCN button to each card with an icon for "favorite".</code></pre><p>This might work for you, but I hit the following error when Cursor tried to import the icon for the button.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!H0uG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5be167db-1339-488c-89d5-0ef1e109076e_3248x2004.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!H0uG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5be167db-1339-488c-89d5-0ef1e109076e_3248x2004.png 424w, https://substackcdn.com/image/fetch/$s_!H0uG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5be167db-1339-488c-89d5-0ef1e109076e_3248x2004.png 848w, https://substackcdn.com/image/fetch/$s_!H0uG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5be167db-1339-488c-89d5-0ef1e109076e_3248x2004.png 1272w, https://substackcdn.com/image/fetch/$s_!H0uG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5be167db-1339-488c-89d5-0ef1e109076e_3248x2004.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!H0uG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5be167db-1339-488c-89d5-0ef1e109076e_3248x2004.png" width="1456" height="898" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5be167db-1339-488c-89d5-0ef1e109076e_3248x2004.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:898,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:671311,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!H0uG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5be167db-1339-488c-89d5-0ef1e109076e_3248x2004.png 424w, https://substackcdn.com/image/fetch/$s_!H0uG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5be167db-1339-488c-89d5-0ef1e109076e_3248x2004.png 848w, https://substackcdn.com/image/fetch/$s_!H0uG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5be167db-1339-488c-89d5-0ef1e109076e_3248x2004.png 1272w, https://substackcdn.com/image/fetch/$s_!H0uG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5be167db-1339-488c-89d5-0ef1e109076e_3248x2004.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Though the Cursor composer agent can automatically handle linter (coding-time) errors, it can&#8217;t handle build-time errors like this one without your help. Copy and paste the entire error into your Cursor prompt and it should be able to resolve it for you.</p><pre><code>Build Error
Failed to compile 
Next.js (14.2.16) is outdated (learn more) 
./app/page.tsx
Error:
    &#215; You're importing a component ...</code></pre><p><a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a></p><p>And now you can click a heart to mark one of the cars as your favorite and move it to the top of the page!</p><p>See the full <a href="https://share.specstory.com/stories/308734cb-ae6d-49f9-9590-a4c60fa67360">Cursor history for this project</a> and stay tuned for more data topics such as using HTML Web Storage (localStorage), and composing scripts to gather sample data.</p><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>CC Image attribution: <a href="https://www.flickr.com/photos/37691369@N08/9506690410">RL GNZLZ</a>, <a href="https://commons.wikimedia.org/w/index.php?curid=8447368">cosmic_spanner</a>, <a href="https://www.flickr.com/photos/88123769@N02/16643031603">Bernard Spragg</a>, <a href="https://www.flickr.com/photos/58907675@N00/440677366">stephenhanafin</a>, <a href="https://www.flickr.com/photos/119886413@N05/13942256144">Michel Curi</a>, <a href="https://www.flickr.com/photos/8868801@N03/6788708676">kemeko1971</a></p></div></div>]]></content:encoded></item><item><title><![CDATA[The AI Code Review Gap]]></title><description><![CDATA[Quick to write, pain to review: our lessons learned when worlds collide]]></description><link>https://newsletter.specstory.com/p/the-ai-code-review-gap</link><guid isPermaLink="false">https://newsletter.specstory.com/p/the-ai-code-review-gap</guid><dc:creator><![CDATA[Jake Levirne]]></dc:creator><pubDate>Thu, 02 Jan 2025 19:58:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!kEJ0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fa6ff77-9789-4412-a625-ae57004b8f3a_1928x1086.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_!kEJ0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fa6ff77-9789-4412-a625-ae57004b8f3a_1928x1086.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kEJ0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fa6ff77-9789-4412-a625-ae57004b8f3a_1928x1086.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kEJ0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fa6ff77-9789-4412-a625-ae57004b8f3a_1928x1086.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kEJ0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fa6ff77-9789-4412-a625-ae57004b8f3a_1928x1086.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kEJ0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fa6ff77-9789-4412-a625-ae57004b8f3a_1928x1086.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kEJ0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fa6ff77-9789-4412-a625-ae57004b8f3a_1928x1086.jpeg" width="1456" height="820" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8fa6ff77-9789-4412-a625-ae57004b8f3a_1928x1086.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:820,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:291491,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kEJ0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fa6ff77-9789-4412-a625-ae57004b8f3a_1928x1086.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kEJ0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fa6ff77-9789-4412-a625-ae57004b8f3a_1928x1086.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kEJ0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fa6ff77-9789-4412-a625-ae57004b8f3a_1928x1086.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kEJ0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fa6ff77-9789-4412-a625-ae57004b8f3a_1928x1086.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>600 users, no analytics. </p><p>Right before the holidays we <a href="https://specstory.com/blog/specstory-launch">launched</a> the first product iteration of SpecStory &#8212; an <a href="https://docs.specstory.com/introduction">extension for Cursor</a> &#8212; and more than 600 people have installed it: <em>great!</em></p><p>What we were missing, however; were usage analytics on the extension itself so we could know (anonymously) when people were activating it: <em>not so great!</em></p><p><strong>So picture this:</strong> a product leader, seasoned engineer and AI assistant enter a zoom room. All with the expectation of adding analytics via PostHog to the extension for the next release.</p><p>Like many modern <a href="https://tolacapital.com/2024/11/13/the-rise-of-the-software-composer-a-new-era-of-software-creation">software composers</a> I first approached this task solo with Cursor&#8217;s <a href="https://docs.cursor.com/composer/overview#welcome-to-composer">Composer</a> as my guide. The code flowed effortlessly, each prompt brought new functionality to life. Smoke tests worked, events flowed into PostHog, and everything seemed like smooth sailing.</p><p>Until the moment of truth: <a href="https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests#about-pull-requests">the pull request</a>.</p><h3>When Worlds Collide</h3><p>Reality has a way of humbling our assumptions: my 60 minute composition session created a pull request that, as we started digging in, <em>we realized would take more than 5x as long to review.</em></p><p>As Sean, our CTO and I sat in that Zoom room together, he began asking questions about specific lines of code.</p><p>And I found myself in an unusual position: <em>unable to explain any of the details of what I had created.</em></p><p>This moment  crystallized for us the new gap created via AI-assisted development: intent and implementation doesn't vanish with AI&#8212;it just shifts. While I could articulate what I wanted the software to do, I <em>personally</em> had lost the thread connecting each line of code to its original purpose.</p><p>Not wanting to let this pain point go to waste, Sean and I spent the next day experimenting with a decidedly different approach.</p><h3>Trio Programming</h3><p>Instead of going solo from the beginning, we decided to <em>connect </em>product intent with engineering wisdom while allowing Composer to act as our implementation partner.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;adba2578-7c6f-4e49-893c-5e48268e6272&quot;,&quot;duration&quot;:null}"></div><p>As the quick video shows, we moved in small deliberate steps and caught potential regressions that had previously made the pull request opaque and could have turned into hard-to-rectify production issues. </p><p>The good news? We ultimately got the analytics shipped (check out <a href="https://docs.specstory.com/introduction">version 0.2.4 here</a>) and learned a few things that will probably resonate with you:</p><ul><li><p>For rapid prototypes and demonstrations, solo AI software composition shines</p></li><li><p>For production features, our trio programming approach provides the right balance while still allowing us to &#8220;eat our own dogfood&#8221;</p></li><li><p>For technical intents (like improved code quality linting or enhanced CI), traditional engineering often remains the most efficient path</p></li></ul><h3>Substitutes for the second human partner?</h3><p>While the trio approach with myself, Sean and Cursor worked well, we can&#8217;t help but think about the future. The time we spent together given the tools currently at our disposal was clunky and doing trio programming likely won&#8217;t scale at the same rate that we intend to grow.</p><p>In parallel, we&#8217;ve been debating if another AI could serve as a stand-in. While it is still early days, <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Greg Ceccarelli&quot;,&quot;id&quot;:7159630,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24893c6a-1a71-4abc-8a44-1c1a5aea6a90_3365x3511.jpeg&quot;,&quot;uuid&quot;:&quot;3fab4ab0-3173-4261-8b8f-b9d3bed678f8&quot;}" data-component-name="MentionToDOM"></span>, began pulling on that thread before the holidays. The experiment wasn&#8217;t for a SpecStory production feature but it is a fascinating glimpse into a <em>to-be-further-verified</em> promise.</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;332c7868-88cf-4052-8450-8b4741a99e99&quot;,&quot;duration&quot;:null}"></div><p>To help our distribution efforts, Greg is building an AI Code Editor ranking app. It sources data from Reddit and uses ChatGPT to analyze the sentiment. He had the idea to use Google&#8217;s <a href="https://developers.googleblog.com/en/gemini-2-0-level-up-your-apps-with-real-time-multimodal-interactions/">new realtime streaming</a> functionality to &#8220;watch his screen&#8221; as he composed and offer suggestions on the code &#8212; as it was being generated &#8212; using Cursor and Claude. </p><p>While the demo above was mostly happy path it points to the exciting possibility of AI not only being a code generator but an active review partner. While currently also clunky to manage, it appears to be the best &#8220;test&#8221; option sans connecting ChatGPT directly to Cursor through their <a href="https://help.openai.com/en/articles/10119604-work-with-apps-on-macos">&#8220;Work with Apps&#8221; beta feature.</a></p><p>In his words:</p><blockquote><p>It was great to be able to work in familiar modalities and have the second AI keep up. I was impressed with how easily it was to be able to direct Gemini at parts of the screen and get very specific feedback on Cursor&#8217;s implementation of my intent. The jury is still out on whether it will be able to aid my efforts on more complicated software composing. </p></blockquote><p>So there you have it: as we continue to build SpecStory, we&#8217;re committed to consistently sharing these type of learnings. </p><p>We believe that no matter if you&#8217;re a solo composer, part of a larger team, or somewhere in between, finding the right balance between AI assistance and human judgement will be continue to be crucial in the <em>months</em> and <em>years</em> ahead.</p>]]></content:encoded></item><item><title><![CDATA[Getting started with software composition]]></title><description><![CDATA[A basic tutorial for coding without coding]]></description><link>https://newsletter.specstory.com/p/getting-started-with-software-composition</link><guid isPermaLink="false">https://newsletter.specstory.com/p/getting-started-with-software-composition</guid><dc:creator><![CDATA[Jake Levirne]]></dc:creator><pubDate>Wed, 18 Dec 2024 20:59:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/XSvz3sycN0M" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>You may already be a seasoned engineer, in which case this week&#8217;s post isn&#8217;t for you. But maybe you can share it with your non-engineering friends. &#128513;</p><p>For the rest of us, this video is a start from zero, what&#8217;s the Terminal, how do I build and launch a simple website in under an hour kind of tutorial.</p><p>We&#8217;ll walk you through setting up a clean Mac or Windows environment and installing essential tools like Cursor, Node.js, npm, and Homebrew needed for software composition. </p><p>You&#8217;ll learn:</p><ul><li><p>How to configure your development environment from scratch.</p></li><li><p>Setting up a Next.js project with ShadCN component library.</p></li><li><p>Using Cursor&#8217;s AI capabilities to write and debug code effortlessly.</p></li><li><p>Debugging common issues and leveraging documentation.</p></li><li><p>Sharing your project using GitHub. </p></li></ul><p>By the end of this video, you&#8217;ll have a fully functional project and a foundational understanding of using AI tools for software development&#8212;even if you&#8217;re not a coder. Perfect for anyone ready to explore the world of AI-powered app creation.</p><p>Also, shameless plug, the last few minutes are a demo of the <a href="https://get.specstory.com/cursor-extension">SpecStory Extension for Cursor</a> that we recently launched to help you save and share your AI composer and chat history.</p><h2>For Mac Users</h2><div id="youtube2-XSvz3sycN0M" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;XSvz3sycN0M&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/XSvz3sycN0M?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><h2>For Windows Users</h2><div id="youtube2-grMX_TbzVFc" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;grMX_TbzVFc&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/grMX_TbzVFc?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><h2>Additional Notes</h2><p><strong>Full Cursor Chat History</strong> </p><ul><li><p>https://share.specstory.com/stories/20072845-d03c-4961-b276-167fe6eeb2ad</p></li></ul><p></p><p> <strong>&#128279; Links</strong> </p><ul><li><p>https://www.cursor.com/</p></li><li><p>https://brew.sh/ </p></li><li><p>https://formulae.brew.sh/formula/node</p></li><li><p>https://ui.shadcn.com/docs/installation/next </p></li><li><p>https://github.com/ </p></li><li><p>https://vercel.com/</p></li><li><p>https://specstory.com</p></li></ul><p></p><p><strong>Transcript</strong></p><p>This is a video about SpecStory which helps you when you're doing AI-driven development using a tool called Cursor. If you haven't been doing AI-driven development and you're just getting started, this video is for you. It will help you get set up with Cursor that'll let you do software development even if you're not a software engineer or coder.</p><p>This will be a RAW video - we're not going to fast forward past the bumpy parts. We've got a clean Mac install with just a few pieces of software already installed. This should give you a sense of what it'll take to get started from scratch building software with Cursor and Spec Story.</p><p>The first step is getting Cursor installed and set up. You can go to cursor.com and download for your operating system, in this case Mac. We'll have another video for Windows in the future. Once you've got Cursor installed you can just run it like any other tool. On Mac I use command space to start applications but you can go to your Applications folder.</p><p>On first run you'll see nothing set up and it's asking for you to configure some settings. All these defaults are perfectly fine. I like to say yes and continue if you don't mind sending data back to Cursor to help improve. You can choose privacy mode if you prefer. Cursor is a paid tool, $20 a month and it's well worth it and it's really the only tool that we absolutely need to pay for. All the rest will be able to set up free alternatives.</p><p>This is what it looks like when you first get Cursor installed and authenticated before you do anything. Our first step is opening a folder - that's the way that most integrated development environments (which Cursor is) use a folder-based approach for managing projects.</p><p>Let's first create a folder. We could open an empty folder, but usually we start from a starting point. The starting point we'll choose is an application framework called Next.js. We're going to make use of what's known as a user interface component library called shadcn. The easiest starting point is to just go straight to the shadcn docs and the installation steps for Next.js.</p><p>You could prompt your way through the setup by asking ChatGPT or Claude to help you get a new project set up. But I've found that sometimes these steps can be out of date. In this particular case, I prefer to use the raw documentation at ui.shadcn.com/docs for the Next.js installation.</p><p>For running the Next.js installation, I've chosen the NPM version. You can choose any of these, but most of the output of Cursor and Claude favors the most used tools. NPM is one of, if not the most used tool for these particular things. NPM is one of a pair of tools we're going to need.</p><p>When we're building UI applications we have lots of choices, but a really good set of standard choices is to use Node. Node is a framework for building websites or interactive web applications. That's what we're going to do here.</p><p>Let's try to run the installation command. But the first thing you'll notice is that NPX is not found. So we need to get some tools set up first - at least a minimal set of tools for software development. Two of those are Node and npm. NPX is just one of the commands that's available as part of NPM.</p><p>Let's get some tools installed on our Mac. The most widely used tool for installing other development tools on a Mac is called Homebrew. Homebrew tries to make it dead simple to get started - there's just a single command line that you run to install Homebrew itself, which then opens the door to install lots of other applications.</p><p>This whole process will only work if you're set up as a Mac administrator on your laptop or desktop. If you don't know what that means, you need to Google "Mac administrator" and make sure you get your account set up properly for that.</p><p>After installing Homebrew, don't skip the next steps - we need to run each of these follow-up commands in succession. Now we should be set up so that whenever we want to, we can run the Brew command. The two things we need Brew to install for us are Node and npm - it's just one command.</p><p>If you ever get lost, you can ask ChatGPT "how do I install Node using Homebrew?" Either method they suggest is fine. They recommend first running "brew update" (though we just installed it so it should be up to date), then "brew install node". We can then verify our installation by checking the version of Node and npm.</p><p>Now that we've got these installed, let's go back to where we started - creating a new application using shadcn. Now that we've got Node and NPM installed, we should be able to run the installation command. When it asks for configuration options, all the defaults make sense, and you can just hit Enter to accept them.</p><p>When the first part completes, you can select all the defaults for shadcn. You can read about shadcn and all the options available, but we'll just accept as is. The installation creates a new directory called "hello" in your current location.</p><p>Now in Cursor, if you see the option asking if you want to install a command to run Cursor, I would recommend it. Choose to install the command named "cursor". This means you can come to your terminal and run "cursor" on any directory like the hello directory, and it'll just open Cursor straight to that directory for you.</p><p>There are two really important things we want to enable when we come into Cursor. One is the terminal - this is the same terminal we were just in, but now it's integrated into Cursor. The other thing is the AI pane over on the right-hand side, which lets us do the magic and use AI to help us write code.</p><p>At this point, you can use Cursor and ask it questions like "what command can I run to start this application?" When you use Cursor, you can add context, which means pointing to any of the files in your current project directory or other outside content. One of the simplest ways, especially when you're starting and have a tiny project, is to tell Cursor to include the entire codebase.</p><p>You can say "include codebase" to tell Cursor to look at everything here, all the files and folders, when it's trying to answer questions. When we ask about starting the application, it shows multiple commands you can use. The software development community has created four different package managers that do roughly the same thing. We'll just stick to npm for everything.</p><p>When it suggests commands, it means to run these commands inside the terminal. You can copy one of them and paste it into the terminal. The command "npm run dev" is one you'll probably end up memorizing because you run it so often.</p><p>What this does is run a web server that allows you to interact with the code of this website to see it in your browser. This server will package up all this code and turn it into a website. We can visit the URL it provides in our browser. If you want, you can hold down the command key and click the link to open your browser right there.</p><p>The whole site is exactly what the code says should be rendered. Now we can move on and create a site that we actually want, because we wanted a hello site, not one that said Next.js on it.</p><p>Now we can use Cursor to do all of the heavy lifting for us. Once we get things to this point and set up, the world is our oyster. I often like to create new composers when I'm onto a new task. You can always get back to your old composers whenever you want. A composer is just like a conversation between you and the AI acting as your engineer.</p><p>Let's make the most fun hello world page we can. It's wintertime and I like the holiday season. Let's create a page for the holidays and winter. You can get creative and make some SVGs so the page looks pretty. Don't worry if you don't know what an SVG is - it's just a type of image format that Cursor and Claude are particularly good at rendering.</p><p>We'll submit that request and let Cursor Composer do its work by suggesting changes and edits to all of our files. Sure, we could dig in and try to follow along, and there's a lot of learning to be done with that. But sometimes we just want to hit "Accept all" and see what we've got.</p><p>One of the nice things is as you make and save changes in the code - or more specifically as Cursor makes changes in the code and you hit Apply all to save them - this server that we're running (remember we started npm run dev) is still running in the background and looking for any changes to our application files. It's immediately incorporating them so that when we come back to the browser and reload, we can see those changes.</p><p>Look how fun it is! I couldn't have even imagined this a year ago but Cursor and Claude are able to write the code for a holiday site just like this. Now let's take a minute to add in some more traditional elements of web applications. This will start to get at the reason why we installed shadcn.</p><p>If we look at shadcn, it's pretty interesting because what it is is a component library. If you've been to any website or web application, you've probably seen some combination of these already on the page - everything from a simple button that looks nice and styled and works well, to a calendar control or a card where a card is just this sort of rounded rectangle layout that gets used often in modern websites and web apps.</p><p>We're going to use cards and buttons in our hello site. The easiest way to do this is to just ask Cursor to help us do that. Let's add two cards to the site that present some holiday greetings.</p><p>I'm hoping that Cursor will pick up this word "cards" and know that I mean shadcn cards. In this case it created cards using styling rather than the shadcn components. We can ask it "did you use shadcn for those cards?"</p><p>When we try to install the shadcn components, we might run into some errors. That's okay - Cursor and Claude can help us with this. We just copy the error and context, and Cursor will help us resolve it. It realizes that the components aren't installed yet.</p><p>We'll need to run some installation commands in the terminal. You have a couple of choices - the easiest of which is to stop what's already running in this terminal. The way to do that is to hold down the control key (not the command key) and hit C. That stops the npm run dev server and then we can run our installation commands.</p><p>When we get everything installed and running, we might run into eslint errors when trying to deploy. ESLint is just a tool for trying to create clean code. By default, Next.js and Vercel are configured to really try and have clean code.</p><p>We can work through these errors step by step:</p><ul><li><p>Fix the ESLint configuration</p></li><li><p>Install any needed dependencies</p></li><li><p>Update configuration files</p></li><li><p>Commit and push changes</p></li><li><p>Try deploying again</p></li></ul><p>At a certain point we could decide that we need to dig in, learn more about ESLint, learn more about Vercel, do some research of our own, build up our knowledge base. But for now, we can try to have Cursor and Claude help us get past these issues by installing the right dependencies and updating the configuration.</p><p>Once we get past our configuration issues, we can deploy our site using Vercel. Vercel works very nicely with the type of application we just built, which is known as a Next.js web application.</p><p>Let's get started with Vercel. We can sign up if we haven't already - "working on personal projects" is a good option to select. We can continue with GitHub, and it will go through and authorize Vercel. We need to make sure we install Vercel for our GitHub account and give it access to our repositories.</p><p>Our first Vercel GitHub integration was literally just to do the sign into Vercel. That second integration, the install, is what was needed for Vercel to connect to our repositories. We can see that hello repository that we just updated.</p><p>We can hit the import button here. Often defaults are your friend, especially when you're working with a Next.js application and Vercel. Those work very well together. Hit the deploy button and Vercel will take everything that we've done, all that code and package it up.</p><p>After deployment completes, there are a couple of different URLs. One that we can use for working and commenting on this particular deployment, and one that we can share with the world. The one we can share with the world is what we care about most - that's what the little global icon indicates.</p><p>When we click on it, we can see our application up and running. We get a Vercel toolbar and some extra accompaniments because we're logged into Vercel. But if we share this with somebody else, which we can simulate by opening an incognito window, they're just going to see our application, our page - it's going to work, and they're going to have a happy holiday.</p><p>Now that we've got our happy holiday site all built, let's learn about what Spec Story can do to help with this flow. We can go to specstory.com - we can see this Cursor extension is exactly what we need.</p><p>To install Spec Story directly into Cursor instead of VS Code, you actually have to go through Cursor. Go to the extension marketplace icon up in the top left. Then we can search for Spec Story and install it.</p><p>Once we've got Spec Story installed, there are two big things we can do with it: save the entire chat history (not just one conversation, but all composer sessions and chats we've had) or share these out. Spec Story makes it really easy to share these with others.</p><p>Let's start with saving. Both commands are run from the command palette inside Cursor. You can get to the command palette a couple of different ways - you can search help for it and see View command palette, or use Shift command P as the keystroke.</p><p>If we just type Spec Story in the command palette, we can see our two commands. The first one is to save the composer history. Saving the composer history creates a new markdown file which is then opened for preview. You can close that preview if you don't like it and just want to look through the markdown file.</p><p>The file shows all of the history I've had for building out this entire application. All the chats and composer sessions are saved in this file. If we want to really save this, we can hit command S and save it as "Spec Story History.md".</p><p>We can even reference this file and ask questions about it, like "Give me a brief summary of everything I did in this project." It helps us remember everything we had to do to get through this development.</p><p>If we want to completely unlock this history for others, we can go back to the command palette and use "spec story share composer and chat history." We see down on the left that it's published out this history for me to share with others. When we open it, we get a nice clean view of everything that happened from start to finish in the AI chat history.</p><p>It's a great way to share the story of how you created your application.</p>]]></content:encoded></item><item><title><![CDATA[Recording by default]]></title><description><![CDATA[Our practical approach and guide for turning meetings into shared insight]]></description><link>https://newsletter.specstory.com/p/recording-by-default</link><guid isPermaLink="false">https://newsletter.specstory.com/p/recording-by-default</guid><dc:creator><![CDATA[Jake Levirne]]></dc:creator><pubDate>Tue, 10 Dec 2024 16:40:35 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!hAQP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe93165f4-b8b2-4c2b-a722-651a06d93cdb_1472x866.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>&#128279; Know a founder who&#8217;s drowning in meetings and struggling to keep up? Share our story and guide for turning conversations into searchable insight assets.</em> </p><div><hr></div><p><strong>Picture this:</strong> you&#8217;re in another weekly Zoom call, your remote team scattered across time zones. </p><p>The agenda is ambitious: brainstorm a new product feature, review last week&#8217;s customer interviews, and clarify a few sticky points that keep resurfacing. </p><p>You&#8217;re nodding along, taking mental notes, but halfway through, your mind drifts. Did we just agree on something critical that we might forget tomorrow?</p><p>We all know this feeling intimately.</p><p>Meetings are like quicksand&#8212;constantly pulling you in, yet once you step out, the details slip away. </p><ul><li><p>What if you could reduce the worry about losing track of those insights? </p></li><li><p>What if every conversation could become an asset&#8212;easily shared, neatly organized, and available to yield takeaways at a glance?</p></li></ul><h3>Working Transparently</h3><p>My cofounder, <a href="https://www.linkedin.com/in/snootymonkey/">Sean</a>, previously created an entire company around the idea of startup transparency. And GitLab&#8217;s <a href="https://handbook.gitlab.com/">work in the open</a> has helped me many times throughout my career. Everything from product management job descriptions to product operations best practices are well captured in their living handbook. </p><p>At <a href="https://specstory.com/">SpecStory</a> we value transparency and working openly with each other. </p><p>It&#8217;s why we hit &#8220;record&#8221; on nearly every Zoom call. Real product decisions, customer feedback, internal debates, and co-creation sessions&#8212;these moments are valuable and we want to prevent them from slipping into the ether. </p><p><em>Example:</em> below is a three minute highlight reel (edited with <a href="https://www.descript.com/">descript</a>) of us co-composing <a href="https://specstory.com/">our home page</a> last week. </p><p>We went from blank slate to it being working and deployed. The share of this experience allows other team members not there to understand &#8220;how we built it&#8221;. </p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;18b1feae-fa80-4a9c-9614-97f88d2bd5cb&quot;,&quot;duration&quot;:null}"></div><h3><strong>Upgrading our Recording Stack</strong></h3><p>For us, Zoom&#8217;s built-in recording features were a good start: cloud recordings, transcripts, basic AI summarization. What we like the most is that it&#8217;s unobtrusive&#8230; it doesn&#8217;t invite a &#8220;recording bot&#8221; into the meeting.</p><p>We quickly encountered friction. </p><p>Storage gets pricey, organization is bare-bones, and shared links become difficult to manage. We needed a better system and stack&#8212;something that could preserve the ease of Zoom&#8217;s native recordings without forcing us to juggle storage upgrades or bot integrations.</p><p>We evaluated a handful of tools before landing on <a href="https://grain.com/">Grain</a>. </p><p>This might sound like an ad for Grain. But I have no connection to Grain other than being a happy user.</p><p>There are a bunch of reasons Grain aligns well with our needs. For example, it lets us <a href="https://support.grain.com/en/articles/4739669-how-do-i-import-previously-recorded-calls">auto-import </a>every Zoom recording with no special invites. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hAQP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe93165f4-b8b2-4c2b-a722-651a06d93cdb_1472x866.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hAQP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe93165f4-b8b2-4c2b-a722-651a06d93cdb_1472x866.jpeg 424w, https://substackcdn.com/image/fetch/$s_!hAQP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe93165f4-b8b2-4c2b-a722-651a06d93cdb_1472x866.jpeg 848w, https://substackcdn.com/image/fetch/$s_!hAQP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe93165f4-b8b2-4c2b-a722-651a06d93cdb_1472x866.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!hAQP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe93165f4-b8b2-4c2b-a722-651a06d93cdb_1472x866.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hAQP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe93165f4-b8b2-4c2b-a722-651a06d93cdb_1472x866.jpeg" width="1456" height="857" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e93165f4-b8b2-4c2b-a722-651a06d93cdb_1472x866.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:857,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:89061,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hAQP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe93165f4-b8b2-4c2b-a722-651a06d93cdb_1472x866.jpeg 424w, https://substackcdn.com/image/fetch/$s_!hAQP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe93165f4-b8b2-4c2b-a722-651a06d93cdb_1472x866.jpeg 848w, https://substackcdn.com/image/fetch/$s_!hAQP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe93165f4-b8b2-4c2b-a722-651a06d93cdb_1472x866.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!hAQP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe93165f4-b8b2-4c2b-a722-651a06d93cdb_1472x866.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>And once you&#8217;re past the basics of getting recording setup, you can use playlists and tags to organize all of your meetings. </p><p>It&#8217;s also helpful to turn on Grain Workspace access by default for all meetings so you don&#8217;t have to manually set it for each video:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VPP2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F645aac6d-1c04-4c6f-8ff6-c5bb0cbdc52e_2424x1034.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VPP2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F645aac6d-1c04-4c6f-8ff6-c5bb0cbdc52e_2424x1034.png 424w, https://substackcdn.com/image/fetch/$s_!VPP2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F645aac6d-1c04-4c6f-8ff6-c5bb0cbdc52e_2424x1034.png 848w, https://substackcdn.com/image/fetch/$s_!VPP2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F645aac6d-1c04-4c6f-8ff6-c5bb0cbdc52e_2424x1034.png 1272w, https://substackcdn.com/image/fetch/$s_!VPP2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F645aac6d-1c04-4c6f-8ff6-c5bb0cbdc52e_2424x1034.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VPP2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F645aac6d-1c04-4c6f-8ff6-c5bb0cbdc52e_2424x1034.png" width="1456" height="621" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/645aac6d-1c04-4c6f-8ff6-c5bb0cbdc52e_2424x1034.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:621,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:217181,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!VPP2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F645aac6d-1c04-4c6f-8ff6-c5bb0cbdc52e_2424x1034.png 424w, https://substackcdn.com/image/fetch/$s_!VPP2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F645aac6d-1c04-4c6f-8ff6-c5bb0cbdc52e_2424x1034.png 848w, https://substackcdn.com/image/fetch/$s_!VPP2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F645aac6d-1c04-4c6f-8ff6-c5bb0cbdc52e_2424x1034.png 1272w, https://substackcdn.com/image/fetch/$s_!VPP2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F645aac6d-1c04-4c6f-8ff6-c5bb0cbdc52e_2424x1034.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You and your team can now grab the transcripts and use AI to extract useful nuggets.</p><h3>Turn Raw Footage into Insight</h3><p>Recording alone isn&#8217;t enough. You want meaning from all the dialogue.</p><p><em>Example:</em> after our user research interviews, we run each transcript through Claude, with the following prompts (each issued separately). These prompts are a sieve for surfacing signal.</p><ul><li><p>Extract key takeaways from this research interview</p></li><li><p>What was most important for them?</p></li><li><p>What were they most excited about?</p></li></ul><ul><li><p>For their most <strong>challenging</strong> story, summarize the following:</p><ul><li><p>Problem or challenge</p><ul><li><p>The pain points</p></li></ul></li><li><p>Solutions tried</p><ul><li><p>Tools or processes used</p></li></ul></li><li><p>Outcome</p><ul><li><p>Lessons learned or what he'd do differently next time.</p></li></ul></li></ul></li></ul><ul><li><p>For their most <strong>positive</strong> story, summarize the following:</p><ul><li><p>The problem or challenge</p><ul><li><p>The pain points</p></li></ul></li><li><p>Solutions tried</p></li><li><p>Tools or processes used</p></li></ul></li></ul><ul><li><p>Lessons learned. What would they do differently next time?</p></li></ul><ul><li><p>Extract the 3 most salient quotes from the interview</p></li></ul><ul><li><p>Make a simple list of every tool or service they mentioned</p></li></ul><p>And this approach produces really interesting learnings. Below is a quote from a conversation I had recently with a <a href="https://tolacapital.com/2024/11/13/the-rise-of-the-software-composer-a-new-era-of-software-creation">software composer</a> in Oslo:</p><blockquote><p>On the empowerment of AI tools: "I felt very powerful because I've always been dabbling with code, but I've always had developers who actually built the stuff I wanted to build, but now it's more direct."</p></blockquote><p>Within minutes, we have a distilled version of the conversation&#8217;s essence. </p><ol><li><p>We find patterns in user pain points</p></li><li><p>Lock onto the most resonant quotes, and </p></li><li><p>Identify workflows we hadn&#8217;t considered. </p></li></ol><p>We use this practice for more than user research. </p><p>Internal team meetings contain plenty of hidden gems, too. We might discover a recurring theme everyone keeps circling around, an idea backlog we didn&#8217;t realize we had, or a point of contention worth smoothing out before it snowballs.</p><p>Recording, organizing, and analyzing helps us turn the stream of chatter into a structured, living knowledge base.</p><p>Some may worry it could feel intrusive. But used thoughtfully and transparently, recording becomes as natural as taking notes. </p><p>Critical one-on-ones can stay private, but in general, default recording ensures nothing slips through the cracks. </p><p>It takes a few weeks to adapt, but soon it&#8217;s second nature&#8212;hit record, talk freely, trust that nothing valuable will be lost.</p><h3><em><strong>Start Now</strong></em></h3><p>Know a founder who&#8217;s drowning in meeting overload? Share our story and guide. </p><p>With the right tools (like Grain and Descript) and a handful of clever prompts, every conversation opportunistically becomes a future resource.</p><p>Meetings are now a wellspring of shared understanding, a repository of hard-won lessons, and a catalyst for action.</p><p><em>Stop letting insights slip away.</em> </p><p><em>Start recording, start organizing, and start extracting meaning.</em> </p><p>Turn your team&#8217;s conversations into living blueprints for the future.</p>]]></content:encoded></item></channel></rss>