Hacker News new | ask | show | jobs
by jasonkester 4314 days ago
I think you're going to have a hard time here trying to convince a developer community that a "refund" is something a client is entitled to in a work for hire situation.

You ask a developer to do work for you, they do the requested work, and you pay them. If you don't like the work, you end the relationship. But you still have to pay them for their time.

I don't envy the next few weeks for you guys, but you definitely brought it on yourself by stiffing a developer on an invoice. I suspect you'll come to regret having done that.

As an ironic way of reinforcing the message, you're probably going to employ a lawyer on a work for hire basis in the near future. He's not going to deliver a result that you like. Try asking him for a refund and see how that works for you.

Your best course of action is to pay the developer's invoice in full today. Then edit the above post into an apology.

8 comments

> I think you're going to have a hard time here trying to convince a developer community that a "refund" is something a client is entitled to in a work for hire situation.

Depends entirely on the contract. Many contracts include terms giving the client recourse in the case where unsatisfactory work product is delivered, especially if it's a pay-for-deliverable rather than pay-for-hours-worked contract. (But some don't, and some have more complex partial-payment or third-party mediation clauses.)

It does sound like regardless of the contract dispute over that payment, the original post's accusations about the code are still false, if the post here is not lying about what code they're using. That post claimed that Pigeon.ly is using stolen code to run their product, while Pigeon.ly claims they are not using that code in their product. Which would still leave a payment dispute but not a copyright issue.

True. It absolutely depends on the specific contract each of them signed. If the contract were to say "Not satisfied? Full refund!" or anything like that, they technically are not under contract to NOT use the code.

They would literally have legal basis, in that case, to run a startup from the very code they refused to pay for. Albeit unethical, it would be legal.

Either way, the contract would clear this up. It's still bad press. With $2M in funding, just pay the dev and move on with a stable image of doing the right thing even if it isn't legally required to do so.

I think the bigger issue is that Pigeon.ly is going to eventually want to hire developers. The kinds of developers who they are going to want to hire are the kinds of developers who will throughly Google any companies they consider working for. Based on the content and tone of this post, a very large percentage of qualified developers would turn and run the other way.
> That post claimed that Pigeon.ly is using stolen code to run their product, while Pigeon.ly claims they are not using the code in their product.

Does it really makes a difference if the code is currently running or not? Let's say, hypothetically, the code was not production ready but used in an alpha version to pitch an investor ?

It is impossible to prove one way or another, but I wonder, if you could sue someone, on the basis that it "could have been used".

It would make a pretty big difference to the legality of their product. If their product includes code they don't own the copyright to, that's a bigger problem than a payment dispute with a past contractor.
This is Frederick, I can speak to our specific case. The code the original poster provided to us was never used in investor presentations. We rebuilt the product from scratch almost a year before we had any real traction or investor meetings.
You've just asked for a colonoscopy.

Don't let the title of this link ("Discovering Python") fool you. It's about the sort of case you've set yourself up for by not paying this guy in full. https://www.youtube.com/watch?v=RZ4Sn-Y7AP8

...and that's just the court case.

I'd be really surprised if the due diligence requirements of your funding contracts won't also require a similar discovery process to prove that not even a single line of code or hint of design work can be traced back to the original developer.

Not paying this guy risks your losing what you're thinking of as "committed" funding due to the loopholes in your funding contracts that likely protect the funders by requiring you to expose your code and that of the original coder to the funders' technical experts at your expense (as a part of the contractually-required "due diligence"), delaying your actually receiving further funding for at least the duration of the discovery process, but possibly forever, if the funder judges there might be a risk.

It also doesn't help that you originally advertized this work as a job in California, complete with "join our team" language. https://docs.google.com/document/d/1NcKW-lnlOMSEzBEj7ywPF5nN.... Whatever contract language you are relying on to protect you in a labor contract dispute over monies owed for work performed is likely superseded by California labor law, something your funders are also likely aware of, and would likely consider a risk to their $$$.

Finally, don't you have enough stigma to deal with being a start-up (notoriously flaky), then adding the stigma of being an ex-con (notoriously untrustworthy), without adding the stigma of stiffing the coder you hired on contract (three strikes), practically cementing your start-up's status as among those most deserving to fail?

Depends what the contract is for. If it's for "programming", then you have to pay, no matter what program you receive. However, if it's for "complete and functional product", then unless they produce that, you don't need to pay. Like in a restaurant, if you order pizza, and get steak, why would you pay?
> If it's for "programming", then you have to pay, no matter what program you receive.

