To be more specific, I am working on a new DotNetNuke (DNN) portal for my client that requires custom module & skin development. Although I have previous DNN experience, I did not have custom modules and custom skin development experience. I had spend a few hours learning how to develop those modules &skins. Is it ethical to charge the client for the time for learning the subject required to do the job or or should I just charge the client for the hours it took me to the job after I learned how to do the work. This is my first time as a freelance developer,I am curious to know what other free lance developers do in such a situation?
views:
1432answers:
19As a freelancer, should I charge my client for the time to research & learn a subject or technology?
Isn't part of doing the work figuring out how to do it? If so, that answers your question.
No. It is not ethical at all. Would you pay a plumber or an electrician to learn how to do his job?
Edit: I feel it is only ethical if all parties are aware beforehand and know exactly what they are paying for. My qualm with the way the question author phrased his question was that it seemed the client would be presented a bill after the fact without knowing they would be charged for what is essentially training. That's all.
Personnally I would consider it this way:
- If the knowledge gained could be re-applied on future applications then don't charge as the money you'll gain from the ability is the payment.
Or :
- If the knowledge is so specific that it won't gain you employment or couldn't be re-applied in the future then charge.
Or:
- Charge at a 1/2 rate for learning and be up front about it with the client.
When you're done, you take your education and go.
Your education is not a tangible asset of your customer. Something else (a web site) is a tangible asset that you leave behind.
You can charge for the asset you created. You can't easily charge for something they don't get to keep.
How will their auditors feel when they look at your bill? $X for the web site. $Y for what?
Your experience is the basis for the rates you charge. The fact that you're charging money to perform the service is an implicit claim that you're qualified -- i.e., you have the necessary education. If you don't, you make the investment in yourself; you then leverage this investment to charge your customers for additional services.
I think it somewhat depends on how you were contracted to do the job.
If you were contracted on the basis of being a DNN expert or experienced developer, then the client probably is paying you on the basis that you have the required skills, so it wouldn't be ethical to charge for learning them.
On the other hand, if you were contracted on the basis that you were a good developer with some prior experience, but who would have to learn additional things to complete the task, then I would say it's perfectly ethical to charge for it.
Even if it isn't stated anywhere formally, you probably have a gut feeling as to which one you fall into.
Yes! You don't have to charge them every hour you spend on it, but you should not do it for free as well!
Important! Always make sure to inform the client upfront about it.
The way I see it in your case it is a very genetic set of tools, DotNetNuke is simply a framework on top of ASP.NET. If the person coming to you knows that you are NOT experienced with DotNetNuke, talk with them about it and see what they say. But if you are marketing yourself as a freelancer that does DotNetNuke work, no, I do not see it as ethical to be charging them for this on the backend.
The only time I charge clients for education type items would be for new technologies that they want me to use, and that I am honest and upfront with them. Something like "No I have not worked with ___ before, but I can sure do it, but this will most likely increase costs by __ hours for me to get up to speed" I put it to them exactly like that, and as long as they are ok with it, I'm ok with it.
Unfortunately I don't think there is any straight forward answer to this question. On one hand as software developers we are in an industry where technology is constantly changing and we need to keep current, this is not always something that can be done feasibly on our own time. I think part of this falls into the category of research and development which is perfectly acceptable to charge for (from what you've mention in your article it sounds like this would fall into the research category). On the other hand would you hire a c/c++ developer expecting them to know c/c++ and then end up paying them to learn the language?
As an example the Canadian government offers a Scientific Research and Experimental Development incentive program where the company gets tax credits based on what they have learned in the process of working on a product. I would have a hard time justifying not charging for what I've learned in a situation like that.
I feel that if someone is making a profit from the work you are doing then it is completely acceptable to expect some form of remuneration.
If you really aren't sure then speak with your employer and find out what they are comfortable paying for. I've worked for employers that feel that anything you learn or do on company time (even if it's tinkering on the side for something related to the project) is worth paying for. There are other employers who fall on the exact opposite end of the spectrum and there are plenty of others that fall everywhere in between.
It depends.
Part of what I'm doing right now is working with something fresh out of a development lab. No-one outside of the lab has experience with those bits, but I have experience of the previous versions and I know the subject matter. So for this the client is happy to pay for my learning time (it helps I get on well with them) because (a) they can't do the work themselves (the lab is in a different country), (b) the dev team get very detailed feedback because I'm the only person outside their company using it in the real world and (c) there's only a couple of people outside the company who look at this stuff and I'm one of them, so it's a captive market.
However if I applied for something more generic that I haven't looked at in any great detail, say the ASP.NET MVC bits then no, I wouldn't charge, as it will be applicable to other potential clients (and heck I'd look at it at some point anyway).
However even with the captive market aspect the client and I set some time limits on the learning curve. If it takes more time I swallow it, and I spend the evenings on it as well. Normally it's a couple of days, the most it's been is a week, as part of a 3 month gig.
My recommendation is:
- Always make it clear up front what you know and what you have to research.
- Always make it clear up front what you will bill for and what you will not bill for. There are a few different ways to approach this. You may agree to bill for a set number of hours of learning and if it takes you longer that's on you. You may agree to bill at a reduced rate. You may agree to bill at your full rate with an estimate of how long you'll need to learn, but they still pay for every hour if it takes longer.
The important thing is to make sure you don't misrepresent yourself and your abilities, and your customer is clear on how they are going to be billed and they agree to it. Get it written down and keep track in a day planner exactly what you spend every hour doing.
And round up to the nearest hour. :)
Yes - but you need to relate your work to solving a business problem.
More than anything freelancing is service based work; this is why you bill time and materials and not a fixed-bid. Rarely is successful software developed in fixed-bid fashion. Things change quickly, and there really is little reason to "ship" software anymore when you can deploy it constantly. You should talk about this when negotiating a contract.
If you look at things this way, it becomes apparent that it's extremely important to deliver in small increments and get feedback on what you're doing. This way you can also show how your learning on a subject was a baby-step toward delivering and doing the work.
If you do not record or audit this kind of information, you may find yourself in a difficult position where you have to sacrifice some work that was legitimate to bill. Best to come up with a process that bakes in the capture of this information, like TDD or BDD.
If you are upfront with the client about your need to learn the technology and they are willing to pay you to learn it then by all means charge them. If they are expecting you to be an expert on the technology then don't charge them.
If it was me I'd just factor a learning element (extra 10%, 20% or whatever) into my estimate and absorb any extra time without recharging.
After all us developers want to learn don't we?
How did you present yourself to the client? What is the client's understanding?
If you sold yourself to the client as an expert in something you don't really know, then it's your job to train yourself and not charge the client. If you warned the client ahead of time that you'd be charging to learn, then go ahead.
The client expects to pay a reasonable amount of money to get a satisfactory system on a reasonable schedule. You shouldn't violate these expectations. There are several reasons.
First, you have a moral obligation to do what you said you'd do, without unnecessary nasty surprises.
Second, you're a freelancer. If your client believes you're cheating on the bill or overcharging, the client might stiff you, and even if you win you don't want to go to court to collect your pay.
Third, if you leave a trail of angry clients behind, it'll catch up with you sometime.
well.. it all depends.
if your client asked you for an specific thing.. and you said "yes sir.. i can do it".. but you really don´t.. then you shouldn´t.
but if the client changes something while you are coding.. then you MUST.
example:
right now i'm building a website with flv streaming.. when the client asked me.. i said "yes.. i made it before.. no problem".. the fact is that i MADE it before!
but then he changed some minimal parameters.. he didn´t want to use http streaming.. and moved to rtmp streaming.. so i have to learn the technology.. i need to build the player.. i need to ask on stackoverflow for help.. so it is a waste of time because the client.
hope you find my words usefull.
It's all about managing expectations. Be up-front, clear, and honest about what you expect to do, and how long you think it will take to complete it (learning curve included).
I've always billed my clients for ramp-up time, seeing how almost every job I do is an entirely new experience once you consider the complexity and constraints of their production environment. Most people are willing to pay for a learning curve as long as they know exactly what they are paying for.
In your specific situation, I personally would not charge research time to the client. My rationale is that I would be learning a generally applicable skill, rather than an esoteric one applicable only to this project.
As a fellow freelancer, this is something I struggle with as well. The answer does depend on how you wound up with the contract. As suggested above, if you got it by saying you already knew DNN, that's an easy answer, No.
The thing I'm trying to re-learn is to not to always price jobs as (time I spent x hourly rate). The last place I worked did this for years and it made projects tougher to work on because once you shot the estimate, every hour spent on the job was painful. And over-shooting estimates happens a lot when project managers aren't good at holding clients to a defined spec. We finally changed to value pricing, where you still estimate things internally, but price jobs by what you think they're worth to the client. That fires a bunch of people up with moral issues, especially when you're reselling something you previously built, but if a client is happy at the end of the project, that's what counts, not the series of inputs that led to a certain price point.
Because pricing jobs on time spent or whatever other inputs you have to consider is even tougher as a freelancer. And once you're on the job, you have less leverage with the client about scope change (I'm trying to get better about everything being in writing), so your labored-over estimate winds up being an anchor and you spend every hour after you pass the estimate feeling like you're getting screwed and thinking of the other work that's piling up, which leads to lower-quality work for the client.
If you have a rough idea of how much time it will take you and that number is less than the price the client will pay to get a quality product, stop agonizing over the right thing to do and write that code for them.
I am actually in this situation right now, but on the other side of it. My contract developer just charged me a bunch of hours for researching/learning the facebook API. I was furious about this because this is obviously knowledge that will not be exclusive to my site. He can take this with him and continue making money with these new skills.
As a buyer/seller of web services, I think it is unacceptable to charge a client for hours you spend learning ESPECIALLY when that acquired knowledge can be used for future work. If you apply these types of situations to any other job, the answer is clear. If a mechanic didn't know how to do an oil change and had to take a course on it, would you pay him the extra money to account for the cost of his class? HELL NO!
If you do not already have the skills that the job required, do not take the job! Otherwise, do what you have to do to get the job done.