I read Frederick P. Brooks’s classic when the second addition came out; in the unlikely case that you are reading this entry, are involved with software development in any way, and have not read this book — make sure to change this ASAP. (The fascinating thing about the book is that it’s now about 30 years old, describes a project from the late 1960s (the design of the IBM/360 OS, IIRC), and still has so many truths in it that it’s simply unbelievable we make the same mistakes today.) I just linked to it now because I came across an essay from 1986 that was included in the anniversary edition, and saw that it’s available online. I haven’t checked, but I believe this essay coined the term “No Silver Bullet” — and like the book, it’s well worth a read even after almost 20 years:
The hardest single part of building a software system is deciding precisely what to build. No other part of the conceptual work is as difficult as establishing the detailed technical requirements, including all the interfaces to people, to machines, and to other software systems. No other part of the work so cripples the resulting system if done wrong. No other part is more difficult to rectify later. […] For the truth is, the client does not know what he wants. The client usually does not know what questions must be answered, and he has almost never thought of the problem in the detail necessary for specification. […] I would go a step further and assert that it is really impossible for a client, even working with a software engineer, to specify completely, precisely, and correctly the exact requirements of a modern software product before trying some versions of the product.