How to be a freelance web developer, Part 2

A lot of people apparently got some value from the post yesterday on how to become a freelancer, so here’s part 2. Hopefully I’ll hit everything that people asked me, though I’m hardly the last word, so if you see something here that doesn’t sound right, post in the comments or shoot me an email.

Staying sane

Freelance work is stressful at first, and you should be prepared for it. The biggest piece of advice I can give is to cut your spending as far and as hard as you can, for as long as you can. When I first started, I was so amazed by the hourly rates I was able to get compared with my job, and I completely neglected to take into account how long it would take to get paid, that there would be periods with no work, higher taxes, etc.

I also think it’s really helpful to find another freelancer or two that you can commiserate with. Working from home is terribly isolating sometimes, so go to a coffeeshop, work in a coworking space, with a friend, whatever. I have a couple friends that I just hang out with on Skype throughout the day.

More on rates

Figuring out where to set your rates can be tough. I’m currently charging about twice what I started out charging three years ago, though I give some of my older and best clients a break. I also give discounts for longer-term contracts, because I’m spending less time looking for work, which isn’t billable time. The best way to figure out how to set your rates is to talk to a few freelancers who do what you want to do and ask them about their rates. You might start off a little low, but here’s the cure for that:

After each job, raise your rates, and keep raising them until no one will hire you.

On billing hourly or fixed-price, most clients seem to prefer fixed-price. Just make sure you have it spec’ed out well and you are clear that scope creep isn’t going to happen. After the last few years, I prefer to do hourly as it’s just a lot less stressful.

If you’re conservative and you’re doing individual contracts that last a few weeks at a time, you can generally assume you’ll bill about 1000 hours a year, so if you charge $75 / hr, you’re going to be making $75k / yr. Throw in the fact that you have to pay higher taxes as a freelancer and now you’re not making that much. However, you can definitely bill more hours than that a year. If you do several 3-6 month contracts where you bill 40-50 hrs a week to a client, and throw in some little side projects here and there, you can bill 2000 – 2500 hrs a year. Do you have to work hard? Yes. And juggling all that work is hard, but it can definitely be done.

Also, set taxes aside and pay your quarterly estimated taxes (if you’re in the US). It’s just a lot less stressful.

Oh, I almost forgot: never work for equity. 99% of those projects will never go anywhere. I tell my clients that they’re welcome to throw in some free equity on top of my normal rates, but I get paid in cash for the work that I do. I have plenty of entrepreneurial projects of my own, so why would I work my ass off for 3% (or even 30%, though they never offer this much) of someone’s Facebook clone?

What skills to offer (and where to grow)

Obviously, you have to start off selling what you can do, but where should you grow your skillset? From what I’ve seen, there’s a tradeoff between being more specialized and more of a generalist. The more specialized, the more you can charge, but there’s lot more work for generalized stuff. In general, though, I tend to lean more towards specialization. Most of my work is PHP, and I can charge a lot more for Facebook apps, Drupal, CakePHP, and Magento than I can for just generic PHP stuff. Even WordPress stuff pays better. The ideal is to find stuff that’s in pretty widespread use, but harder than the average programmer wants to tackle. From what I’ve seen, Facebook apps, iOS, Drupal, and Magento all fall into this category. You can charge more for this and get a lot of work, because there’s an asymmetry in the supply / demand curve due to programmers being unwilling or unable to learn these platforms, but lots of clients using them. (Unrelated note: does that sentence make sense?)

The most important skill you can possibly have is being able to understand your customer’s needs and tailor a solution for them. This might seem obvious, but a lot of coders are really bad at sitting down with a client and understanding what they’re really saying. Most clients do not care if you use Rails over Django, and they don’t know what you mean when you’re talking about HTML5 over Flash. They only know and care about their business needs. If you get good at listening to their needs, tailoring a technical solution that meets those needs, communicating that solution clearly, and implementing it well, you’ll never have a problem finding very high-paying work.

Building a reputation

Looking for work is terrible. It’s a pain and you have to spend most of your time weeding out people who aren’t serious. The ideal is when the work starts coming to you. This takes time and dedication, and the will to build a strong reputation. You need to have a portfolio that looks good, and I’d recommend a blog. Depending on the type of work you do and who your clients are, a Github account isn’t a bad idea either.

On the blog, you can blog about anything you want, not just development stuff. Many of my clients have said that they feel like they know me better after reading my blog. I think hiring someone is really hard because you don’t know them and to the extent you can peer into their personality through their writings, it makes hiring decisions much easier.

How to tell a good client

Telling the good clients from the bad ones is more art than anything. However, I’ve found a few heuristics that help me:

  • Clients who bitch about rates or quibble over a few hours here or there are rarely good clients overall.
  • If they had a falling out with their last few programmers, that’s a danger sign. Not always their fault, but be wary.
  • Clients who insist on lots of calls, pedantic timekeeping and status update rules, etc. will generally be a pain.
  • Clients who balk at paying partial upfront, or want to only pay after they’ve received everything are planning on screwing you.

Sales cycle

I’ve generally found that when starting completely from nothing, it will take me 2-4 weeks to land some new gigs and start working on them. So you should probably assume that you won’t get paid for at least 60 days from the time you start freelancing, and assuming 90-120 days is probably safer and more realistic.

I generally handle 1-3 clients at a time, which is a pain to juggle, but unless you’re working for a set number of hours per week, you’ll find that only have one project really cuts down on the number of hours you can bill, because you spend time waiting on the client for stuff. The ideal for project-based work is two, so you can bounce back and forth, but these require good clients who aren’t going to be on your case all the time. And obviously, you can’t do two projects where you’re giving each client 40 hours a week, unless you’re planning on working 100 hr weeks.


I generally try to get signed contracts, but it’s more to ensure that both parties are on the same page. If a client stiffs you over a $2k job, you can sue them in small claims court, but it might not even be worth it, especially if they’re out of state. I generally just try to avoid my exposure to this kind of risk by insisting on an upfront payment, getting payments regularly, and not turning over the code until I’ve received all or almost all of the money.

Healthcare and retirement

I don’t have a ton of experience here, but my wife and I are both self-employed and we have health insurance from Blue Cross (found via Esurance). We’re fortunate to have good health, but I’m guessing that pre-existing conditions are a huge problem if you want to be self-employed 🙁 Anyone have any answers here?

We have IRAs through Fidelity , which I highly recommend. Planning for the future is important, plus it helps cut down on your tax bill.


People have asked why I don’t just subcontract out some of my extra work. I think it’s a fine strategy, but I’m personally wary of giving work to someone because if they fall through, I’m on the hook. I might make an extra couple thousand a month doing that, but if I have to do the work and end up jeopardizing my other clients because I don’t have time to focus on them, I lose more than I gain. Plus, I think the time managing that subcontracting process is a lot more than you think. At some point, you’re running a development agency, and that’s just not my goal. I did teach my little brother to program over the last couple years and he’s paying his way through private university by doing subcontracting for me. Family is a little different, though. If you have too much work and you’re considering subcontracting some of it, maybe it’s time to raise your rates.

Finally, keep this in mind: freelancing might seem overwhelming, but your competition is terrible. Seriously, absolutely terrible. I think almost all of my clients have gone through several programmers before me and their expectations are generally pretty low. Making clients happy can be hard, but it isn’t complicated: be clear in your communications, be honest, and build good stuff on time and on budget. And don’t give up during the first year…it takes awhile to get it right.