All postsDelivery

A Client Found a Bug After Launch: What to Say and What to Charge

David IyaDavid Iya August 16, 2026 10 min read
A magnifying glass resting on a finished wooden product on a workshop bench under warm lamp light.
Original image, Claude Code Profit Room
TL;DR
  • Fix it first if it is genuinely broken, and say so in the first reply. Arguing about whose fault it is before the client knows you are on it is how good relationships end.
  • The line that decides whether you get paid is broken versus different. A defect in what you agreed is yours. A new expectation is a change, and a change has a price.
  • Answer the second message, not the first. The first is panic. The second one tells you whether this is a defect, a change, or a support arrangement that should have existed since handover.

The Short Answer

When a client reports a bug after launch, reply quickly, confirm you are looking at it, and then decide one thing before you quote anything: is this broken or is it different. If the thing you delivered does not do what you both agreed it would do, fix it at no charge and quietly. If it works as agreed and the client now wants it to do something else, that is a change request and it gets a price. Say which one it is in plain words, and give the next step in the same message.

Speed of acknowledgement and speed of fix are different things. You can reply in ten minutes and fix it next week. Most of the damage from a post-launch bug happens in the silence before the first reply.

Why the First Message Always Feels Worse Than It Is

A client reporting a bug is usually not angry. They are worried, and worry reads as blunt in writing. They spent money on something and the thing did not behave, so their first message is short, has no context, and often arrives with an exclamation mark. Reading it as an attack is the single most expensive misreading in client work, because the reply you write to an attack is defensive and the client can hear it.

There is also a version of this that has nothing to do with your code. Someone changed a password, a third-party service had an outage, an integration expired, or a staff member used the tool in a way nobody described. From the outside all of it looks identical: the thing you built stopped working. That is why the first reply confirms you are looking rather than accepting fault or denying it.

Never open with a question about what they did. It reads as blaming the user even when you mean it technically, and once the client feels accused, the conversation stops being about the fix.

The First Reply, In Full

The first reply has three jobs and takes two minutes: acknowledge, commit to a time, and ask for one specific thing you need. It does not diagnose, promise a fix, or mention money. You are buying yourself the space to find out what actually happened without the client sitting in silence imagining the worst.

  1. Acknowledge without agreeing it is a defect. 'Thanks for flagging, I am on it' is enough. You have not conceded anything and the client has stopped worrying.
  2. Commit to a time for the next update, not for the fix. 'I will come back to you by 4pm with what I have found' is a promise you can keep even if the problem turns out to be complicated.
  3. Ask for one thing that makes diagnosis possible. A screenshot, the exact time it happened, or which user hit it. Ask for one, not five, because a list of questions reads as friction.
  4. Do the diagnosis before you say anything about cost. Once a number is in the conversation the client hears everything after it as a negotiation.

Broken Versus Different - The Only Distinction That Matters

Every post-launch report resolves into one of three buckets, and the bucket determines both the money and the tone. Get this wrong in either direction and it costs you: charging for a genuine defect burns the relationship, and absorbing every change request turns you into unpaid staff for a project that already closed.

BucketWhat it looks likeWhat you do
DefectIt does not do what the agreement said it would do, or it did and now it does notFix it at no charge, promptly, and do not make a performance of your generosity
ChangeIt works as agreed, and the client now wants different behaviour or a case nobody describedSay it is outside what was built, price it, and offer to do it as a small piece of work
EnvironmentA password, a plan, an expired key, an outage, or a change on their side broke itFix or guide, then say plainly that this class of thing is what a support arrangement covers

Three buckets and what each one costs

The wording that keeps this friendly is to name the bucket without making the client wrong. 'This one is on me, it is fixed' for a defect. 'This is doing what we set it up to do, and what you are describing is a genuinely useful addition, so let me price it as a small piece of work' for a change. Both sentences are calm, both are honest, and neither one argues.

The Free Window, and Why You Should Have Said It Already

