A little bit about me. I've never worked in a company and I very recently started freelancing and got my first client. I have about 5 years of solid experience in web development and my priorities are quality, accessibility and following conventions.

The obvious answer here is that you should turn on the tracking software once you start working for your client's project and stop it once you... stop. However, I have a hard time identifying what exactly is considered project work.

Why time bothers me

I've set my hourly rate and me and my client have agreed on a certain amount of hours for my work. I pretty much doubled the time I initially thought it would take me, because I've never set times for myself before. Besides, he gave me examples of what I'll be doing, not the actual thing, not a finished design.

I don't want to work over that set time because we agreed on an X amount of hours, meaning we both expect to pay/get paid a set amount of money. Clocking in more time seems unfair and unproffesional to me.

What I can't figure out

I will now give examples of things that I'm not sure were project work.

Researching and learning how to use new tools. As I previously said, I value quality and I want to implement the best solution, not the one most comfortable for me. Researching - yes, I think finding the most appropriate tool for that project's problem is work on that project. However, if the developer is not familiar with that tool? I, as a developer, am expected to know how to "develop", which includes using various frameworks and tools. Learning to use such seems like a personal endeavor. Even though it's in that project's interest, the client pays for getting work done, not improving my skillset. I mean, he could have just hired someone who already knows how to use that specific tool, instead of paying someone to learn that?

Technical difficulties. Today, I spent 6 hours figuring out why I couldn't establish an SFTP connection with the server host of my client. I tracked 1 hour. Then, I continued working really hard on trying to fix the issue. Computer and router restarts, fiddling with settings, pinging, tracerouting, researching, trying different FTP Clients, posting on Super User... Turned out my IP was banned from the hosting platform for some reason. My client whitelisted it and everything was fine. However, I don't blame him, he didn't know I was banned, and neither did I. I feel like the platform should have put some kind of warning for IP bans in their Access Detail page... I added another 3 hours as offline work and left 2 untracked.


I haven't even started working on the actual project, I'm still waiting for the designer. Yet, 7 out of the 10 hours are already in! Those hours were spent doing things I wouldn't have been doing if I didn't take the project. From my perspective, it's project work. From my client's perspective, it appears the project hasn't progressed. It's worth noting that he didn't complain about anything at all. He's cool.

What worries me is that my client would pay for time spent:

  • at zero percent progress
  • resolving issues we both had no control over

Is this fair?


I'm going to start by addressing your question directly: bill by productive hours.

For example:

  • Productive: Time researching and collecting design resources or plug-ins for that specific project.

  • NOT Productive: Time learning a skill that could be applied to many projects (a new toolkit, perhaps).

  • Productive: Setting up a server or configuring settings on a server.

  • NOT Productive: Learning to use their existing server or platform.

