The field of software development can be highly complicated. Agreements are important to establish the rights and obligations of the software developer and the entity commissioning the software. By crafting a thorough agreement, you can minimize the risk of disputes arising in the future. Sometimes one or both parties will want to consult an attorney, but you do not necessarily need professional representation to draft an effective software development agreement.
The agreement should carefully outline the specifications for the software that will be developed. This will make it easier to determine whether the developer has met the expectations of the client. At the outset, a developer may want to draft functional specifications by using ordinary language so that a client who is not technologically sophisticated can understand them. The developer then can draft more detailed technical specifications at a later stage. The client may benefit from reviewing a demonstration program by the developer, which will show what the software will look like and how it will work.
A client may pay a developer under the terms of a time and materials agreement, or they may pay them a single lump sum for the entire project under a fixed price agreement. A time and materials agreement involves an hourly rate for the time that the developer spends on the project, in addition to compensation for any costs incurred. Clients generally prefer a fixed price agreement because they know in advance how much the project will cost. Developers often prefer a time and materials agreement because it covers the possibility of the project taking longer than expected. Even if the two sides set up a fixed price agreement, though, a client who is satisfied with the developer’s initial efforts may pay the developer extra money if the project takes longer than expected.
Disputes often arise when the developer and the client have different notions of the timeline that the work will follow. To avoid this problem, they should establish the expected timeline in the agreement. A client may want to separate the parts of the project into separate phases so that they can more easily track its progress. Payments may occur after each stage, based on its successful completion. If the developer fails to keep up with deadlines, the two parties can negotiate a new agreement or end the relationship.
Setting up a timeline helps the client avoid the surprise of a deficient result after a long waiting period. It also can allow them to provide their input on the developer’s work as it progresses. Meanwhile, the developer may benefit from setting up a timeline because the client’s approval of each phase can prevent allegations of unsatisfactory performance at the end of the project. Dividing the payments into phases can provide the developer with some compensation for their efforts if the project eventually falls through.
The developer and the client may need to address the issue of who owns the intellectual property rights associated with the software. The default rule is that the developer owns these rights unless the software is classified as a work made for hire. This means that the developer is an employee of the client or that the two sides have agreed in writing that the software is a work made for hire. If they want to hold the copyright, the client may need to set up an agreement that transfers ownership to them. Sometimes, however, a client is content to allow the developer to retain ownership, while the client holds a license to use the software. The allocation of intellectual property rights likely will affect the price that the client pays.
In many types of software, the specific product will contain other programs, materials, and development tools, such as code for storing data or displaying menus. Developers need to be careful that they do not transfer intellectual property rights over this background technology to the client. They will need to stipulate that they retain these rights in the agreement. Meanwhile, they should provide the client with a non-exclusive license to use the background technology.
Planning for the Future
Typically, a software development agreement will include a warranty provision related to the performance of the software. The specific terms of these provisions vary widely. A warranty essentially promises to the client that the software will perform as advertised for a certain time period. If it does not, the developer guarantees that they will fix or replace it at no cost to the client. The term of a warranty may extend for about 90 days, or it may last for several months or even a year. A developer should not provide an indefinite warranty.
A development agreement might include other warranty provisions as well. These might guarantee that the software does not infringe on the intellectual property rights of other parties and ensure that the client receives good title to the software.
Even the most precisely drafted agreement will not necessarily prevent a dispute between the parties. Thus, the agreement should outline the manner for resolving any dispute. Both sides may prefer to use arbitration or mediation, instead of filing a formal lawsuit in court. Arbitration and mediation are less expensive and more efficient. Arbitration is more formal than mediation. It is often binding, which means that the decision of the arbitrator or arbitration panel cannot be challenged. Mediation is never binding. Instead, the mediator will facilitate the discussion from an objective perspective, but the parties will need to reach a solution voluntarily. If mediation is unsuccessful, they retain the right to go to court.