Rubber-duck debug a problem that has no clear error message
Explaining the problem out loud, step by step, surfaces the wrong assumption faster than staring at the code again.
- Use it for
- Anyone stuck on unexpected behavior with no error message pointing at the cause.
Some bugs don't come with an error message — the code just does something other than what you expected, and it's not obvious where to even start looking. Explaining the goal, the actual behavior, and what you've already ruled out, in order, is what surfaces the wrong assumption — the classic effect of rubber-duck debugging, just with something that can actually respond and push back.
When not to use this
If you have a specific error message and stack trace, a direct error-analysis prompt gets you there faster — this is for the vaguer case of "this isn't doing what I expected" with no error to anchor on.
Fill in
I'm trying to achieve: {{goal}}
In {{language}}, but instead: {{actual_behavior}}
What I've already checked or ruled out: {{already_checked}}
Walk me through a step-by-step diagnostic checklist to find the bug —
specific things to check in order, not a general list of debugging
advice. Ask me what happens at each step before moving to the next.Why it works
Asking for one specific checklist item at a time, waiting for the actual result before suggesting the next, is what mimics real rubber-duck debugging — the value comes from being forced to check each assumption explicitly and report back, not from receiving a complete list of things that might be wrong all at once.
Common mistakes
- ×Skipping straight to a guessed fix instead of working through the checklist in order.
- ×Not reporting back what each check actually showed, losing the diagnostic trail.
Follow-ups
- That check revealed this: {{result}}. What's the next thing to check?
- Found it — help me write a test that would have caught this.
Did this work?
You have a specific, ordered checklist of things to actually check, not a restatement of the problem you already knew.
Tested on claude-opus-5. Evidence status is draft; it moves to battle-tested only on recorded runs, never by hand.