I was a freelance developer for 7 years before taking my first full-time position with a company and never once had a dry pipeline. Here are a few bits of wisdom I collected over that time I thought I’d pass on to whomever it might help.

Avoid freelancing sites

I never bother with developer cattle mills like elance. They artificially deflate your value and are basically a breeding ground for cheap clients. Remember, most clients are going there to try to get work done as dirt cheap as possible. The best clients want the highest quality work done and are willing to pay well for it.

Go to meetups, conferences, and events

Specifically tech or programming related. Speak at meetups, conferences, and events. Work on side projects and present on them. Establish yourself as a knowledgable developer who gets shit done. That’s all people really care about — can you actually deliver?

Never, ever, do work for free

I cannot stress this enough. It’s the worst possible idea. Do not use the excuse of building your portfolio to give away work. Build your portfolio by working on your own projects or contributing to open source. Seriously, don’t bend on this rule, even (especially?) for friends and family. The main issue behind pro-bono work isn’t that you aren’t getting paid (but that is a problem), but that the “client” never feels comfortable giving you honest criticism because they feel guilty doing so when the work is free. And when push comes to shove and you have other paid work that needs to get done the free work will get pushed aside. It’s unfair to your client and devalues you. Just don’t.

Demand no less than 50% down

This applies to fixed-cost project quotes. This will filter out the time wasters who aren’t serious about spending cold hard cash on a quality product. Fixed cost projects can also provide a multiplier to your usual hourly rate. Managing scope becomes hugely important, and defining all expectations ahead of time is paramount, but it can be very profitable if done right. If the client doesn’t want to put any money down, then demand an hourly rate and deliver nothing until your invoice is paid.

Take your current rate and double it

Right now. You are undercharging. Again, this filters out time wasters, but it also increases your perceived value. If you confidently quote a high rate they will either walk away (and you’ll have dodged a bullet) or they will actually take you seriously and become more confident you will deliver quality work. It’s the same reason people buy luxury vehicles — perceived value.

Learn the whole stack

You simply cannot freelance effectively if you relegate yourself to the front-end or other slice of the stack. You should understand how to administer a server, db, build a server side web application, design and implement a front-end, and everything in-between. This opens up your potential market and allows you to raise your rates. Your rate is directly proportional to the number and variety of clients you can accommodate. This isn’t to say you need to be a jack-of-all-trades/master-of-none. You can still focus on a core competency, but there’s really no excuse not to have a basic understanding of how to build, deploy, and maintain an app from start to finish on your own.

Under promise, over perform

This is probably the most important point on my list. Freelancing depends almost entirely on word of mouth. If you knock the socks off your first few major clients, you will almost certainly have a jam packed pipeline for as long as you want to keep freelancing. It’s all an exercise in managing expectations. Never burn bridges unless the client was toxic (which you thankfully avoid by following the steps listed above). Your clients should be your biggest advocates and salespeople.

Build a good personal site from scratch

Use it as your playground for all the cool new tech you know how to use. Keep rebuilding it every year or so to keep it fresh. I got a lot of work simply by building killer personal sites and blogging fairly consistently. It’s also very important that you work on your own side-projects as well. Dedicate a percentage of your time to doing just this. It will keep your skills sharp, allow you to explore new technologies and trends, and will help promote your services and prove to people that you know how to get shit done.

Look for the holy grail: a long term contract with a large company

This involves a lot of networking and will likely come up as an opportunity by over-delivering for your clients. If you’re presented with such an opportunity make sure to bid your rate way higher than you’re comfortable with. If you followed my advice above and doubled your rate, now would be the time to do it again. This is called “pegging” in negotiation terms. By setting a high value, the client feels they are getting bargain if they successfully talk you down to a lower rate, even if that lower rate is way higher than you normally get. Established companies understand value and are willing to pay for it. Underbidding is like burning cash. The trick here is to believe you are worth that much before asking for, and it can be tricky for most humble, analytical engineers. A little delusion and bravado can go a long way.

It’s the PEOPLE, stupid!

If you’re not a people person, or can’t force yourself to be one, freelancing is going to be a tough road for you. There’s no shortage of introverted, timid, yet brilliant developers willing to troll the web for easy leads. If you ignore networking, you’re competing with developers all over the world. If you can successfully interact with people in person, in the real world, at real events, meetups, and random public locations, and build a successful track-record of getting shit done, you will narrow your competition to thesmall sliver of the developers out there who are both local to your area and personable.

We still live in an era where face-to-face interaction trumps online interaction, and where charisma can be just as valuable as technical expertise. Love it or hate it, that’s the reality we all must face, and if you can be the proverbial unicorn developer who kicks ass at programming and interacting with people, you will be able to name your price.

Good luck!