Like many famous papers, Fred Brooks No Silver Bullet is more referenced than read but it deserves better. Here is Brooks explaining why verification hype, for example the recent vast investment in marketing supposed security levels of Common Criteria Software (“EAL”), needs to be taken with more than one grain of salt:
More seriously, even perfect program verification can only establish that a program meets its specification. The hardest part of the software task is arriving at a complete and consistent specification, and much of the essence of building a program is in fact the debugging of the specification.
And here is Brooks getting at the core economic issue
Buy versus build. The most radical possible solution for constructing software is not to construct it at all. […] A surprising thing has happened here. During the 1950’s and 1960’s, study after study showed that users would not use off-the-shelf packages for payroll, inventory control, accounts receivable, and so on. The requirements were too specialized, the case-to-case variation too high. During the 1980’s, we find such packages in high demand and widespread use. What has changed? Not the packages, really. They may be somewhat more generalized and somewhat more customizable than formerly, but not much. Not the applications, either. If anything, the business and scientific needs
of today are more diverse and complicated than those of 20 years ago.The big change has been in the hardware/software cost ratio. In 1960, the buyer of a two-million dollar machine felt that he could afford $250,000 more for a customized payroll program, one that slipped easily and nondisruptively into the computer-hostile social environment. Today, the buyer of a $50,000 office machine cannot conceivably afford a customized payroll program, so he adapts the payroll procedure to the packages available. Computers are now so commonplace, if not yet so beloved, that the adaptations are accepted as a matter of course.
Finally, here is Brooks explaining the thing that is most difficult for big companies to accept.
Whereas the difference between poor conceptual designs and good ones may lie in the soundness of design method, the difference between good designs and great ones surely does not. Great designs come from great designers. Software construction is a creative process. Sound methodology can empower and liberate the creative mind; it cannot inflame or inspire the drudge