The definitive guide to not getting paid as a freelancer

The definitive guide to not getting paid as a freelancer

Horror stories about freelancers not getting paid for their work are everywhere and they usually all amount to making the same mistake: placing too much trust in the client. It probably happened to you too.

Amateurs… I went there jumping with both feet.

I willingly and methodically lined up every possible stupid mistake a freelancer can make to ensure not getting paid.

All that during ONE SINGLE PROJECT!

As I said: amateurs.

And to help me make my point I will leverage Brennan Dunn’s excellent article: The definitive guide to getting paid as a freelancer.

Yes, I stole his title. That makes me a great artist I guess.

I will not teach you how to get paid. I will show you how NOT getting paid when freelancing is not that hard.

I will show you how my story is the perfect and complete example of how NOT to follow ANY of Brennan excellent advice. It’s like I took his article, made a copy upside-down and sideways and followed each step of the result.

And made a total fool of myself in the process.

In October 2012, I applied for a job that looked like it could be my big break. A good project with plenty to do that was sure to look good on a portfolio.

It was a Concrete5 CMS project that was posted on the job board.

The poster asked me to then apply to the job through because it offered both of us some level of protection.

I signed up to eLance, applied to the job and was selected.

1st mistake: underestimating the scope of the project and under-pricing it

I read the specs which were (looked) clear enough and I didn’t see everything that was actually involved.

There was an HTML/CSS template to convert to a Concrete5 theme. I also needed to implement the eCommerce add-on along with a few small things that I thought could be done out of the box. I also had to create a few small custom plugins.

I offered to do the whole project for $500.

I actually thought I should do it for around $600 but lowered it a bit to get the job (another mistake but it’s a matter of opinion.) In any case, it was a gross underestimation. That project probably needed to be around $2500 even with my relative lack of experience at the time.

The template was easy enough to convert except that there were a lot of small mistakes here and there that made the thing sometimes behave not totally correctly. You know the kind of small things that could just be left alone but that bug you if your perfectionist.

The reality was none of the “small things” they wanted from the eCommerce add-on was out of the box and the few small custom plugins were not that small.

I really thought Concrete5 eCommerce add-on (pretty much a monopoly) had it all out of the box. I should have looked into it more carefully, probably tried the eCommerce add-on a bit and looked at its code. Instead, I read the specs made the wrong assumption and went for it.

Big mistake. MY big mistake.

Pretty much everything I needed the add-on to do was ALMOST there but not quite.

For example, I needed to list products by category and have a sidebar with a lit of best sales. C5 eCommerce doesn’t have categories per se, but it has product sets so close enough. It also has a block for showing a list of products filtered by different criteria including best sales.

And that’s where all hell broke loose.

First I didn’t need just categories, I needed categories and sub-categories and some products could belong to different categories. That didn’t come out of the box, it required custom coding.

Then the product list block could not show best sales BY CATEGORY and sub-category. It called for even more custom coding with SQL left-joined calls of hell.

Just with those two the project was already far beyond the amount I was supposed to get paid.

Takeaway: when you are getting ready to quote on a project, assumptions are always—always—wrong. Read the specs carefully, ask any questions necessary.

2nd mistake: giving the wrong expectations and building up to scope creep

As I said the HTML/CSS template had some little mistakes here and there and it made the whole thing sloppy. So I decided to correct them myself although they were somebody else’s errors and I never charged for them.

My reasoning was simple: if I’m going to contact the client and discuss a price every time a grid looks bad because content has variable height, it’s going to take forever and he will probably accuse me for wasting his time.

Some things I corrected without even mentioning because I didn’t want to sound like I was effing flies. Some others I mentioned in passing to show how proactive and a nice guy I was and easy to work with…

It even made me kind of happy and proud. I was being reliable and helpful as freelancer should be.


Little did I know I should have minded my own business. I should have mentioned the problem and waited for the client to choose a course of action.

Because I didn’t—mind my own business—the client took for granted that I was correcting those little mistakes and started piling them up on my plate himself. I had opened the door to scope creep and didn’t know how to back away.

He started coming to me with more and more little things to change.

At first they were little details that I took as my responsibility because—although it was really not that clear in the specifications—the client presented them as implicit and simple common sense (again…)

Little by little it started to look like an endless list of things that his client wanted changed and my client didn’t know how to say no to his client.

I allowed that to go on for around 2 weeks.

Takeaway: Be proactive and over-deliver—that’s good business—but always always make it clear where you draw the line. Nothing implicit should stand; it’s explicit or it has no merit.

