For the first time I heard about agile software development in 2002. It was obvious for me that many of these ideas are right. I adopted unit testing, refactoring, iterative development and a few other techniques. However, I could not imagine a project where, in my opinion, the most important concepts are obeyed - no fixed releases (in terms of provided functionality) and no fixed scope of project or no fixed deadline for the entire project.
Of course, for me as the developer it is a very good situation. If it takes more time than I thought initially to solve a problem, it can always be done carefully. Nevertheless, I could not imagine a customer that would like to go for such a deal. This would require a large amount of trust between two companies.
Recently I read Jay Packlick’s presentation on Agile Customer Collaboration (page is in Polish, but presentation in English; and here is a direct link to the presentation). Jay presents here a few very interesting ideas on Agile Contracts. For example Multi-Stage Contract, where the entire project is divided into a set of small releases. After each release companies choose whether to continue, re-negotiate or walk away. This gives both parties much control over the project’s course. Who knows, maybe it even works?