<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: 周鼎</title>
    <description>The latest articles on DEV Community by 周鼎 (@habit).</description>
    <link>https://dev.to/habit</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3024326%2Fea296931-0d6c-4b6b-8510-c809b681dbed.png</url>
      <title>DEV Community: 周鼎</title>
      <link>https://dev.to/habit</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/habit"/>
    <language>en</language>
    <item>
      <title>6 months of heavy Claude Code use: 4 prompt patterns that survived my notebook cleanup</title>
      <dc:creator>周鼎</dc:creator>
      <pubDate>Thu, 21 May 2026 09:58:36 +0000</pubDate>
      <link>https://dev.to/habit/6-months-of-heavy-claude-code-use-4-prompt-patterns-that-survived-my-notebook-cleanup-1755</link>
      <guid>https://dev.to/habit/6-months-of-heavy-claude-code-use-4-prompt-patterns-that-survived-my-notebook-cleanup-1755</guid>
      <description>&lt;p&gt;I've been using Claude Code as a daily driver for about six months — not as a novelty, but as the thing I reach for when I'd otherwise grep, refactor, or write a migration script by hand. Over that time I rewrote my prompts four or five times. The version I use now barely resembles what I started with. Here's what changed.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Generic prompts produce generic output
&lt;/h2&gt;

&lt;p&gt;The first month, almost every prompt I wrote looked like "refactor this function" or "find bugs in this file". The results were what you'd expect: plausible, hedged, sometimes useful, rarely something I'd commit. The model wasn't bad — my prompt was telling it to guess what I wanted.&lt;/p&gt;

&lt;p&gt;Compare "refactor this function" to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Find the function `&amp;lt;NAME&amp;gt;` in `&amp;lt;PATH&amp;gt;`. Identify one cohesive block
(5–20 lines) that does a single thing. Propose an extraction:
- Show the new helper signature (params + return type) and full body
- List every call site that needs updating with file:line
- Identify any closed-over variables that need to become parameters
- Run the type-checker after the refactor and report errors

Before applying, summarize the blast radius and wait for my approval.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same task. The second version produces a code review I can act on. The first produces homework I have to grade. The difference isn't Claude getting smarter — it's that the second prompt has constrained the output enough that there's only one shape the answer can take. &lt;strong&gt;Specificity is leverage.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Every prompt should demand structured output
&lt;/h2&gt;

&lt;p&gt;The prompts that survived my notebook cleanup all share one trait: they force Claude into a taxonomy. &lt;code&gt;CONFIRMED_DEAD&lt;/code&gt; vs &lt;code&gt;LIKELY_DEAD&lt;/code&gt; vs &lt;code&gt;FALSE_POSITIVE&lt;/code&gt;. &lt;code&gt;ROOT_CAUSE&lt;/code&gt; picks-exactly-one from a fixed list. &lt;code&gt;SAFE_INLINE&lt;/code&gt; vs &lt;code&gt;NEEDS_REVIEW&lt;/code&gt;. The taxonomy doesn't have to be elaborate — it just has to be there.&lt;/p&gt;

&lt;p&gt;Why does this matter? Because unstructured output is unreviewable at scale. If Claude hands me three paragraphs about "potential issues", I have to read all three and decide whether each one is a real finding or a hedge. If Claude hands me a list classified into three buckets with evidence per item, I can skim the CONFIRMED bucket, sanity-check the LIKELY bucket, and ignore the FALSE_POSITIVE bucket. The taxonomy is doing triage for me.&lt;/p&gt;

&lt;p&gt;That's the difference between "Claude is impressive" and "Claude is useful in production".&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Safety gates beat reverting commits
&lt;/h2&gt;

&lt;p&gt;Early on I let Claude apply changes directly. It was faster. It was also occasionally disastrous. The single worst case: I asked Claude to "clean up unused imports" in a directory, and it removed an import that was only referenced inside a template string for dynamic loading. The build passed locally. The staging deploy failed because the dynamically-loaded module was no longer in the bundle. I lost an afternoon to a &lt;code&gt;git bisect&lt;/code&gt; that should have taken five minutes.&lt;/p&gt;

&lt;p&gt;The fix wasn't smarter prompts — it was a gate. Every prompt I keep now ends with some variant of:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Do not apply. Output the proposal and wait for approval."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The cost is one extra round-trip. The benefit is I see the blast radius before it lands. &lt;strong&gt;Propose-before-apply is the single highest-ROI change I made.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. What I changed in my workflow
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;I deleted ~80% of my prompt notebook. The keepers all had explicit taxonomies or explicit gates.&lt;/li&gt;
&lt;li&gt;I stopped writing one-shot prompts for novel problems. If I'd only use a prompt once, the prompt isn't the artifact — the answer is. I just ask conversationally.&lt;/li&gt;
&lt;li&gt;I added &lt;code&gt;file:line&lt;/code&gt; citations as a requirement to any prompt that reports findings. Vague pointers cost me too much grep time.&lt;/li&gt;
&lt;li&gt;I made "wait for my approval before applying" the default ending, not an exception.&lt;/li&gt;
&lt;li&gt;I started keeping a small file of anti-patterns — prompts I'd written that produced confidently wrong output — so I'd remember why I cut them.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The meta-lesson
&lt;/h2&gt;

&lt;p&gt;Prompt design is a real engineering discipline now, not a soft skill. The teams that treat it like one will get production-grade output. The teams that treat Claude as a chatbot will keep getting chatbot output and blame the model.&lt;/p&gt;




&lt;p&gt;If this resonated and you want the prompt set I ended up with — 50 prompts, 10 workflows, 5 drop-in skills, 8 CLAUDE.md templates by tech stack — I packaged it as &lt;strong&gt;The Senior Engineer's Playbook for Claude Code&lt;/strong&gt;, $9 (launch price, going to $15 after the first 100 sell).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://habitshine.gumroad.com/l/julvxh" rel="noopener noreferrer"&gt;See sample prompts and grab the playbook →&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;14-day refund, no questions. If a single prompt doesn't save you the $9 in real work, I'll refund and we part on good terms.&lt;/p&gt;

&lt;p&gt;Happy to debate any of the patterns above in the comments.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
