Better/Sooner/Cheaper/More—I began talking this week about a fundamental Extreme Programming technique for managing resources & immediately remembered why I stopped talking about it. Here are the basics.
Back in the day folks would say, “Sooner, cheaper, better—your choice of any two.” That made good sense in that you as a customer can’t dictate all three. At some point something is going to give. You keep demanding sooner, sooner, sooner, cheaper, cheaper, cheaper & what you get is going to get worse. Complaining about this makes no sense—the degradation was the result of your decisions.
I liked this “2 of 3” model because it aligned authority with responsibility. You (the customer) made the decision, you lived with the consequences. However, it didn’t match software development well. If the expected output is fixed, as in journeying to a known destination or delivering a known consumer item, then it makes sense. Software development, however, doesn’t have a fixed “it” around which to answer the questions, “When will it be done?” & “How much will it cost?”
If I am printing 100 posters, Better/Sooner/Cheaper makes sense. Software is more like cooking a meal for someone. There has to be a main course, or it’s not a meal. If I burn the soup, then we don’t have soup. If I have time I cook a fancier sauce, or make an appetizer or dessert. We know what is & isn’t a meal but the precise elements vary as the process unfolds.
In XP I expanded the model to include scope, the “More” of this article’s title. Instead of 2 of 3, Extreme Programming aims to deliver 3 of 4, but Better is always one of the 3. So you can have:
-
Better/Sooner/Cheaper—limit scope but accelerate feedback, what I’ve also called the Explore phase of development.
-
Better/Sooner/More—deliver features quickly without constraining cost, what I’ve called the Expand phase of development.
-
Better/Cheaper/More—economically deliver for long-run, large-scale value, what I’ve called (you guessed it) Extract.
I chose “better” as the fixed point of development partly for purely selfish reasons. I hate doing half-assed work. I think there is also an economic argument for better software, but the market appears to disagree, so I could be wrong about that.
I’ll get to the connection between TF? and Better/Sooner/Cheaper/More soon, but first I want to describe the tarpit I’ve stepped in by daring to talk about quality. What is “better”? To whom? Who decides?