3rd mistake: not using protection when you know you ought to

Condom © Victor (modified) - source - license CC BY 2.0

Condom (modified) © Victorlicense CC BY 2.0

In his article, Brennan Dunn gives 2 pieces of advice closely related to this problem. He advises us to get it in writing and always use a contract and to recruit a bad cop that will go after the client and make sure they understand where you stand.

eLance helps freelancer with these two aspects of the work by providing a legal system and making it clear to the client that now is the time to pay. In theory, that’s how they make sure freelancers get paid.

For fixed price projects, eLance works with a milestone system. When you quote on a project you provide the client with a list of milestones with dates and costs. You reach a milestone you wait to get paid and you move on to the next one.

The milestones are the stones (yes yes) upon which the contract is based. They are what eLance will rely on to tell a client they need to pay up.

Two rules of milestones you must never break are:

  1. Do not move on to the next milestone until you get paid for milestones already completed
  2. Document everything in your eLance project page: change of scope, work done…

eLance actually warns us about that very clearly and specifically. If we don’t respect these rules we’re on our own and eLance can’t protect us. You can watch this video to have an idea.

It’s also a question of simple common sense.

Well, I lacked that simple common sense in ways and proportions that should probably land me a leading part in the next Dumb and Dumber movie.

Very quickly, all communication went through our personal emails and Skype. Nothing was documented in eLance and I never even submitted milestones completed for payment.

Takeaway: like Brennan says: “always work with a contract.”

But wait, it gets even better…

4th mistake: being so stupid it will hurt forever

I am now presenting myself to you in my most naked honesty and pray that you shall learn from my bottomless stupidity and not judge me too harshly.

From Brennan again, a trio of timeless pieces of advice:

  1. Always get a deposit
  2. Invoice frequently (he suggests weekly)
  3. Don’t work unless you’re paid

It’s foolproof and once again it’s simple common sense.

The client actually offered to pay for the finished milestone; but because I had already started work on the next one I literally said: It’s alright, I trust you, you can pay me when I’m done.

I repeat: I was offered to get paid and I answered: don’t worry about it, I can wait.

  • The client: Hey Nour, you’re doing a great job, here’s some well-deserved money.
  • Me: No, thank you. Maybe later.

I know… please don’t judge me.

So I went on like that for a little while, working without getting paid. It started looking like I was only going to get paid at the end of the project and it didn’t even bother me.

During that time, the total cost of the project had gone up a bit because some requirements were added.

Eventually, the client said he would feel better if he paid me at least a little something and he offered $200 which I accepted with even a little bit of guilt.

These $200 are the total of what I got paid for that project. After working for a month setting up a whole eCommerce website with custom coding all over the place, all I had to show for it were these $200.

As I said, bottomless stupidity.

Takeaway: nothing should come between you and the just payment of your services, neither good and friendly relationships nor perceived convenience, and most of all not even yourself. Take every step necessary to ensure you get paid.

5th mistake: not getting information on the client and not seeing the signs

The client and I were communicating through Skype and started also having more friendly conversations during which he would talk about himself and his business.

Eventually, he started explaining that the website development business was only a way for him to attract big clients to his highly over-priced hosting business. Therefore, he was totally ready to under-price—and under-deliver—website-building services to hook the client.

At that point, I was starting to figure out that his whole web development operation was 100% outsourced and that he didn’t have anybody in-house that actually worked on that. But that’s nothing new.

Later on he also told me that because he was late delivering the website—nothing to do with me—his client was threatening to not pay unless he got a 25% discount.

The discount was granted and my client started complaining that he might actually lose money on that one.

At that point, I was almost done and the total cost for my part of the work had gone a bit above $800 of which only $200 had been paid.

What was obvious and I failed to see was that he didn’t really value my work, didn’t have the project under control and was in a position where he needed to save money. I also should have seen that he was unscrupulous and relied on a shoddy business strategy.

I should have seen that he was a bit of a crook.

Takeaway: If at all possible, look into who your client is beforehand. Look for anything fishy, disgruntled freelancers, bad customers reviews and the like. And remember to invoice frequently so if anything goes south you won’t have much to lose.

Other mistakes I didn’t list but are also mildly stupid

Our Skype conversations were always a minimum of 30 minutes and often close to an hour. Several times the conversation dragged on because the client was not prepared and didn’t properly read emails I sent him. I should have charged for that. A normal and productive live business discussion should not be more than 15 to 20 minutes. Over that either ask for an email or charge for your time. That forces the client to pay attention and be serious about it.

