Possession Is Nine-Tenths of the Contract: Testing Software Ownership Before You Need It
Photo: Rico Shen, CC BY-SA 4.0, via Wikimedia Commons
The ownership clause in a master services agreement can feel like a locked door with the key safely in hand. It is not. A contract may say the client owns the custom software, but ownership is only meaningful when someone can actually retrieve the code, compile it, deploy it, and keep it running without the original vendor. Until that has been tested, the clause is a legal promise rather than an operational fact.
That distinction matters most at the worst possible moment: when a vendor is acquired, fails, changes strategic direction, or simply stops performing. The buyer then discovers that ownership language did not include repository administration, cloud credentials, third-party license keys, or a build that works outside the vendor's laptop. The remedy is not more legal prose. It is a practical verification program that treats source code control as an engineering deliverable.
The Clause Is Not the Asset
Intellectual property assignment should be explicit about what is being assigned. A general statement that the vendor conveys all rights in the deliverables is a start, but it often leaves gaps around pre-existing components, reusable frameworks, design files, database schemas, infrastructure as code, test suites, deployment scripts, and documentation. Each of those items can be essential to operating the software.
US buyers should ask for a schedule that identifies assigned work product and separately identifies any vendor background IP that is merely licensed. The license terms deserve the same scrutiny as the assignment. A perpetual license that excludes modification, sublicensing to contractors, or use by an affiliate may not support the business after an ownership transition. The agreement should also confirm that individual contractors and subcontractors have assigned their contributions, because a missing contractor assignment can cloud title long after the invoice is paid.
Open-source and third-party components require their own inventory. The question is not whether open source is acceptable. It usually is. The question is whether the buyer will receive the notices, source obligations, license keys, and commercial terms needed to continue using those components. A software bill of materials is useful here, but only if it maps dependencies to actual licenses and support contracts.
Escrow Is a Release Mechanism, Not a Backup Plan
Source code escrow is often described as insurance. That framing is too generous. Escrow is a contractual release mechanism: a third party holds a copy of specified materials and delivers them when defined conditions occur. If the release triggers are vague, the buyer may face a dispute exactly when speed matters. If the deposited materials are stale or incomplete, release produces a folder rather than a working system.
A credible escrow arrangement defines what is deposited, how often it is updated, who may inspect it, and what events justify release. Common triggers include insolvency, cessation of support, uncured material breach, and failure to provide maintenance for a defined period. The agreement should also specify the verification method. A deposit that has never been examined is little more than a filing cabinet with a legal label.
For custom software that the client already owns, escrow may seem redundant. It is not. Ownership establishes rights. Escrow establishes a practical path to possession when the vendor controls the repository, the build environment, or the release process. The two mechanisms solve different problems, and mature contracts use both.
The Build Is the Test
The only convincing proof of ownership is a clean-room build. The buyer's technical team, or an independent engineer, should attempt to reconstruct the application from the delivered materials in an environment that has no residual access to the vendor's systems. That exercise should be time-boxed and documented, not performed casually during a transition crisis.
The test should begin with a fresh repository clone and a fresh cloud or local environment. It should follow the vendor's written instructions without relying on undocumented knowledge. Dependency installation, configuration, database migrations, test execution, and deployment should all be attempted. Any missing environment variable, private package, license key, or external service is a finding. The goal is not to embarrass the vendor. The goal is to discover the real boundaries of the deliverable while cooperation is still available.
A successful build also requires the right version. Buyers should confirm that the deposited or transferred code corresponds to the production release, not an older branch. Tags, release notes, and commit history help, but the strongest evidence is a build that produces an artifact matching the deployed system closely enough for the business to operate and maintain it.
Credentials, History, and the Things That Do Not Fit in a Zip File
Source code is necessary but rarely sufficient. Operational ownership includes administrative access to repositories, continuous integration and delivery systems, package registries, cloud accounts, domain name records, TLS certificates, identity providers, logging platforms, monitoring tools, and database consoles. It also includes the organizational accounts that control billing and support relationships.
A zip file of source code does not transfer repository history, issue tracking, or the ability to rotate secrets safely. Buyers should require a written access-transfer plan that identifies every account, role, and credential needed to operate the software. Privileged access should be transferred through official account ownership changes, not shared passwords. Third-party service contracts, API quotas, and support entitlements should be assigned or renegotiated before they become blockers.
Documentation deserves the same skepticism. Runbooks that describe the happy path are not enough. The buyer needs to know how backups are restored, how incidents are diagnosed, how access is granted, and how releases are rolled back. If that knowledge exists only in the vendor's team, the buyer owns the code but not the capability.
A Practical Verification Checklist
A workable program can be simple:
- Confirm that the IP assignment schedule covers code, documentation, designs, schemas, tests, scripts, and infrastructure definitions.
- Inventory third-party and open-source components, including licenses, notices, support contracts, and keys.
- Review escrow release triggers, deposit frequency, and verification rights.
- Conduct a clean-room build from a fresh environment without vendor assistance.
- Map every credential, account, and service required to operate the software.
- Test the transfer of administrative ownership for repositories, cloud accounts, and deployment pipelines.
- Record gaps, assign owners, and repeat the exercise after major releases or at contract renewal.
Put the Right to Receive on a Calendar
Ownership should be treated as a maintained capability, not a closing checklist. Software changes. Dependencies drift. Accounts expire. A build that worked at contract signing may fail two releases later. Buyers should schedule verification at renewal, after significant architectural changes, and before any known vendor transition.
The blunt question for any business leader is not whether the contract says the company owns the code. It is whether the company's own engineers could run that code on Monday without calling the vendor. If the answer is no, the ownership clause is unfinished work. At Redwind Software, we treat that operational test as part of the engineering standard, because software ownership that cannot be exercised is only a paragraph in a file.