Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

So you take a contract where you have solid experience with 75% of the technology necessary. How do you handle your time to learn the other 25%?

Work it into the billing time? Expose the 25% in the contract as 'research'? Do the learning on my own time (not billed)? Not take the contract (too large of an unknown for me and the customer)?

On the extreme end of this, I keep hearing a story about Mark Cuban (Dallas billionaire who started and sold it to Yahoo!) when he was at Indiana University. Someone asked him if he could build a business app for them and he immediately said "Yes"... he had no idea how. So he bought a book, stayed up nights, studied and coded... He finished it (I'm sure it was ugly), it worked and he kept going.

I'm not suggesting doing contracts this way (the stress!), but there's a middle ground. What is it, and how would you (or would you?) bill for the unknown?

share|improve this question
up vote 24 down vote accepted

If I'm learning something that I'll take away with me (like say a mainstream new API, or a new feature of .NET or a language that's somewhat useful) then I don't bill, I consider that time time spent sharpening my saw, and it's not the client's fault I didn't know that stuff yet.

Now, if it's something obscure, I bill for it at my normal rate. Some examples: APIs and protocols which are not mainstream (industry specific, small 3rd party or just niche products); internal tools, configuration formats and services inside the client organization; a non-standard database schema, database query language or security model; etc.

I've never had any objections about the way I do this, and I'm very transparent about it in my proposals.

share|improve this answer
When you do bill for the obscure, do you break out an estimate of how long this learning will take up front? – codeyoung Sep 19 '10 at 19:58
I generally bill it under Learning and Development Environment Setup, with a bullet list underneath which includes a list of the things I'll be getting up to speed on during billable time. At first it's a bit tough to estimate, but like all estimation, with practice I've gotten quite good at figuring out how long it'll take me to learn something. Also included here is anything unusual I have to install or configure in my development environment. – Pax Noctis Sep 19 '10 at 20:04
You should let your client know when you will be charging for learning (and why). There are valid cases for doing so, but surprising your client is never effective. – Bruce Alderson Nov 21 '10 at 21:37

If I do something for a client that I wouldn't be doing soon for other reasons, the client pays for it.

I find it works best to value myself in a manner like other professionals do, such as doctors, lawyers, and accountants. Everybody who's not explicitly "pro bono" pays for time and effort - and the only charity programming I do is on open source projects.

Some potential clients balk at paying for things like travel time, learning time, etc. I then explain that I'm not going to take time a different client would pay me for, and give it to them for free. Their reaction is a good litmus test of whether they'll be reasonable in the long run.

Like other contracting headaches, this has become much easier since I gave up on fixed-price contracts and went to strictly hourly. My invoices include a day-by-day summary of work, and I'm not shy about remarking on research or learning. Also, I inform my clients beforehand of time-consuming research and get explicit approval before proceeding.

share|improve this answer

Regarding the Mark Cuban story, I refer you to the Cult of Done Manifesto, point 4: Pretending you know what you're doing is almost the same as knowing what you are doing, so just accept that you know what you're doing even if you don't and do it.

On the main question, when I was freelancing, I took the position that anything I do for one client is taking up time I could otherwise be using to do work for other clients, so everything was billable. Time spent learning new technologies or experimenting with new techniques was billed as "research", because that's what I was doing, and it was normally billed at the same rate as everything else (although I did make rare exceptions for small clients who wouldn't otherwise be able to afford it or for tech that I wanted a specific excuse to play with).

share|improve this answer
Agreed. Your client hires you with an understanding of what skills you bring to the table. If they want you to have skills over and above what you have to offer, then they need to invest in that. Conversely, I also spend a good deal of my own time building my own skills so that I'm more attractive to prospective (and current) clients. – Joel Brown Sep 20 '11 at 12:37

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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