Contracts are very frequently entered into as part of software management – for example, as an aspect of employing personnel and hiring consultants, purchasing hardware and software, software development, and hardware and software maintenance. Contracts are agreements between two or more parties that are legally binding. If one of the parties should fail to fulﬁl its agreement then the other party can obtain redress through the courts. The central importance of contracting in computing can be seen in the British Computer Society monograph A Manager’s Guide to IT Law (Holt and Newton, 2004), which devotes more than half its pages to contracting issues. It gives much useful, detailed guidance, with the central message being: when in doubt, seek expert legal advice.
The contract needs to set out what the parties to the contract will do and when they will do it. Typically this involves payment of money in return for supply of goods and services. We need to make sure that our contracts are well formulated so that we do not ﬁnd ourselves in difﬁculty later; some of the issues that need to be addressed in any contract are described below.
The goods to be supplied might be computer and communications hardware as part of some major development of the IT infrastructure of your organisation. In such a case it would be normal to specify delivery dates, and include procedures for commissioning and acceptance of the new equipment. The supplier might depend upon us to ready our premises for receipt of the new hardware systems. Alternatively the goods might take the form of software, from off-the-shelf products to bespoke development. Software which involves customisation of some pre-existing software or the bespoke development of other, new software is notoriously difﬁcult to specify precisely enough for a simple contract to sufﬁce.
At the time of writing there has been a shift towards supplying computing systems as services that encompass both hardware and software – responding to a organisational need. Collectively known as cloud computing, these services range from:
- computing infrastructure as a service (IaaS), which provides networked computers and data storage that be configured as needed.
- platform as a service (PaaS), which provides configured computing platforms such as web servers or database systems for the client organisation
- software as a service (SaaS), which provides software such as distributed office productivity applications (e.g., Google Docs) or file-sharing systems (e.g., Dropbox).
In such cases it may be easier to set out what must be delivered and to identify failures under the contract, using key performance metrics that relate qualities such as availability, performance and security of the service.