Structuring Software Development Relationships

The two parties in a new Software Development Relationship don't know each other, so what's the best way to structure their relationship?

We want the contract to be fair in distributing risk between the parties. We want to write the contract in such a way that neither side has an incentive to take advantage of the other. Finally, we want to write the rules of the game such that when things go awry, both sides have an incentive to fix the situation rather than descend into worse.

On the one hand, Early Stage IT does work for clients and that puts us in a "supplier" role. On the other hand, as virtual CIO for our clients, we play a "client" role vis-a-vis other suppliers. With both roles in mind, we did a survey of billing practices people employ. In this search, we favored billing practices that align with agile development. To cite some models: