All software outsourcing contracts - time and materials, fixed price, revenue share, and hybrid - pose some level of risk for the customer and the service provider firms, but there are circumstances under which each type really is the best choice.
All software outsourcing contracts typically contain the following information: scope of services, software development approach, assumptions, deliverables, pricing, intellectual property and deliverable ownership, contract duration, service levels, customer responsibilities, service provider responsibilities, conflict resolution and termination process. This doesn't mean that they're pro-forma or boilerplate, or that they're not the subject of intense negotiations, just that they're found in nearly all software outsourcing contracts.
Time and Materials Contracts
In a time and materials contract, the customer pays an agreed-upon contract rate per hour or day of software development performed by each service provider resource, plus materials (any agreed-upon other costs) such as travel, network costs and software programs. The rate may differ based upon the experience and/or role of the service provider resource, a system architect for example, would command a higher rate than a junior programmer. This type of contract is best used when the amount of programming required to create the agreed-upon deliverables cannot be estimated, such as when new algorithms or techniques are required.
Fixed Price Contracts
In a fixed price contract, the customer pays one agreed-upon price for an entire body of work developed by the service provider. This is less risky for the customer than a time and materials contract since the customer is paying one price regardless of how long it takes the service provider to deliver the software. Often, there are incentive or penalty clauses based on the number code defects or software delivery times. This type of contract is best used when the amount of programming required to create the agreed-upon deliverables can be accurately estimated.
Revenue Share Contracts
A revenue share contract can only be used if the service provider will be creating a software product for a customer who will then be selling the software product to their customers. In this case, the service provider will develop the software at a reduced cost in exchange for a percentage of sales of the software product. Thus, the service provider and customer are sharing the revenue from the software product. This lowers the risk for the customer--if the product does not sell, they have not paid as much for the software as under a time and materials or fixed price contract. On the other hand, if the product sells very well, the terms of this type of contract often allow the service provider to receive more compensation that in other contract types.
A hybrid type of contract is one that combines several of the above approaches. For example, some contracts may have a fixed price design phase and a time and materials programming phase or a contract that combines a lower than usual fixed price with a revenue share component.