In order to be useful in an outsourcing project, a software development methodology must work smoothly together with a business contract. Since ExtremeProgramming is a different kind of methodology in some important aspects, we might need a different kind of contract. Do we need an ExtremeContract? If yes, how does such a contract differ from a ClassicContract??
How do we formulate such a contract? KentBeck and MartinFowler suggest the following in their book PlanningExtremeProgramming:
Is there such a thing as an ExtremeContract?
In order to effective a contract must fulfill a number of criteria.
I have this feeling that it's not usually contracts the customer compares, but tenders following what's known as an invitation to tender. I'm not 100% on this, but I'm sure there must be someone here who can fill in the details or correct me. --ChrisSteinbach
Yes, of course. You are right. Maybe we are talking about an ExtremeOffer?? Anyway, it would be related to the contract (and have the same problems). --DanielBergh
You can also do some of this with a "Performance Based Contract". The contract establishes the performance-based criteria with appropriate severability clauses. Agreed-upon scopes for each itiration can be handled by 1 page contract amendments.
See also: http://www.xpsd.com/ServicesSchedulesAndFees and http://www.xpsd.com/ClockworkXP
I'm not sure if I understand what you mean with a PerformanceBasedContract?. Can you clarify? Performance (in the sense of amount of features per time unit) is not in the customer's primary focus but rather amount of business value for the invested money (of course that could be our definition of performance as well).
I think this is a common (simplified) scenario:
A wise customer would at least consider the following:
An offer could look something like the following:
We think that the following solution is what you need: (A very high level description of the solution. The description may differ from the requested requirements.) We promise that we can construct this solution in X months for Y dollars (here the supplier takes a risk) if we fail the following conditions apply (here the supplier guarantees its commitment). We don't guarantee that the technical solution is exactly the same as stated above (the customer shouldn't care anyway, and it's always good to have the freedom). During the project you will have the freedom of specifying the functionality at will. The implementation effort of the functionality you specify will be compared to the effort in the offered solution continuously, assure that you get the same amount of functionality as promised (and at least as much value).
The features of the proposed solution could be assigned values (a kind of FunctionPoints). The value of the UserStories developed during the project would also be assigned points. The exact number of points for a user story should be negotiated during the project and should roughly correspond to the number of points of a proposed feature requiring roughly the same amount of development effort. If the business value for a user story is higher than that of a proposed feature the point amount could be slightly higher (this will encourage the supplier to look for solutions with more value and encourage the customer to go for simpler solutions in case of equal value).
Special features of this process are:
FYI, I asked about Kent's OptionalScopeContracts on the extremeprogramming Yahoo group (http://groups.yahoo.com/group/extremeprogramming/message/56518). Very little came out of it - a couple of people had actually succeeded in having contracts similar to optional scope contracts.
I've read the article about OptionalScopeContracts. It doesn't deal with the problem that the customer wants a way to compare different suppliers before buying. Nor does it deal with risk sharing. Today we have the buyers market (at least where I live), and it is hard to imagine a customer accepting to risk a lot of money for just words... I do think we really need to address these issues! --DanielBergh