Loading video…
foundations & philosophy· Fred Brooks · 1986

no silver bullet

there is no single development, in either technology or management technique, which by itself promises even one order of magnitude improvement within a decade in productivity, in reliability, in simplicity.

brooks wrote this in 1986. forty years later it still holds.

no silver bullet: essence and accident in software engineering
Fred Brooks · 1986
open original

this paper is hosted by its original publisher.

read on ieeexplore.ieee.org

why this paper opens the course

every senior engineer eventually writes a version of brooks's argument: that the hard parts of software are not the parts a tool can take away. brooks did it first, and did it cleanest. the close-read here is about getting the actual argument out of the page, not the bumper sticker version.

it's also the right place to start the course. once you internalize the essence/accident frame, you can't read anything else the same way. every paper that follows either attacks accident more aggressively (out of the tar pit) or makes peace with essence (every distributed-systems paper, every modern ml paper). brooks gave us the vocabulary.

the core distinction: essence vs accident

brooks splits the complexity in any piece of software into two buckets.

accidental complexity is the difficulty our tools impose on us. memory layouts. build systems. deployment pipelines. the friction of expressing an idea in a language. things that exist because of how we currently build software, not because of the problem itself.

essential complexity is the difficulty of the problem we're modelling. the messiness of the world the software has to capture. tax codes. user behaviour. business rules that contradict each other. the part of the work that exists before any code is written.

almost every argument about productivity confuses the two. tools attack accident. the hard part is essence. and no tool, by itself, can shrink essence, because essence isn't in the implementation, it's in the problem.

this is why a faster compiler doesn't ship a feature any faster than a slower one, past a certain point. the bottleneck moved.

what's already been eliminated

look at what we've stopped doing:

  • assembly to high-level languages eliminated register juggling and address arithmetic.
  • garbage collection eliminated a whole class of memory bugs and the work of avoiding them.
  • frameworks eliminated routing, serialization, auth wiring, http plumbing.
  • ides eliminated manual navigation, hand-rolled refactoring, and most syntax errors.

every one of these was real progress. and every one of them, viewed honestly, was the elimination of accident: work that didn't need to exist in the first place.

brooks predicted this would run out. as accident shrinks, what remains is essence. and essence is harder.

the four irreducible properties

so why is essence so resistant? brooks gives four reasons, the four irreducible properties of essential complexity. once you see them, you stop expecting any single tool to make software easy. you start expecting trade-offs.

1. complexity

software is the most complex artifact humans build per unit volume. a bridge has parts that repeat: same beam, same bolt, copied a thousand times. a piece of software of equal cost has almost no repetition. every function does something different. every state is unique.

that property, no two parts the same, means the state space of a real program explodes. you can't reason about software the way you reason about physical objects. and the cost of understanding a system grows faster than the system itself.

2. conformity

software has to interface with the world it lives in. tax codes. banking regulations. legacy file formats. protocols designed in 1983. hardware quirks. other people's apis. none of those obey clean abstractions, because they weren't designed by you and they weren't designed to be clean.

the world's complexity becomes your software's complexity. no tool can change the world.

3. changeability

a bridge, once built, doesn't get reshaped. software does, every week. new features. changed requirements. compliance updates. a pricing change. the user's whim.

brooks's observation: software is soft, and because it's soft, people keep asking for changes. the very malleability that makes software valuable is the thing that prevents it from ever being finished.

4. invisibility

you can draw a building. you can sketch a circuit. you can render a mechanical part from any angle and the diagram tells you most of what you need to know.

software has no spatial geometry. every diagram you've ever drawn (flowcharts, layer cakes, dependency graphs, uml) captures one slice and lies about the rest. as a system grows, the diagrams stop helping.

the candidates brooks rejected

brooks then walked through the candidate silver bullets of his era. every call aged well.

candidatebrooks's verdicthow it aged
high-level languages (ada)useful, not transformativeright
object-oriented programmingreal but modest gainright
artificial intelligence (1986)won't replace programmersright for that era; see 2026 below
expert systemsniche, not generalright
automatic programminga recurring fantasystill recurring
graphical programmingsmall winsright
program verificationsmall winsright
environments and workstationssmall winsright

the pattern: each candidate attacked accident, none of them touched essence, none of them moved the bottleneck by an order of magnitude in a decade.

the four things that do help

brooks didn't stop at "nothing works." he named four things that do help, and they're worth memorising, because they're the same four things that still work in 2026.

  1. buy, don't build. most software shouldn't exist. the cheapest way to get a feature is to use someone else's.
  2. rapid prototyping. most requirements are wrong on first draft. build the smallest version, learn from it, then scale.
  3. incremental development. grow software the way you grow an organism, never the way you cast a statue.
  4. great designers. the difference between a good engineer and a great one is bigger than the difference between any two tools. invest there.

the pattern is: attack essence indirectly. through scope, through process, through people. not through technology.

brooks in 2026: does ai break the argument?

only the half brooks expected to be broken.

every wave of accident elimination (assembly to c, c to managed languages, managed languages to frameworks, frameworks to ai code generation) has shifted programming up the stack. ai is the biggest one yet. it's a real, structural reduction in the cost of expressing an idea. brooks would have called this exactly what it is: accident. a massive one.

but pay attention to what ai doesn't do:

  • it doesn't decide what to build.
  • it doesn't resolve conflicting requirements.
  • it doesn't know that finance regards tuesday-night batches as a religious holiday.
  • it doesn't tell you the diagram is lying.

the four properties (complexity, conformity, changeability, invisibility) sit exactly where brooks left them. the leverage shifts. the bottleneck doesn't.

how to take this paper into the rest of the course

the next paper, out of the tar pit by moseley and marks (2006), picks up exactly where brooks lands. same argument, sharper teeth, with a real proposal for what to do about the essence/accident split. read it as a sequel.

after that, every paper in this course is in some sense a response to brooks. the systems papers (parnas, codd, the unix paper) are about how to design so the essence stays small. the scale papers (dapper, the tail at scale) are about what happens when essence is cheap to move and accident takes over operations. the modern ml papers are about whether attention shifted us up another level on the stack.

keep the essence/accident question in the back of your head as you read. it's the most useful diagnostic in this course.

a note on the original

"no silver bullet" was first published in information processing 86 (the proceedings of the ifip world computer congress) and then reprinted, with very minor edits, as "no silver bullet, essence and accidents of software engineering" in ieee computer, april 1987 (volume 20, number 4). that's the version on ieee xplore, linked above.

brooks revisited the argument nine years later in "no silver bullet refired" (1995), reprinted in the anniversary edition of the mythical man-month. if you want the polished version, with brooks responding to a decade of objections, that's the one to read.

the original ieee paper is paywalled. we link to the canonical record rather than re-hosting; if your institution has ieee xplore access, the full pdf is one click away.

Command Palette

Search for a command to run...