<?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:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Marton Biro on Medium]]></title>
        <description><![CDATA[Stories by Marton Biro on Medium]]></description>
        <link>https://medium.com/@martonbyro?source=rss-561a34408494------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*eyto7ZKiPwGeqQdMB2xm-g.jpeg</url>
            <title>Stories by Marton Biro on Medium</title>
            <link>https://medium.com/@martonbyro?source=rss-561a34408494------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 17 May 2026 03:08:41 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@martonbyro/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[I picked up a 5-year-old pet project with Claude Code and shipped the MVP in 2 weeks.]]></title>
            <link>https://medium.com/@martonbyro/i-picked-up-a-5-year-old-pet-project-with-claude-code-and-shipped-the-mvp-in-2-weeks-45f85b89e0cf?source=rss-561a34408494------2</link>
            <guid isPermaLink="false">https://medium.com/p/45f85b89e0cf</guid>
            <category><![CDATA[claude-code]]></category>
            <category><![CDATA[best-practices]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[ai]]></category>
            <dc:creator><![CDATA[Marton Biro]]></dc:creator>
            <pubDate>Wed, 13 May 2026 14:27:27 GMT</pubDate>
            <atom:updated>2026-05-13T14:27:27.119Z</atom:updated>
            <content:encoded><![CDATA[<p>In 2021 I started building a movies app. The idea is simple: couples and movie lovers get personalized recommendations based on their taste. I got two months in, weekends only, before life and work took over.</p><p>The repo sat there untouched until last month. I picked it back up because of Claude Code, I wanted to see how fast coding can become, plus I’d still use the app so it’s a win.</p><p>Well, what I expected was faster coding but what I got was a different way of working entirely.</p><p>I believe most devs start using AI coding tools the same way: excited to try it out and eager to jump into writing code with it. What I experienced is — describe a vague feature, generate code that’s almost right, iterate in circles, accumulate a mess.</p><p>Vague input = vague output.</p><p>The fix is a planning workflow. Here’s the one I use now.</p><h3>The loop that changed how I build features</h3><p>Three steps, in order: /grill-me, then /to-prd, then /to-issues. All three are skills built by <a href="https://www.mattpocock.com/">Matt Pocock</a> and published at <a href="https://github.com/mattpocock/skills">github.com/mattpocock/skills</a>.</p><p>Skills are slash commands that extend Claude Code’s default behavior. Install them in a few minutes, and they’re available in every session.</p><p>The loop: describe a feature roughly, run it through /grill-me until it&#39;s clear, turn the output into a PRD with /to-prd, break the PRD into issues with /to-issues, then let Claude Code work those issues one by one.</p><p>Simple in principle and very different in practice from just typing “build me a recommendations feature.”</p><h3>/grill-me: stop coding before you know what you’re building</h3><p>I’ll write out a rough feature description, drop it into Claude Code, and run /grill-me. Claude doesn&#39;t build anything at this point, it interrogates me about the idea.</p><p>For the recommendations engine, I started with something along these lines: “I want users to rate movies they’ve seen and get personalized recommendations based on those ratings.”</p><p>That was the rough direction.</p><p>It asked whether I was using collaborative filtering or content-based recommendations. What happens when two users in a couple have opposite tastes? What do I show a new user with no ratings history yet? Do old ratings carry the same weight as recent ones? What’s the fallback if the algorithm has nothing confident to return?</p><p>Each question comes with a recommended answer. You either accept or grill deeper. A few I pushed back on, which forced me to say why. And other recommendations were perfect.</p><p>The moment I have to articulate why I disagree, I either change my mind or discover a real constraint I hadn’t surfaced.</p><p>The session took 20 minutes. Without it, I’d have coded the feature I thought I wanted, not the one I actually wanted.</p><p>Planning is still engineering. The tool changed. The thinking didn’t.</p><pre># ~/.claude/skills/grill-me/SKILL.md<br><br>Interview me relentlessly about every aspect of this plan until we reach<br>a shared understanding. Walk down each branch of the design tree, resolving<br>dependencies between decisions one-by-one. For each question, provide your<br>recommended answer.<br><br>Ask the questions one at a time.<br><br>If a question can be answered by exploring the codebase, explore the<br>codebase instead.</pre><h3>/to-prd: write the spec before you write the code</h3><p>Once the grilling is done, /to-prd synthesizes everything into a spec. You could start with this skill right away, it would grill you, but in my workflow we already have a good grasp on the feature and its behavior — so no re-interviewing. It works from what&#39;s already in the conversation.</p><p>For the recommendations feature, the PRD covered: ratings schema (user, movie ID, score, timestamp), algorithm choice (content-based to start, cold-start fallback for new users), caching strategy, API endpoint contract, and frontend data shape.</p><p>I don’t use the PRD as a document to share. I use it as a forcing function.</p><p>If a feature can’t be turned into a PRD, it isn’t clear enough yet. That’s information worth having before a single line of code gets written.</p><p>When Claude Code drifts during development, I point back at the PRD. When an issue is ambiguous, the PRD resolves it. Those corrections take seconds instead of judgment calls mid-session.</p><pre># ~/.claude/skills/to-prd/SKILL.md<br><br>This skill takes the current conversation context and codebase understanding<br>and produces a PRD. Do NOT interview the user - just synthesize what you<br>already know.<br><br>Process:<br><br>1. Explore the repo to understand the current state of the codebase.<br>   Use the project&#39;s domain glossary vocabulary throughout the PRD,<br>   and respect any ADRs in the area you&#39;re touching.<br><br>2. Sketch out the major modules you will need to build or modify.<br>   Actively look for opportunities to extract deep modules that can<br>   be tested in isolation. A deep module encapsulates a lot of<br>   functionality in a simple, testable interface which rarely changes.<br><br>   Check with the user that these modules match their expectations.<br>   Check with the user which modules they want tests written for.<br><br>3. Write the PRD using this template:<br><br>   ## Problem Statement<br>   The problem that the user is facing, from the user&#39;s perspective.<br><br>   ## Solution<br>   The solution to the problem, from the user&#39;s perspective.<br><br>   ## User Stories<br>   A long, numbered list:<br>   As an &lt;actor&gt;, I want &lt;feature&gt;, so that &lt;benefit&gt;<br><br>   ## Implementation Decisions<br>   Modules, interfaces, schema changes, API contracts, architectural<br>   decisions. No file paths or code snippets - they go stale fast.<br><br>   ## Testing Decisions<br>   What makes a good test. Which modules will be tested.<br><br>   ## Out of Scope<br>   What is explicitly not being built.<br><br>   ## Further Notes<br>   Any remaining context.</pre><h3>/to-issues: turn the spec into a sprint</h3><p>The PRD goes in, a list of independently workable tickets comes out.</p><p>Each issue is a vertical slice through all integration layers, not a horizontal layer slice. So instead of “write the database schema” as one issue and “write the API” as another, each slice is a thin but complete path from schema to API to UI. You can demo or verify it on its own.</p><p>Each issue also gets tagged as AFK (Claude Code can implement and merge without human input) or HITL (needs a human decision point, like an architectural choice or a design review).</p><p><strong>For the recommendations engine, I got eight issues:</strong></p><ol><li>Database schema for movie ratings</li><li>Ratings API (create, update, delete)</li><li>Recommendation algorithm implementation</li><li>Caching layer for recommendations</li><li>Recommendations API endpoint</li><li>Frontend hook for fetching recommendations</li><li>RecommendationCard UI component</li><li>Test suite for the algorithm</li></ol><p><strong>That’s a sprint.</strong></p><p>I didn’t design that breakdown. /to-issues did and it worked really well.</p><pre># ~/.claude/skills/to-issues/SKILL.md<br><br>Break the plan into tracer bullet issues. Each issue is a thin vertical<br>slice that cuts through ALL integration layers end-to-end, NOT a horizontal<br>slice of one layer.<br><br>- Each slice delivers a narrow but COMPLETE path through every layer<br>  (schema, API, UI, tests)<br>- A completed slice is demoable or verifiable on its own<br>- Prefer many thin slices over few thick ones<br><br>Slices may be AFK or HITL.<br><br>AFK: can be implemented and merged without human interaction.<br><br>HITL: requires a human decision point (architectural choice, design review).<br>Prefer AFK over HITL where possible.</pre><p>Also, you could simply track issues on GitHub, you can create a project for the repo, create a Kanban board and track progress easily.</p><h3>Claude Code does the rest of the work</h3><p>Development becomes mechanical. Pick an issue, hand it to Claude, review the output, commit, move to the next one.</p><p>The issue gives Claude a bounded scope. The PRD gives it the wider context. It rarely goes in the wrong direction, and when it does, the fix is pointing at the relevant section in the PRD.</p><p>The recommendations engine took one focused weekend.</p><p>The codebase it produced is clean enough that I’m building on top of it now, not refactoring before I can continue. In 2021, the same feature took two months of weekend evenings, and I’d have wanted to rewrite it before shipping anyway.</p><p>If you have a side project sitting half-finished, try this on the next feature. The planning overhead is front-loaded and it compounds. By the third feature, the loop is default.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*KxtZgueX8oIEBmIfltyKVg.png" /></figure><h3>Why this works when vibe coding doesn’t</h3><p>The pattern I see most often, and used to follow: describe a vague feature, ask Claude to build it, get output that’s close but not right, iterate in conversation, accumulate spaghetti, give up or start over.</p><p>The fix isn’t about a better prompt.</p><p>/grill-me handles the ambiguity. /to-prd captures the output. /to-issues makes it executable. By the time code is being written, the complex decisions are already made. Claude is working on implementation and won&#39;t make blind decisions.</p><p>The reason I pasted the skills above is to show that these three skills aren’t magic. They enforce the same process a senior developer uses before starting any non-trivial feature: ask hard questions, write down the answers, break the work into pieces.</p><p>The difference is the whole loop takes 30–40 minutes, not a day of planning meetings.</p><p>The movies app sat in a repo for five years. Two more sessions and it’s shipped.</p><h3>Getting started takes 5 minutes</h3><p>Install the skills from Matt Pocock’s repo at <a href="https://github.com/mattpocock/skills">github.com/mattpocock/skills</a>. The install instructions are in the README.</p><p>Once installed:</p><ol><li>Start a Claude Code session in your project</li><li>Describe a feature you want to build</li><li>Run /grill-me and answer the questions it asks</li><li>Run /to-prd to generate the spec from the conversation</li><li>Run /to-issues to break the spec into tickets</li><li>Work the issues with Claude Code one by one</li></ol><p>The first time through takes longer because the questions are unfamiliar. By the third feature, it’s the default.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=45f85b89e0cf" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>