I love to discover new ways of thinking. For years I have balanced three tradeoffs in software development: Fast, Cheap and Good. Pick only two of the following:
- Build software fast
- Build software inexpensively
- Build software with high quality
If you want software built fast and cheap, then quality will suffer. If you want software built fast with high quality, it is going to cost you. If you want software built cheap with high quality, it is going to take a long time.

I heard of this “pick two-of-three” quandary early in my career and it seemed to make sense. I begrudgingly adopted this mantra and reiterated it from time-to-time over the years. However, while seeming intuitive at first there has always been something that has irritated me about this way of thinking about software development.
There is a big problem with framing the world of software development this way. Guess which one of the three loses out almost all the time when a CEO is demanding results? No surprise here, quality loses. Competitive pressure, time to market necessities and customer demand always push for fast. Undercapitalized start-ups and tight budgets necessitate the cheap. Furthermore, ramping additional developer capacity is a somewhat inelastic endeavor. It’s not always easy to throw money at a project (even if you have the money) because of the ramp-up period that all engineers require to achieve peak effectiveness with a new codebase and new team environment. Many software projects do not lend themselves to pouring-in more manpower. Somewhat analogously, nine women can’t have a baby in one month.
Well, I’ve figured out what has annoyed me about this way of thinking about software development. And it feels good to have a new outlook on the perceived tradeoffs!
I’ve been focusing the development department here at Infusionsoft on improving quality for several years. The investment in software quality is paying off. For example, over the last two years, my team has reduced the number of calls coming into our technical support department that are defect related by almost 200%! This has also played a big part in our terrific response time in the Infusionsoft technical support department. We routinely answer the support phones after just a few rings and have under a two-minute average speed of answer (ASA) score.
The other night I was meeting with my director of software development, Dr. Perry Reinert. While discussing the ongoing quest to improve quality and our vision to take Infusionsoft software quality to yet another level of excellence, we were also reviewing and prioritizing the list of initiatives we want to accomplish this year. After a couple hours of calendaring, capacity planning and prioritizing a big list of seemed to be “A-1, top” priorities, we both got to a place of feeling overwhelmed with all the cool things we want to do to the software. At this point, I quipped the “pick two-of-three” mantra that I described above. So Perry then whiteboards the following:

Yup, that’s it, I thought after staring at it for a few seconds. I now have a new paradigm of the tradeoffs involved in building software. As it turns out, it is still a “pick two-of-three” decision. However, look at the big “Q” in the middle of the diagram. Quality is a constant that is never compromised!
Intuitively, I have believed this for a very long time and I now see what has always bugged me about feeling like software quality is somehow up for negotiation. When quality suffers, the fully loaded cost (both in terms of time and expense) of software development is far greater. When quality suffers, technical debt accumulates. I have learned that the interest rate on technical debt is a very heavy burden to bear. When technical debt accrues, everything takes more time, everything costs more and perhaps most importantly, quality code becomes harder to achieve and maintain.
In the new model, if you want a lot of software (scope) developed fast, it will cost you. If you want a lot of software developed cheap, it will take some time. If you want software developed fast and cheap, you will be restricted in the amount of software you can produce. Quality is omnipresent in Infusionsoft software.
I’ve often noted how uncanny it is that software development methodologies and paradigms parallel wide-ranging business issues and matters in life generally. If you see parallels or an application of this balancing act in your development shop, business or life then post your comments and share your thoughts.
—Marc
Come over to my office and tell my clients this… we can watch their reaction together and you can blog the results…
Does accessing custom fields through the API make it into your “A-1, top” priorities list? ETA?
Great post Mark. After building 30 business-centric PHP/MySQL web applications and launching 700 destination travel sites and 6 iPhone Apps (1 in the top 70 paid), I can confirm that attempting to compromise quality will always cost extra time and money in the end.
Like you said… Pick 2 ($, Time, Scope) Quality must be a constant that is never compromised to save time, money or to increase scope. However, sometimes reduced scope does not always cost less time or money, it can often cost more of both. Reduced scope typically results in a more easily understood and more quickly adopted product. Most users don’t really want more features, they want easy, fast & intuitive. The paradox is that reduced scope often takes longer because it’s harder to chisel than it is to sculpt.
“Furthermore, ramping additional developer capacity is a somewhat inelastic endeavor. It’s not always easy to throw money at a project (even if you have the money) because of the ramp-up period that all engineers require to achieve peak effectiveness with a new codebase and new team environment”
See “The Mythical Man-Month”, 1975, from an IBM’er who worked on OS/360. It’s actually worse than your description – throwing more resources at software development has been found to increase the development time, because of the additional (time) cost in handling the exponentially-increasing communication with the other developers.
I love your final picture – bringing “scope” into the triangle highlights another reason that development times stretch out – “feature creep”
Hey Marc – I think you nailed it. As you know, these quality concepts are very apparent with our development focus. We are constantly talking about increasing quality and not injecting technical debt. This attitude is especially important when you’re building an application that will be “long lived” such as Infusionsoft.
After we talked that day, I thought about this topic some more. An interesting note is that you actually *CAN* have more scope, faster, and cheaper. You can’t get it in the short-term, but I believe you can get it in the long term. How? By adding knowledge, skill, and/or proficiency. When an individual or team increases these attributes of knowledge, skill, or proficiency, they are increasing capacity. This capacity gets you more scope, faster and cheaper (ok, maybe not all three at the same time, but you get the idea). We are essentially growing our triangle. This is why it always pays to “sharpen the saw” (from Steven Covey).