you can structure your agreement with IBM/Accenture/etc based on deliverables. If they don't hit the deliverables by a certain deadline, they take on the extra costs. That's why they charge a lot up front -- as an insurance policy to guard themselves. At least that's my experience with IBM.