In-house development is done by customer’s own programmers, while contract development is done by an outside company. In both cases, the programmers are generally paid for the act of writing software, rather than for the software as in the case of the retail paradigm. The customer can dictate whether the software will be exclusively for that customer or will be made accessible to others. So, the customer controls distribution, and the paradigm is differentiating software. Generally, the contractor will try to use some of the work done for a customer in other projects. So, the cost can be shared between more customers, each being charged less. However, it may happen that the contractor sells business differentiators, which may damage the business. Also, the customer sustains the cost and risk of development. But in order to be justified, the new software must not have a duplicate (re-inventing the wheel) because it would be a waste of money.