No Silver Bullet - Essence and Accidents of Software Engineering
is a well-known paper on software engineering
written by Fred Brooks
in 1986. Brooks argues that there will be no more technologies or practices that will serve as "silver bullets
" and create a twofold improvement in programmer productivity over two years. The phrase is often quoted and applied to productivity, quality
, and control. It should be noted that Brooks states that this limitation to programmer productivity only applies to accidental complexity
and he advocated challenges to essential complexity
While Brooks insists that there is no one silver bullet, he believes that a series of innovations attacking essential complexity could lead to significant (perhaps greater than 10 fold in a 10 year period) improvements.
The article, and Brooks's own reflections on it, "'No Silver Bullet' Refired," can be found in the anniversary edition of The Mythical Man-Month.
At the heart of the argument is the distinction between accidental complexity
and essential complexity
. Accidental complexity relates to problems that we create on our own and can be fixed—for example, the details of writing and optimizing assembly
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 we have cleaned up much of the accidental complexity, and today's programmers spend the majority of their time addressing essential complexity. One technology that has made significant improvement in the area of accidental complexity was the invention of high level languages, such as Fortran. Today's languages, such as C, C++, C# and Java are considered to be improvements, but not of the same order of magnitude.
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 enthuses 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 10-fold 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, but also all the trappings of higher status (large office, staff, travel funds, etc.).
- "No Silver Bullet - Essence and Accident in Software Engineering", Brooks, F. P., Proceedings of the IFIP Tenth World Computing Conference, pp. 1069-1076, 1986.
- "No Silver Bullet - essence and accident in software Engineering", Brooks, F. P., Computer 20, 4 (April 1987), pp. 10-19.
- The Mythical Man-Month
- The Mythical Man Month (Anniversary Edition with four new chapters) Chap. 16 ("No Silver Bullet - Essence and Accident"), Brooks, F. P., Addison Wesley, 1995, ISBN 0-201-83595-9.
- The Mythical Man Month (Anniversary Edition with four new chapters) Chap. 17 ("'No Silver Bullet' Refired"), Brooks, F. P., Addison Wesley, 1995, ISBN 0-201-83595-9.
- History of software engineering