How to handle time spent learning when freelancing?

I’m a self taught coder thanks to freecodecamp and udemy / youtube :slight_smile: . I am really amazed that I can actually make a living as a developer, however I have a huge pain point when it comes to freelancing and billing time.

When doing a freelance job there is a ton I need to learn in order to level up quick - each codebase is entirely different and there is just so much to figure out. In many cases, when working on freelance projects I find it hard because I feel somewhat ‘guilty’ billing my clients for this ‘learning’. Yeah, sure maybe a few hours initially for ‘onboarding’ and reading up on the code is OK…

But the problem really starts to hurt when you need to build out some custom components for a site where the client doesn’t want an off the shelf package from npm or similar, for x reason … That way, I find myself spending a TON of time on building a custom piece of UI … but in many cases I really cannot bill for all the time spent just figuring it out and messing up. Sometimes it could be a whole weekend spent just messing around banging my head against the computer, trying to solve a problem.
Clients expect freelancers to be experts and be efficient, but most of the time it’s all new to me and learning takes time!

So, with that in mind, I’d love to hear others’ thoughts on how you handle this with clients, yourself, or in general? What do you do? Do you set a time limit of ‘x’ hours of banging your head against the wall until you give up? Do you pay for the expertise of another developer to get you unstuck? Do you ask for more time from the client?

Maybe it also comes with the fact that more time should be spent upfront on research / component design? … if so, can anyone recommend any good links to steps/processes/strategies for tackling a new piece of UI / code so you save yourself the pain later down the track?

Phew! A bit of a rant, sorry! But hopefully there are others out there in the same boat?

If a client is wanting a custom development rather than an “off the shelf” package, then it’s kind of on them to pay for customization. Granted, you will likely not bill for a full 48 hours wasted over a weekend, but you will need to compensate yourself.

And the added perk is, unless they also pay for exclusive rights to that code, you will now have a custom module for the NEXT time you get a request like this.

Yes, there is a learning curve. Generally, you will set an approximation of how long you think it might take, in an ideal world (assuming you have a Zuckerberg brain), then double that figure. Before you start development, you may want to go over the numbers with the client, explain that this is “new development” territory, and there will be a fee to match.

Perhaps a first rollout with a stock component, with you putting a minimum into research for a v2 rollout may make sense. I’ve had to have that conversation with clients: “We’ll use this stock component available open-source for now, but we are going to do continuing improvements and updates, and one of the first will be to create a similar component that relies solely on our own in-house libraries.” or whatever.

If you find that you’re getting too far behind the milestones, then you may have to eat a loss and bring on a contractor for a specific problem (assuming there’s more going on than a simple “ask” on here or SO or a forum can handle). The challenge there is, that falls on you rather than the client. They may be willing to handle the cost of bringing in someone to help, but they may also ask, “Well, if this new person’s the guy, why did we hire you?” (Generally, they’re not understanding the general contractor vs specialists like plumbers analogy.)

It is all new, and there is a HELLA learning curve. In between client jobs, you will be continuing your own education. If you know the market segment you’re freelance business is targeting, perhaps getting ahead of the curve – try to anticipate what sorts of new developments your future clients may want, and proactively start learning that.

It’s a constantly moving target. Welcome to the world of professional development. :wink:

problem with billing for learning time is they might end up spending more money for a buggy project that they would with a more experienced person and that’s not fair.

learning on the job is good but also be careful not to take on jobs that are too far over your head which is why building personal projects in your free time are so important.

so its an issue really of whats fair billing for your clients to get them the best value for their money.

maybe instead of charging per hour, you can charge per milestone when you write up your proposal. they only pay when you accomplish a goal and you can better estimate what to charge.

it reminds me of how you do test driven development does, basically forces you to break down a large project with an unknown end result into smaller milestones. so youre solving little problems at a time and your code is way less buggy and you end up finishing projects faster because you dont have to waste time backtracking or doing things that are overly complex all at once

also there is value in the learning opportunity that should be accounted for in the billing. charging less isnt really a loss if you account for the knowledge gained after the experience.

1 Like

Thanks for the reply! Yeah I think one of the biggest things to do upfront is to talk to the client about the development of components and whether they are happy to use an off-the-shelf NPM package or similar. I’ve always thought I could try and do it myself first, but this seriously eats up time fast and when working on freelance projects I really need to be efficient.

Getting someone else onboard is always risky, because I feel like the reason I was hired in the first place was because I am the expert. I don’t like to take on a freelance / contract job where I’m out of my league - but then again it’s really hard to know until you dig into a codebase. So yeah, perhaps I should screen potential clients a bit more … ask them for a tour around the codebase and tech stack.

Yeah, it’s a massive learning curve and sometimes I feel like I rush things and don’t always “learn” properly. it’s not structured like in a classroom and a lot of it is under pressure, which means I just rush to get the job done without actually retaining what I am doing. I need to carve out education time as well. Something that is taken for granted when working at a large company! As a freelancer, you can’t really bill for your educational time.

Thanks so much for the response! I appreciate your input :slight_smile:

I agree, breaking things down into chunks is a much better way to go. But I hardly do it well. I always think I can just figure things out simply by coding, coding, coding … Thing is, I bet if I took a step back and spent an hour upfront just planning how things might / could look, then I probably would save a few hours later down the track. Sometimes you try to just figure it out and code along, but that actually get’s you deeper down a hole that is harder to get out of. You try to wrangle the code into shape and make it work, whereas if I planned ahead a bit more then I might be able to avoid it.

I’ll definitely think more about ‘project’ based billing too, because my hours are limited at about 40, so the only thing I can do is continually raise my hourly rate … but then eventually a ceiling will be hit and then what… Project based billing would work well there.

Thanks for the reply!

You can do a flat fee billing – charge XXXX for the whole project. Then it doesnt matter if it takes you 2 hours or 20 hours.


Are you billing hourly? Then bill at 50% (or some percentage) rate the stuff you feel you’re not well experienced with. So if you worked 4 hrs learning something, making mistakes and all that… just put 2 hours for that task on your invoice.

As a freelancer, you can’t really bill for your educational time.

It depends on what the client is asking from you. If you want to learn a new XYZ tech for your own sake, yeah don’t bill it. But if it’s related learning needed to complete the task at hand, my billing clock will still be running.