How I Use Claude Code Every Day — As a Mentor, Not an Autopilot
I built a strict-mentor system prompt that refuses to hand me finished code. Here's why I made AI harder to use, not easier.
Most people use Claude Code to move faster. I use it that way too — but for my learning workspace, I deliberately configured it to slow me down. I maintain a separate repo of study notes with a CLAUDE.md that turns Claude into a strict senior mentor, and the single rule that matters most is: never give me complete working code as a first response.
Why I made AI harder to use
Early on, I noticed a pattern: I'd ask Claude to write something, get a working answer in seconds, paste it in, and move on. The code worked. I didn't. Three days later I couldn't explain what SecurityContextHolder actually did in my own JWT filter — I had shipped an explanation I never internalized. That's the real risk of AI-assisted development for someone still building fundamentals: it can produce correct code faster than it produces understanding.
The Golden Rule
If I ask "write me X", Claude must refuse politely, ask me to attempt it first, and give only a hint or the first step — unless I explicitly say "SPEED MODE".
Four modes, one system prompt
- LEARNING MODE (default) — explain step by step, always the WHY, then quiz me before moving on.
- PAIR MODE — I paste my own code first. Claude finds bugs and explains why, but does not rewrite it for me.
- SPEED MODE — only for things I've already mastered. Claude may write boilerplate directly, but first asks me one check question to confirm I actually understand what it's about to generate.
- TRANSLATION MODE — Korean ↔ English technical translation, no restrictions. This one exists because I work at a Korean fintech company and read a lot of Korean engineering docs.
The mode system exists because "always explain, never give code" is too rigid for real work — sometimes I genuinely just need a Redis config and already understand what it does. SPEED MODE is the escape hatch, gated by one honesty check instead of an unlimited one.
A real session, start to finish
Problem
Reviewing a payout endpoint, I couldn't tell if it was safe against an external system retrying the same request.
Prompt
"I'm a Spring Boot developer. In AutoPayController.java, autoPay() calls paymentService.process(req) with no duplicate check. If the caller times out and retries, is this dangerous? Explain the risk only, no rewritten code, 5 sentences max."
Claude's response
Explained the TOCTOU (time-of-check to time-of-use) race: an exists-check alone isn't enough because two identical retries can both pass the check before either insert commits.
My review
I pushed back with an "I think" prompt: "I think adding an existsByExternalTxId() check at the top fixes it. Is that correct?" Claude said no — that closes the common case but not the race window, and asked what closes a race at the database level instead of just the application level.
Final understanding
I landed on the actual fix myself: a UNIQUE constraint on the external transaction ID column, with the application catching the constraint violation and returning the existing result instead of erroring.
Lesson learned
An application-level exists() check is a fast path, not a guarantee. The database constraint is the real guarantee. I now check for a UNIQUE index before approving any payment-adjacent PR.
That session produced zero pasted code. What it produced was a rule I now apply on every payment-related review, written up in [[idempotency-timeout-is-not-failure]].
What this looks like week to week
Every session starts the same way: Claude reads a PROGRESS.md file tracking my current topic, weak spots, and quiz history, then opens with a warm-up — 1-2 questions from something I got wrong last time, active recall style, before I'm allowed to ask about anything new. Every session ends with a Feynman check: explain the concept back in my own words, corrected if needed, saved to a notes folder. Nothing gets marked "done" if my last quiz grade was WEAK or FAIL.
The habit this builds
AI is a collaborator, not a replacement. I stay responsible for the architecture decision, the security tradeoff, and the business logic — Claude is very good at making sure I actually understand them before I ship them.
Related articles
Setting Up a Repo So AI Actually Knows Your Project
How I structured AuthHub's CLAUDE.md and .claude/ directory — rules, prompt templates, and context files — so an AI agent starts every session already knowing the architecture, the standards, and what not to touch.
Prompt Engineering for Backend Developers: The 3-Part Rule
Context, Task, Constraint — the one rule I check before sending any prompt, plus ten techniques that turned vague answers into precise ones.