I wanted to post a follow-up to last week’s post. I really like looking through the lens of “We could theoretically finish eventually, but do we have enough time and money to get there?”, which is really just a practical implementation of the “iron triangle” (fast, cheap, good, pick two). But there’s another nuance here that I think is important, especially as a leader.
It is my belief that, in the realm of engineering generally and software specifically, that pretty much anything is possible, given enough time and money. I think there was an old Isaac Asimov book that explored this topic. Namely, if you had a world-class development team, with unlimited budget and unlimited time, they could probably build almost literally anything you want. The issue is not the existence of the possibility; the issue is that in the real world, budgets or timelines are not unlimited. Instead, it’s about understanding how to look at the time, money, people, and resources you have, and then figuring out how far you can go.
Here is where Agile and Waterfall differ. Waterfall, and classical systems engineering, says “let’s analyze our requirements, build effort estimations, and then based upon our time and money constraints, draw a cutline.” Agile says, “Let’s just start working, in priority order, and see how far we can get before we run out of time and money.”
(Gross oversimplifications, of course.)
This concept has been immensely valuable to me when working with product owners or clients. As their wish list grows and grows, I frequently state exactly what I’ve said above, “Given enough time and money, we can do whatever you want. But where are the constraints on time and money here?”
(Or, more amusingly, if someone asks, “Can you do X?”, I sometimes reply, “Given enough time and money, sure.”)