There are three main constraints in manufacturing that are sometimes referred to as the “iron triangle.” These are scope, time, and resources. In manufacturing they say, “Pick two of these three things to flex, but one must remain fixed.”
But this model does not apply to software development.
Scope refers to the size of the project or the amount of work to be done.
Time refers to when the project will be finished or how long it will take.
The “resources” for developing software are people. And because developing software requires a great deal of communication and coordination among people, when we add more people to a project it almost always has the short-term effect of slowing the project down. Assembling software is not like assembling a car. In software development, resources are generally fixed because adding more people to a project doesn’t make it go faster.
On a Waterfall project, scope and time are also fixed, which often creates a nearly impossible situation.
If scope, time, and resources are all fixed then what’s left to flex? Developers know the answer to this question because they often find themselves in this situation. When all three sides of the iron triangle are fixed the only thing that can flex is the quality of their own work — and this is the one thing that developers must not compromise on.
As we start cutting corners and rushing we start making little mistakes that cluster into big mistakes that cost considerable time (and therefore money) to find and fix. Teams very quickly get on a downward spiral that puts them in a reactive rather than proactive development environment.
A real and sincere effort toward quality software has been the hallmark of every highly productive team I’ve ever seen.