Even that would vary considerably depending on the exact contract terms – most of the pure-hourly contracts I've seen had some thought towards standards & quality, client acceptance, etc. Lawyers make a ton of money arguing over the finer points of contracts and given that both parties involved are discussing this in public I'd question whether they had a good lawyer writing the contract given that they appear not to have one now.

If you eat the steak you have to pay. Even "complete and functional product" is unlikely wording as very open to interpretation. Quite likely the contract is vague, people often do not lock these things down well at the start.
But if the steak comes, even if you say to a friend "this steak looks lovely" (eg using alpha for a product briefing with investors) and when you cut in to it it's raw or has a cyst or something then you send it back, you don't pay for it then. That's the implied contract at work.

What's the implied contract here? Well we shouldn't need to ask, there should be an actual contract to refer to.

They're claiming they didn't eat the steak but went and cooked a new pizza.
It's impossible to say without the specifics of the contract but there are some standard practices that can be assumed. If the contract is for a product, as opposed to time spent, for a product there are usually defined acceptance criteria. A large product will have milestones with their own deliverables and acceptance criteria. Once the customer accepts the deliverable it's considered done and the developer should be paid for that deliverable. If the customer later regrets that choice that's too bad. The customer can usually exit the contract at any point although the contract might specify a penalty for this.
Your metaphor does not work. In this case it's not about simply "not liking the result", it is about not producing functional work. If a lawyer does not perform their role competently you absolutely can get a "refund" [1].

There is way too little information in either of these posts for the community to make as definitive statements or recommend COAs as you have.

[1] http://www.calbar.ca.gov/Public/Pamphlets/ProblemwithaLawyer...

> I think you're going to have a hard time here trying to convince a developer community that a "refund" is something a client is entitled to in a work for hire situation.

Not true at all. I'm a freelance developer that would be ashamed of handing over poor quality code and I believe that if there are developers out there who do little in ensuring that their clients receive the best quality software that they're capable of producing and fixing bugs in products given to clients then they don't have the right to demand to be paid.

That being said, if the problems were due to miscommunication about requirements & scope and finding problems with the software as an excuse to demand a refund, then that's an entirely different issue.

"Poor quality code" is a matter of opinion. You can't decide not to pay someone because they've delivered what you consider poor quality code. The best defense from that is to track development (with milestone deliverables), and evaluate code quality (or pay someone to evaluate code quality) as you go along, so you can end the relationship early before you've wasted too much money.

Waiting until they're done and deciding that it's crap and refusing to pay in full is not the way to deal with bad developers.

True, but it's like lemon laws for cars. If your new car isn't reliable, you're entitled to a refund.

Yeah, there's no law that applies in this instance, but I do sympathize with the company if the code really was subpar. There are a lot of bad developers out there, and for someone who doesn't program it's very difficult to avoid them.

I also sympathize, but when you start employing people, a risk you take is that they're horrible at the job. A way of mitigating that risk is by being careful who you hire and monitoring their progress. If you're hiring a programmer, make sure somebody you trust knows something about programming and is available to you.

I'm into firing quickly, too. It's a kindness.

You don't hire someone to work the fryer at your McDonald's, and when they completely blow it and wreck your fryer completely, decide not to pay them for the day. Pay them, let them go. Reevaluate your hiring process.

I sympathize with people who make hiring mistakes — and that's pretty much everyone who's ever made a hiring decision — but they still have to pay the people they mistakenly hire for the work they did. It is both the default mode of the law in most places I know, and also just basic professional ethics.
Normally I'd agree with you but it sounds like this work-for-hire arrangement wasn't based on an hourly wage but rather payments for deliverables. If the software was as bad as described, no deliverables were met and the developer isn't owed a payment. Note that this assumes the contract specifies the specifications for what was deemed acceptable work.
The problem I have with that argument is that the original post said there were multiple payments that were all reversed later. If the code was so bad, why wasn't the developer terminated much earlier? Doesn't multiple payments normally imply that multiple milestones were hit (i.e. deliverables accepted)?
This could be an attempt to get a running proof of concept and then trying to minimize the cost of that proof of concept after the fact. It would be curious how much the investors knew about these events.
From the contractor point of view, dragging the corporation's name through the mud isn't going to serve any purpose and can be used against you in court. While I don't necessarily side with Pigeon.ly, and emotionally, I'm on-side with the developer for calling them out, doing so just started a smear campaign on both sides. This isn't cool. Smearing someone's name is bad behaviour all around. I don't care whether a client does it or a consultant.

Having been in this position myself and being completely blindsided by it, I can tell you first hand, it'll shake your confidence and then you go through the stages of grief - pretty much the same as when anyone betrays your trust. Lashing out, even though you're angry and this client may deserve to be called out doesn't help.

