No Silver Bullet
   HOME

TheInfoList



OR:

"No Silver Bullet—Essence and Accident in Software Engineering" is a widely discussed paper on
software engineering Software engineering is a systematic engineering approach to software development. A software engineer is a person who applies the principles of software engineering to design, develop, maintain, test, and evaluate computer software. The term '' ...
written by
Turing Award The ACM A. M. Turing Award is an annual prize given by the Association for Computing Machinery (ACM) for contributions of lasting and major technical importance to computer science. It is generally recognized as the highest distinction in compu ...
winner
Fred Brooks Frederick Phillips Brooks Jr. (April 19, 1931 – November 17, 2022) was an American computer architect, software engineer, and computer scientist, best known for managing the development of IBM's System/360 family of computers and the O ...
in 1986. "No Silver Bullet—Essence and Accident in Software Engineering" Brooks argues that "there is no single development, in either technology or management technique, which by itself promises even one
order of magnitude An order of magnitude is an approximation of the logarithm of a value relative to some contextually understood reference value, usually 10, interpreted as the base of the logarithm and the representative of values of magnitude one. Logarithmic dis ...
enfoldimprovement within a decade in productivity, in reliability, in simplicity." He also states that "we cannot expect ever to see two-fold gains every two years" in software development, as there is in hardware development (
Moore's law Moore's law is the observation that the number of transistors in a dense integrated circuit (IC) doubles about every two years. Moore's law is an observation and projection of a historical trend. Rather than a law of physics, it is an empir ...
).


Summary

Brooks distinguishes between two different types of complexity: accidental complexity and essential complexity. This is related to
Aristotle Aristotle (; grc-gre, Ἀριστοτέλης ''Aristotélēs'', ; 384–322 BC) was a Greek philosopher and polymath during the Classical period in Ancient Greece. Taught by Plato, he was the founder of the Peripatetic school of phil ...
's classification. Accidental complexity relates to problems which engineers create and can fix; for example, the details of writing and optimizing
assembly Assembly may refer to: Organisations and meetings * Deliberative assembly, a gathering of members who use parliamentary procedure for making decisions * General assembly, an official meeting of the members of an organization or of their representa ...
code or the delays caused by batch processing. Essential complexity is caused by the problem to be solved, and nothing can remove it; if users want a program to do 30 different things, then those 30 things are essential and the program must do those 30 different things. Brooks claims that accidental complexity has decreased substantially, and today's programmers spend most of their time addressing essential complexity. Brooks argues that this means shrinking all the accidental activities to zero will not give the same order-of-magnitude improvement as attempting to decrease essential complexity. While Brooks insists that there is no one
silver bullet In folklore, a bullet cast from silver is often one of the few weapons that are effective against a werewolf or witch. The term ''silver bullet'' is also a metaphor for a simple, seemingly magical, solution to a difficult problem: for example, pe ...
, he believes that a series of innovations attacking essential complexity could lead to significant improvements. One technology that had made significant improvement in the area of accidental complexity was the invention of
high-level programming language In computer science, a high-level programming language is a programming language with strong Abstraction (computer science), abstraction from the details of the computer. In contrast to low-level programming languages, it may use natural language ...
s, such as
Ada Ada may refer to: Places Africa * Ada Foah, a town in Ghana * Ada (Ghana parliament constituency) * Ada, Osun, a town in Nigeria Asia * Ada, Urmia, a village in West Azerbaijan Province, Iran * Ada, Karaman, a village in Karaman Province, Tur ...
. Brooks advocates "growing" software organically through incremental development. He suggests devising and implementing the main and subprograms right at the beginning, filling in the working sub-sections later. He believes that programming this way excites the engineers and provides a working system at every stage of development. Brooks goes on to argue that there is a difference between "good" designers and "great" designers. He postulates that as programming is a creative process, some designers are inherently better than others. He suggests that there is as much as a tenfold difference between an ordinary designer and a great one. He then advocates treating star designers equally well as star managers, providing them not just with equal
remuneration Remuneration is the pay or other financial compensation provided in exchange for an employee's ''services performed'' (not to be confused with giving (away), or donating, or the act of providing to). A number of complementary benefits in additio ...
, but also all the perks of higher status: large office, staff, travel funds, etc. The article, and Brooks's later reflections on it, "'No Silver Bullet' Refined", can be found in the anniversary edition of ''
The Mythical Man-Month ''The Mythical Man-Month: Essays on Software Engineering'' is a book on software engineering and project management by Fred Brooks first published in 1975, with subsequent editions in 1982 and 1995. Its central theme is that adding manpower to a ...
''. ''The Mythical Man-Month'', chapter 17


Related concepts

Brooks's paper has sometimes been cited in connection with
Wirth's law Wirth's law is an adage on computer performance which states that software is getting slower more rapidly than hardware is becoming faster. The adage is named after Niklaus Wirth, a computer scientist who discussed it in his 1995 article "A Plea ...
, to argue that "software systems grow faster in size and complexity than methods to handle complexity are invented".


See also

*
History of software engineering The history of software engineering begins in the 1960s. Writing software has evolved into a profession concerned with how best to maximize the quality of software and of how to create it. Quality can refer to how maintainable software is, to it ...
*
Software prototyping Software prototyping is the activity of creating prototypes of software applications, i.e., incomplete versions of the software program being developed. It is an activity that can occur in software development and is comparable to prototyping as ...
, one of the main strategies against essential complexity in "No Silver Bullet" *
SOLID (object-oriented design) Solid is one of the four fundamental states of matter (the others being liquid, gas, and plasma). The molecules in a solid are closely packed together and contain the least amount of kinetic energy. A solid is characterized by structural ...
*
Essential complexity (numerical measure of "structuredness") Essential complexity is a numerical measure defined by Thomas J. McCabe, Sr., in his highly cited, 1976 paper better known for introducing cyclomatic complexity. McCabe defined essential complexity as the cyclomatic complexity of the reduced CFG ( ...


References


Further reading

* * * * *


External links

{{Wikiquote, Fred Brooks
No Silver Bullet — Essence and Accident in Software Engineering
by Frederick P. Brooks, Jr.

Steve McConnell Steven C. McConnell is an author of software engineering textbooks such as ''Code Complete'', ''Rapid Development'', and ''Software Estimation''. He is cited as an expert in software engineering and project management. Career McConnell graduat ...
's comments on the dichotomy, originally published in ''
IEEE Software ''IEEE Software'' is a bimonthly peer-reviewed magazine and scientific journal published by the IEEE Computer Society covering all aspects of software engineering, processes, and practices. Its mission is to be the best source of reliable, useful ...
'', Vol. 16, No. 2, March/April 1999 1986 documents Academic journal articles Software engineering papers Software project management