Field note · Repo debugging

When a repo problem is really a product problem.

Some bugs are not just bugs. They expose an unclear promise, a missing state, stale pricing truth, weak failure copy, or a workflow that was never made inspectable.

Cong Fan · Brisbane · Updated May 4, 2026

Abstract AI product operator workspace

I like repo debugging because it forces honesty. A failing route, broken checkout return, bad generation state, or confusing UI message usually points to something more concrete than a vague product debate.

But I do not treat every failure as only a code issue. The code is often doing exactly what the product contract allowed it to do. The real problem is that the contract was incomplete.

Start from the visible failure

I begin with what the user can actually see: the page, button, status, error, billing result, generated output, email, or missing record. Then I trace backward through the repo, logs, database, environment, deployment, and third-party configuration.

Product decisions hidden as code

Many repo failures are product decisions wearing a stack trace. Pricing bugs reveal unclear credit rules. Auth bugs reveal unclear ownership. Generation bugs reveal missing retry behavior. Empty states reveal that no one decided what the user should do next.

Fixing only the line of code can make the symptom disappear while the product remains vague. A better fix names the product rule, implements it, and leaves behind a way to verify it again.

What repo rescue should leave behind

A good debugging sprint should not end with "try it now". It should leave a narrower system: updated code, explicit behavior, passing checks, screenshots or command output, and a note on what is still unknown.

The best outcome is boring. The route works. The status copy is true. The billing path has evidence. The workflow can be repeated. The next person can understand why the fix is correct.

If a repo problem keeps coming back, I would rather inspect the product promise than keep patching symptoms.