By Hunter Freeman
License agreements and software development contracts play a crucial role in governing the relationship between software licensors and licensees, as well as software development service providers and clients. These agreements outline various terms and conditions related to the use, development, and support of software. This outline provides a comprehensive overview of the key considerations in negotiating license agreements, software development contracts, and Software as a Service (SaaS) agreements. You may also click this link to download a PDF of my presentation at the i4Series event: “Copyright, Contracts & Software: Protecting Your Business in a Digital Age.”

License Agreements

Use Restrictions:
License agreements specify the use restrictions for the software. These restrictions may include the number of users and copies permitted and the field of use. Additionally, licensors may want to include audit rights to ensure compliance, specifying the timing, cost, and confidentiality of the audit.

The agreement should address the warranty of compliance with the provided documentation. Compare the documentation with the marketing materials to ensure the functionality advertised matches the specifications/warranty. Furthermore, it should clarify whether the warranty covers the operational use of the software with third-party equipment or services included as part of or used with the software.

License agreements may establish an initial testing or evaluation period, allowing the licensee to assess the functionality and suitability of the software.

The agreement should cover aspects related to the delivery, installation, and training required for the effective implementation of the software. Clear guidelines on the responsibilities of the licensor and licensee should be outlined, including costs, hours, participants, training location, etc.

Details regarding the cost of support and maintenance should be specified in the agreement. It should also define the expected resolution time for any issues that may arise. Additionally, the agreement should indicate the available support channels (online, phone, in-person), service hours, and whether free updates are included.

The agreement should define the consequences of breaches in terms of liability. As a licensor, you want to limit this as much as possible.  As a licensee, you want to ensure that for non-critical software, a full refund of license fees, installation, and training costs is provided. Where critical software is involved, provisions for damages such as lost profits and downstream liability should be considered.

IP Indemnification:
The agreement should include provisions for intellectual property (IP) indemnification. It should clarify when IP indemnification applies, such as in cases of modifications or unauthorized use. Any limitations or caps on indemnification should be clearly outlined. Furthermore, the agreement should address the licensor’s right to modify or terminate the agreement if necessary to avoid or resolve IP infringement claims.

Terms for termination should be clearly defined in the agreement. This includes provisions for material breach, persistent breach, termination for convenience (licensee only), automatic renewal, and any necessary data migration or transitional support.

Dispute Resolution:
The agreement should include provisions for dispute resolution, specifying the applicable law and jurisdiction. It may also outline alternative dispute resolution methods, such as arbitration or mediation.

To protect the licensor’s interests, license agreements may include clauses preventing licensees from soliciting employees or contractors of the licensor during or after the agreement’s duration.

To safeguard proprietary information, license agreements typically include confidentiality clauses. These clauses prohibit the disclosure or unauthorized use of confidential information shared between the parties.

Data Protection:
In today’s digital landscape, data protection is of utmost importance. Agreements should address data protection measures, including data privacy and security obligations. This ensures compliance with relevant regulations and protects the interests of both parties.

Transferability of License:
The agreement should outline the conditions under which the license can be transferred to another party. This ensures clarity and transparency regarding the transferability of rights and responsibilities associated with the software.

Software Development

Life Cycle:
The software development life cycle (SDLC) is a critical aspect of software development projects. It determines the objectives, roles, and responsibilities of each party involved. The agreement should define the SDLC, including phases such as requirements gathering, design, development, testing, implementation, and maintenance. It should also specify the team members involved and address the licensee’s approval or the licensor’s right to change/reassign team members.

Requirements Gathering:
The agreement should outline the activities involved in requirements gathering, including defining the scope, budget, and schedule of the project. It should specify the desired features, data flow, storage requirements, input-output mechanisms, security considerations, and system interfaces. This provides a clear understanding of the software’s functional and non-functional requirements.

Clear milestones for deliverable dates should be established in the agreement. These milestones often trigger customer acceptance and payment. The agreement should outline the key deliverables at each milestone, such as project plan approval, functional specifications review, detailed design review, delivery of executable software modules, test plan review, and software deployment. It should also address the process for handling change requests for new or modified deliverables.

The pricing structure for software development should be clearly defined in the agreement. It may include options for fixed fees or time and materials contracts. In terms of training, the parties should agree on whether that price is included or separate as well as the number of training hours or days, the number of users to be trained, the location of training, and the number of instructors required. Additionally, the agreement should outline how change requests affect the payment structure.

Testing is a critical phase in software development. The agreement should define the criteria for approval. It should specify whether acceptance will be a licensee’s sole discretion or whether objective performance metrics will be used.  In the latter case, the agreement may provide for third-party acceptance testing. The agreement should also address the form and manner of the acceptance (e.g. written acceptance within a predefined period) and establish timelines for bug fixing, including the number of attempts allowed before considering customer termination. The agreement should outline the consequences of termination, such as partial or total refunds and any other applicable damages.

IP Rights:
Ownership of intellectual property rights should be addressed in the agreement. It should clearly state who will own the software, including the object code and source code, as well as the documentation. Additionally, it should specify the ownership of the developers’ work product and whether any pre-existing work product of the developers is included. If open-source components are used, the agreement should address how it may affect ownership or the ability to protect the software.

The agreement should outline the warranties provided by the software development service provider. Beyond compliance with the documentation, the warranty should provide an assurance that the developer will have sufficient personnel, facilities, and resources to meet project deadlines. The agreement should also address any conflicting agreements or obligations that may hinder the timely completion of the project. The agreement may include limitations on the warranty period, after which error resolution may be provided by a separate maintenance agreement.

Insurance for Developer:
To mitigate risks, the agreement may require the software developer to maintain insurance coverage during the contract duration. It may also stipulate that coverage must be maintained for a period after the completion of the project. The agreement should specify the required coverage and carrier rating. Additionally, it may require that the customer be named as a beneficiary of the insurance policy.

The agreement should outline the conditions under which termination may occur. In the case of a material breach by the software development service provider, the agreement should define the consequences for failing to deliver milestones or ongoing maintenance. Likewise, it should specify the conditions under which the customer may be in material breach, such as denial of access to staff or computers, failure to make timely payments, or failure to provide timely responses. The agreement should address data preservation and migration requirements and may include provisions for source code escrow to ensure access to source code in specific events, such as the software development service provider going out of business.


Service Levels:
Because SaaS is hosted by the developer, there are risks to the customer.  Therefore, Service levels play a crucial role in SaaS agreements. SaaS agreements should include uptime requirements (system availability), often exceeding 99%, and differentiate between scheduled and unscheduled downtime of the software. Service credits may be specified to compensate the customer in the event of failure to maintain the agreed-upon service levels.

Error Resolution:
The agreement should define different categories of error, such as critical and non-critical issues, and establish response and resolution times for each category. It should also specify the remedies available to the customer if error resolution timeframes are not met.

Data Loss/Security:
SaaS agreements should address data loss prevention and security measures. This includes the implementation of a disaster recovery plan, regular backups, and guidelines for data conversion and migration.

Ownership/Use of Customer Data:
The agreement should clearly state that the customer retains ownership of their data. It should specify whether the provider may use the customer’s data, potentially after anonymizing it, and outline any limitations on such usage.

In conclusion, contracts are crucial for establishing clear terms and expectations between licensors, licensees, and/or software developers. By addressing key considerations and expectations, these agreements help foster successful collaborations and ensure the smooth implementation of software projects. Understanding and carefully crafting these agreements is essential for mitigating risks, protecting intellectual property, and maintaining productive relationships in the dynamic world of software licensing and development.