You’ve probably read a lot about freelancing: Feast and famine. Where to find clients. How much to charge. These topics are fundamental, but it seems like most freelancers burn out before they get over these hurdles. Can freelancing be a stable, long-term career?
I think so! I’ve been freelancing for 7 years, which is long enough to have survived lots of ups, downs, and evolutions of my business. Certainly Software has grown 5x in those years, and has gone from literally starting in a barn loft to now having a ground-level office in a much nicer barn.
Am I getting the hang of it? Maybe! Or is the market just uber hot, so schmucks like me can’t miss? Probably! Either way, I’ve learned quite a bit over the years through pain, success, and failure.
Below is everything I’ve learned, loosely grouped by topic. I was very much inspired by Jason Cohen’s Kung Fu post. This is my style of freelancing kung fu – other freelancers have different styles. Maybe something here will work for you, maybe not. Let’s begin.
Billing and Rates
The most challenging part about freelancing is not technical, it’s growing the business. Spend your time and set your rates accordingly. 50% of your time on business development is not too much!
Don’t bill hourly. Bill by day or by week. Billing a daily rate allows you to avoid wasting time tracking time, and makes it a lot easier to focus on 1 project at a time. Estimates are also much easier to make in daily increments. The exception is retainers: Those can be hourly, but charge accordingly.
You can specialize simply in charging more (thanks tptacek). Imagine two projects which are effectively the same work, except one has a budget 10x the other. Specialize in the 10x projects.
Why do some projects have 10x the budget? Sometimes it’s just because the client has more money. But mostly: Larger companies can’t afford (the risks associated with) cheap freelancers. “You get what you pay for” applies to freelancers as well, which is why large companies will prefer larger, established agencies even though they cost a lot.
Take your finely-calculated estimate and 3x it, both in time and money.
You should get really comfortable with “no”; Both saying “no” to bad fits, and hearing “no” from clients who can’t afford you.
You’re probably undercharging. Charge more (thanks patio11), but also be at peace if you’re making enough right now. It’s easy to excessively worry about leaving money on the table. Everyone does it. There’s always a next project.
High rates have a compounding benefit.
Low rates = more time working = less time selling = low rates.
High rates = less time working = more time selling = higher rates.
Raising your rates allows you more time to focus on raising your rates.
Save a little time each month for emergency projects, and charge accordingly.
If you need help determining rates, find the highest-paying job you could realistically get (regardless of location) and charge more than that. Here’s a formula I came up with for this.
You’d be shocked at how much money large companies spend on simple static websites or CRUD apps that are often mediocre and/or thrown away. Similarly, you’d be shocked on how much money companies spend on consultants for advice, only to not implement (or even read!) the recommendations they’re given because the consultants half-assed it. You can do better!
Talk about budget early in the conversation. It’s sometimes uncomfortable, but you’ll save everyone lots of time by determining if you’re even in the same ballpark. You won’t lose good contracts by talking about budget, and you shouldn’t be afraid of scaring away low-budget clients.
You don’t get PTO, so it will feel like you’re losing money when you take a vacation. It’s strange.
Always bill, even for small fixes. If you work for free, you are setting expectations for clients and they will take advantage of the freebies. On the flip side, you can do favors for long-term clients if you know they won’t try to exploit you. Don’t nickel & dime the client that is giving you 50% of your work!
There are freelancers and consultants making $3,000+ per day doing basic marketing consulting, building simple websites and CRUD apps, or configuring servers – stuff that you could do, too. There are also freelancers and consultants making $100/day for almost the same work. The difference is as follows:
|High-rate Freelancers||Low-rate freelancers|
|Find clients who can’t afford cheapness||Find clients who can’t afford quality|
|Focus on clients’ pain points||Focus on the technical details|
|Charge more, forcing low-pay clients out||Charge less, accepting lowballers as clients|
|Sell their talents||Hope people notice their talents|
|Take ownership of their projects||Do their part, and no more|
Learning how to move to high-rate freelancing is part experience, part simply having the guts to charge more and hear “no” from clients. High-rate freelancers have learned the business value of what they provide. If you freelance long enough and are observant, you’ll learn what matters & what doesn’t matter to clients.
Make it as easy as possible for clients to pay. Don’t get hung up trying to save 3% credit card processing fees! Do whatever it takes to smooth the process of them paying you, including registering on their wacky billing system if needs be.
Collect payment (50% – 100%) before starting work, particularly for new clients you’re not comfortable with. You can make exceptions for large or repeat clients whom you’re confident will pay.
Expect late payments. Don’t hesitate to politely nag, they probably just forgot. The squeaky wheel gets greased.
Your clients won’t realize they’ll need maintenance on their project unless you tell them. Include maintenance as part of every proposal, lest the client spends their whole budget on building the first version.
Because you’re independent and can build things, “idea” people are going to come to you all the time with partnership proposals. Feel free to listen, but 99% of these are worthless – particularly if you’ve only just met the person.
Dealing with Clients
Clients generally fall into 2 buckets: “Price-isn’t-a-big-concern” and “extremely-price-sensitive”. It’s all in how the client views their project: Is it a profit-center or cost-center? I’ve found very little middle ground. Identify the high-value clients, and focus your business on them exclusively.
There is nothing like in-person meetings to strengthen relationships. That being said, I’ve only met ~3 of my dozens of clients in person, so it’s not utterly critical.
You don’t have to like the people you work with, but it sure helps. My best clients have been the ones I’ve had good personal connections with.
An incomplete list of red flags:
- If a potential client tells you how something should be implemented, they don’t want you to think too much and don’t value your expertise.
- If a client previously posted their projects to Fiverr or UpWork, it’s a signal they don’t value expertise.
- If a client won’t listen to your advice because something is not your speciality, they probably see you as an implementer, not a partner. You probably sold yourself short and/or the client doesn’t value you like they should.
- If a client tells you how long a project should take you to finish, they think they know an awful lot about your field.
- If a potential client can’t explain why they chose you to talk to (i.e. for your expertise, because of an article they read, because of a referral, etc), they’re probably shopping around and you’re bidding against other contractors. This isn’t the worst thing in the world, but you’ll have minimal leverage.
- If a client starts asking for detailed breakdowns of your time spent when they haven’t asked in the past, you’re probably being viewed as too expensive and should brace for an end or change to the relationship.
Don’t hesitate to speak up if you know something better than your client – even if it’s not necessarily what they’re paying for. Just be sure you actually know what you’re talking about, and take time to craft your message to them.
Don’t pretend to know stuff you don’t actually know. You’re not good at BSing, and BSers lose credibility really fast. Instead, don’t be afraid to say “I’m not sure, but I’ll do some research and find out”.
Your first interactions with anyone will set the tone for the rest of the relationship. If you crush the first emails, phone calls, or meetings, your reputation will be solidified for the long-term.
Identify your “champion” within larger organizations – someone who will advocate for you. They are worth a lot – do them favors and you’ll find your invoices will get paid faster, more work will come your way, and you’ll have staying power within the organization. Often this person is the one who benefits most from your work or someone who felt the most pain before you came along.
Be kind & professional to everyone you interact with at a client, even if they’re not your main point of contact. Remember names. Sure, it’s a good thing to do in general, but it helps business as well: People move to new companies and will recommend you. Never never never never burn bridges.
If you specialize, specialize in a type of customer rather than a technology. Think “specialist in accounting departments for manufacturing companies” instead of “specialist in the Quickbooks API”.
Portfolios are probably helpful, but I’ve been successful beyond my wildest dreams without ever having a portfolio. I provided links to my work via email, when necessary. If you’re interested in building a portfolio, I found this ShopTalkShow with Dan Mall valuable. He also wrote about building a portfolio.
Saying “I’m not a fit” once can save several months of agony on a project you never should have started.
Fame or notoriety isn’t necessary to be successful. It’s easy to look at the outliers and think “well of course you can charge $X000/day, you’re famous“, but there are lots of random developers you’ve never heard of doing routine stuff making $6000+/week.
Referrals are #1 source of leads for basically every freelancer, followed by writing & job boards. Build rapport with clients, and you’ll fill up your schedule.
Job boards & premium marketplaces (such as TopTal) are good places to establish yourself when you’re getting started. Postings on job boards get 98% garbage responses, so take time to do a good job on applying to postings and you’ll see success.
When you’re starting out, I’d recommend picking a skill that is in widespread demand, but might be slightly boring or even lower-pay. This can help you establish a baseline of work while you’re figuring out what you want to specialize in. I wrote a book about using WordPress for this purpose, but there’s lots of other options.
You need to keep a mental model of your ideal client in mind. If you don’t think about your ideal client regularly, you’ll find yourself drifting into whatever project comes along. Having a particular customer in mind helps focus your marketing & sales efforts, and allows you to say “not a fit” more often. (Thanks Greg Kogan for asking me who my ideal client is).
A helpful way to determine what exactly you’re specializing in is to fill in the blanks: “I’m _______, an expert in _______ helping _______ _______. Unlike my competition, I _______.”
Example: “I’m Andy, an expert in WordPress helping Marketing Departments of Software Companies manage and extend WordPress. Unlike my competition, I’m an experienced developer who understands SEO, content marketing, and design, and I don’t disappear.”
Writing a little bit about your expertise & doing a bit of self-promotion will almost certainly bring you clients, sometimes from the places you least expect.
Buy and read Double Your Freelancing Rate. It’s worth it. Or, if you can’t afford it, just double your rate anyways and then pay Brennan for writing such a good title.
Freelancers who deliver projects and don’t disappear approach ∞ value for agencies, because agencies naturally have ups & downs that are really hard to fill with full-time staff. Having someone they can plug in to specific projects is an absolute joy for their project managers, and there are shockingly few freelancers who do a good job at this.
Working as a subcontractor is a great way to learn the business of freelancing, particularly if you’re working for an agency. Pay close attention to how agencies manage contracts, clients, relationships – all the business bits. Subcontracting can be a great fallback for dry spells.
Once you’ve learned how agencies work, move on to finding your own clients. Working as a subcontractor means you’re not capturing all of the value you deliver. Move to direct client relationships ASAP.
Don’t work on promises. Get projects down on paper with clear terms, and have your clients sign. Until you do so, all the talk in the world is worthless. Amazing how many times I had to learn this lesson.
Doing the Work
If you underbid a project, suck it up and complete it. If that’s not possible, be frank with client and give them an exit plan. They’ll probably respond well. Do not disappear.
Most clients don’t care about code quality, period. Write quality code anyways, time permitting.
On the flip side, don’t be afraid to whip something together if timelines are short and it’s likely to change later. YAGNI and all that. Over-engineering can sink projects.
Determining the right time to craft code vs. move fast is an extremely valuable meta skill for software developers that can only be learned through difficult experience.
You should absolutely own the work. When in doubt, go above and beyond. You’ll regret the times when you do the minimum.
I’d estimate over half of freelancers disappear before delivering their projects. Good for you: Finish your projects and you’re already in the 51st percentile of freelancers. Being reliable is a rare virtue, seemingly across all industries.
Break large projects up into 4-6 week chunks. This protects you in case of overruns, allows you to slowly build trust with the client, and allows easy pivots in case the project needs to change.
It’s hard to keep up with technology trends while freelancing. Clients pay for efficient, completed projects, which are (typically) best done with stable technologies that you’re very proficient with. If you want to keep up, you have to figure out ways to learn – either on the job (in tiny bits – I’d never experiment with big things on a meaningful client project) or on your own time. Alternatively, you can stick with your toolset and accept that the world is moving past you for now. There are still mainframe developers out there, making a killing.
You need a quiet office and a consistent schedule. Chaos in your work life leads to chaos in your personal life. Set boundaries with your family if you need to. Be nice about that.
Find the portion of the day where you’re most productive, and schedule your deep technical work for that time. For me, it’s the first 3-4 hours of the day. Save the rest of the time for emails, administrative work, and other less-demanding tasks.
Resist the temptation to overbook. You’ll always think you can handle it, and you almost never can. Overbooking leads to slippage across all projects and you’ll probably need a break afterwards – negating the whole point of overbooking since you’re losing time taking a break. Consistent, stable and repeatable hours beats long days & hard pushes in just about every way measurable.
The value you provide will be > 50% communication, < 50% technical. This is probably true of full-time jobs as well, but in freelancing your ability to communicate requirements, project schedules, and sales pitches will have a tremendous impact on your success. Get really good at email in particular.
Time estimation for projects is hard, but don’t fall into the trap of thinking it’s impossible. You can get good at it, and the only way to get good at it is to try, fail, and learn from your mistakes. Start by taking your initial estimates and 3xing them, and learn from there. Jacques Mattheij wrote a nice starter article for doing estimates.
If a client gives you a design to implement, make your implementation pixel-perfect. It’s crazy how sloppy some developers are; the client put together that PSD for a reason.
Buy a tool if it saves you 30 minutes. Purchases under $50 should be instant. Spending $ on books should also be a no-brainer. For $20, if a book gives you an idea to get 1 more client, it’s paid for itself 100x (thanks Mark Cuban). Get a good mic & webcam if you’re remote.
Use your hourly rate as a lens to evaluate your actions. Are you spending 2 hours shopping around to save $50 when you bill $200/hour? Seems silly.
On the flip side, beware big-ticket items that won’t materially affect your business: Things like super high-powered computers, audio equipment, fancy furniture, etc, can blow your budget fast without making much difference to how you work. Be judicious on big purchases.
Build at least 2 months savings, probably more, because you’re going to have a dry spell from time-to-time. Live on last month’s income to help mitigate any slowdowns.
You’ll need 2 years of tax returns before traditional lenders will lend for things like a mortgage. You can make big $$$, but it doesn’t matter if you don’t have a W2 job. Plan accordingly – if you want to get a mortgage in the short term, do it while you still have a full-time job.
Business finances are different than personal finances. This is weird, but true: Spending money on your business nets you more money. Spending money on your personal life nets you less money. You can’t treat business spending like personal spending, particularly if you’re a tightwad with your personal money.
Until you’re sure of your effective tax rate, set aside a minimum of 25% of every dollar you earn for the tax man. Put it away, don’t touch it.
Do business as an LLC, always referencing your LLC in contracts. Be sure payments are paid to your LLC. Stripe Atlas seems like a good way to get started, but depending on your state an LLC might be easy to set up just by filling the forms yourself.
Errors & Omissions insurance (which insures in case you screw something up) is difficult to find for software. The contracts I’ve found were so full of holes and ambiguity I personally found them useless. For insurers, software is still viewed a bit of a wild west, probably due to the fact that the industry is, in fact, a wild west. I hope someone proves me wrong and shows me a good insurer for freelance software devs.
Related to insurance and costly mistakes: When writing code that could bill variable external services (like AWS or variable ad spends), be really really stinking careful. I’ve heard horror stories: The $200k overspend by Wil Reynolds is one, and I’ve heard of a developer accidentally sending massive amounts of video to a video-processing service, resulting in ~$100k of expenses that he was then sued for. Really stinking careful. Test and test again.
Miscellaneous and wonderings
A lot of people debate what you should call yourself: Freelancer, Con$ultant, or Contractor. You should probably stick with “Consultant”, but what matters more is that you position yourself as a high-value professional. The easiest way to do that is to raise your rates. Don’t call yourself a programmer. If you’re interested in being an official consultant, DaedTech is a great place to read.
There is a lot of freelancing advice on the internet. Much of it is absolute garbage and will lead you into despair. Sometimes, you’ll see advice from high-value consultants that will make no sense in your current situation. Internalize the lesson and hold onto it in your memory. When you find the client/job that it applies to, you’ll have a wonderful “aha” moment. Example: Paid roadmapping sessions made no sense to me early in my career – who would pay to get a scope document?! These days I’m encountering projects where it makes perfect sense.
For a long time (maybe forever), you won’t feel like you have a “real” job, and many of your friends and family won’t think you do, either. Don’t worry, there’s a lot of us freelancers out there and if you’re making it, you’re not only legit – you’re running a business, baby. I think you’re an entrepreneur or something.
Having a fancy office, expensive equipment, or flashy business cards doesn’t make you legit. Getting work done and getting paid for it makes you legit. Don’t mix up the two.
Your kids will be surprised that other mommies & daddies go to work for just one company.
It gets pretty dang lonely sometimes, particularly if you’re working remotely. I don’t care if you’re an introvert or extrovert, it’ll affect you either way. You won’t be a regular part of a larger team, so you’ll miss out on water cooler conversations and team building. Having virtual coffees with freelancers in a similar position can help fight the loneliness.
Make friends with your “competitors”. Reliable freelancers are overbooked and can provide leads when they overflow, plus they can be a great resource when you’re stuck on something. The WordPress community is phenomenal in this regard – lots of “frenemies” everywhere.
Freelancing can be scary when you think about your future career prospects. You’re not in a traditional track, and it’s hard for me to envision transitioning to a “regular” software job after 10 years of being solo, just from the perspective of “do I have the right skills to fit into a larger company?”. I don’t know of a way to mitigate this fear.
Downsides of freelancing, compared to full-time jobs:
- You’ll spend a lot of time on non-technical things, which is lame if you like programming.
- Having a bad day means you might not get paid for that day.
- Less experimenting – if you’re doing it right, you’ll be doing similar projects with ruthless efficiency over and over
- No PTO, and nobody to cover for you when you take a vacation.
- Lonely by default.
- No “tracks” of advancement. You’re on your own to figure out what’s next.
Upsides of freelancing, compared to full-time jobs:
- Work when you want. Do your errands midday or take your kids for spontaneous trips to the park. This may be the best part.
- No managers.
- You see what makes businesses successful – both your own and clients’ businesses. This is a life skill that most people never learn.
- Want some extra spending money? Take on a new project, and it’s yours!
- No “tracks” of advancement. You’re on your own to figure out what’s next.
You’re going to yearn for a full-time job sometimes. I don’t think this ever goes away.
Have a separate work phone & email. Put them away when you’re not working, or you’ll find yourself working at all hours.
It’s possible to work in your pajamas, and I recommend doing so once in a while. But for maximum productivity, your routine should involve getting dressed, brushing your teeth, and treating it like a “real job”. Pretty yourself up even if nobody sees you.
This is what I’ve learned so far. Maybe it will work for you, maybe not. Take whatever bits & pieces you like and apply them to your business. I’ve probably forgotten a lot of important stuff. If you think something is wrong or missing, leave a comment on HN or email me: firstname.lastname@example.org. I love hearing from freelancers!
Freelancer? Me too!
Join my newsletter and I'll send you some emails about the business of freelancing and software, for free.