I had someone reach out recently about advice for new programmers who want to freelance, given that finding clients is even harder right now than it would otherwise be. Specifically how does a new freelancer find opportunities for contract work? My response got long enough that I figured I'd post it, so here it is.
Finding contract work as a brand-new freelancer is tough. My first year or so of doing freelance web development, I reached out to small local businesses, friends and family, and organizations, looking for the lack of a website to guide me to paying customers. I found a decent number of people who wanted websites, but not very many (read: none) who wanted to pay me to build them. Given that I didn't need to support myself at the time, that was ok. But, if you're a new freelancer and you want to make money, you'll need a better approach.
After a few years of stumbling down several fruitless avenues in search of freelance clients, I ended up finding the most success by doing two things: I charged more than I thought I was worth, and I reached out to people in smaller, professional communities.
The first point is pretty simple. Charge more. The point of this isn't a greedy cash grab; if I were to sort my past clients by how great they were to work with, the ones at the top would also be the ones that paid me the most.
If you're worried about being inexperienced and not being able to justify charging more, then do pro-bono work, or personal projects. Or just don't worry about it, and charge more anyway. The Imposter Syndrome never really goes away, so you might as well start learning to ignore it now. I worked the hardest and burned myself out the fastest working for people who paid me the least. Don't do that.
An arbitrary rule of thumb here is to do some research, decide on an hourly rate for yourself, then double it. Or, if you're charging a rate for the whole project, double that too. One caveat for project-based rates that I ran into early on is that it's hard to know how long a project will take you when you don't have a ton of experience, and so you could end up charging too much or too little. Finding what works for you will require getting some projects under your belt, but I've found that being very up-front and transparent about my rate and my estimates has worked well in the past.
If you opt for a flat rate for your project, being abundantly clear that estimates are hard, and adjustments might need to be made to the rate as the project progresses are good safety measures. Even better, breaking the project into several distinct milestones where payments are made after each deliverable lets you more easily adjust for any scope creep or previously unknown obstacles incrementally instead of having to get it right all at once, at the outset of the project.
Finding niche professional communities is a little more nebulous. The key here is you have to find communities that are both:
- Small enough that you can connect directly with people who might need your services, and,
- Are made up of individuals willing/able to pay you for your services.
I started out by spending time on reddit communities like r/forhire, and the monthly HackerNews hiring threads, and then gradually branched out into other communities where the focus wasn't necessarily just about 'finding work', but still had members who I could connect with and who might have projects they'd be willing to pay my rate for. The IndieHacker community comes to mind as a niche community that potentially fits this bill (although I've never personally looked for freelance work there).
Once you've found a suitable community, all that's left is reaching out to people and starting a dialogue.
In my mind, the biggest differentiator for any professional programmer is their ability to communicate effectively through writing. Freelancers especially need to spend time working on being clear, consistent, and persuasive. Your first interactions with a client will usually be written. Many clients won't be programmers themselves, so written updates will be a necessary deliverable once you do have the contract.
As a freelancer, your written communication needs to be:
- Clear. You have to be able to explain the details of your work, technical and otherwise, to your client.
- Consistent. This has been one of my most common freelancing failures. There's almost no such thing as too much communication with your client, but too little communication is a project killer. Even if it's to report roadblocks or unforeseen issues, regularly communicating is critical
- Persuasive. Part of being a freelancer is to be constantly articulating your value to your client. It doesn't matter if your code will be 100x faster than what's already there, your client won't care unless you sell them on the value of that speedup. In my experience, persuasive writing is brief, backed by facts/data, and draws upon your industry experience to add context to your decisions.
And that's it. My freelancing advice basically boils down to charge more, find communities of people who will pay you, and focus on well written communication with those people.
If you're interested in more advice on freelancing, DaedTech is a blog that dives into freelancing topics with lot more depth, and I've found a lot of Eric's content to be super useful.