An acquaintance wishes to contract me for a small embedded programming project. I have not done embedded programming in many, many years.
He had, naturally, asked me for a cost estimate. This field being kind of foreign to me (these days), I said I could not give him a reliable estimate.
He said he would feel much easier if I did not bill him for my learning curve. I said this very rarely happens in the industry, that the learning curve is a very large part of our work, something client pays for. He very reluctantly agreed, but I could see he could change his mind any moment - and this little project is fun and I could not resist it. So I said, OK, you don't pay for my learning curve then, and he beamed and said he is a very fair person and will compensate me fairly. (I believe that, but what is fair to a non-programmer? Don't know!)
Looking from his standpoint, I understand where he is coming from. He knows next to nothing about me; he probably can't grind me with a good tech screening, so for all he knows, I could be clueless and bomb the project completely; I could end up costing him an unknown amount for an end result of uncertain value, and would not give him not only a promise, but even an estimate. That can be unnerving. BTDT with doctors, lawyers and such. Real hit or miss.
So it's been 9 days since, I've been programming obsessively around the clock, still have not given him an estimate (perhaps this is my main mistake right here, but I can't give an honest estimate of what I don't know!) and I realized that my actual work, not counting learning, is so tiny that, knowing what I know now, I could have done it in an hour. Now what? Bill him for an hour? Of course not!
Have not given him the code yet, either; intend to keep it this way until we come to an agreement.
The guy is a very nice guy, and we both intend to resolve this fairly; but our expectations at this point are so vague, I fear the possibility of a major mutual disappointment.
We are on a handshake agreement at this point. No papers signed, not even an NDA yet, even though I know all his IP, and he cares about his IP a lot. So yes, I believe he trusts me. But from the past experience working on a handshake with a non-programmer, this trust could evaporate instantly should any misundersatanding arise. I don't blame him: he is risking too much.
The thing is, what constitutes "learning" is open to interpretation. Just getting back to speed with embedded systems? Learning this particular microcontroller? Learning this particular protocol? Is software design "learning"? We have not discussed that, and it's widely open to interpretation.
I suppose I could split my learning time into non-billable (something an embedded programmer would expected to know) and billable (esoteric things that only a small minority of people know). But this is vague.
What should I do? I don't have much experience working for small clients.
Edit Some people felt it's unclear what I am asking. Sorry. I am asking how to
- get paid for my work
- without alienating the customer
- by communicating to him my POV on what's fair and
- building consensus while
- meeting his needs and
- making him feel secure his needs will be met, at this early stage.