I've been working as a freelance software engineer for just over 11 years now. My first contract came through Upwork (which was called oDesk back in 2009) and I charged $10 an hour. All of my early work was for individual bloggers or small businesses, and usually involved building or tweaking WordPress themes and plugins.

Since then I've been able to help dozens of different organizations and work on some really interesting projects. It's not quite the career I had in mind, but I enjoy the variety of work that comes my way.

Here's what I've learned.

It takes time

It took me about two years for my income to stabilize. The first year I could often go a week or two without any money coming in. This situation improved once I found a few steady clients, most of which came through referrals. After three years I was able to pay all of my bills (rent/food/etc) entirely through freelance work.

Use what you know

There is a time and a place to experiment with new technology. It's not when you're doing billed work for a client.

Charge more

This is a pretty common refrain in freelance circles, but it's still good advice. Raising prices does several things:

  • Signals that you're serious about what you do.
  • Weeds out clients that you may not want.
  • Allows you to be more selective about what you do.

It took me a long time to build the experience - and courage - to increase my rates. I could have been self-sustainable much earlier if I'd been brave enough to charge more.

Sometimes people won't pay

This has only happened a few times, but it's extremely frustrating when it does. These days I won't do any work without signing a contract first and being very clear about what is expected from both parties.

Not all clients are a good fit

This doesn't mean that they're bad people, just that their work styles don't mesh with mine. It's usually better to cut things early rather than trying to make things work.

Don't rely on a single client

After my first year I stopped looking for new projects and took all of my work from the same client. When they decided to switch to another company my income dried up overnight. There's no severance pay when you're a freelancer.

Communicate. Communicate more

Early on I developed a very bad habit where I wouldn't show what I'd done until it looked perfect. This sounds like a logical approach, but it causes all kinds of problems:

  1. I know that I've been working on something, but the client doesn't know that unless I tell them. They are paying for my services, and they want to see what they're getting.
  2. Often what they originally asked for isn't quite what they want. Showing things early gives time for feedback.
  3. It's not my place to decide what's perfect for the client.

I solved all of these by communicating clearly. I don't particularly like writing emails, but they're an important part of my work.

You need to learn a lot of non-work skills

Keeping accurate records, sending invoices, paying estimated taxes (and finding out who to pay), and filing taxes are all things I've had to learn since I started.

I keep a single spreadsheet for all of my financial information, and I store any printed receipts for the year in a manila folder. Once taxes are done, finances get printed and put in the filing cabinet. It's not glamorous, but it means I have an actual record if I need it.

Hint: scribbling "paid $xxx" on a post-it note is not good bookkeeping.

It can be expensive

My experience is based on living in the US, but I've found freelancing to have a lot of hidden costs. I have to pay health insurance, pay into social security (including the employer contribution), pay into a retirement account, and I don't get paid holidays.

Non-billable tasks take a lot of time

Hours of time can quickly get eaten by emails and administrative tasks. There are also non-work things like eating, drinking, and bathroom breaks that take time. Take these into account.

You're on your own

Unless you hire outside help, everything that needs doing rests on the shoulders of one person: you. This includes planning projects, scheduling work days, writing proposals, sending invoices (and following up on them), setting up meetings, and then actually doing the work you're being paid for on top of all that.

It's a lot.

Take all of this advice with a grain of salt; there's a hefty chunk of survivorship bias thrown in.