Saturday, September 22, 2012

Freelance Programmer Survival Manual

Since I am in the process of “retiring” from freelancing, I think it might fun to share some of the things I  learn from freelancing.

The best thing of being a freelancer for me is that I get to do what I love (programming), and able to make an honest living out of it. Besides, I get to work from home (no traffic), and don’t get to blame the bosses and company, though I still need to deal with challenging customers. There are a few painstaking sides of being a freelancer: dealing with customers who didn’t understand or honored the scope of work, some people just like endless meeting and those who refuse to pay up.

Define the Contract

At the very minimum, you MUST have some kind of documentation to record the scope of work in black and white. Though it’s impossible to be 100% foolproof, but physical record is necessary when something goes awry. Besides the scope of work:

  • State clearly what is included and what is NOT included
  • Payment condition (30% upfront, 70% upon completion; if the delay is on the customer side - more than 6 months from project kickstart, the vendor automatically eligible for full payment of work done)
  • Warranty period (2 months)
  • Maintenance Contract (mandatory or not, start automatically after warranty period ends, must be continuous; online or on-site support; what is included, and what not)
  • Adhoc Maintenance (RM 800 per day, minimum one day)


The purpose of the documentation is just to cover our ass when something goes wrong (change of contact person, misunderstanding, dealing with an asshole, etc.). It doesn’t mean we must follow the scope of work 100%, as small freelancing project usually start with slightly incomplete scope and require more flexibility to keep things moving forward. Put in some buffer (no buffer or being too optimistic usually means losing money), and use your wisdom.

A Purchase Order from the customer is very IMPORTANT (it state the customer buying something from you at a price); without such document, you can’t proof the project exist, or proof the total payment amount.

It’s all about the Customer

The challenges of the project largely depends on the person you are dealing with, the customer. After sometime, I begin to grade if the customer is i) a good person ii) demanding type iii) win-lose type. I will give a lower price to a customer who I believe to have good character, and I would hike up the price if he is a demanding or difficult to deal with type, and would run away if I can identify an asshole or someone with unrealistic expectation. The customer affect the time and effort required to complete the project.

[2012-09-28: based on feedback from zalew]
It's true that it's hard to judge someone's character (especially when you just met them), what's more unpredictable scenario such as "he can have partners who will make your life a living hell" or "another person took over the project". It's true that it's always unwise to under-charge, but it pretty much depends on how "desperate" you are (plenty of jobs on hand? charge more. Nothing to do? a little discount to close the deal is better than doing nothing).

When someone ask you to do something for free or give discounts because he will give you more future business, IGNORE them.

If you are dealing with a middle-man, the risk is higher: they might not quite understand the scope of work (wrong information means higher risk of failure), and if the customer don’t pay, the middle-man don’t pay. Most of the time, the middle-man will always take care of their own interest first.

When in doubt, either ask for higher upfront payment (50%) and markup higher, or just run.

When someone ask for under-table money, you know things will just get more complicated in one way or another. DON’T DO IT.

Small is Good

I like small scope with small payment, it’s faster, easier with less complication. If a project is too big, break it down to phases with INDEPENDENT scope of work and payment schedule (if the project got cancelled mid-way, you still get paid for some of the completed work).

Collecting Money

Always take upfront payment, and DON'T start work (besides attending meeting and writing scope of work) before you can touch the money. 30% is the norm, and 50% if the risk is higher. The customer might claim the finance depart is processing the payment (around 1 month), and he require you to start immediately because the project is behind schedule. Ask the finance to expedite the payment, or you can start one month later. Lesson learned: I have a customer who refuse to release the upfront payment because I haven’t completely delivered the project, WTF!

I am lucky that most of my customers are good paymaster, and lately I start to understand why. Most of them are either my friends, my family’s friends or my relatives: meaning I have some kind of personal relationship with them, and if they don’t pay, words will spread to our common friends. Reputable corporation with a close friend working inside is good, and repeating customers are the best.

Middle-man are the worst. I deal with 3 of them before:

  • The first one is a very honorable person, he pays me even though he didn’t manage to collect the payment from his customer.
  • The second one is an asshole. The customer pay him partially, and he keep all the money for himself; when the customer didn’t settle the rest of the payment, he just run away.
  • The 3rd one make excuses about late payment, then run away as well.


