Chris Overton 9-3-01 Abstract of “No Silver Bullet” by Frederick P. Brooks Jr. In his article “No Silver Bullet”, Fred Brooks discusses some of the major difficulties inherent in producing software. Mr. Brooks contends that several “essential difficulties” exist in software engineering which prevent software engineers from copying successful engineering models used in other disciplines. However, Mr. Brooks also believes that software projects often fail due to non-essential difficulties imposed upon the software project by the developers themselves. “No Silver Bullet” proposes that by removing the non-essential difficulties from the software process, software engineers can achieve significant gains in software cost and reliability. Fred Brooks cites several “essential difficulties” of building software that make the software process more difficult than traditional engineering disciplines. One of these essential difficulties is complexity. Software designs are usually extremely complex and difficult to visualize. The state of a piece of software changes continuously during execution. As execution paths change, so do the associated data structures. This scenario causes great difficulty when trying to visualize a software system. As a result, it becomes very difficult to accurately diagram a software design. Brooks also cites conformity as an essential difficulty of software design. Software engineers are constantly required to produce software that conforms to existing hardware and software. In many cases, a complete redesign is the right approach to solving a problem. Clients are often unwilling to abandon existing systems and start from scratch. However, software faults or limitations produced as a result of conforming to an existing system often become more expensive than redesigning the system from scratch. According to Brooks, requirements specification and elicitation is the most difficult part of the software process. Brooks contends that it is much more difficult to decide what problems need to be solved than to actually create a piece of software to solve the problems. Brooks’ article offers rapid prototyping as a tool to help determine the needs of the user. Rapid prototyping offers a high level conceptual view of software function. Users can get some idea of what the interface might look like and how parts of the software interact with each other. Allowing users to interact with the design at the requirements stage allows software engineers to verify that the design is headed in the right direction. Rapid prototyping may actually reveal that the client is requesting functionality that is not needed. Fred Brooks takes an interesting approach to the difficulties of software engineering. Brooks contends that there are several “essential difficulties” in building software that prevent software engineers from adapting methods from other disciplines. It is as important to understand what cannot be done as what can be done. However, by eliminating some of the nonessential difficulties of software engineering, developers can realize substantial gains in time, cost, and reliability.