Back to blog
Opinion

Why I fired my biggest client (and what I learned)

By Flávio Emanuel · · 9 min read

In January 2026, I sent an email firing the client who made up 40% of my revenue. I had rehearsed that moment in my head for 4 months. My hand was shaking when I clicked send. I figured I would regret it the next day.

Three months later, revenue was higher than before. And I started enjoying my work again. This is the post I wish someone had handed me in October 2025.

The big client trap

I met this client in 2023. Mid-sized company, high ticket, interesting project. Started with a R$ 35k webapp. Delivered in 8 weeks, they were happy. Within 3 months, it became a recurring relationship: tweaks, new features, integrations. I started billing them R$ 6 to 9k per month.

For a solo dev, that looks like paradise on the surface. Predictable income, a client who trusts you, a project that grows. The first 6 months were the best work relationship I had. Mondays on Meet, planning together, they called me “partner”. I believed it.

What I didn’t see was that every new client showing up, I was turning down. “Booked with company X”. “Pick it up in 2 months”. “Can’t right now”. The big client had taken so much space that I became dependent without noticing.

The signs I ignored

The signs started in July 2025. Small ones.

First was the tone shifting. Instead of “can we look at this this week?”, it became “I need this by Thursday”. No “please”, no option. I read it as “they’re more comfortable with me, that’s nice”. Later I understood it was disrespect dressed up as closeness.

Then came scope creep. I had a 20 hours/month contract. They started scheduling meetings beyond that. 2-hour meetings to discuss features that weren’t even on the roadmap. I billed the hours, they paid without complaint, but the whole time was spent in their meetings instead of writing code.

Then came control. “Can you send me the code before deploy so I can review?” Sure. Then: “Can you wait for my approval before pushing?”. Then: “Why did you do it like this and not the other way?”. I had become an employee with no formal boss, extended hours, and no labor protection.

And worst of all: I defended them to myself. “They’re just being careful”, “they’re paying, they have the right”, “it’s just a phase”. Every justification was a brick building the cell.

The day I saw it

In October, I spent a Saturday looking at the spreadsheet. Last 12 months of revenue, broken down by client. They were 41.3% of the total. And in the last 3 months, I had said no to 4 prospects, all in the R$ 15-25k range.

The math was brutal. Those 4 prospects I rejected added up to more than them. I was giving up R$ 60-80k to keep a R$ 80-100k client who drained my energy and stripped control of my time.

But the number wasn’t the worst part. The worst was realizing I had no passion for the work anymore. It had become a chore. Mornings I’d wake up, look at their WhatsApp, and feel my chest tighten. Sunday nights I was already anxious about Monday planning. That wasn’t work, it was a gilded cage.

Preparing the exit

I didn’t bail impulsively. From October to January, I built the exit carefully.

First, I stopped accepting new work from them. When they asked for a feature, I put it on the roadmap 6-8 weeks out. No urgency, no openings. They got confused, I played overwhelmed.

Second, I started accepting prospects again. Messaged the 4 I had turned down, said agenda was open. 3 still interested. Within 8 weeks, I closed two projects, R$ 22k each.

Third, I tightened up finances. Built a 3-month operating expense reserve in a separate account. If I left without replacement, I had runway to survive while closing more.

Fourth, I wrote the email. Rewrote it. Rewrote it again. Showed it to two trusted people. Once it felt right, scheduled to send on a Wednesday morning.

The email I sent

I won’t paste the original, but the structure was this:

Started by thanking, no flowery language. “The last 28 months were important learning for me”. True.

Then went straight to it. “I’ve decided to end our contractual relationship effective 01/31/2026”. No long explanation. No “because you did X”. No room for negotiation.

Then showed professionalism. “I’ll complete all in-progress deliveries by month end. I’ve documented the system, I’m preparing handoff for the next dev. List of remaining tasks attached”.

Closed dry. “Available for operational alignment, but the decision is final. Best of luck on next steps”.