You should do the following to protect your interest:

  • ALWAYS put in some kind of licensing control in the software, preferably with a few level of control. If the customer are reluctant to pay, popup reminder (“The trial license has expired. Please renew the license.”) or limit certain features. If it’s clear the customer would not pay, just make sure they don’t get to use your product as well.
  • You are in control as long as the customer continue to use the product. Sometimes the project is abandoned, tough luck.
  • Most of the time, customer will make up some lame excuses for not paying, or claiming you are not doing a good job. Some even try to get you to do more work in order to get your rightful payment for job already completed. Be sober and think carefully of your current situation, and not to be manipulated by the customer.
  • Sometimes it's best to cut loses and get out, so that we could move on and focus on better things.
Funny people could refuse to pay you, insist on continue using your product and still pretend to be rightous. I believe we must treat others as we wish others to treat us, and I am always impressed by someone's distorted reality. The hardest thing to learn is how not to be emotionally affected by them, it just ain't worth it.

When to cut losses?

[2012-09-28: based on question from Anonymous] This is a tough one. 

It depends on do you think the customer is a good person in nature, where you still can reason and convince him, perhaps throw in a bit of goodies to close the deal.

I have some troublesome customers before, where I did throw in extra effort just to close the deal. If it's something manageable with a clear end, proceed to close it. Sometimes customer just like the feeling of getting some upper-hand and freebies; or their bosses wanted something which are in the "grey areas", so do the poor employee a favor if it's not too much (remind them that it's a FAVOR!).

Lately I have a customer which I feel he is taking me for a ride, or perhaps he just have a distorted reality when he always wanted things his way (no exactly a reasonable way). I try to have a discussion with him to come up with a amicable solution, but the conversation just isn't working, and I could smell there are more problems brewing if I continue to work with him. Not that he is an evil person, but he like to be coaxed, like others to bow to his way, and he will probably pay me if I can make him happy (I prefer to keep things professional, ahem ...).

Why did I quit?

The main problem with freelancing is that it’s a repeated full cycle from the ground with each new customer, with is time consuming and high risk (you can’t leverage on something to reduce the effort). Industry wisdom says that to create a sustainable freelance or software business, it all lies with the maintenance contract: knowing you have money flowing in year after year without doing much. Though it might sounds good, but yearly contract also means I take the responsibility to constantly service customers with no escape.

As mush as I like programming, freelancing is still pretty much fulfilling others’ business requirements for a fee, and that isn’t very fulfilling for me.

I found something else which are more interesting and meaningful to me, and I found a way to make a living out of it.

Follow Up

Discussion on Hacker News



6 comments:

ainal@techsplatter.com said...

I feel for you man. I used to work for an outfit that brought in foreign contract IT staff in the 90s. We stopped taking requests for programmers because clients see programming as labor and somehow we Asians don't value labor. Like working with your hands is second class.
Plus we also don't have a maintenance mindset. To maintain something is akin to failure to do it right the first time. Which is of course BS, because things change.
Anyway good luck on your new venture.

Riley James said...

Just out of interest what kind of clients were you dealing with?

I see a lot of freelancers dealing with small business clients and struggling to get payments and terms and they end up getting screwed.

Why do freelancers gravitate to such clients? There are much better, bigger clients such as creative and digital agencies, funded startups and even corporates (particularly managers that don't get access to internal dev teams, but need things work completed). These clients pay better and don't screw around with payments to the extent that small clients will.

Are there any particular reasons why you didn't chase those kinds of clients as a freelancer?

Anonymous said...

Spellcheck!

Anonymous said...

Hi Desmond -

Great points! I just gave a talk on being a Game Design freelancer, and have linked back to this post. Great resource, thanks for sharing it.

One thing I find interesting is that I actually prefer to go for larger contracts, because the smaller ones have so much overhead. I don't want to negotiate with the client, pay my lawyer to review the contract, and spend all the startup time, just to spend a week on something. It's much more worth my time to do at least a month.

I do absolutely agree 100% that you need to be getting paid all along, and there should be milestones or other payment points so that you're never working 'at risk' - and that's probably what you were really trying to say.

Thanks,
Aaron
(For the curious, my original post is http://www.voidalpha.com/goingrogue, which has a lot of other resource links for contractors as well.)

Phong said...

Hi Desmond, thanks for the article. I never knew you could do freelancing programming in Singapore. Seems like most of the business activities would have something to do with either government or big corporate, which takes much longer for any contract to be signed. How do you go about that?

Unknown said...

Personally, I would avoid trying to hook up big projects with corporate and government (politics, connections, long sales cycle, endless proposal and demo, etc). Unless you have good connections, then go ahead.

The only reason I have a semi-government job is because I used to work in the project, and the company contracted to do the job doesn't have the required skill (C++ is involved).

BTW, I'm based in Malaysia ;)