Skip to content
experience

The client from hell: a true story in 9 parts (names removed, trauma kept)

Oluwatobi Adeyemi@tobi_freelance

July 23, 2026 · 3 min read

This happened in 2022 but I still dream about it sometimes. Name and country removed, as the topic rules say. Grab your popcorn.

1. The brief. "We need an app like Uber, but for laundry. Simple." Budget: $2,500 fixed. Timeline: 4 weeks. I should have closed the tab. I did not close the tab. I was chasing a monthly target and my sister's school fees were due.

2. The small additions. Week one: "can riders also see the laundry status?" Week two: "add a wallet". Week three: "investors want AI". I asked what the AI should do. He said "you are the developer".

3. The calls. His timezone was 7 hours from Lagos. He called me on WhatsApp at 3am, twice, to ask why the button was blue.

4. The milestone. I had split the $2,500 into 3 milestones, thank God. Milestone 1 released. Milestone 2 delivered, he said "looks good, will release tomorrow". Tomorrow became 9 days.

5. The source code request. Before releasing milestone 2 he wanted the full repo "so our CTO can review". There was no CTO. There was his cousin.

6. The dispute. When I said the repo comes after payment, he opened a dispute saying the work was "not as described". Omo.

7. The evidence. This is the part that saved me. Every change request was in the platform messages, not WhatsApp. Every time he sent something on WhatsApp I replied "please send this on Upwork so we have it in one place". He thought I was being annoying. The dispute team only sees platform messages.

8. The result. Mediation. Milestone 2 released, milestone 3 cancelled, he kept the code he paid for. I lost about $900 of work and 3 weeks of my life.

9. The ending. Six months later, the same man: "Hi Tobi, we got funding, we want to rebuild the app properly. Budget is flexible." I did not reply. I am a Christian, but I am not that Christian.

What I changed after

  • A change request clause. Any new feature gets quoted separately before work starts. Even "small" ones. Especially "small" ones.
  • Availability hours in the contract. I answer between 9am and 7pm WAT. Emergencies cost extra.
  • Source code only after the final milestone is released, written in the contract from day one so it is never a surprise.
  • All decisions on the platform. WhatsApp is only for "I have sent you a message on Upwork".
  • If the budget is $2,500 and the brief says "like Uber", the answer is no. With love.

E no easy. But na so we learn.

Get the best of #freelance_files weekly

One email each Monday with the most useful posts. No spam; unsubscribe in one click.

Comments

17

Sign in to join the conversation.

Sign in to comment
Ayesha Siddiqui@laravel_ayesha#9 in Freelance Files
I think I had the same client. Same laundry, different country. Maybe it is a franchise 😐
3 net votes
Oluwatobi Adeyemi@tobi_freelance#1 in Freelance Files
Ayesha ehn, maybe he is touring the world with that brief 😂
3 net votes
Sam Whitaker@segfault_sam1 rep in Freelance Files
"like uber but simple" is the "can you make it pop" of backend
2 net votes
Kelechi Nnaji@abeg_compile1 rep in Freelance Files
"There was no CTO. There was his cousin." I am wheezing 😭😭
2 net votes
Imran Hussain@imran_builds1 rep in Freelance Files
Proper horror story. Keeping everything on-platform is the bit people skip, then they cry at the dispute stage. Good on you for holding the repo back
3 net votes
Ankit Khurana@faang_or_bust2 rep in Freelance Files
skill issue tbh. who takes a $2.5k uber clone. thats on you lol
-9 net votes
Oluwatobi Adeyemi@tobi_freelance#1 in Freelance Files
You are right that I should not have taken it. That is literally part 1 of the post. Thanks for reading to the end 🙏
1 net votes
Rohit Verma@rohit_codes1 rep in Freelance Files
@faang_or_bust bhai sabki life mein CTC nahi hota, kuch log ghar chalate hain. chill karo
2 net votes
Ankit Khurana@faang_or_bust2 rep in Freelance Files
just saying filter clients better. basic stuff btw
5 net votes
Kuya Migs@kuya_migs_codes2 rep in Freelance Files
Guys keep it kind 😅 the man literally wrote a filter list at the end of the post. Solid lessons Tobi 💪
3 net votes
Rami Haddad@rami_beirut1 rep in Freelance Files
The 3am WhatsApp call to ask why the button is blue. Ya3ne I had a French client who called during the generator switch-over to ask the same about a green button. They are all the same person 🙃
6 net votes
Jessica Tan@nomad_jess2 rep in Freelance Files
"I am a Christian but I am not that Christian" 😂 saving the lessons list for my freelance friends
5 net votes
Bayu Setiawan@bayu_laravel#8 in Freelance Files
Change request clause is the most important one. In Indonesia clients also say "cuma sedikit" (only a little bit). It is never only a little bit
2 net votes
Camilo Restrepo@camilo_parce#3 in Freelance Files
parce the cousin CTO jajaja. had one of those. he was the nephew, pues
5 net votes
Jo Brennan@jo_ships3 rep in Freelance Files
as a client: if someone who disputed you comes back with "we got funding, budget flexible", the budget is flexible in one direction only
3 net votes
Hamza Butt@hamza_flutter3 rep in Freelance Files
Point 7 saved me also once with a Riyadh client. Everything on the platform, always. Koi gal nahi if they get annoyed
3 net votes
Martín Ferraro@tincho_go#2 in Freelance Files
"investors want AI" and "you are the developer" is the most 2022 thing I have read jajaja. now they want agents
9 net votes