There’s an old concept in software development called The Iron Triangle. At the core of this concept is that Scope, Quality, and Budget are the primary variables in any software project and, to many a manager’s dismay, only two of them can truly be fixed.
The problem with this concept is that the terms are far too nebulous to generate the kind of healthy discussion of tradeoffs that needs to occur on a successful project. It always devolves into semantic arguments over the meaning of the terms “Quality” and “Scope”.
So rather than talk about these constraints in abstract terms like quality and scope, why don’t we take a close look at the three rather constant and concrete demands that you'll get from stakeholders on the majority of software projects:
“I need it now”
Now. As in Right Now. To paraphrase Ferris Bueller, life moves pretty fast. If we don’t get something out the door, we could miss it. Rapid delivery means we get feedback, validation, and revenue faster.
Of course, there's actually something kind of liberating in needing it Now: We're already late. That means we just need to get it done as soon as we can, while balancing our other priorities and concerns.
“It has to work”
Software that doesn’t work not only has very little value, but can easily cause costs to skyrocket. Subtle defects lurking in your code can manifest themselves at the worst possible time, derailing your development efforts and putting your project in danger. While it seems obvious that the software we write should work, far too many teams ship stuff that doesn’t.
“It needs to do something different tomorrow”
Any piece of software has two kinds of value: What it’s worth today, and what you can make from it tomorrow. How far out your maintenance horizon goes varies between projects, of course. A web startup with a 3 month runway has different priorities than a 5 year corporate IT project. But if there’s any life left in it, a piece of software is going to need to change. We need to ensure the cost of change doesn’t spiral out of control.
I call these three demands The Polycarbonate Triangle. Unlike the iron triangle, you can have all three. In fact, I would speculate that most stakeholders would consider their project a failure if they had to give up on one of these three demands. The flexibility in the poly triangle comes from the definition of It. It has to work. I need It now. What is it? In exchange for meeting all their demands, your stakeholders should be expected to work with you to define It. Then your answer to these requests can be “Yes, of course. Now let’s talk about what it is that we’re supposed to build.”
That interaction between developers and stakeholders is essential. My preferred method in a conversation at a keyboard, but do whatever works for you. The important thing is creating a shared understanding of what It is, and why it is valuable.