Match ceremony to complexity
Per study guidePlain languageFor a tiny, obvious change — add one if-check — just make the change directly; planning first would waste more time than it saves. For a large, tangled, breaking change spread across dozens of files, use plan mode so the agent maps out the work and you can review the approach before anything gets touched. For a genuine fork in the road with real trade-offs (three different architectures, each with pros and cons), use plan mode to lay out the options and let a person pick — that kind of decision should be made by people, not silently by the model.
TechnicalTrivial, local, unambiguous change → direct execution. Large, interdependent, or breaking change → plan mode to map affected paths and produce a reviewable strategy before implementation. Architectural fork with real trade-offs and organizational impact → plan mode to present options for explicit human approval, rather than letting the agent silently choose a direction.
Why it matters
Ceremony has a cost (time, tokens, review overhead) and skipping it has a cost (risk, rework, hidden decisions) — the skill is recognizing which cost dominates for a given task.
Iterate with concrete, verifiable targets
Per study guidePlain languageSaying 'think harder about edge cases' gives Claude nothing solid to aim at. Giving a specific example — 'here's an input, here's the output I expect' — defines success in a way that can't be argued with, and doubles as a check you can rerun later. When requirements are precise and testable (an algorithm with defined edge cases), write the tests first and let failing tests drive each round of changes. When several problems are tangled together, fix them one at a time and check after each fix, so you always know what caused what.
TechnicalVague feedback produces vague results; a concrete input/expected-output example defines success unambiguously and becomes a regression check. For precise, verifiable requirements, write the test suite first and let failing tests drive iteration. When issues interact, fix them sequentially with verification after each step, rather than changing everything at once and losing the ability to attribute cause and effect.
Why it matters
Ambiguous feedback and simultaneous multi-issue changes both destroy your ability to tell whether a given change helped, hurt, or did nothing — concrete targets and sequential fixes preserve that signal.
When you don't know the requirements, get interviewed
Per study guidePlain languageIf you're new to a topic, the scariest gaps are the ones you don't even know to ask about. Instead of guessing, ask Claude to interview you about the thing you're building — it will surface considerations (like 'what happens when the cache and the database disagree?') that you'd otherwise only discover after something breaks in production.
TechnicalFor unfamiliar problem domains, request that the agent interview the user before implementation, surfacing considerations such as invalidation strategy, failure modes, and consistency guarantees — converting unknown-unknowns into an explicit, reviewable list of decisions before any code is written.
Why it matters
You can only write down requirements for gaps you already recognize; interviewing exists specifically to expose the gaps a newcomer can't yet name.
Context is a limited, degrading resource
Per study guidePlain languageThe model's working memory fills up over a long session. A warning sign: it starts talking about 'typical patterns' in general instead of the specific files and classes it actually found earlier — a sign the useful details are getting crowded out. The fix is to write a summary of what's been learned, then continue in a fresh session (or a subagent) seeded with that summary, rather than trying to power through in an already-crowded context.
TechnicalAs context fills, response quality degrades — a tell is the agent falling back to generic patterns instead of citing the specific classes/files it previously discovered. Mitigations: summarize hard-won findings and continue in a fresh (sub)agent seeded with the summary; delegate narrow deep-dives to subagents so the main agent stays high-level; and explore large subsystems structure-first (imports, base classes) rather than reading exhaustively.
Why it matters
A degraded context doesn't just get slower, it gets less accurate — recognizing the 'generic pattern' tell early prevents acting on confidently-wrong output.
Sessions: continue, resume, fork
Needs verificationPlain language--continue picks up wherever you last left off, on whatever was the most recent conversation. --resume <name> lets you jump back into one specific named conversation, even if you've had others since. Forking a session branches it into two independent copies that both remember everything up to that point but then develop separately — perfect for trying two different approaches side-by-side without them interfering with each other.
Technical--continue resumes the most recent session. --resume <name/id> targets a specific session by name/identifier. A session-fork operation branches an existing session's accumulated context into two independent continuations, letting each develop separately for comparison. When resuming into an environment where files changed underneath you, keep the existing context and explicitly name the specific files that changed for a targeted re-read, rather than discarding everything or re-reading blind.
Why it matters
Each option trades off differently between continuity and precision — picking the wrong one either loses valuable accumulated context or drags in the wrong (stale, or simply irrelevant) conversation.
Verification note — --continue and --resume <name> are confirmed CLI session flags. 'fork_session' as an exact name is unconfirmed for the Claude Code CLI — official docs describe branching a session into an independent continuation (surfaced as a session-branch feature), and the Claude Agent SDK exposes a session-forking option under its own API. Treat 'fork_session' here as descriptive of the capability, not a guaranteed exact flag/function name — check current docs before relying on the literal syntax.