In fixed-price contracts, the payment amount does not depend on the resources used or time expended. This type of contract is usually preferred by clients, since they think it puts all the risk on the vendor’s side. In reality, such a contract may involve issues for both client and vendor. Agile practices such as Scrum can help reduce those risks and improve transparency, quality and value.
Deconstructing the Fixed-Price Contract
A fixed-price contract fully defines upfront cost, time and scope in detail, and legally binds the vendor and client. Other types of contracts — e.g., time and materials (T&M) — put risk on the client, who will have to trust the vendor to deliver a certain scope, at a certain quality, in a reasonable time, with a reasonable cost (and cost can vary significantly if the project is not properly managed).
The popularity of fixed-price contracts may stem from the desire of clients to know how much a solution will cost (and to budget accurately), as well as from a lack of understanding of how the software development processes can work. It is thought that a complete definition of requirements and scope at the beginning can help to better estimate cost and time. In practice, the assumption that all aspects of an engagement can be precisely described in advance is not realistic.
The fixed-price approach presents disadvantages not only for the vendor (e.g., when time or costs are underestimated), but also for the client. In cases of changing priorities, market conditions, etc., any significant changes to the scope can only be accommodated via change orders and, often, additional cost.
Moreover, vendors may cope with risk by introducing risk surcharges, causing an inflation of costs. And with underestimating issues, the vendor can only address them by adding resources or by working extra hours. These actions may have a negative impact on both client and vendor (extra costs, team morale issues, lower quality deliverables).
The consequences can be dramatic, as the majority of software projects are unsuccessful.
How Scrum and Agile Can Help
Agile practices can resolve the issues present within a fixed-price engagement by promoting communications between vendor and client. This in turn supports both the identification of high priority features and the continuous management and (re)prioritization of the backlog.
Transparency and interactions are extremely critical even before the project actually starts. Client and vendor must build trust and understanding in the early phases of their engagement, first, by providing each other with extensive education and a clear understanding of how the work will be conducted.
Then, in time-boxed preliminary sessions, client and vendor need to work together on requirement definition and prioritization, and agree on the top features. Rather than trying to provide detailed specifications of each requirement, this discussion should aim for the definition of business-oriented user stories, their acceptance criteria and high-level estimates in the form of story points, with client and vendor mutually agreeing on estimates for all work items.
The result of this activity is a prioritized backlog. This informs the time and cost of the project (i.e., the budget), based on the selection of which stories must/should/could be implemented, and on the vendor’s team velocity on previous projects. At this point the vendor has enough information to provide a price to the client.
After this preliminary phase is completed, the project is run in the iterative fashion typical of the Scrum framework:
- The client participates in sprint planning sessions to select the requirements to be implemented and provide clarifications to the development team.
- Risk is reduced and quality improved by working on a smaller set of requirements in each iteration, undergoing regular inspections and providing short feedback loops. The client can verify the deliverables and provide feedback regularly, as early as two weeks into the project. Any issues that are discovered can be corrected by the vendor right away.
- Working software is delivered at the end of each sprint. In this way, the client receives crucial features sooner, and can extract value from the project even during its early stages.
- Finally, a regularly updated backlog ensures that only the more critical and urgent functionality is worked on and delivered at any stage. In the case of changing market conditions, features that at the start were considered relevant may no longer have high priority. The client can trade requirements in and out, while the overall cost and time remain intact: the lowest priority requirements can be swapped out to make room in the budget for the new, more relevant items. In this way, we move from “change requests” to “exchange requests.”
The project continues until the budget is exhausted. It is also possible for the client to determine that the project can be closed earlier than planned, once key features have been implemented and delivered, since the remaining features in the backlog may be deemed no longer needed. Contracts should be worded to allow for this situation from the start.
The CTP Experience
These Agile practices align very well with the adoption of cloud environments, allowing the early definition — and continuous updating — of a prioritized backlog of features and requirements.
At CTP, this approach has allowed for increased flexibility, and the ability to meet clients’ needs in a variety of situations, ranging from the implementation of Minimum Viable Cloud (MVC) environments and application migrations for financial institutions, to the development of cloud-based solutions for media and manufacturing corporations.
Steps to Success
The client must actively participate in the project in the following ways:
- Have a complete understanding of, and alignment with the vendor on, how the project will be conducted
- Provide a list of requirements and features (backlog) and their prioritization
- Participate in the estimation/sizing of backlog items
- Define acceptance criteria for each backlog item and “definitions of done”
- Participate and contribute to the discussion and decisions during Sprint Planning events
- Provide feedback during Sprint Review events
- Regularly groom backlog (add/remove stories, update priorities)
It is integral to the success of the project that the points listed above are managed by a skilled and reliable resource assigned by the client for a substantial portion of her or his time for the duration of the project (in Scrum terms this is the Product Owner role).
All parties involved must always refer to the guiding Agile principles and values, including focusing on individuals and interactions, delivering working software, collaborating with the client and responding to change. Effective communications between client and vendor are key for the success of the Agile approach.
Vittorio MezzanoSenior Program Manager at CTP