“Good, Cheap, and Fast: Pick Two” Means Bad And Maybe One Of The Two Chosen
Andrew Binstock (not Birkenstock) writes about how quick many projects are to sacrifice quality in the futile effort to get fast and cheap:
Consultants who specialize in jumping into sinking projects to get them back on course frequently encounter the same forms of lax discipline. These typically include a lack of good design, a lack of coding standards, a lack of code reviews, a lack of unit testing, poor QA, and, of course, a lack of basic project management skills. When called into such tasks, the first thing consultants will do is attend to the low-hanging fruit: They establish basic check-in procedures, teach the use of unit tests, start doing code reviews, and so forth. All new actions tend towards one goal: improving project reliability. Intuitively, this makes sense.
It makes sense objectively too, because we know that the earlier defects are found in the development life cycle, the faster and less expensive they are to fix. So, if you improve reliability, you improve delivery timetables and cost. Reliability inherently leads to lower costs and faster delivery. This all seems clear, reasonable, perhaps even obvious.
Most places, however, don’t work under this “obvious” relationship of speed, quality and cost. Rather, their actions reflect the glib canard frequently repeated in dev circles: “Good, fast, cheap: pick any two.” Asserting an opposition between these three elements is to misunderstand how quality imbues the project with the other two qualities. And for this reason, when products fall behind, managers and developers typically forgo quality to gain the benefit of time (and secondarily of cost).
You would think that any developers or project managers with experience would learn to do things differently when the projects encounter difficulty arising from trying to do things quick and dirty. However, there’s another saying: You can’t teach “talent.” I think it means something different from how I’ve experienced it, which is that you cannot teach people who know it all anything at all.
