TechLead
Lesson 13 of 25
5 min read
AI-Native Engineering

Debugging with AI Assistants

Master the art of describing bugs to AI, using AI to trace complex code paths, analyze logs, and solve problems that would take hours of manual debugging

AI as a Debugging Partner

Debugging is where AI assistants provide some of the most immediate, tangible value. A bug that might take you 2 hours to track down — reading logs, setting breakpoints, tracing data flow — can often be identified by AI in seconds once you provide the right context. The key skill is learning how to describe bugs effectively.

The AI Debugging Advantage

  • Pattern Recognition: AI has seen millions of bugs. Your specific bug likely matches a pattern it knows.
  • Codebase Traversal: Claude Code can read every file in your project. It traces data flow faster than you can click through files.
  • Rubber Duck on Steroids: Describing the bug to AI forces you to articulate it clearly — and the AI talks back with useful suggestions.
  • No Cognitive Fatigue: At 6pm after a long day, your debugging ability drops. AI's doesn't.

How to Describe Bugs Effectively

The quality of AI debugging is directly proportional to the quality of your bug description. Here is the framework:

# The effective bug report structure:

> BUG: [one-line description]
  EXPECTED: [what should happen]
  ACTUAL: [what actually happens]
  ERROR: [exact error message or stack trace]
  REPRODUCTION: [steps to trigger]
  CONTEXT: [relevant files, recent changes, environment]

# Example:
> BUG: Users cannot update their profile photo.
  EXPECTED: Clicking "Upload Photo" should upload the image and show
    it as the new avatar.
  ACTUAL: The upload appears to succeed (progress bar completes) but
    the photo reverts to the old one after page refresh.
  ERROR: No errors in browser console. Server logs show a 200 response.
  REPRODUCTION: Go to /settings/profile, click Upload Photo, select
    any image, wait for upload, refresh the page.
  CONTEXT: This worked until last week. The recent changes were in
    PR #234 which updated the S3 upload logic. The upload handler
    is in app/api/upload/route.ts and the profile page is
    app/settings/profile/page.tsx.

Debugging Scenarios with Claude Code

Scenario 1: Runtime Error with Stack Trace

> I am getting this error in production:
  TypeError: Cannot read properties of undefined (reading 'filter')
    at getActiveSubscriptions (app/lib/subscriptions.ts:47)
    at Dashboard (app/dashboard/page.tsx:23)
    at renderWithHooks (react-dom.js:1234)

  This only happens for new users who signed up after March 1st.
  Users who signed up before that date work fine. Find and fix
  the root cause.

# Claude will:
# 1. Read subscriptions.ts line 47
# 2. Understand the data shape
# 3. Identify that new users have no subscriptions array (it is undefined)
# 4. Trace back to find that the migration on March 1st changed the
#    user schema but did not backfill the subscriptions field
# 5. Fix the null check AND suggest a data migration

Scenario 2: Intermittent Failure

> Our checkout flow fails approximately 5% of the time. Users report
  seeing "Payment failed" but their card is actually charged. The
  Stripe webhook receives the payment but our database does not
  update. I suspect a race condition.

  The checkout flow is:
  1. Client calls /api/checkout/create-session
  2. User pays on Stripe hosted page
  3. Stripe sends webhook to /api/webhooks/stripe
  4. Webhook handler updates order status in DB

  Check the webhook handler for race conditions, timeout issues,
  or error handling gaps. The code is in app/api/webhooks/stripe/route.ts.

# Claude traces the code and identifies:
# The webhook handler does not have idempotency protection.
# When Stripe retries the webhook (which it does on timeouts),
# the handler tries to update an already-completed order and fails silently.

Scenario 3: Performance Investigation

> The /api/dashboard endpoint is taking 8 seconds to respond.
  It was under 500ms a month ago. I have not made changes to
  the dashboard code directly. Help me trace what is causing
  the slowdown.

  Profile the endpoint by reading the code in
  app/api/dashboard/route.ts and all functions it calls.
  Look for N+1 queries, missing indexes, or unnecessary
  data fetching.

# Claude reads the endpoint and all downstream functions
# Identifies: A new "recent activity" feature added 3 weeks ago
# fetches user data inside a loop (N+1 query problem)
# The loop queries the users table for each of 100 activity items
# Fix: Batch the user IDs and fetch all users in one query

Log Analysis with AI

# Feed structured logs to Claude Code for analysis
> Here are the last 50 error logs from our production server.
  Identify patterns:
  - Which errors are most frequent?
  - Are they correlated with specific user actions or time of day?
  - Which ones are most critical to fix first?
  - Suggest root causes for the top 3 most frequent errors.

# For log files that are too large to paste:
> Read the log file at /var/log/app/errors.log (last 500 lines).
  Parse the structured JSON logs and give me a summary of error
  patterns, frequencies, and likely root causes.

When AI Debugging Works vs When It Does Not

AI Debugging Works Well AI Debugging Struggles
Clear error messages with stack tracesBugs with no error — just "wrong" behavior
Common patterns (null checks, type errors, off-by-one)Concurrency and timing-dependent issues
Code-level bugs traceable through sourceInfrastructure issues (DNS, network, disk)
Bugs in application code you controlBugs in third-party libraries or frameworks
Reproducible issues with known stepsHeisenbugs that disappear under observation

Know When to Think Yourself

AI is a powerful debugging partner, but it is not infallible. If AI has not found the bug after two attempts with good context, step back and think. Sometimes the bug is in your assumptions, not in the code. Sometimes you need to add logging and reproduce the issue before anyone — human or AI — can diagnose it. Use AI as your first tool, but do not abandon your own debugging skills.

Summary

AI debugging is all about context quality. Provide clear error messages, expected vs actual behavior, reproduction steps, and relevant file locations. AI excels at tracing code paths, recognizing common bug patterns, and analyzing logs. It struggles with timing-dependent issues and bugs that require environmental investigation. Build the habit of reaching for AI first when debugging — it will solve 70% of your bugs faster than manual investigation.

Continue Learning