When the Client Forgets to Pay You (or Pretends They Did)

by Eric Hanson, Backend Developer at Clean Systems Consulting

It’s awkward, frustrating, and more common than you think.
Handling unpaid invoices gracefully can save relationships—and your sanity.

Don’t Panic, Stay Professional

Your first instinct might be to shout or send a passive-aggressive email. Resist it.

  • Take a deep breath before contacting the client.
  • Assume good intent initially; maybe the payment genuinely slipped through.
  • Keep all communication polite and factual.

Professionalism keeps doors open, even when money is involved.

Gather Your Facts

Before sending any reminder, know exactly where things stand:

  • Check your invoices, payment records, and contract terms.
  • Note the date, amount, and any agreed-upon deadlines.
  • Document previous communications regarding payment.

Having clear facts strengthens your position and avoids misunderstandings.

Send a Clear, Friendly Reminder

A short, direct message works best:

  • Reference the invoice number and amount due.
  • Politely mention the original due date.
  • Ask if there’s any issue preventing payment.

Example: “Just checking in on Invoice #123, due last Friday. Please let me know if there’s any problem with processing it.”

Escalate Tactfully if Needed

If reminders go unanswered:

  • Follow up with a firmer email or phone call.
  • Offer multiple payment options if possible.
  • Mention consequences lightly, like late fees or pausing work, without sounding hostile.

Firmness protects your business while maintaining professionalism.

Learn and Protect Yourself

After the issue is resolved—or even if it isn’t—think about prevention:

  • Consider contracts with clear payment terms and late fees.
  • Use milestone payments for larger projects.
  • Keep communications and invoices organized for future reference.

Good habits reduce stress and prevent repeat problems.

Closing Thought

Unpaid invoices are painful, but how you handle them defines your business reputation.
Stay calm, be clear, and protect your work—money will follow.

Scale Your Backend - Need an Experienced Backend Developer?

We provide backend engineers who join your team as contractors to help build, improve, and scale your backend systems.

We focus on clean backend design, clear documentation, and systems that remain reliable as products grow. Our goal is to strengthen your team and deliver backend systems that are easy to operate and maintain.

We work from our own development environments and support teams across US, EU, and APAC timezones. Our workflow emphasizes documentation and asynchronous collaboration to keep development efficient and focused.

  • Production Backend Experience. Experience building and maintaining backend systems, APIs, and databases used in production.
  • Scalable Architecture. Design backend systems that stay reliable as your product and traffic grow.
  • Contractor Friendly. Flexible engagement for short projects, long-term support, or extra help during releases.
  • Focus on Backend Reliability. Improve API performance, database stability, and overall backend reliability.
  • Documentation-Driven Development. Development guided by clear documentation so teams stay aligned and work efficiently.
  • Domain-Driven Design. Design backend systems around real business processes and product needs.

Tell us about your project

Our offices

  • Copenhagen
    1 Carlsberg Gate
    1260, København, Denmark
  • Magelang
    12 Jalan Bligo
    56485, Magelang, Indonesia

More articles

Wise, Bolt and Pipedrive Are Built in Tallinn — and They Hired the Backend Developers You Need

Estonia produced some of Europe's most successful tech companies. Those companies hired the engineers first and built retention structures to keep them.

Read more

Hibernate Schema Generation and Validation — What ddl-auto Actually Does in Production

The spring.jpa.hibernate.ddl-auto setting controls whether Hibernate modifies your database schema at startup. Most teams use create or update in development and then wonder why production behaves differently. Here is what each setting does and what belongs in production.

Read more

Using ActiveRecord Scopes Without Making a Mess

Scopes are one of Rails' most useful features and one of its most abused. Here is how to use them for what they're good at, recognize when they've outgrown the model, and avoid the composition traps that cause subtle bugs.

Read more

The Difference Between an API That Works and an API Developers Enjoy Using

Functional correctness is the floor, not the ceiling. The APIs developers choose to build on have properties that go beyond working — they are predictable, honest, and low-friction.

Read more