(Not to say of course that learning isn't productive. When I say productive, I mean actively producing milestones.)

Now as I understand, you wasted a lot of your time trying to figure out your client's system. I would consider that non-billable, as you're not doing the work you're contracted to do and you're not actively progressing towards a milestone.

However, I'd like to address the server issue specifically because that one seems a lot tougher than just "did I provide value to the client or no?"

You wasted time that could have been spent doing billable tasks for someone else with little to no benefit to you (it's not like you were learning in that time). What you gave them was free tech support, and free tech support is a very dangerous path to start down. If it happens again in the future, I recommend one of two things:

  • Don't continue to try and fail if the responsibility is not yours. If you can't connect to the client's server and you are not responsible for maintaining the client's server, let them know and let the person responsible figure it out.

  • If the client doesn't have someone who handles their server, charge for tech support hours, perhaps at a lower rate. Make sure to let the client know before you start and add the agreement into your contract to ensure you're still getting paid.

Just always watch out for yourself and try to avoid giving out free hours whenever possible.


This is a great question, an issue I believe many freelancers come across at the beginning. I think you should split the question:

A. How can I correctly predict the amount of time I will spend for the client ?

B. How can I get the client to agree to pay for the time I'm gonna spend ?

C. Is it fair I'm gonna spend my time on issues other the specific work for the client and possibly won't get compensated for it ?

  1. The problem will partially solve itself once you gather more experience handling such issues as it will take you less time to handle and you will take such issues into account when you predict the amount of time it will take you. A nice tip is to double (or even triple) the hours you initially predict as there will always be some surprises

  2. When the client approaches you with a project you should create some sort of technical specs for the project or at least a list, specifying all the elements you will handle for the client. Afterwards you should make it as detailed as possible (don't worry - it will go faster once you get the hang of it) and once each element is detailed enough it should be easier to predict the time for each element. You don't have to show the complete detailed list to the client but I find that showing at least bullet points allows the client to remember extra issues he forgot to mention, both of you will know what you've signed up to do and as a bonus you will be able to explain why it would take the time you're asking to pay for. As a simple example - if the client orders a login form then the list could be:

    • Creating a short list of requirements inc. the look and feel of the form
    • Creating the front side of the form
      • Some work in Photoshop to slice the designed form from the PSD the client provided
      • HTML code
      • JS code
      • CSS
    • Creating the server side of the form
      • Data validation according to predefined rules
      • Data handling - saving in DB and/or sending to client's email
    • After the coding of the form is done
      • Uploading the files to the server
      • Implementing the form in the client's existing website
      • Checking the form data is properly validated, saved and emailed
      • Providing the client with 1 hour of support over the phone

If you would create such list it would be much easier to predict the amount of work - you won't have to think about the whole project but of each separate element/point It would also remind you of the possible issues you could come across As a bonus the client would know exactly what he's getting and for some problematic clients the list would prevent them from demanding extra work that supposedly had to be done in the same project and if some extra issues arise, that weren't mentioned earlier then the client should be billed for them but you should always tell the client in advance that if for example you have to upload the files for the client, instead of just zipping and emailing the files to him, then he must provide the correct account credentials and if there would be a problem with the account then he will decide whether he wants to pay you for handling the issue or he wants to call his hosting company and get their support to handle it...

  1. Prepare a list of things you're going to have to do for the client in addition to the project - i.e. if you're creating a template sometimes you have to upload it to the server and set it up for the client - it means extra work time and you should remember to bill for that. Same goes for extra consulting time over phone or email. After a year or two you will have all such issues on your mind and you will remember to bill the client for them. You can also tell the client that

  2. When you take on a project that includes some new technology/platform that you're not yet familiar with, you should take that into account - I belive that you shouldn't bill the client if you spend extra hours gaining new knowledge, even if it required for the client's project, unless the knowledge is client specific. For example if you want to take on web development projects using PHP & MySQL the client shouldn't pay for you to learn how to write a MySQL query or how to install a template in Wordpress but he should pay if he wants you to support/modify/patch his existing project written in PHP using some in-house libraries of some small software company

  3. Regarding fairness and to the point - if you spent the time for the project and handling client's technical issues then it is not zero percent progress - the progress should include the preparation steps as well. And if you spent the time resolving issues both of you had no control over then you should explain this to the client and he should understand that you've spent the time for him and you should get paid. Optimally all such issues would be in the contract and the client would be notified of the issue before you actually spend too much time working on it. If you want it to be completely fair then you can talk to the client, explain the issues and suggest to bill him by a lower rate for those specific issues, as @a_mediocre_riot suggested


You can get killed by this.

I recommend phases

Functional requirements
x weeks

Proof of concept
x - y weeks

Final product
x - y weeks

Acceptance testing
x week
this is where they will kill you and try to sneak stuff in - do not let it be a dev cycle

Roll out
by the hour

by the hour

At the end of each phase they will get a hard number for the next phase


Everyone differs. My rule of thumb is that anything I do in terms of teaching myself something that has resale value I don't charge for, because that is a reusable skill. If it's a one off piece of knowledge I needed to research for this project and cannot reuse elsewhere, I'll bill for.

The actual implementation of what I've taught myself, design and anything else that is crucial for the project (including transport costs if any) I bill for.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.