tags:

views:

1432

answers:

19

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?

+15  A: 

Isn't part of doing the work figuring out how to do it? If so, that answers your question.

TheTXI
+2  A: 

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.

unforgiven3
If your house has a new type of toilet that the plumber may not have any experience working with, the labor hours will increase as the plumber has to poke around trying to figure out how it works before he can fix the problem.
TheTXI
@TheTXI, I disagree. The plumber should have been trained to work with that new type of toilet. I am not paying an amatuer to work on my plumbing - there is a reason plumbers are licensed by US states. Same with software - I'm not paying someone who doesn't understand the technology they are working with.
unforgiven3
Look at it this way - would you hire a software engineer for your company if they didn't have an understanding of the technologies they would be working on? The question author states "learn the subject required to do the job". You should KNOW the subject if you expect to be viewed as a professional doing your job.
unforgiven3
Sure, there might be little things here and there you need to learn, but the way the question author stated the question, he has a lot to learn to work effectively. It's not fair to make your customer pay for that when they could get the same work from someone who is qualified to do it.
unforgiven3
Plumbers are licensed, but that does not guarantee them to be knowledgeable of every make and model (and just from my own experience dealing with a new home right now) they are definitely not all made the same. In the scenario presented above, the OP has experience with DNN, but not as much experience with certain specific areas. I see no problem with charging time against figuring out how to do it as long as it is not exorbitant.
TheTXI
I don't think this i a good analogy, as the technical changes in toilets are not as fast as in software development...
fretje
@fretje, it's a perfectly fair analogy. I would only pay someone to write me software if I was sure they knew what they were doing. Same with someone working on my house.
unforgiven3
Then it should be your responsibility to make sure they know what they are doing before you hire them. This obviously does not apply to the case presented above because the client didn't properly check out the credentials of the freelancer.
TheTXI
unforgiven, there's a difference between TRAINING and ABILITY. I would absolutely hire an intelligent person with a CS degree from Carnegie Mellon to write C# even if they had never even seen a single line of C#. I would consider them a stronger candidate than someone who *only* knows C#. You can have no clue how to install a given style of toilet and *still* be the better candidate for the job due to overall ability and intelligence.
dss539
@unforgiven, So you NEVER EVER *charge* for research or education?? Sorry but I don't think CS is a sector in which this is possible...
fretje
@TheTXI - yes, it is your responsibility in this case. But the freelancer has a responsibility to be honest and not take advantage of a client who may not understand what is necessary to do the job. Could you look yourself in the mirror after knowingly charging a person so that you could learn to do the job they asked you to do when they weren't informed beforehand that they would be charged for it? I couldn't.
unforgiven3
@unforgiven, I have another analogy: if you're an employer then you don't stop paying your employees when they are on a training or a course, do you?
fretje
@dss539, oh boy, that's a huge, huge mistake. I would NEVER hire someone, even with a CS degree from a prestigous school, to write C# if they had never seen a single line of C#. There is more to C# than just the language. You need a deep understanding of .NET to be an effective C# programmer. If you've never seen a line of C#, I *seriously* doubt that you will be effective.
unforgiven3
@fretje, sure, you can charge for research or education, but be upfront and honest about it. In this case, the freelancer should communicate to the client beforehand and then let the client decide - *then* it is ethical. Just make sure all parties involved are aware.
unforgiven3
@unforgiven, ok that is something i can agree with :)
fretje
A better analogy is a lawyer who is familiar with legal practice in general. Nevertheless, you can safely bet he'd charge you for time he (or his staff) spends researching precedents and statutes relevant to your specific case.
steamer25
@unforgiven3 - I made sure that I indicated the CMU guy was *intelligent* as well. ;) Intelligence and fundamental comp sci/software eng concepts trump narrow knowledge of a single language/framework. Unless you're hiring the guy on contract to only work like one week, you're better off with the smart developer.
dss539
@dss539 - it doesn't matter. I don't care how "intelligent" the guy is. If he doesn't know the language, I won't hire him. Period. And you'll find 99.9% of hiring managers would do the same as me.
unforgiven3
+15  A: 

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.
Peter
Hopefully, every time you develop a new solution you will learn something that you can use in the future. Performing knowledge-based work is nearly always a learning experience. Should you reduce the cost to the customer because you discovered a smarter way to automate your unit tests? I would say no. Full price all the way. ;)
dss539
Not necessarilly, for example a company i worked for had a propriatary low level mechanism for messaging protocols, I learnt how it works but in all honesty I wouldn't use the knowledge again I'd use a higher level framework such as wcf. Admittedly the knowledge of do i roll my own messaging or use a framework is re-usable but really I could have given that answer before learning that framework.
Peter
How such a thing is handled at a company you work for isn't necessarily how one should handle it as a freelancer/ contractor where your value is in what you know and what you can accomplish.
Tom
Tom I agree, the point I was trying to make was that there is some knowledge which although it takes a time to learn, it doesn't always mean you'll re-apply it further down the line in your career.
Peter
+8  A: 

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.

S.Lott
I tend not to charge for my time researching something, unless it is something I won't be able to use elsewhere (like the best way to write a view on Visual FoxPro :)
James Black
Or to write "FoxPro" code in general ;)
Matthew Whited
+32  A: 

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.

Greg Beech
Totally agree, and you can charge additionally if you have to learn something very specific or an extreme edge case, such as linking two systems that aren't normally closely related. Either way, you should be upfront about the time you're charging that falls under "learning".
Jon Smock
+7  A: 

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.

fretje
I'll balance it out with an upvote. ;)
dss539
+4  A: 

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.

Mitchel Sellers
+1  A: 

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.

Kevin Loney
+3  A: 

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.

blowdart
+6  A: 

My recommendation is:

  1. Always make it clear up front what you know and what you have to research.
  2. 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. :)

jeffamaphone
+1  A: 

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.

cwash
+1  A: 

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.

Jeffrey Hines
+4  A: 

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?

Simon
tha fact is that we always keep learning something.. even the smallest thing.. always there is something else to learn.. or different and better way to do it.now.. the problem is:this thing that i'm learning will be usefull for next projects? some time it does.. sometime it doesn´t.. but to be honest.. if it takes you more than two hours... 1- you accepted a project that you don´t have the skills to do it.. (then you shouldn´t charge for that time) or... 2- it is an specific piece of code that you won´t use it anymore... and you should charge that time.
Andy
+1  A: 

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.

David Thornley
+4  A: 

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.

Andy
+2  A: 

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.

Adam McKee
+1  A: 

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.

peejaybee
+2  A: 

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.

Tom
+2  A: 

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.