<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Product on NateBent.com</title>
    <link>https://natebent.com/tags/product/</link>
    <description>Recent content in Product on NateBent.com</description>
    <generator>Hugo</generator>
    <language>en</language>
    <managingEditor> (Nathan Bent)</managingEditor>
    <atom:link href="https://natebent.com/tags/product/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Zero to App with AI, Part 6: The App Taught Us What to Build</title>
      <link>https://natebent.com/posts/zero-to-app-with-ai-part-6-the-app-taught-us-what-to-build/</link>
      <pubDate>Sun, 19 Jul 2026 01:00:00 +0000</pubDate><author>Nathan Bent</author>
      <guid>https://natebent.com/posts/zero-to-app-with-ai-part-6-the-app-taught-us-what-to-build/</guid>
      <description>&lt;p&gt;Everything up to here was built from imagination: what I thought logging a workout should feel like. Then I trained with it for real, phone in hand, chalk on fingers, rest timer running, and the roadmap got humbled. This part is about the highest-signal planning input the project ever had: actual use.&lt;/p&gt;
&lt;h2 id=&#34;the-friction-list&#34;&gt;The friction list&lt;/h2&gt;
&lt;p&gt;After the first real gym sessions I dumped every annoyance into a list. Nine items, all of them things no amount of desk-testing had surfaced, because they only exist under gym conditions: tired, hurried, one-thumbed. The highlights:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Set grouping. A wall of individual sets is unreadable between exercises; sets want to cluster by exercise visually.&lt;/li&gt;
&lt;li&gt;Post-hoc editing. Fat-fingered 135 as 125? There was no way to fix a set after saving. At a desk you&amp;rsquo;d never notice. At the gym it&amp;rsquo;s constant.&lt;/li&gt;
&lt;li&gt;Smart defaults. The app made me re-enter the weight I just used. The previous set is almost always the best guess for the next.&lt;/li&gt;
&lt;li&gt;Sort order, collapsible sections, calmer check-ins. The start-of-workout screen had grown enthusiastic; under time pressure you want it quiet and fast.&lt;/li&gt;
&lt;li&gt;A Manage Plans page and plan archiving. Plans accumulate, and the picker shouldn&amp;rsquo;t scroll forever past experiments you&amp;rsquo;re done with.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;None of these is clever. That&amp;rsquo;s the point. They&amp;rsquo;re obvious in use and invisible in theory.&lt;/p&gt;
&lt;blockquote class=&#34;callout callout-tip&#34;&gt;
    &lt;p class=&#34;callout-title&#34;&gt;
      &lt;span class=&#34;callout-icon&#34;&gt;&lt;svg viewBox=&#34;0 0 16 16&#34; aria-hidden=&#34;true&#34;&gt;&lt;path d=&#34;M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z&#34;/&gt;&lt;/svg&gt;&lt;/span&gt;
      &lt;span class=&#34;callout-label&#34;&gt;Tip&lt;/span&gt;&lt;/p&gt;
    &lt;p&gt;Write the friction list in the moment or right after. These observations evaporate within hours, and once they&amp;rsquo;re gone you&amp;rsquo;re back to designing from imagination.&lt;/p&gt;
  &lt;/blockquote&gt;&lt;h2 id=&#34;steal-like-a-product-manager&#34;&gt;Steal like a product manager&lt;/h2&gt;
