Ethics for Freelance Programmers
mikecavaliere.com
mikecavaliere.com
https://news.ycombinator.com/item?id=4101355
https://news.ycombinator.com/item?id=8706929
https://news.ycombinator.com/item?id=3420203
(and, like a hundred more).
I get a mail from a contractor about every other month telling me how much happier they are for having switched from hourly to daily. Daily should be your default.
(Advanced skill: daily->weekly).
Of course in those 20 days I also worked on other stuff, worked for other clients etc.
It would seem totally unfair to me to bill them 20 days instead, so how would you handle this?
Even when I only have a single client and do nothing else, it would seem unfair to count a full day if I worked longer or shorter that day. Unfair to me if I worked longer, unfair to them if I worked shorter.
Keep it simple. Write a proposal with an estimated number of days to completion and a total price tag for the whole engagement. This is not a fixed-price proposal, but it has the same look-and-feel as one. If you go over the number of days you estimated, you bill in additional day increments. If you go under by at least a whole day, you dock days.
It does not matter when on the calendar or the wall clock you get the work done.
This basic technique works just fine when juggling multiple clients. When you're managing multiple projects, don't deliberately bill people a full day for 2 hours of work (it is just fine to bill a whole day for 2 hours work if they're the only client you have during that day, and the project simply takes less than a day: you have a 1-day minimum), but don't obsess about tracking hours.
Real clients, the ones worth keeping, care first and foremost about determinism. They want to pay a predictable amount of money for something to get done in a predictable amount of time, and that's it. They do not care about you minimizing the number of hours you bill, unless you ask them to care --- and a great way to beg a client to care about minimizing billed hours is to bill hourly.
For me there are many aspects of a project/client I try to select for before the billing increment. I would not turn down a cool project that sounds great just because they do not agree to daily billing.
Changing the unit of time does not change this. You're just making it easier for yourself to justify charging a full day even if it took you 2 hours. But you could just as easily apply your methods using hours or half-days or weeks.
If you're working 2 hours and charging 8, you should simply raise your rates, and for the next project, give a more accurate time estimate.
The first couple years especially, freelancers should be doing this from project to project. It negates the "broken incentive system."
Regardless, maintaining an incentive to bill make- or fake-work is not the only reason to avoid hourly billing. I have something like a dozen more arguments in the links I posted, and elsewhere on the site.
If not, then why stop at hours? Why not bill by the minute or second?
The answer to why hours are superior to minutes is the same as why days are superior to hours. It's just a useful level of aggregation to mitigate tedium.
True in the micro; false in the macro. If I deliver under budget and on time, I get more work from that client. Keep doing that and they find you more work. You get to keep billing, perhaps for years.
More importantly, there are many kinds of clients for which billing daily makes more sense. These also happen to be a type of client you'd really want to have.
Basically any large enterprise company that is used to paying a monthly salary to programmers, wouldn't even care about these things.
I would usually tell clients "We bill X per hour, billed daily at 9 hours per day, which comes out to X per day" or something similar. I would actually quote the hourly rate because, at least in my market, this is the way everyone immediately judges your cost (and value). (This also depends on what exactly you're selling - for extremely high-end freelancing work, I'd probably quote the final price, since I'd rather de-emphasize price and emphasize deliverables, but for basic programming work you will be compared to other programmers).
I haven't done it a whole lot, but I have negotiated a few development contracts on the client side. The very last thing on my list was how the supplier was going to bill us. I had a budget I couldn't exceed and the primary thing on my mind is "can these guys do the job on time and to the quality we need?"
The last time I did this I went with the supplier who was 3x the cost of the low bidder because I was more confident that they could do it on time. I have no incentive to save money (it's already budgeted for) and a great deal of incentive to not look like a fuckup.
Those are the 3 points of negotiation. Or rather 2 points. If a client is asking you to compromise on quality to reduce cost or delivery date, walk away.
So 2 points of negotiation. How much it costs and when will it be delivered.
Whatever you decide on the costs, make sure you can 100% deliver on the date agreed to. If you're late by even a day, you will ruin the relationship. That isn't to say they won't work with you anymore, but the relationship will become more difficult. It's as if you lied to them, however unintentionally.
Always deliver on time.
As far as how you break it down and bill them ... they don't really care. I bill by the week, day, hour, and sometimes by project ... whichever suits me at the moment or whichever I feel suits the client best.
If technology is a barrier, I can almost guarantee they aren't happy about it either, and maybe they would like to have a conversation about the pain points of their outsourcing solutions. (Hint hint.)
I know per-project billing is fraught with its own issues, but I'm much more a fan of that vs. time-based billing. It may work out to cost the client more, but it removes that layer of distrust ("is my engineer taking longer to squeeze more money out of me?") and sets the incentive on the worker to get the job done as quickly as possible, since now taking longer becomes the disincentive.
I believe the only folks who should bill hourly are the ones who do jobs where performance of work duties is directly correlated to hours spent working -- i.e. where doing a job "faster" doesn't change the time required. Security guards, retail workers, etc.
I'm sure there are a ton of fallacies in the above arguments, so let's hear 'em...
I prefer time based billing, because I don't work 8 hour days like normal people. For this reason I also make sure I'm working on things that can be done in those timeslots, and I'm very, very conscious of the client's time.
I think either method is fine as long as you're comfortable with it, and you're on the same page as the client.
I know the next thing people will say is find better clients, but some people just have expertise in areas where the clients tend to be smaller and more cash-strapped. Thankfully the work is interesting.
Right now I give estimates, but still provide hourly billing as a safety net. Once I'm confident that my estimates are consistently accurate, I might move to project based billing, but it also feels a bit sleazy because what I would do at that point is just take ESTIMATE x SOME MULTIPLIER. In other words, project-based billing sometimes sounds like a hand-wavy way to charge the customer more without them being able to tell.
Anyone who is billing by the hour is doing themselves a disservice, especially if they're not including "time spent on the phone with the g/f" or "time going to the bathroom" (true story - I really used to take out time going to the bathroom! Seems hard to imagine looking back).
I could write a lot more about this, but tptacek has already said it all so much better in the past. I just wanted to chime in as another person who totally agrees, and that actually transitioned from not billing "daily" to billing "daily" (or weekly or monthly).
However, just today I did something that lasted around 3 hours. Probably closer to 2. It's a kind of work that happens somewhat regularly.
Charging a full day would be unviable. Way too expensive for the client. Perhaps charging half a day at a minimum? It almost never is just a single hour in reality. Advices are welcome.
1. Get better clients. Seriously. The competition for clients who won't waste time reviewing rounding-error invoice differences is not that fierce. Of the successful consultants, most suck!
2. Package your services for clients that want you for 2 hours a week in the form of a retainer. "You can get 2 billable hours from me on X days notice, but only if you buy a quarterly recurring contract from me; the hours in that contract are use-it-or-lose-it. Otherwise, every time I take a contract from you, I lose 6 otherwise billable hours I could earn from another client due to ramp-up and ramp-down."
I'm not making it up: I keep hearing from people who have made this minor change to the way they sell work, and all of them seem extremely happy about the difference it made. It's a little tough for me to evaluate hourly vs. daily objectively, because most of my consulting experience has been daily or weekly, but I'll add to that: daily billing worked pretty great for me too.
In my entire working life I have not once needed a time-tracking package. That alone should sell you!
It's not recurring enough (from single client) to justify a monthly fee. It's also an almost zero stress job, so it's hard for me to say no. Not the most stimulating work to be sure, but it sometimes leads to bigger, better projects.
But I agree that hourly charges are not a good dynamic for everyone involved.
http://www.kalzumeus.com/2011/10/28/dont-call-yourself-a-pro...
How much value does a few minutes/hours/days of your time create for them? That's the only question that matters.
If you can consistently create a lot of value, it doesn't matter how much time you need to invest, you deserve to be paid for not only the time you've put forth, but also the potential time that you might need to spend fixing stuff if something goes horribly wrong.
"Oh hey, I can't get MySQL to restart." This 2 minute fix just became a half hour of debugging. Maybe you've discovered that the RAM is bad and the HDD is on its way out, now you have to plan and execute a server migration with a minimal loss of business. How many hours do you think that will take? (If you say less than 2, you are a superman; please teach me your ways.)
Clients don't care about these details. All they want is for a business problem to be fixed in a predictable amount of time for a predictable rate. These details are your problem.
Charging an hourly rate makes it their problem.
Even though it might not seem intuitive, you're doing them a favor by charging a day-rate and exercising your discretion whether or not you even invoice them for a quick fix. You're the domain specialist.
Sure, sometimes an easy job becomes a nightmare like you described, but it's rare.
I fully admit that I'm terrible at estimating the value I generate. But I'm thinking of a more basic problem, that tptacek's comment succinctly described: an hourly rate makes you wanna take longer to complete a task which in turn makes your client doubt your capability/honesty. It's a bad dynamic that I'm willing to reconsider.
"Be honest about what you can and can’t do."
Yep. Got burned on this once in my short time freelancing. Got cocky and thought I could pull off implementing something in a technology I've never used under a fixed contract. Live and learn.
"Question whether you’re building the right thing – within reason."
I really appreciate this point. I deal with mostly non-technical clients who sometimes don't always know what they want. Being able to get to the core of what they're after and say no to things that would make me a lot of money but be useless to them is crucial.
I think in this instance, ethics and economic incentives align - your expertise is part of your value-prop to clients, and having a good grasp of your limits makes you substantially more valuable. You get things done on-time, with clear expectations set, and do a prompt and thorough job providing what you're being paid for.
Personally, as a natural optimist, one thing I need to be especially careful about is not saying "yeah that's doable!" and setting expectations too high - it can potentially lead to a messy situation. That said, one of my favorite parts of freelancing is that I get confronted with new, unique challenges that I've never dealt with before - there's a balance to be struck here.
With some cosmetic rephrasing most of it would apply to developers with regular jobs just the same. Only your customer becomes your employer.
Okay, we're not paid by the hour, but don't we still "owe it to the [employer] to not burn their money unnecessarily", and isn't it still true that "time on the phone with your girlfriend" isn't what one gets paid for? (I'm not saying anyone is supposed to, or capable of flinging code for 8 hours straight - obviously not, the boundary is a matter of common sense)
Not to mention honesty, doing a good job etc.
Highly recommended whether working for yourself or a client.
So I much prefer to bill per work/project basis as a whole.
One thing regarding ethics, sometimes a client will want to 'copy' a feature they saw on another website, including the visual feature as well. That makes me uncomfortable, I try to make variations of it, although I have never denied work for this reason. May be next time I will atleast object strongly when its a blatant copy.
Often a solution to a bug that I was working on the previous day will come to me during a morning shower, and I think it would be ridiculous to bill for those kind of events. That's why I tend towards the conclusion that the breaks and what would be considered "observable, verifiable" work tend to balance out.
My clients pay me by the day. You lost me already.
Maybe avoiding gender specific comment, should be part of your ethics as well?