Ask HN: Hourly freelancers, what do you do when you can't figure something out?
I'm stuck on a particularly irritating show-stopping bug (microchip's ADC functionality just giving 0 no matter what voltage is applied) and haven't been able to find a solution in days. I feel guilty continuing to charge for the many, many hours of investigation without producing anything....it's just making me feel incompetent and thieving.
Has this ever happened to you, and if so how did you handle it? Do you keep charging, or work for free, or just tell them "sorry, you have to hire someone else to complete this, I just don't know why this is happening" ?
72 comments
[ 3.0 ms ] story [ 168 ms ] threadI guess I can put up a freelancer-wanted ad and specify that we'd need to collaborate over skype. Basically I'd be hiring a consultant, I guess.
If I were you in this situation, I'd get on the phone with Microchip's closest field engineer, and maybe they can point you in the right direction, especially if this is a known issue. Perhaps they can connect you with engineering support farther up the chain.
In my experience, it's never a problem with the hardware itself, but you never know. I spent 3 weeks last summer debugging a problem with the MRF24WG0MA, and was almost convinced the chip was defective, until I realized that Harmony configured a few things incorrectly (the interrupt polarity being one of them). But yeah, for a show stopper issue that I'm not making any progress with, I would just get in contact with the manufacturer.
No, I've never even worked with a microchip at all before. I do front-end web development normally. I am actively combing through the ADC section repeatedly, yes, to no avail so far.
Feel free to email me if you want a second pair of eyes. sean at [myusername].com
If it's possible, it is indeed possible.
Regarding charging the client. I usually give an estimate prior to the work. If I see the estimate won't be enough I usually tell them that something isn't as expected and that I'll need manufacturer's support. If they are ok with this we keep going.
But you have to put your business hat on. Communicate with the client from a business level - you've hit a snag and it's taking slightly longer than expected. The client will then ask: "How long will it take?" Because you can't figure it out, you have no idea. But the client wants a timeframe answer. I give the client usually a range of time like "give a day or two to figure it out" or "I'll let you know later on today".
Do not tell the client to go hire someone else if you value your relationship with the client. Find that "someone else" and pay them to figure it out if you can. Do not dump the "you go find another solution" on the client.
I like to imagine there is a certain "buffer" of hours, let's say a day or two of work, which you can use/are reasonable to spend on fixing bugs and issues. If I fill this buffer, I stop charging particularly for the time used to fix that bug. Again, it depends on the client, situation and how well I'm treated.
There's a fine line between saying "I'm stuck" and saying "I'm incompetent" so think carefully about how you say it.
And you're not incompetent for getting stuck, remember that.
It's all about making it clear they're still getting work out of what they're paying. And documenting what you tried and what's not working for the future doesn't hurt either.
It also lets them know when to pull the plug if costs are getting unmanageable (imagine how horrified a client would be finding out after budgeting 100 hours for a project that hours 10-100 have been spent on the issue they expected to take hours 10-20)
One option is to timebox the investigation, like "I'll spend up to 10 hours trying to solve it myself, and then get back to you with more options"
I also give them the option of going fixed-fee for this part of the project, so I take the risk that I can't find a solution or it takes me a long time to find it.
This is absolutely normal, you are not a moron or incompetent for hitting this kind of wall. It can be hard to see past your own inner critic on this stuff ;)
Research: 40 hours.
I am not blessed with infinite time. I am not doing this for you because I'm a nice guy. I'm doing the work because you are paying me. That is the entire deal.
If you are on the fence watch this: https://creativemornings.com/talks/mike-monteiro--2/1
You are doing your client a huge disservice by hiding hours you actually worked, even if you don't charge for them.
In the end you have the best intentions for your client but can end up making it worse for yourself going forward. Quote down to the minute you've been working on a project, if the client is un-happy then that is something you can work with.
If the problem you're solving is more of a general dev task, which 95% of tasks are then it's like a lawyer that is merely processing immigration paperwork. You're paying for it to be done right. Billing for research when you're writing CRUD apps is a good example of this.
If you're a Robert Shapiro or some hotshot taking on special cases, and winning, then you can probably bill for research. Billing for research when you're John Carmack qualifies here.
So I think the lawyer comparison is 100%. You should bill for every second. Just make sure you're not on par with the lawyer equivalent of needing to do research when building a CRUD app and you won't have any problem.
I think a better approach would be to charge per day.
At a certain point, you need to a baseline competence or you shouldn't even be taking the job. If people balk at you for not being ready to even take on the basic job title, that shouldn't be a surprise.
I'm not saying if you come across a corner case that's special you shouldn't charge for it. It's like if you had an exceptional immigration case that required research, not just filing form 1072B.
It's something to keep in mind because you can lose your reputation or clients being silly with the "research 40 hours" act. Sometimes losing a little money today is a win longterm. A lawyer billing research for basic stuff or nonsense that no one else would (learning on the job, basically), would and should lose his clientele.
Lawyers track every second but they don't bill for every second. In fact, a lawyer might mark-down hours for the very same reason as the OP -- something has taken longer than it should.
As others have said, find someone who can get the answers you need, and pay them. Even if your margin is reduced a bit, you're still doing what the client wants and needs - solving their business problem.
There is no shame in asking for help. Should a similar situation present itself in the future, I'd recommend being quicker about asking for help, when you reach the point where you need it. :)
1. Appropriately communicate the snag to your client: you've run into an unorthodox problem, and will need a few days to investigate the problem, but you will keep them updated on progress.
2. If it turns out you missed something important and blew the time on a wild-goose chase, don't bill your client for that time. Sure, they might be none the wiser, but nothing builds relationship better than honesty: "I am not billing you for these 20 hours, because I spent them researching a problem and not delivering value."
For (2), clearly state that on your invoice.
I highly recommend if you haven't look up consultation rates for Doctors, Lawyers, and Barristers.
Many, many years ago, I worked for a company that did semi-automated audits of legal invoices for global-scale clients. The number of times we caught lawyers billing full-partner rates for paralegal work was not small.
We made a very good business by pointing out that $1000+ per hour was a tad expensive for photocopying documents.
For a large legal firm, you can get away with this. As an independent consultant, your reputation, and the future success of your business, is based on the value you deliver to your client.
If you had to spend 20+ hours tracking down a tough bug because the bug itself was that ugly, you bill for that time.
But, on the other hand, if you blew 20+ hours tracking down a typo in the code that you made, you write that time off and credit it to the client.
This is, in part, how you show your clients that you are worth $X000 per day: because they are only paying for the time that you spend generating value for them.
Let them know what's going on. Did they pick the microchip? Then you aren't incompetent, you're fixing their issues.
Keep them in the loop. I like akulbes advice of subcontracting that problem out.
A hangup isn't incompetence. Having trouble with obstacles doesn't mean you're incompetent. It means you're pushing yourself. If you never push yourself you don't get better
Some exceptions to this, for example if I am trying to unfuck something the client was responsible for, or they hired me specifically to solve this problem and I was clear up front that I would charge them for the time it took to figure out wtf was going on.
But let's say I decided to write a bit of Python code to solve a problem. And then I run into some obscure bug in one of the libraries I selected. If I can't figure that out quickly then I pause the project and switch to debugging the library and maybe even submitting a pull request, then I go back to the client project. Same if I need to learn some new library, or a new language, etc. If it's not the client's fault that I selected a library that had edge cases I wasn't aware of, why should they pay me to figure that out?
Isn't this kind of learning really a discovery process inherent to analysis and development?
To take an old anecdote of the engineer who charges $1 for making a chalk mark and $9999 for knowing where to make the mark - if you're going "off the clock" while you work out where to make the mark (i.e. debugging a library), are you then charging higher rates when you "know where to make the mark"?
When I hire a photographer to take pictures I don't expect to pay the photographer when their camera malfunctions and they are trying to format their SD card. Or if they just bought a new camera and haven't figured out how to adjust the white balance, etc. I don't see why hiring someone to solve problems with technology should be all that different.
I billed for figuring it out, I expect those I hire to bill for figuring it out.
See, I hired you for a solution. This includes "unfuck"ing, figuring, learning and stuff. But, like everyone else is saying: the soft skill of communication is critical. A surprise bill of +5k is different than a "this might cost an extra $5k".
Also, perhaps unique but with 20+ years in tech many times when my the hired gun comes in with a sticking point I can point to both business case for trying a different path and a technical path forward too.
For one thing, depending on the problem and the client, the client may very well know others in the industry (it is their industry, after all) who can provide some insight. Sure, I could potentially hire someone myself, and if the client doesn't know someone, then that may be an option, but the problem could literally be resolved by a couple 15 minute phone calls or emails.
Maybe the feature (or method, or software, or component) isn't that important. Maybe there are other approaches that aren't as complicated or better documented or are just merely more expensive. Maybe there's a support team or original developer / engineer who can be paid for assistance. Maybe we can kick the feature down the road and get everything else done while we decide whether the feature is necessary or while we find someone who can help. Maybe there's a training program somewhere in the world that can be visited or invited[1]. Or maybe the issue is core and we need outside help immediately. Figure out the best options available and how much they're likely to cost (temporally and monetarily), discuss them with the client, and then decide together.
The most important point, through and through: Research Options and Communicate. You're being paid for your expertise, which is to say for what you know and for what you're prepared to learn due to your experience (and schooling), and part of that expertise is the ability to say you need help.
It's far worse and terribly unprofessional to waste valuable time and money getting nowhere than risk losing the project.
1: Story time: A friend's company recently gave a full-time employee two weeks to try to figure out a CNC router she bought from China. The employee is on a salary and it's their slow-season, so she didn't lose too much in letting him try. Unfortunately he couldn't figure it out, and now she's hiring an expert from out of state to come spend four days training her team. That training cost half as much as the CNC, but once her team understands it, they're going to make many times that per month. If I spent that much time trying to figure out that CNC at my daily rate, I would have far surpassed the cost of the router and potential profits within the first couple days - which would have been incredibly wasteful for all concerned parties.
Communication is key, especially if there could potentially be delays. I'm up front with clients in that I will typically discuss this possibility before begin working together. My basic contract has some language in it as well that essentially is saying that they are responsible for any fees that may be incurred by sub-contractors at the same rate we have agreed on.
The gist of it (and it is clear to my clients from the start) is that I have the leeway to hire specialists as needed without their consent so long as I'm only billing out at the rate we have already agreed upon. If I'm unable to do this, then I will have a discussion with the client and they would need to sign a contract amendment at the agreed upon rate.
So in general I will hire the sub at a rate that is less than my rate and actually make some profit off of this. The sub contractors I work with know I do this and find this a fair arrangement as it is a sort of "finders fee". The reverse situation has happened with some of these exact same people where I was sub contracting to them on an area where I had more expertise.
Second, put a hard limit on the billable hours for such a thing. 30 hours, 40 hours, whatever you decide. Now you are in a better position to tell your clients their bill-estimate, but not a time estimate. If the problem is too hard, you could spend 100 hours in the week to solve it and only bill 40 hours - Might feel like being undervalued, but does not let the "guilt" build up. This also forces you to find workarounds to the problem because you are losing money now.
Third, hire somebody else at your own expense even if there are zero or slightly negative margins. I've done this in domains that I am not an expert. The thing is, you should be the go-to-guy(or go-to-company) for your client. However, if it's a frequent issue while working or don't love the challenge - you might consider moving out of such a domain.
Calling in another expert is not an admission of incompetence. It's just a matter of efficiency and expediency.
I'd not recommend doing what lawyers do. Best client-developer relationship is built-on trust. Follow your heart and you'll be rewarded over time.
- You must set the AD1PCFGH or ANSEL bits to enable ADC functionality on a pin.
- There's nothing stopping you from accidentally configuring the pin as a digital output (it might even be helpful for some applications to measure the actual output from a digital output). Check the value of the TRIS register for that pin (and ODC register if it has it)
- Often there is a "Configuring Analog Port" section in the I/O Port section of the chip's datasheet.
Good luck!
Continue billing, be transparent, tell them you are doing work on a substantial, non-trivial issue
If this happens often, then I would probably recommend serious focus to get up-to-speed with the level of work your employer seems to expect.