Why a Fixed-Price Contract Is the Worst Choice for Your Project: 3 Key Reasons
Choosing a fixed-price contract for custom software development services can be tempting for business executives seeking to outsource product creation. After all, what could possibly go wrong with predetermined deadlines, a set scope of work, and a fixed budget? Unfortunately, the answer is everything.
Our team has completed dozens of projects, developing tailor-made software solutions for businesses across industries. I also keep in touch with my colleagues in the developer community. This allowed me to collect numerous practical insights into how this — “seemingly safe” contract type — jeopardizes project success and what pitfalls it hides behind its shaky facade of predictability.
In this article, I summarize these insights into three key reasons explaining why a fixed-price model is a bad idea for both the client and the development team.
Disclaimer: The discussion below focuses exclusively on custom development projects. The conclusions drawn in this article can not be universally applied to other types of tech projects with a significantly lower level of uncertainty, including the implementation, customization, and integration of off-the-shelf tools (SAP, Microsoft, Oracle, Salesforce, etc.).
Fixed price results in low quality
Fixed-price contracts “fix” three key components: the scope of work, timelines, and project costs. So, when a development team enters a fixed-price contract, they are obliged to deliver a software solution with predefined functionalities by a specific deadline. Meanwhile, a client commits to pay an agreed-upon amount for this work. The price is determined before the project begins and remains constant, regardless of the actual time invested by the development team.
Now, let’s look at the project management triangle (image below) that shows the connection between these three components and the quality.
Relying on this triangle, many believe that you get a certain guaranteed level of quality if you “fix” the time, scope, and costs in the contract. Sounds great, right? I’ve met many business executives who wanted to sign a fixed-price contract because they thought this assumption is true. Unfortunately, when it comes to tailor-made software development, it just doesn’t work.
In practice, when time, scope, and costs are "fixed," the quality often takes a hit. Why? Because it’s not clearly defined in the fixed-price contract. Sure, you can include some quality requirements when drafting an agreement with a development team, but the level of detail is always limited. In most contracts, quality requirements take about half a page. So, what do you get as a result?
A development team working under a fixed-price engagement model focuses on the elements outlined in a contract. Their main goal is to deliver the features from the scope within the agreed deadline and without exceeding the estimated time for project completion. Now, what's the problem with this approach, you might be wondering?
Well, it means many crucial aspects that impact the quality of tailor-made software solutions fall off the radar. These include refactoring, code readability, clarity, efficiency, the future maintainability of the product, and more.
Let's draw an analogy with cars. Imagine that you decide, for whatever reason, to build a custom car. If you fix the scope, time, and cost in a contract, you might expect to receive a car akin to the Mercedes-Benz C-Class or, at least, Volkswagen Golf. But what you end up with is more like Geely CK. It includes all the features you specified in the scope, delivered within the agreed timeline and budget. Technically, you don't have any grounds for complaint. However, the quality doesn't match that of the Mercedes-Benz C-Class or even the Volkswagen Golf.
Summing up, when you come across a "successfully delivered" custom software development project, try to peek under the hood or even talk to the team if you can. I bet that in 9 out of 10 cases, you'll discover new details about technical debt, scalability challenges, technical compromises, documentation that doesn't quite match reality, poor automated test coverage, dependence on outdated frameworks and libraries, or even worse. Meanwhile, the solution itself may very well meet all the contractual requirements.
Fixed price is actually a high price
Completing a tailor-made software development project under a fixed-price model will cost you more than doing the same project under the time and material model. This statement might sound counterintuitive, so let’s explore the reasoning behind it.
To start with, a fixed-price contract comes with hidden costs for both the client and the development team.
Before the project even begins, the client invests resources in outlining all the functional and non-functional requirements in great detail. However, as the project unfolds, some requirements become outdated, irrelevant, or may even conflict with others. As a result, the client pays for detailing requirements that will never be implemented.
A development team, in turn, invests a significant amount of time in an in-depth analysis of the client's request, planning, estimation, and risk assessment — all before even knowing if a contract will be signed. You might think these costs shouldn't concern you as a client, but it's not that simple. Development teams usually factor in these expenses when estimating a project to avoid operating at a loss.
What’s more, your project's estimation might also indirectly cover the team’s expenses on the estimation of other projects. That’s because a development company typically participates in multiple pre-sales negotiations but only closes deals with one or two prospects. It means the profits from the deals the team wins should cover the costs incurred from estimating the projects it doesn’t get.
In a fixed-price contract, a custom application development company takes on the risk of unexpected issues and underestimated tasks that might result in extra work. To handle this, they usually set aside 25-60% of the project estimation as a safety net. This way, they won't operate at a loss if unforeseen challenges come up. And if things go smoothly, they will simply earn more.
The size of the safety net typically depends on the project's complexity and the level of uncertainty involved. It can significantly drive up the project price if a request is unusual, the requirements are vague, the number of potential integrations is high, or the client lacks a solid understanding of what a final solution should look like.
Implications of inaccurate estimations
What happens when the development team gives an inaccurate estimation without factoring in a sufficient safety net? Does the client end up getting the project completed for a lower price than it actually costs? Nope, that's never the case with fixed-price contracts.
For a development company, such a project becomes financially unattractive. To prevent losses due to a pre-sale mistake, they might try negotiating with the client to reduce the scope of work or increase the price. These negotiations are usually lengthy and tedious, often involving legal representatives from both sides and, thus, leading to extra resources and costs. They can also cause delivery delays.
In real-world scenarios, if this situation comes up, clients often agree to a price increase to finalize the ongoing project stage and then look for another vendor for subsequent stages. Finding a new development team ready to take over a project midway is also a challenge that needs a lot of time.
So, when signing a fixed-price contract, you may believe that you’re establishing the upper limit on expenses, but in reality, you’re just setting the minimal price you’ll pay for the project. Doesn’t seem like something you’re looking for, does it?
Fixed price leads to conflicts
Many business executives opt for a fixed-price contract for custom software development services, hoping that its clarity will help them avoid misunderstandings. However, the reality is usually the opposite. Choosing this model often leads to conflicts within the development team or between the development team and the client.
Conflicts within the development team
The development team working under a fixed-price model is constantly under pressure. That’s because programmers know that they should not exceed time estimates. But it’s not always possible for a number of reasons.
First, pre-sale estimations are often made by experts different from those who actually implement the project. For instance, senior programmers may estimate a project while the actual work is done by mid-level programmers. Task overruns can also stem from unclear requirements, inconsistent designs (when actual designs differ from the mockups in the proposal), and more. Essentially, these issues boil down to the following: a guess-based project estimation turns out to be wrong.
So, what happens when tasks take longer than expected? A project manager, responsible for ensuring that work aligns with estimates, tries to identify the problem and encourages programmers not to overrun the estimate. This often triggers conflicts within the development team and ultimately affects the quality of deliverables.
Conflicts between the development team and the client
Building a custom software solution from scratch is a complex and often lengthy process. A lot can change after the client signs a contract with the development team, prompting the need to tweak requirements.
While clients may view these tweaks as "clarifications," for a development company, they imply a change in scope that requires adjusting the timeline and budget. Every time a situation like this happens, it triggers a series of emails, meetings, and negotiations where both parties strive to persuade the other.
Integrations are another common source of conflicts between a development team and a client working under a fixed-price contract. Many custom solutions need to be connected to third-party systems used by the client. However, obtaining the data from these systems for development and testing can be challenging. So, not to block the project, a development team uses mocked data. But when the third-party systems are eventually integrated, it often turns out that the actual data differs from the mocked data.
In that case, the development team has to adjust the logic behind the solution, run additional tests, or even modify the design. Typically, a development company views this as extra work that the client should compensate for. On the other hand, clients believe that the development team should have factored this risk into the estimation and, as a result, refuse to pay more.
So, opting for a fixed-price contract often leads to a tense workplace environment and conflicts, leaving little room for productivity and creativity. Experienced project managers can usually handle these misunderstandings. But does it make any sense to waste resources on managing conflicts instead of avoiding them from the get-go? I don’t think so.
What’s the alternative?
So, what should you do if you need to develop a custom solution with a predefined budget and strict deadlines, and a fixed-price contract isn’t an option? Here are a few recommendations:
- Consider your project as something you have to do together with a development team, not something a development team alone does for you. A development company and a client are partners pursuing a common goal. They must collaborate to achieve it.
- Choose a custom application development company you can trust. Gather recommendations from other business managers, read reviews on Clutch and other platforms, and study portfolios of various vendors. If you still need more information to decide, schedule five to ten meetings with different vendors to choose the one that appears most reliable and professional.
- Give a development team a clear understanding of what you need to build and why. Share details about your target audience, business objectives, any known risks and limitations, etc.
- Share your budget with a development team, specifying three figures: the amount you wish to spend on the project, the amount you expect to spend, and the maximum limit beyond which you cannot proceed. An experienced development team can organize the process much more effectively when they understand the financial constraints.
- Choose a time and material contract. Start the project by creating story maps, designs, and high-level feature descriptions and evaluations. You’ll need to engage only a few experts for this job, and they will later become the core of your development team. Add new experts when necessary.
- Together with the project manager from the development team, keep track of the project's progress and current and expected expenses. Regularly reassess the scope of work in a backlog and adjust the team's priorities based on their actual performance and results.
- Communicate with a development team and project manager. Welcome their advice and feedback. You have the final say over matters like addressing tech debt or introducing new features. But it’ll allow you to make a decision having all the necessary information from the team.
You might think these recommendations are trivial, but they are crucial for the success of any software development project. Unfortunately, as practice shows, not all business executives follow them, often ending up with low-quality custom solutions.
It is best to stay away from fixed-price contracts if you want your tailor-made software development project to succeed. Contracts of this type might appear compelling, predictable, and clear, but, in reality, you risk getting into conflict with the development team and ending up with an overpriced subpar solution.
Have a product idea and need expert advice? Contact us, and we’ll be happy to answer all your questions.