Our relationship became more friendly and I appreciated that but I should have know to not let it influence my business decisions. You can like the guy all you want but deadlines and specs are to be respected, and your money is your money.

Halfway through the project he presented me with another project with a budget of up to $8000 that he wanted me to work on. It was a project for a medical database. We talked about it several times and he started acting as if I already accepted the job.

That made me feel good and pushed me to accept a lot of things I shouldn’t have.

He was obviously terrible at managing the medical project and had been making promises to the client with the result that a job that needed several weeks to complete was to be done in 2 weeks.

I really wanted that money, but I told him it was impossible and the delay was too short. He lost the contract and took it out on me practically saying I let him down.

Takeaway: don’t be dazzled by promises of future benefits or the client’s shining personality. Business is business, time is money, and nothing’s like the present.

Putting an end to it

I finally started getting annoyed because it was taking me a lot of time between the back-and-forth with the client and the actual implementation.

I eventually reached a point where I refused a task because it looked like somebody else played with the system and messed up.

It was a very simple issue with a form not submitting. That was definitely not my problem and I answered that whoever played with the thing should fix it. I maned up and said no. Sternly!

I also asked to be paid what was due to me: $670…

That’s right.

I sent several emails, contacted the client on Skype while he was online, tried his company’s email. I even emailed one of his collaborators who was also in contact with me during the job.

I never heard from the client or his team again.

That’s right…

A measly $670 and he didn’t pay.

Despite all the work done, despite everything done for free and the hours spent on Skype without getting paid, despite being proactive and dependable, despite the friendly conversations…

He didn’t pay.

He disappeared for a measly $670.

Takeaway: just read the article again, it all fits here.

So what happened then, what did you do?

To this day, all the usernames and passwords I have to the website’s admin and FTP accounts are still valid.

This tends to show that my client really had no respect for anyone. He knew that someone who had every right to be angry and take his work back had those passwords. He knew I could have deleted the whole site and still he didn’t change them. Not even for his client’s benefit.

For weeks, I toyed with the idea of destroying the site or using one of those site-killing solutions made specifically for this type of situation. Tools like Css Killswitch were dangling in my mind like sirens singing take me, use me.

I wanted to hurt him so much. I had justice on my side, no one would ever blame me. I wanted retribution, I wanted it so bad.

But then I let it go.

At that time, this project was practically my whole portfolio and taking it down would have hurt me probably more than anybody else.

I also considered that I was going to take it on the website owner who didn’t even know I existed. It would probably not do me much good. And since my client was also hosting the site I was pretty sure a backup would be up and running in no time.

The only thing I was able to do was, a year later, to stop him from hiring other people from the Concrete5 job board. He posted a job ad and I commented on it. I clearly stated that he didn’t pay me and provided a link to another post where another developer reported having the same issue with him.

He asked the board moderators to take my comment down which they did. After I contacted them and explained the situation however, they decided to put it back online.

He hasn’t posted anything on that job board since then. Small consolation but better than nothing.

I’m making it a list so I don’t forget

  • I didn’t read the specs carefully and assumed it was an easy one
  • I underestimated and under-priced the job
  • I accepted to work without being paid at milestones
  • I effectively rejected the protective system that was set-up for my benefit by eLance
  • I actually rejected an offer to be paid in an effort to look “nice”
  • I did work that was somebody’s else problem and didn’t charge for it
  • I allowed the promise of future jobs and benefit to blind me
  • I saw all the signs that the client was not valuing the work I was doing and ignored them
  • I also heard him literally admit that he was scamming his clients and didn’t react to that
  • I spent hours on Skype for nothing and didn’t charge for it
  • I Allowed scope creep to go on for more than 2 weeks

That was and still is universally stupid and I’ll never do it again. This article and this final list are here to remind me and prevent me from ever doing it again.

I know all of these mistakes are pretty commonplace. From my perspective though it’s insane that they all took place within the scope of the same project.

I am glad I was able to put things in perspective and didn’t lower myself to my client’s level by reacting in undignified ways.

I didn’t destroy, I didn’t insult, I was professional at all time. That’s a small consolation, but I sleep well at night.

Takeaway: if you ever do something stupid like that, make sure to let it hurt long enough for you to never forget and never do it again. Then move on.

Any story of not getting paid while freelancing? Please share in the comments, I’d love to know how you dealt with that and what impact it had on how you manage your clients now.