We do have 4 elements to work on:
- quality
- cost
- time
- scope
let's simulate 2 scenarios:
- scope, cost, time, are fixed, quality is variable
- cost, time, quality fixed, scope is variable
The first case in case of changes or underestimation or problems, what we can do to achieve the results?
- can we add another developer to the team? NO because the cost is fixed
- can we work 1 sprint more? NO, time is fixed, we have a deadline for example
- can we deliver less features? NO scope is fixed
- the only thing we can do is giving up on quality, TDD, testing, metrics and so on
That means during sprints we'll have unmotivated people, we deliver a bad product or in the worse case a not working one. The client will complain, maybe he refuse to pay and a tons of coming bugs paralyze the team in the following weeks, developers that feels the struggle will quit the job... And we are breaking one agile value: "produce software that works"
Don't give up on quality, please simply don't.
Let's see the second scenario:
- cost like above
- time like above
- can we give up on quality? NO IT'S FIXED!
- what can we do is simple: variate the scope, deliver less but fully working features, reduce bells and whistles, of course with the client collaboration.
That's is in line with agile methods:
- produce software that works
- responding to changes