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.