&lt;p&gt;Before turning the list into work, one session did something teams skip: surveyed the incumbents. Strong, Hevy, FitNotes, Jefit. What do apps with millions of gym-hours of accumulated feedback all agree on? The survey confirmed the friction list from the outside: auto-fill defaults from the previous set are table stakes everywhere, rest timers matter, set editing is universal.&lt;/p&gt;
&lt;p&gt;When your dogfooding complaints and the market&amp;rsquo;s converged solutions agree, you can build without second-guessing. Where they diverge is interesting too: you either have a differentiator or a blind spot, and it&amp;rsquo;s worth a minute deciding which.&lt;/p&gt;
&lt;h2 id=&#34;an-ideation-phase-with-no-code&#34;&gt;An ideation phase with no code&lt;/h2&gt;
&lt;p&gt;The friction list and the survey merged into a formal roadmap phase whose entire output was a document: a rated backlog, one line per idea, rated easy, medium, or hard, with just enough context to build from later, committed to the repo as &lt;code&gt;docs/FEATURE-IDEAS.md&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Then the roadmap grew three implementation phases sorted by that rating: quick wins (the easy column, knocked out in one session), medium features, and the one genuinely hard interaction, supersets, which got a phase to itself rather than being wedged into a grab-bag.&lt;/p&gt;
&lt;p&gt;This sounds like bureaucracy for a hobby app. It&amp;rsquo;s the opposite. It&amp;rsquo;s what let an AI-paced project stay aimed. When building costs hours instead of weeks, the scarce resource is knowing what&amp;rsquo;s worth building. A rated backlog in the repo means every future session picks from a priority queue instead of improvising, and, per the docs-as-memory principle from &lt;a href=&#34;https://natebent.com/posts/zero-to-app-with-ai-part-1-write-the-docs-before-the-code/&#34;&gt;Part 1&lt;/a&gt;, it lives where the agent can actually see it: not in my head, not in chat history, not in a notes app.&lt;/p&gt;
&lt;h2 id=&#34;the-check-in-lesson-features-must-earn-their-place-in-the-flow&#34;&gt;The check-in lesson: features must earn their place in the flow&lt;/h2&gt;
&lt;p&gt;An earlier phase had added daily check-ins (sleep, mood) as cards when you start a workout, designed skippable from day one, on the principle that nothing stands between you and logging a set. Real use upgraded that principle from design guideline to law: even optional cards read as noise at 6 AM, which is why &amp;ldquo;calmer check-ins&amp;rdquo; made the friction list. The dopamine feature (&amp;ldquo;New PR!&amp;rdquo; celebrations) survived contact with reality. The earnest wellness features had to learn to whisper.&lt;/p&gt;
&lt;blockquote class=&#34;callout callout-insight&#34;&gt;
    &lt;p class=&#34;callout-title&#34;&gt;
      &lt;span class=&#34;callout-icon&#34;&gt;&lt;svg viewBox=&#34;0 0 16 16&#34; aria-hidden=&#34;true&#34;&gt;&lt;path d=&#34;M8 0 L9.6 6.4 L16 8 L9.6 9.6 L8 16 L6.4 9.6 L0 8 L6.4 6.4 Z&#34;/&gt;&lt;/svg&gt;&lt;/span&gt;
      &lt;span class=&#34;callout-label&#34;&gt;Interesting!&lt;/span&gt;&lt;/p&gt;
    &lt;p&gt;The flow you optimize is the one you&amp;rsquo;re in when you&amp;rsquo;re weakest: tired, rushed, low-patience. Design reviews happen at desks by people at their sharpest. Your users, even when that&amp;rsquo;s just you, are neither.&lt;/p&gt;
  &lt;/blockquote&gt;&lt;h2 id=&#34;what-id-tell-you&#34;&gt;What I&amp;rsquo;d tell you&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Ship to yourself early, then actually use it. The milestone &amp;ldquo;log a real workout from my phone&amp;rdquo; was in the roadmap from day zero, and everything after it was better-aimed than everything before it.&lt;/li&gt;
&lt;li&gt;Write the friction list immediately, in the moment or right after.&lt;/li&gt;
&lt;li&gt;Survey the incumbents once, deliberately. Where your complaints and their solutions agree, build with confidence. Where they diverge, you might have a differentiator, or a blind spot.&lt;/li&gt;
&lt;li&gt;Make ideation a phase with a committed artifact. A rated backlog in the repo beats ideas in your head, in your chat history, or in a notes app the agent can&amp;rsquo;t see.&lt;/li&gt;
&lt;li&gt;Rate by effort and let the easy column fund momentum. A session of quick wins after a heavy phase keeps the project fun, and fun is the actual fuel of side projects.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Part 7: the app grows up. Real multi-user auth, the migration that touched every table, and how &amp;ldquo;workout-tracker&amp;rdquo; became RepRepo.&lt;/p&gt;
&lt;h2 id=&#34;references-and-further-reading&#34;&gt;References and further reading&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://code.claude.com/docs/en/sub-agents&#34;&gt;Create custom subagents&lt;/a&gt; and &lt;a href=&#34;https://code.claude.com/docs/en/memory&#34;&gt;How Claude remembers your project&lt;/a&gt;, Claude Code docs, if you&amp;rsquo;re wiring the ideation-phase pattern into your own repo: the backlog doc only works because the agent reads the repo.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
  </channel>
</rss>