To start you can issue a formal letter to the company regarding the filing a DMCA takedown notice that you will file with their web host and Google for copyright infringement if they fail to pay for the code they're infringing upon. If they don't pay by the deadline you set, file the notices... or you could just go ahead and file the DMCA takedowns with their web host and Google. I don't think legally you're required to inform the company first (though, I would check that with a lawyer. I vaguely recall my lawyer saying that to be the case, but I can't say with 100% certainty), but if you want to be treated fairly in court, you have to act honourably out of court.

At that point of you notifying the company, they basically have 3 options:

- Take down the infringing code (even in a work for hire, as my lawyer explicitly told me, your code is still your code until it's paid for in full. That means that every piece of work you've completed since the cut off period for work completed on your previous invoice is still yours until it is included on your next invoice and that is paid in full.)

- Pay for the code you have written in full.

- Pay a lawyer to fight their case in court.

This is a game, plain and simple. The question is, who is the better player, you as the developer or the corporation. That depends entirely on your evidence/lawyer and who has the fewest scruples. Whoever's got the least scruples and the best lawyer wins. Their lawyer's job is in the first instance to keep this out of court. Outside of a courtroom, the company can bully you into accepting whatever terms they see fit, unsupervised by the court. In the second instance it's to twist whatever material they can lay their hands on to manipulate the judge into taking their side and giving you nothing - all for less than it would cost to pay whatever they can make you settle for. Your lawyer's job is to get the payment you deserve or get it in front of a judge to win more than the company would agree to pay outside of the court, plus your lawyer's fees.

If (like most of us) you have a conscience and spend your life worrying about whether you're really as good as you hope, chances are, the fight will take a huge toll on your confidence and your health. Even if you're right, can you handle the bully tactics that will be used to drag your name and reputation through the mud or will self doubt make you cave? Do you have the fortitude and the finances to stand against their lawyers to the end? Do you have the confidence that your lawyer can outmaneuver theirs in this case? At the end of the day, if it's cheaper to pay you off, they will do so; if it's cheaper to rewrite from scratch and cut you off they will do so; if they can make some money back by strong-arming you into paying back what they paid you, they'll try (usually though, this is just a tactic to make you back off so they don't have to pay their lawyers to fight you - because they don't even want to pay their lawyer.)

At the end of the day, it's about their bottom line, it's not personal, though it will feel very personal to you. You have to take the same stance as the corporation: Look at the bottom line, let's say you're still due $25,000, you've been paid $15,000. You stand to lose $15,000 plus court costs (and damages if they can prove it) if they win in court (i.e. if their lawyer is better than yours.) You stand to win $25,000 if you win. Out of that $25,000 you will have to pay your lawyer - which, if the case runs on could cost you as much as you're owed if not more. Is what you get after what you've paid your lawyer worth the time you lose working on some other project that is paying their bills? Probably not.

If you've got a case, file a DMCA takedown notice, if you don't, chances are you should just move on and chalk it up to lessons learned.

The best lessons I learned in this situation:

- First and foremost, have a lawyer, someone that knows corporate and intellectual property law. Someone you trust.

- Never sign anything until your lawyer has looked at it and made sure it's in your best interest to do so. A contract presented to you is a starting point of negotiation. Don't just blindly sign it assuming "it's just a standard developer contract". Any contract presented to you to sign is likely to be sided all in favour of the corporation. I've had contracts presented to me that by signing them, I'd be in breach of contract or NDAs for turning evidence over to my lawyer if that should be needed. So I reiterate - never sign anything until your lawyer has looked at it!

- Check your ego at the door. This isn't personal, it's a business relationship. Your quest to be the best and change the world for the better are your biggest strengths, but they can also be your biggest weaknesses. Don't let emotion and ego dictate your client interactions, they will be your quickest undoing.

- Never agree to anything that cannot be recorded. Every piece of communication regarding your work should be carried out in some form of recordable communication: Email, Skype chat, Lync chat, Text Message, record every phone call from your clients. Every scrap of supporting documentation you can find confirming your approach to your code should be kept to hand. Make sure all evidence the most credible it can be.

- Always use a form of source control that you have complete control over. When you pull down their original code base, check it into your local source control, unchanged. Doesn't matter if it compiles, doesn't matter if everything is there. Just check it in, in whatever state it's in. This is the starting point of your chain of evidence. If the shit hits the fan, you have a point of reference from where this whole relationship started. If you use centralized source control and they lock you out, you've lost your chain of evidence, but their lawyer has theirs. They could tamper with it to favour their story and you're powerless to do anything about it.

- Keep a log of your relationship with the client, things like what happened today, what frustrations you faced, what went wrong, what could be improved upon tomorrow. Is policy and procedure keeping you from doing your work? Have you been provided the tools required to do your job? Are you actively prevented from doing your job because of X, Y or Z?

- Every commit should have an accurate commit note. This isn't just some bullshit hoop to jump through. The notes are important. This is an evidence log of the work you've completed, it is a description of why that commit exists. It contains a timestamp, fingerprint and your username proving that you did the work and when you did the work. If nothing else, your daily check ins can be used as proof that you were working on any given day.

- Every check-in should be married with a clearly and unambiguously written task or bug to be completed.

- Make sure code review happens, someone else needs to check your code. This again isn't just some bullshit big brother tactic. This is you covering your ass. This is your ability to say, this code was tested, checked and validated before it was checked in. It was the right approach, it was good code.

- Write unit tests, make sure every unit test passes before check-in.

- Never check in broken code. If push comes to shove, you want to say that their production code was working at the point of your final check in (which was code reviewed) and all unit tests were passing. You have proof of this because their production application has the same version stamp as the check-in you wrote. You can demonstrate the same from the final check in from your local source control.

- Never say anything in writing that could later be used as evidence against you. Any time you sit down in front of an email to a client, before you hit send ask yourself how this could be construed in court against me if it ends up there. It can and it will end up in court if it suits your client's purpose.

- Never take shortcuts. Do it right. If someone is pressuring you to do it wrong, get it in writing. Support their wishes, be a team player, but make your objections in writing clear "I don't like this approach because of X, Y and Z, but if that's what you want, under duress, I will see that it's done exactly as you ask." You want to be able to say in court, "They asked for this in writing (here is the email) and I clearly made my objections in writing (here is that email) at the time this was asked of me."

- Never get so far ahead of your client in terms of work vs. what they owe you that you can't afford to live if they refuse to pay for work not yet paid for. If you can't afford not to get paid under the terms set out, then don't agree to those terms. If for instance you're paid on 30 day terms on each calendar month - that means that by the time you get your first payment, you'll have completed 2 months work. Can you afford not to get paid for 2 months work? If not, don't agree to those terms. Always make sure you have enough of a buffer that if the client refuses to pay, you've got enough to cover, plus enough to cover you while you find your next client.

- If you can put yourself in the right situation (though it's hard in the contractor world), never hand over code until it's been paid for. Take it to the client, demo, get sign off that it's complete but don't hand off until you have payment.

- Never think "this won't happen to me." It can happen to you. I'm told I was lucky to make it through the 20 years I did without it happening. It's commonplace in this industry, chances are, it's just a matter of time before it happens to you, if not, you're lucky. Just be the best you can be, act honourably and cover your ass. Hopefully if it does happen, all you'll lose is a bit of money.

Terrible, awful legal pseudo-advice about DMCA and "ownership." Do not fall for this, devs.

There is a very strong chance that a payment dispute will legally be viewed as just that -- a matter to be solved by negotiation and perhaps a monetary judgment. The rest of the contract will all still stand, likely including any copyright assignment, work for hire, etc.

Trying to DMCA someone who hasn't paid an invoice is a chump move that has a very real chance of winding you up with a bad faith or tortious interference response, or worse.

A contract dev doing 25k worth of work should generally not be lawyering up, unless there's a major non cash component (eg equity in the project). If you don't trust the counterparts keep them on a tight leash for invoicing meaning get paid often and don't build up a receivable. But spending a thousand bucks on a lawyer and trying to get a company who probably actually does have "standard" paper and very good reason to want to stick with it, to customize their docs for your tiny one off deal is a rookie move and a waste of time and dough.

The stuff you say about keeping an evidence chain of work and commits etc... That's spot on. But the reason it's spot on is that it's just good business.

This was advice given to me by a contract and intellectual property lawyer. Take it as you will.

I've been in this business 25 years and I've been around the block many times with many clients. One thing I've learned over the years is that there is no standard paper. All contracts are written to protect the person or entity that wrote them. Don't kid yourself, if you blindly sign them just because they're "standard paper", you're the fool.

...As for not "lawyering up", just because you're a contract developer with "only" (for example) $25,000 in unpaid receivables... it seems to me that only someone looking to avoid paying their bills by unfair tactics would make such statements... someone who would definitely put their "standard paper" and lawyers in the way of making said payments.

You ask a developer to do work for you, they do the requested work, and you pay them. If you don't like the work, you end the relationship. But you still have to pay them for their time.

This is not a given, and it's why we have contracts. I've certainly never worked one that was refundable, but you never know.

Red flag: massive assumption about a contract you've not seen.