How to handle a client who will not pay.

•

•

Chasing Money Without Burning the Bridge

I remember sitting in my kitchen at 1:00 AM, staring at a spreadsheet that refused to balance, feeling that specific, hollow pit in my stomach when you realize a three-month project has suddenly gone silent. It wasn’t a technical bug or a server outage; it was much worse. It was the realization that I had delivered everything promised, but the bank account was still empty. Most “experts” will tell you to hire a lawyer or implement complex legal frameworks, but when you’re actually figuring out how to handle a client who will not pay, those expensive solutions often feel like trying to fix a memory leak with a sledgehammer. They’re too slow, too heavy, and usually way too late.

I’m not here to sell you on a magical billing software or a way to avoid conflict entirely. Instead, I want to talk about the practical, slightly uncomfortable mechanics of what actually works when the money stops moving. I’ve spent enough years in the trenches—from logistics startups to steady insurance firms—to know that this is a process problem, not just a legal one. I’m going to share the specific, unvarnished steps I use to de-escalate the situation, tighten my contracts, and most importantly, stop the bleeding before it happens next time.

Table of Contents

Why Your Service Level Agreement Payment Terms Failed You

Why Your Service Level Agreement Payment Terms Failed You

I used to think a signed contract was a magical shield. I’d finish a sprint, send the invoice, and assume the service level agreement payment terms were just a formality—a polite way of saying “pay me in thirty days.” But after a few bad experiences at that logistics startup, I realized that a contract is only as good as its ability to handle friction. Most of my failed agreements lacked a clear escalation path. They were written for a perfect world where everyone is honest and the bank transfers work on the first try. In reality, if your terms don’t explicitly define what happens on day 31, you aren’t actually protected; you’re just hoping for the best.

The mistake I often made was treating the SLA as a static document rather than a set of operational rules. I’d focus on the technical deliverables but neglect the preventing non-payment in business aspect—specifically, the triggers for late fees or the suspension of service. If your agreement doesn’t state that work stops when a milestone payment is missed, you’re essentially providing an interest-free loan to a client who might not even have the liquidity to pay you. I’ve learned that clarity is better than kindness when it comes to the fine print.

Writing Payment Reminder Emails That Actually Get a Response

Writing Payment Reminder Emails That Actually Get a Response

When I first started out, I treated writing payment reminder emails like I was writing a formal apology to a senior architect. I was too polite, too vague, and far too apologetic for asking for money I had already earned. I’d write things like, “I was just checking in to see if you might have had a chance to look at this,” which is basically code for “please feel free to ignore me.” That approach is a bug, not a feature. You have to realize that most of the time, it isn’t malice; it’s just a broken process on their end.

The trick is to move from “checking in” to stating a fact. Your first follow-up should be a simple, automated-feeling nudge that assumes the invoice was simply lost in a crowded inbox. But by the third attempt, you need to stop being a friendly collaborator and start being a professional entity. This is where you transition from soft reminders to a formal freelance debt collection process. I’ve found that mentioning specific dates and the exact amount outstanding—without the fluff—usually triggers a response. If they still ghost you, that’s when you stop the pleasantries and start documenting everything, because you’re no longer negotiating; you’re preparing for a paper trail.

Five things I’ve learned from staring at unpaid invoices

  • Stop treating the “payment due” date as a suggestion. If the money isn’t in the account by the 30th, the system should trigger a notification immediately. I used to wait a week to “be polite,” but in production—and in business—latency is just another word for lost revenue.
  • Get a deposit before you touch a single line of code. I’ve seen too many projects go sideways because the client’s budget evaporated halfway through. A 25% or 50% upfront payment isn’t an insult; it’s a way to ensure both parties have skin in the game.
  • Build a “kill switch” into your workflow. If a milestone isn’t paid, the next deployment doesn’t happen. It sounds harsh until you’re halfway through a sprint and realize you’re essentially donating your labor to a company that might not exist by next quarter.
  • Document the “why” of the debt. When a client claims they didn’t receive an invoice or that the work wasn’t what they expected, you need a paper trail. I keep a log of every sign-off and every completed milestone, not to be difficult, but because memory is a terrible database.
  • Know when to cut your losses and walk. There is a point where the cost of chasing the money exceeds the value of the money itself. If you’re spending more time debugging their excuses than you are writing actual code, it’s time to deprecate that client and move on.