Sent it. Took 4 hours for them to reply. Reply was cordial but tried to negotiate. I didn’t budge. “Decision made, focus now is clean transition”.

What happened after

The first week was the worst. Woke up several times at 4 AM. Thought I had screwed up. Checked the bank account 3 times a day. Irrational.

February I closed 1 more project, R$ 18k. Came from the prospect I had rejected in July.

March I closed 2 projects, totaling R$ 31k. One came from a referral by an old client. Another from cold outreach I responded to.

April, the month wrapping up this post, I closed another R$ 25k project. And had 2 meetings with new prospects, both with high closing odds.

Revenue for the first 4 months of 2026 without the big client: R$ 96k. Revenue for the first 4 months of 2025 with the big client: R$ 88k. Up 9% even after losing the anchor.

What I learned

Revenue concentration is the silent risk for solo devs. A client who represents more than 25-30% of your revenue already has you on a leash, even if they don’t know it. You start making decisions thinking about them instead of what’s right for the business.

The fix isn’t to never have big clients. It’s to have big clients without letting them become a dependency. Keep prospecting active even when the calendar is full. Say no to new work from them if it means closing the door on a new client. Charge enough to keep financial health without needing them.

The worst part of firing wasn’t the financial loss (which didn’t even happen). It was the fear of not being able to replace. That fear is what keeps the toxic relationship alive. Anyone in that situation always thinks they’re at the best possible point. They’re not. There are more clients out there. Always are.

The second worst part was confronting my own self-image. “I’m an entrepreneur who keeps clients”, that narrative collapsed. I had to accept that “keeping a client who treats me badly” isn’t a virtue. It’s weakness disguised as professionalism.

Signs you need to fire a client

No checklist is universal. But if you tick several, think about it.

You delay work for other clients to attend to them first, even when others pay the same ticket.

You feel relieved when they cancel a meeting.

You defend them to yourself. “They’re just stressed”, “it’s a phase”, “it’ll pass”.

You represent more than 30% of your revenue and you’re in a window where replacement is hard.

You wouldn’t recommend them if a peer asked.

You need coffee before their call to get through it.

If 3+ of those landed, you’re not in a partnership. You’re in a bad job dressed as freelance.

Checklist for firing well

  • Calculate current and projected revenue concentration %
  • Build 3-6 months of fixed expense reserve
  • Reopen prospect pipeline 60 days ahead
  • Reduce new work with the client, without drama
  • Document the entire system/process for transition
  • Write the dry email, no long justifications
  • Have a trusted person review before sending
  • Set a clear cutoff date and stick to it
  • Don’t negotiate when the client tries to reverse it
  • Stay professional until the last day
  • Don’t trash the client publicly afterward

Firing well is a 60-day process. Not an impulse decision, it’s a prepared decision executed firmly.

Read also: How to price web projects without guessing | Project red flags: when to say no | The client doesn’t know what they want | Case GPM2

The invisible cost of the wrong client

The financial math is the easy one. What comes in, what goes out, what’s left. But there’s another bill that weighs heavier: the cost of mental baggage.

The wrong client occupies your head after work. You think about them at lunch, dinner, in the shower. You dream about Monday’s meeting. That mental time doesn’t show up on a spreadsheet, but it’s what keeps you from thinking about a new product, improving processes, writing blog posts.

When I fired, I got that space back. The first 3 weeks I didn’t know what to do with it. Strange. Then I started using it to study Astro 5, write this blog, improve the site. Things I knew I needed to do but never had “time” for.

The right client gives you time. The wrong client takes time. Both pay, but only one lets you grow.

If you recognized your relationship here, you don’t have to fire today. But start preparing the exit. In 60 days you’ll have clarity. In 90, you’ll have done it.

Next step

Need a dev who truly delivers?

Whether it's a one-time project, team reinforcement, or a long-term partnership. Let's talk.

Chat on WhatsApp

I reply within 2 hours during business hours.