The reason this conversation is stressful is almost always that nobody agreed what happens after launch. Fix that once, in writing, at the start of every project: a defect window of a stated length during which anything genuinely broken gets fixed at no cost, and everything else quoted separately. Thirty days is a normal window and easy to defend. The exact number matters far less than having stated one.

  • Put the window in the agreement, not in an email later. A term introduced after a bug report reads as a reaction to the bug report.
  • Say what it covers in one sentence: work that does not match what we agreed. That single phrase does almost all the classification for you afterwards.
  • Say what it excludes: new requests, third-party changes, and anything caused by a change on their side. Naming these in advance means you are not inventing exclusions under pressure.
  • Say what happens after the window: a support arrangement, or work quoted as it comes. Giving the client a choice makes the end of the window feel like an option rather than a cutoff.
If you never set a window and the bug has already arrived, do not retrofit one into this conversation. Fix this one, then say you are updating how you handle post-launch support going forward and send the new terms as a separate message a few days later.

How to Charge for a Change Without Sounding Like You Are Nickel and Diming

The trick is to price the change as a small piece of work with a name, not as an hourly add-on to a finished project. 'That is two hours at my rate' invites the client to argue about the hours. 'I can add that as a small piece of work, here is the number, and it would be done Thursday' gives them a decision with a shape.

One more thing makes this land cleanly. Offer to do the smallest genuinely broken part free even when the rest is a change. If the report contains one real defect and three new requests, fix the defect immediately, say you have done it, and then price the three. The client sees good faith before they see a number, and the number stops feeling like an opportunistic response to their problem.

Do not absorb changes to keep the peace. The client learns that reporting anything as a bug produces free work, and the next request will arrive framed the same way. One free change sets the rate for every future one.

Turn the Moment Into a Support Arrangement

A post-launch bug is the best possible moment to sell ongoing support, because the client has just felt the specific fear that support removes. Do not pitch it in the same message as the fix. Fix the thing, let them see it working, and raise it a few days later while the memory is fresh but the panic has gone.

The framing that works is availability rather than maintenance. Clients do not want to buy the possibility of future bugs. They want to know that when something stops, someone answers. A monthly arrangement described as a response commitment plus a small allowance of changes is easy to say yes to, and it converts the exact anxiety they just experienced into something they can pay to stop feeling.

Inside the Claude Code Profit Room members bring the actual message a client sent and we write the reply together, including where the line sits between defect and change. Join at claudecodeprofitroom.ai and post yours before you answer it.
Free builder-to-paid drops, straight to your inbox

Short, practical drops on offers, outreach, pricing, and closing clients with Claude Code. No spam, unsubscribe anytime.

Frequently asked

Should I fix a bug for free after a project has been delivered?

Yes, if the thing does not do what you agreed it would do. That is a defect and fixing it is part of having delivered the work. If it does what was agreed and the client wants different behaviour, that is a change request and it gets priced. The distinction is broken versus different, and it is the only one that matters for deciding whether money is involved.

How long should the free bug-fix window be?

Thirty days after handover is a normal, defensible window. The specific length matters much less than having stated one in writing before the project started. A window introduced after the first bug report reads as a reaction to that report, which is why it belongs in the agreement rather than in an email later.

What if the bug was caused by something the client changed?

Fix it or guide them through it, then say plainly what happened without making them wrong. Something on your side changed and it broke the connection is a neutral sentence that is still accurate. Then note that this class of problem is exactly what a support arrangement covers, because a third-party change or an expired key will happen again and neither of you wants to negotiate it every time.

How do I reply to an angry bug report without sounding defensive?

Acknowledge, commit to a time for your next update, and ask for one specific detail. Do not diagnose, do not explain your process, and do not ask what they did, because that reads as blame even when it is a technical question. Most of the heat in these messages comes from worry rather than anger, and it disappears the moment the client knows someone is on it.

When should I bring up a support retainer after a bug?

A few days after the fix is working, not in the same message. Raising money while the client is still anxious makes the fix look conditional. Once they have seen it working, the memory of the outage is fresh but the panic has gone, which is the moment a monthly arrangement described as a response commitment is easiest to say yes to.

Last reviewed August 16, 2026.

David Iya
Co-founder, builder-operator

Co-founder of the Claude Code Profit Room. Went from shipping software to closing paying clients, and now teaches builders the selling half of the equation.

More from David Iya →

Ready to sell what you build?

Take the Profit Quiz and find your fastest path to your next client.