What to Put in a Software Development Contract to Protect Your IP (And Your Budget)
2026-10-22 · Appsoluty team
Most software development contracts that cross a founder's desk don't actually contain a working IP ownership clause. They contain the assumption of one. The agreement says "work product," the vendor is labeled an independent contractor, someone drops the phrase "work for hire" into a boilerplate paragraph, and everyone signs believing the code belongs to the company paying for it. That gap between assumption and actual clause language is where most ownership disputes start, and it's exactly what this piece walks through, clause by clause.
If you've been through a bad outsourcing experience already, this probably sounds familiar: a vendor relationship that ended with you unsure whether you could legally use, modify, or resell what you paid for. The fix isn't a longer contract. It's specific language in a few places that most templates skip.
Why "work for hire" on its own doesn't guarantee you own the code
"Work for hire" is a legal term, not a magic phrase. In the US, it applies automatically to employees, but when the person writing your code is a contractor, agency, or offshore team, it only applies to a narrow list of commissioned-work categories, and custom software usually doesn't fall into any of them. That means the label alone does nothing unless the contract also contains explicit assignment language that transfers ownership in the present tense.
Four distinct ownership models exist that a software contract can use: assignment, licensing, work-for-hire, and joint ownership. Each does something different. An assignment transfers ownership outright. A license lets you use the software without owning it. Work-for-hire tries to make you the legal author from the start, which works for employees but is shaky for contractors. Joint ownership splits rights between you and the vendor, which sounds fair and usually isn't, because it means the vendor can license your product to someone else without asking you.
The jurisdiction matters too. Outside the US, the default rules shift further away from the client. India has no automatic work-for-hire doctrine at all, so if your dev team is based there and your contract leans on "work for hire" without an explicit assignment clause, you may own nothing. If you're hiring across borders, which is the whole point of outsourcing, don't assume your home country's default rules travel with the contract.
The IP assignment clause: what it actually has to say
The clause that matters is the assignment clause, not the work-for-hire label. It needs two things: a present-tense transfer ("hereby assigns," not "will assign" or "agrees to assign"), and a clear trigger for when that transfer happens.
The trigger is the part people get wrong. Contracts commonly tie IP transfer to final payment, which sounds reasonable until you think through what it means during the build: the vendor holds ownership of everything through the entire development period, and only hands it to you once the last invoice clears. If that invoice is disputed, delayed, or the relationship sours before the final milestone, you don't own the code you've already paid for in part. A better structure ties ownership transfer to creation (you own each piece as it's written) or to individual milestone acceptance, so ownership accrues as you pay rather than arriving all at once at the finish line.
This is also where a vendor's willingness to negotiate tells you something. If a prospective partner resists present-tense assignment language or insists on final-payment-only transfer, that's worth weighing alongside the other red flags that predict a vendor won't sign a clean IP clause before you ever get to contract review.
Naming every deliverable, not just "the app"
An assignment clause that only says "the application" or "the software" leaves gaps a vendor can drive through later. A deliverables list should name source code, object code, UI and UX designs, technical documentation, database schemas, API specifications, test scripts and test data, deployment and build scripts, repository access, and any credentials needed to operate the system. If it isn't named, don't assume it's covered.
This list matters more than it looks like it should. A vendor can hand over a compiled app while quietly keeping the source. They can hand over source while keeping the deployment scripts that make it actually runnable, or the database schema that makes the data usable outside their own infrastructure. None of that is necessarily bad faith; it's just what happens when a contract is vague and a relationship ends under pressure. Writing the list down before you sign is far cheaper than negotiating it during an offboarding dispute.
A contract that's this specific about deliverables usually traces back to a scope document that was equally specific. If you haven't done that work yet, a project brief that nails down scope before you draft the contract makes the deliverables list in your contract something you can actually write from, instead of guessing at.
Carving out pre-existing IP and open-source components
Not everything in your codebase should be assigned to you, and a contract that tries to assign all of it will either fail or create problems you don't want. Most development teams bring their own reusable code: internal frameworks, boilerplate, utility libraries built on earlier projects. That pre-existing IP should be carved out and separately licensed to you for use in your product, rather than swept into a blanket assignment the vendor can't actually grant, because they don't own it outright either (they use it across multiple clients).
The same logic applies to open-source components, just in reverse. Nobody can assign you ownership of an MIT or GPL-licensed library; the license terms control, and your contract should require the vendor to disclose which OSS packages are going into your product and confirm the licenses are compatible with how you intend to use and sell the software. A copyleft license buried in a dependency can force you to open-source code you intended to keep proprietary. That's a legal problem a signature on an assignment clause won't fix.
Source code handover: escrow vs. just controlling the repo yourself
Formal source code escrow exists for a reason: a neutral third party holds a current copy of the code and releases it to you if the vendor goes insolvent, breaches the contract, or stops supporting the software. It's the right tool for an enterprise relationship with a vendor you don't fully trust and a product you can't afford to lose access to.
For most founders working with a budget in the tens of thousands of dollars, formal escrow is overkill. The simpler and genuinely sufficient alternative is to host the repository and every cloud account in your own company's name from day one, and add the developer as a collaborator rather than the owner. If the relationship ends badly, you revoke access instead of invoking an escrow agreement you never set up and probably can't afford anyway. This only works if you insist on it before the project starts; a vendor who builds everything under their own accounts and offers to "transfer it later" is creating exactly the hold-over-you problem escrow is meant to prevent.
This is one reason billing structure matters as much as the IP clause itself. Work that starts under an account you don't control, billed in a way that doesn't map to deliverables, tends to produce exactly the kind of handover dispute this section is trying to avoid.
Change-order terms that protect your budget, not just your IP
An IP clause protects what you own. A change-order clause protects what you pay for it, and the two problems show up together more often than founders expect, because a vendor with an upper hand over your source code is also a vendor with less incentive to push back on scope creep they're billing you for.
The fix is a written change-control process: any request that adds scope gets documented, estimated, and approved in writing before work starts, not billed after the fact as "additional effort." A common approach is to require written, executive-level approval once cumulative changes pass somewhere around 10% of the contract's value, the kind of threshold general change-control guidance for software contracts recommends, so small clarifications don't need sign-off but anything that meaningfully changes the project does.
The stakes here aren't abstract. One change-control guide walks through a two-week, $5,000 widget request to show what a working review process is supposed to catch: the team flagged the request, priced it out, and pushed it to a later phase instead of letting it slide into the current one unreviewed. That's the outcome a written threshold is meant to produce. Skip the threshold, and the same request just gets built on your dime, with no one ever deciding it was worth the extra two weeks.
One caveat worth knowing: even a contract with a solid change-control clause can sometimes still be modified by a later verbal agreement unless the contract explicitly says it can't be. That risk is jurisdiction-specific (California courts have ruled differently on this than other states), so don't assume a written process alone closes the door on verbal scope creep. Add a no-oral-modification clause explicitly; don't rely on the written process to imply it.
If you've been burned by exactly this kind of quiet scope drift before, the hidden costs that show up when scope and payment terms are left vague are worth reading before you negotiate the next contract, not after.
Milestone payments and termination for cause
Pair the change-control clause with a payment structure that gives you a stronger position of your own. Milestone-based payments, with a retention percentage held back until final acceptance, mean you're never more than one milestone's worth of money exposed if the engagement goes wrong. Appsoluty structures engagements as milestone-based or hourly depending on the project, bills weekly against actual hours worked, and estimates every task upfront in hours at a published $70/hour rate, so the client can see projected cost before committing to it rather than discovering it in an invoice. That visibility is what a retention-and-milestone structure is trying to buy you when you're negotiating with a vendor whose rates aren't disclosed the same way.
The other half of this is a real termination-for-cause clause: specific, named conditions (missed milestones, security failures, unauthorized subcontracting) that let you exit the contract without having to prove a breach lawsuit-style. Without it, your only exit from a failing engagement is to stop paying and hope, which is a much weaker position than a contract that spells out exactly when you can walk and what you're owed on the way out.
What happens when none of this is in writing
The clearest illustration of why all of this needs to be explicit, not assumed, is a real case: Krause v. Titleserv, Inc., 402 F.3d 119 (2d Cir. 2005). A consultant programmer had written custom software for a client over roughly ten years without a contract that clearly addressed who owned the code or held the copyright. When the relationship ended, he withheld the source code, and the dispute that followed turned entirely on questions a written assignment clause would have settled before they ever became litigation: had ownership been agreed, and in what form. The full opinion is a useful read precisely because it shows how much a decade of working code and client money bought the client in legal certainty: not much, because nobody wrote it down.
That's the whole argument for the clauses above. None of them are complicated. They just have to exist, in the right words, before the first line of code gets written.
FAQ
Does "work for hire" give me the IP automatically?
Not reliably. In the US it applies automatically only to employees and a narrow set of commissioned-work categories that custom software usually doesn't fit into. For contractors, agencies, and offshore teams, you need an explicit present-tense assignment clause in addition to any work-for-hire language, and in some countries, including India, there's no automatic work-for-hire doctrine for contractors at all.
When should source code ownership transfer to me?
Tie it to creation or to milestone acceptance, not to final payment. A final-payment trigger leaves the vendor holding ownership through the entire build, which means you own nothing you've already partly paid for if the relationship ends before the last invoice clears.
Do I need formal source code escrow?
Usually not at the budget most founders are working with. Hosting the repository and cloud accounts under your own company's name from the start, with the developer added as a collaborator rather than the owner, gets you most of the same protection without the cost or complexity of a third-party escrow agreement. Escrow earns its cost at enterprise scale, with vendors you have less visibility into.
What if my current contract says nothing about IP?
Renegotiate it before you pay another invoice, not after. A contract silent on IP ownership defaults to whatever your jurisdiction's underlying rules say, which, as Krause v. Titleserv shows, can leave ownership genuinely unsettled even after years of paid work. If the vendor won't add clear assignment language to an existing agreement, treat that refusal as information: here's how to choose the next partner if you've already been burned once and don't want a repeat.
Getting the contract right doesn't end the work. Once the contract is signed, how you manage the relationship day to day is what determines whether these clauses ever actually get tested, or just sit in a drawer doing their job quietly.