I recently wrote on Quora about a clause that I use in my contracts as a freelancer. I’ve had a couple of requests for more details.
My contract is a collection of clauses I mostly put together from public sources and that my attorney wrote; I couldn’t even tell you where every clause came from. As such, I can’t just post the whole thing – much of it is protected by copyrights, and while I have the right to use it myself, I don’t have the right to publish it.
But there are a few clauses that I wrote myself, and simply had them reviewed by my attorney. I’m going to post and describe the rationale for these clauses below.
Near the top of my contract, the words Agreement, Consultant and Client are defined. Replace those terms in my example clauses below with whatever you’re using in your contract.
This is not legal advice. This is entirely advice to help guide you in your conversations with your attorney. This is not a boilerplate “I need to say it for legal reasons” disclaimer. This is absolutely critical advice. If you’re putting together a contract, you should have an attorney.
That said, not all attorneys are familiar with the clauses that you should have in a modern freelance software development contract. And if you’re a freelance software engineering consultant, there are a few basics that you need to be sure your contract covers:
- Work for hire/intellectual property: Your contract needs to legally transfer the work you’re doing to your employer. It should cover all intellectual property related to the work you transfer to your employer.
- Confidentiality: A standard “mutual confidentiality agreement” clause is expected. They shouldn’t talk about your secrets; you shouldn’t talk about theirs. I like to see an expiration of two or three years on confidentiality.
- Independent Contractor: You’re a contractor, not an employee.
And remember, a contract isn’t just a pile of legalese. A contract is a description, in writing (in painful detail), of the relationship between the consultant and the client, and the expectations you have of each other. If you’re a software engineer, think of it as code that describes your relationship.
The key is that both you and your client have assumptions. The contract’s main reason to exist is to put all of your assumptions and your client’s down on paper, for all to see. And that includes assumptions for “what happens when X bad thing happens.” Which is why including an attorney is useful: They’re more experienced with the kinds of bad things that can happen.
But attorneys don’t always know software as well as we do. So I’m including, below, my own experience and strategies with respect to software development freelance work.
Statement(s) of Work
I also think it’s best if the main contract doesn’t include the specific work that you’re doing, and instead just describes the relationship you have with your client. As such, the “services provided” section of your contract should simply say something like:
The Client hereby agrees to engage the Consultant to provide the Client with the services as described in Statement(s) of Work, incorporated here by reference. (the “Services”)
Any other references to compensation would similarly be changed to reference “Attached Statement(s) of Work”. Also: Be sure that any Statements of Work need to be agreed to, in writing, and signed by both parties.
The reasoning for this is that, once you’ve defined the relationship, you’re going to want it to be as easy as possible to get more work from the client. If a Statement of Work is just a description of a new task for you to do (along with a rate or amount of payment), then it’s much easier to get signed than a full new contract with new work to be done.
If you’re simply doing hourly work, this is less important. But I like to do multiple fixed bids with a single client, so I find this to be important.
Open Source Exception
Above this clause was the clause I mentioned above that transfers all intellectual property to the client. I include this to give me blanket rights to make tweaks to open source code and submit PRs to the appropriate project. Otherwise, if I’m working on a client’s project and discover a bug in an open source project, I’d need to individually negotiate permission to contribute the changes upstream.
- As an exception to the above, Consultant has an extensive library of pre-existing, general purpose code, scripts, and tools that are frequently used to assist in the speedy development of products for Consultant’s clients. In addition, Consultant frequently utilizes open source software code. Some of this code may be included in the product or build tools of the deliverables provided to Client. Intellectual Property owned by Consultant will be considered licensed to Client with a permanent, non-exclusive license to use that code as Client sees fit, with no restriction. Open Source Intellectual Property will be governed by its relevant license agreement. Consultant will retain full rights and ownership of Consultant’s Intellectual Property, even if some of the Intellectual Property has been modified or extended as part of this Agreement. Any modifications made to Open Source Intellectual Property during the performance of this Agreement will be licensed under the original Open Source license. Any patents procured by Client that cover aspects of Consultant’s Intellectual Property will be licensed at no cost to Consultant in a permanent, non-exclusive, transferable manner.
IP Transfer Restriction
A couple of clauses later I also throw in this one:
- Intellectual Property rights transfer to Client, as described above, is contingent on Client satisfying all payment terms described in any attached Statements of Work.
This is the one I have mentioned in Quora answers: If the client doesn’t pay, the client doesn’t get the IP. That’s a bigger lever than simply the ability to sue over an amount owed: If a client fails to pay you $2000, it’s barely worthwhile to go to court over it. I know someone who took a (mutual) client to small claims court. It was a big hassle, many hours spent, and bad feelings all around. But the big problem was that the client had no money at the time.
Penalties for Late Payment
I was actually owed more by the same client I mentioned above. I just waited. They eventually paid me. Took them eight months, but they were good for it.
For the most part, when writing contracts, don’t expect that you should need to sue to enforce them. At the same time, that client taught me an important lesson: It’s important to motivate them to pay sooner. So my new contract has this clause:
- Any late payments will trigger a fee of 12.00% per month on the amount still owing.
You can always agree to a lower late payment fee, but this is an intentionally punitive level of interest, because you’re not giving them a loan of your work to be paid at some arbitrary future time; you’re doing work and expecting prompt payment. I like to think that the client above would have thought twice about continuing our contract well past their ability to pay if they’d known that they were taking out a loan at an onerous interest rate. Or, more to the point, they would have been motivated to pay me on a credit card cash advance or business loan and paid the less onerous rate of credit card interest for those 8 months. (Which, for reference, would have more than doubled the amount they owed.)
Your contract may have an indemnification clause. I’d be sure that any such clause excludes bugs not discovered during the course of the agreement. You don’t want a bug that was inadvertently left in your code to come back to haunt you in the form of a lawsuit 10 years later.
But it’s worse: There’s a serious industry problem with software patents. It seems that, no matter what you’re coding, you’re likely violating someone’s (probably invalid, but hard to prove) patent, somewhere.
As such, instead of the standard “indemnification” clause where the freelancer basically agrees to fight any patent lawsuit on behalf of the client, even when the patent lawsuit is clearly frivolous. So I have added this clause to my contracts:
- Consultant will not knowingly violate any patents, but Client recognizes and accepts the fact that the patent system, as it applies to software, allows and even encourages frivolous lawsuits. As such, Client will hold Consultant harmless of any legal threats or lawsuits concerning patent infringement related to work product resulting from Agreement. Consultant will make a good faith effort to make time available (at Consultant’s standard hourly rate at the time) to consult with and help defend against any such legal threats.
Where To Start
There are a number of services that will give you a basic contract to start from. Just Google “consulting contract template” or similar; you’ll see dozens of links.
I’m not going to endorse any of them, even to the point of providing links to ones that I’ve used. Why not? Because you should still have an attorney. You can potentially reduce your overall attorney costs if you start with a template, and if you’re good at writing up contracts. (I grew up with an attorney and have been helping out with writing contracts for almost as long as I’ve been programming. And I still consult with an attorney.)
Otherwise the best place to start is by hiring an attorney. They will also have access to standard consulting templates, that they’ve already vetted and are familiar with. The information above is best used in helping you talk through your concerns with your attorney, and to ask for clauses specific to freelance software engineering.
This is one of those “Don’t Try This At Home” situations. A good attorney is totally worth the money.