Founding papers Paper 1986

No Silver Bullet: Essence and Accidents of Software Engineering

Frederick P. Brooks Jr.

Information Processing 86 (IFIP), 1986; reprinted in IEEE Computer 20, no. 4 (April 1987), 10–19

Will any single new technology or method make software development dramatically more productive, reliable and simple?

The situation

By the mid-1980s software had become central to business and government, and it remained notoriously hard to build on time, on budget and without errors. Many new techniques promised relief: new languages such as Ada, object-oriented programming, artificial intelligence and expert systems, automatic programming, graphical programming, program verification, better environments and workstations.

Frederick Brooks was unusually qualified to judge. In the 1960s he had managed the development of IBM’s System/360 hardware and then its operating system, OS/360, one of the largest software projects of its time. His 1975 book The Mythical Man-Month drew lessons from that experience, including the observation that adding people to a late project makes it later. He was invited to give a paper at the 1986 IFIP world computing conference.

What it argues

Brooks opens with an image from folklore. Of all the monsters of nightmare, none terrify more than werewolves, because they turn unexpectedly from the familiar into horrors, and only silver bullets can kill them. Software projects, he suggests, are like werewolves: usually innocent and straightforward, they can become monsters of missed schedules and blown budgets. Everyone wants a silver bullet.

His central claim is that none is in sight: no single development, in either technology or management technique, promises by itself even one order-of-magnitude improvement within a decade in productivity, reliability or simplicity.

To explain why, he reaches for Aristotle. “Following Aristotle, I divide them into essence, the difficulties inherent in the nature of software, and accidents,” the difficulties that attend its production today but are not inherent. The essence of a software entity, he argues, is a construct of interlocking concepts: data, relationships, algorithms and functions. “I believe the hard part of building software to be the specification, design, and testing of this conceptual construct,” not the labour of representing it in a programming language.

He identifies four essential properties. Complexity: software has more distinct parts than almost any human construct, and its complexity grows faster than its size. Conformity: it must fit arbitrary interfaces imposed by people and institutions. Changeability: it is always under pressure to change, because it is easy to change and embodies function. Invisibility: it has no natural geometric representation, so it is hard to visualise.

Past breakthroughs, high-level languages, time-sharing and unified programming environments, had attacked accidental difficulties. Each had helped a great deal. But as accidental difficulty shrinks, essential difficulty dominates, and no tool for representation can remove it.

Brooks then surveys the candidate silver bullets of his day and finds each limited. His more hopeful section identifies approaches that attack the essence: buying software rather than building it, using rapid prototyping to refine requirements, growing software incrementally rather than building it all at once, and identifying and developing great designers.

The idea underneath

The paper is one of the clearest uses of Aristotelian philosophy in engineering. Aristotle distinguished the essence of a thing, what makes it the kind of thing it is, from its accidents, properties it happens to have. Brooks applies the distinction to difficulty itself. Some difficulty comes from what software is; some from how we currently make it. Only the second can be engineered away.

This gives decision-makers a powerful question for any proposed improvement: does it attack the essential problem or an accidental one? It also explains why claims of tenfold gains so often disappoint: they usually address accidents that are a shrinking share of the total. The outside view applies: the base rate for single technologies transforming software productivity is low.

Brooks’s emphasis on great designers connects to practical wisdom: the essence of software is conceptual design, which depends on judgement, cultivated through experience, more than on tools. His recommendation to buy rather than build is an application of transaction cost reasoning to software: if a market supplies a capability, the cheapest way to obtain it is usually not to make it.

How it was received and what followed

The paper became one of the most cited in software engineering and provoked a long debate. In the 1995 anniversary edition of The Mythical Man-Month, Brooks revisited it in an essay called “‘No Silver Bullet’ Refired”, maintaining his central claim while acknowledging progress, especially from reuse and object-oriented methods. His recommendations, buying instead of building, prototyping, incremental development and investing in designers, anticipated the shift to packaged and open-source software and to iterative and agile methods.

The arrival of AI systems that write code has reopened the question. If such systems can help specify, design and test conceptual constructs, and not only represent them in code, they would be attacking the essence, which Brooks thought impossible. The word processors essay discusses a parallel question for writing.

Reading it today as a decision-maker

Two habits from the paper repay practice. First, classify difficulties as essential or accidental before choosing remedies. Tools solve accidents. Essential difficulty needs better understanding of the problem, better design and better people.

Second, treat promises of dramatic gains from a single change with the scepticism Brooks recommended. The improvements that last tend to come from many modest changes, not one transformative one.

Sources and limitations

Short quotations are from the 1986 version of the paper, checked against an online transcription; wording differs slightly between the 1986 and 1987 versions, and some passages are paraphrased here for that reason. The UNC technical report is a scanned copy. The account of the later debate draws on Brooks’s own 1995 reflection. The assessment of how AI affects his argument is the author’s and is necessarily provisional.

Checked against history

What it predicted, and what happened

  1. Came true

    No single technology or method would produce a tenfold improvement in software productivity within a decade.

    Over the following decade, no single innovation produced such a gain, though many together improved practice substantially.

  2. Came true

    Buying software rather than building it would be among the most powerful ways to improve productivity.

    Packaged software, open-source libraries and cloud services became the dominant way to obtain most software capability.

  3. Came true

    Incremental development, growing software rather than building it, and rapid prototyping would help with the essential difficulties.

    Iterative and agile methods became mainstream from the late 1990s.

  4. Still open

    The essential difficulty of specifying and designing complex systems cannot be automated away.

    AI systems that generate code challenge this claim in new ways; whether they reduce essential or only accidental difficulty is now actively debated.

For people who decide

Lessons

  1. Distinguishing essential from accidental difficulty tells you which problems tools can solve and which they cannot.
  2. Claims of order-of-magnitude improvements from a single technology deserve scepticism.
  3. The most effective way to avoid building software is often to buy it.

Take it to your team

Questions to ask

  • Which of our difficulties are essential to the problem, and which are accidents of our tools and processes?
  • What are we building that we could buy?
  • Which promised "silver bullet" are we currently betting on, and what would it really change?

Follow the thread

Connections

Sources and rights

Read the original

Rights. The paper was published in IFIP conference proceedings in 1986 and reprinted by the IEEE in 1987. This page quotes short passages for commentary and links to the 1986 technical report hosted by the University of North Carolina, where Brooks taught.

  1. Frederick P. Brooks Jr., “No Silver Bullet. Essence and Accidents of Software Engineering,” UNC Department of Computer Science technical report TR86-020 (September 1986).
  2. Frederick P. Brooks Jr., “No Silver Bullet,” IEEE Computer 20, no. 4 (1987), 10–19.
  3. Frederick P. Brooks Jr., The Mythical Man-Month, anniversary edition (Addison-Wesley, 1995), including “'No Silver Bullet' Refired.”

How to cite

Shrikant Kumar. “No Silver Bullet: Essence and Accidents of Software Engineering (1986): annotated.” Annotated founding paper, Telos. https://shrikantk.com/papers/no-silver-bullet/

↑ ↓ to move↵ to open⌘K to toggle