Clearlake Law provides an outsourced legal department specialised in the software development sector for businesses operating in the United Kingdom.
In this post, we provide a brief overview for developers of the various risks that arise in bespoke software development contracts (with no ongoing maintenance or support) together with strategies for mitigating those risks when drafting or negotiating client agreements.
Define a clear scope of work
Ambiguities or gaps in the scope of work can lead to disputes over deliverables and costs.
For Agile processes, specify iterative milestones and include flexibility for evolving requirements.
For Waterfall projects, detail each phase comprehensively, including clear criteria for transitioning between stages.
For hybrid or alternative approaches, ensure the contract captures the unique elements of the methodology, such as combining iterative feedback with more structured phases.
Implementing a robust change control procedure is also essential, as it ensures that all requested changes are properly documented and priced.
Manage delivery deadlines
Delays in delivery can damage your reputation and lead to financial penalties.
Clearly define delivery schedules in your contracts, detailing specific timelines for each project phase.
For Agile projects, include timelines for iterative sprints, while for Waterfall projects, ensure that each phase has defined deadlines with room for adjustments as needed.
Depending on the project, you may be able to persuade your client to agree that timelines are indicative only, particularly where it is clear that the specification will evolve.
Either way, buffer periods should always be included to account for unforeseen delays or resource constraints.
Ensure any client dependencies are clearly spelled out to defend you against incurring any damages claims where the delay is caused (or contributed to) by your client.
Where your client insists on hard deadlines, consider accepting liquidated damages for delays (pre-agreed financial remedies) and limit your liability to the amount of the liquidated damages only. This approach may help to contain your liability in certain scenarios.
Include a force majeure clause to protect against events beyond your control that may impact delivery timelines. Make sure to include events such as cyberattacks, power outages and internet disruptions explicitly.
Always maintain proactive communication with clients, providing regular updates, progress reports and transparent discussions about potential risks.
Allocate intellectual property rights
At the top level, determine whether the software is a work-for-hire or if you retain ownership and simply grant the client a licence.
A work-for-hire arrangement means that the client will own all rights to the software from the outset, ensuring they have full control over its use, modification and distribution. Of course, this is likely to be the client’s preferred position.
Even in the work-for-hire scenario, it is useful to identify and disclose any pre‑existing proprietary code or third-party components that are used in the project.
Specify that you (or your licensors) retain ownership of those elements and can repurpose them for other projects and define the client’s rights to sell, license or leverage those elements to third parties.
For a deeper dive, see our post on software IP licensing chains and download the in-depth white paper.
Limit software warranties
Warranties are a way of your clients getting you to commit contractually to ensuring certain standards or to confirming certain facts that will apply to your service or work products.
Where the software or services do not meet the agreed standards, your client may have a claim against you for breach of warranty.
Clients will typically request warranties for fitness for purpose, compliance with agreed specifications and non-infringement of third-party intellectual property rights.
We would always recommend avoiding fitness for purpose warranties, if at all possible.
Fitness for purpose warranties require you to commit that the software will meet the client’s business requirements and functions, even if those requirements have not been made entirely clear to you.
It is far more beneficial, instead, to give your client a warranty that the software will comply with its specification and then work closely together to ensure the specification is suitable.
Non-infringement of IP warranties confirm that the software does not infringe any third-party intellectual property rights.
Developers should conduct due diligence and ensure proper licensing for all third-party components to meet this obligation.
Typically, clients will also ask for compliance warranties confirming that the software adheres to industry standards, regulatory requirements and applicable laws.
Be careful not to commit to deliver software that is compliant with regulatory requirements unless you have significant experience with those regulatory requirements in-house.
If giving regulatory compliance warranties, ensure that you limit the warranty to apply only at the point of delivery of the software, not on an ongoing basis (unless you are also contracting to support and maintain the software).
By including detailed, narrowly scoped warranties, developers can provide clients with assurance while limiting exposure to claims.
Ensure that warranties explicitly exclude your liability for issues arising from client misuse, third-party integrations or circumstances outside your control.
Robust testing and acceptance provisions
Include a clearly defined acceptance testing process in the contract.
This should outline how the software will be evaluated for compliance with agreed performance criteria, such as functionality, reliability and user experience.
Ensure both parties agree on a detailed testing protocol, including the scope of tests, timelines and success benchmarks.
Define a specific timeframe for the client to identify and report performance issues after delivery.
Once the client formally accepts the software following successful testing, acceptance serves as a key contractual protection for you, the developer.
The client is effectively confirming that the software is suitable for their purposes, following which the contract should state that the client takes responsibility for the outcomes they achieve with that software.
Include provisions stating that post-acceptance issues will be addressed only under clearly defined maintenance agreements or additional statements of work.
Limiting liability and managing indemnities
Despite clarifying your obligations throughout the contract, clients may ultimately seek to hold you accountable for software defects, delays or failure to meet agreed-upon outcomes.
Always cap your general liability to a reasonable amount, such as the total value of the contract, or to a specific sum agreed upon with the client. This ensures that your financial exposure is proportionate to the scope and value of the work.
Always exclude liability for consequential and indirect losses, such as lost profits, loss of business opportunities or reputational harm. You should not be liable for losses that are merely contingent on your breach and over which you have no control.
Clients will typically ask you to provide indemnities to cover specific major risks they perceive.
Indemnities are more effective and comprehensive tools for clients to recover damages and costs incurred from you.
Ensure you clearly outline your indemnity obligations, specifying which types of loss you will cover.
Typically, you should seek to limit the indemnities you offer to claims by third parties against your client for intellectual property infringement and breaches of confidentiality.
If possible, establish limits on these indemnities to prevent disproportionate financial exposure. Your clients will typically seek unlimited liability on these items. In response, you might offer a cap of three times your general liability, for example.
Consider including a mutual indemnity clause, where the client also indemnifies you for the same specific risks and up to the same caps on liability. This can help to focus the client’s mind and justify the caps you are seeking.
You should always consider any agreed caps on liability (and any unlimited liability you are required to accept) in the context of your professional liability insurance.
When setting contracting policies or playbooks, speak with your insurance broker to understand how your insurance cover will interact with your liability caps.
Under English law contracts, there are certain restrictions on the way you can limit or exclude your liability, which in large part are captured under the Unfair Contract Terms Act 1977.
In the main, if you are completely excluding your liability under your standard terms of business or enforcing unfair penalties in certain scenarios, those provisions may not be enforceable. This can be a complex area though, and you may need to seek legal advice.
Drafting robust termination clauses
Typically you and your client will both be entitled to terminate the contract where the other party commits a material breach or faces an insolvency scenario.
Your client may seek the right to terminate for convenience at any time; you would typically want to resist that right.
If your client insists on being able to terminate for convenience, you may instead require a termination payment to compensate your work performed and any stranded costs incurred up to the effective date of termination.
To cater for the period following termination, include detailed provisions for the orderly handover of work and data.
This section should address intellectual property rights, delivery of partially completed software and client access to relevant project documentation.
Ensuring these handover obligations are clearly defined helps both parties transition smoothly and mitigates the risk of disputes arising from incomplete deliverables or unclear responsibilities.
You may require the client to pay you on a time and materials basis for any post-termination support and services.
Address risks in third-party software
Third-party software components are commonly used in bespoke software development, but they carry specific risks, of course.
These risks include intellectual property disputes, licensing violations and compatibility issues, which may arise both from third-party software included in the codebase delivered to the client and from third-party software interoperating with the delivered software.
For third party code embedded in the codebase that is delivered to the client, particularly for any open-source code, clearly specify any relevant licensing terms in your client contract.
Ensure you have proper permissions or licences to incorporate these components into the software being developed in the first instance.
For third-party software that integrates or interoperates with your delivered product, include terms clarifying that the client bears responsibility for ensuring compliance with relevant licensing.
Specify how your software will facilitate integration and outline limitations on liability for any issues arising from third-party interoperability.
Outline the client’s responsibilities for adhering to the terms of these licences, particularly for distribution, modification or future use of the software.
Finally, specify how updates, patches or future licensing changes for third-party components will be managed.
Thank you…
Hopefully, that was a useful run through of some of the core legal risks inherent in bespoke software development agreements.
About Clearlake Law
Clearlake Law provides a sector-specialist outsourced legal department for your business.
We support organisations in the software development sector operating here in the United Kingdom.
Our experienced, industry-expert lawyers work as an extension of your team.
We provide a single point of contact for all legal matters that arise in your business, from contract drafting and negotiation to advising on intellectual property and regulatory compliance.
Our role is to ensure your business is protected and poised for success at all times.
The author of this post and our leading expert in the software development sector is Dan Stanton.
Visit Dan’s profile page now to learn more…