What I've actually learned from the trenches

Stop treating your contract like a legal shield and start treating it like a technical specification; if the payment triggers aren’t as clear as an API error code, you’re going to have a bad time.

Escalation isn’t a failure of politeness, it’s a change in system state—move from “friendly reminder” to “formal notice” as soon as the predefined threshold is hit, without the emotional overhead.

Documentation is your best defense against “I never saw that email”—keep a clean, immutable log of every communication and milestone reached, because when the dispute happens, you’ll need the logs.

The Post-Mortem

Analyzing business systems in The Post-Mortem.

At the end of the day, chasing a late payment is less about the money and more about the systems you have in place. We’ve looked at why your SLA might have been too vague to actually protect you, and how a well-timed, professional email can fix a communication breakdown before it turns into a legal headache. It’s about moving from a reactive state—where you’re stressed and checking your bank account every hour—to a proactive one where the process is automated and the expectations are crystal clear from day one. If you don’t build the guardrails during the contract phase, you’ll spend all your energy trying to fix the crash later.

I’ve spent enough time in production to know that you can’t prevent every failure, but you can certainly minimize the blast radius. Dealing with a non-paying client is a messy, frustrating part of the job, but it doesn’t have to be a personal defeat. Treat it like any other system failure: analyze what broke, update your documentation, and harden your process for the next time. Eventually, you’ll reach a point where these hiccups are just minor bugs in an otherwise stable system, rather than catastrophic outages that keep you up at night. Now, go close those tickets and get back to the work that actually matters.

Frequently Asked Questions

At what point do I stop being "the nice freelancer" and actually involve a lawyer or a collections agency?

I used to think being “the nice guy” was a business strategy. It isn’t; it’s just a way to subsidize your client’s cash flow with your own stress. If you’ve sent the polite nudge, the formal warning, and the “final notice” without a single cent appearing, stop negotiating. The moment the cost of your time spent chasing them exceeds the value of the debt, hand it to a professional. Don’t let a bad debt become a hobby.

How do I handle a client who is technically still using my code or hosting my services but has gone silent on the invoice?

The “silent but still running” scenario is a classic production outage of the wallet. My rule of thumb: don’t let them use the infrastructure for free while you’re playing negotiator. I’ve learned that if they’re still consuming resources, they still have skin in the game. I start by notifying them that the service is scheduled for a planned maintenance window—which is code for “suspension”—unless the invoice is settled. It’s not about being a jerk; it’s about the cost of the electricity and the compute.

If I realize mid-project that the client is struggling financially, should I pause work immediately or try to renegotiate the milestone schedule?

If you smell smoke, don’t wait for the fire. If the signs are there—missed small meetings, vague answers about budget, or sudden silence—stop the clock. I’ve learned that pushing through a “milestone renegotiation” with a client who is already underwater is usually just a slow-motion way of working for free. Pause the work, document exactly where you are, and pivot to a conversation about scope or payment. It’s better to have a difficult conversation now than a total loss later.

How much of this is a process failure on my end versus just a client being a bad actor?

It’s usually a bit of both, but I tend to look at it through a systems lens. If you have a clear, automated trigger that fires the moment a payment is overdue, you’ve eliminated your own process failure. If you’re manually checking spreadsheets every Tuesday, you’re leaving room for human error. If the process is solid and they still ignore you, then you’re dealing with a bad actor. I’d rather debug my workflow than my luck.

Tomasz Wierzbicki

About Tomasz Wierzbicki

I am not interested in arguing about frameworks. I am interested in why the thing broke at two in the morning and what would have prevented it. Most of what I know came from being wrong in production and writing it down afterwards.