One of the areas often overlooked when writing software systems is thoroughly understanding what needs to be developed. Specifically who are the users that are going to interact with the system, what are they trying to accomplish with the software, and how is the system expected to behave under normal and error conditions. In short, developing software requirements and specifications before the software is written.
"Software Requirements 3" addresses these questions, with clear answers and advice in a rather longish format of roughly 673 pages.
The book starts with a story about the importance of software requirements: a case of an employee who changed her last name without getting married, and the accounting software's inability to handle the change, with the repercussions that the employee will not get paid until the the "bug" is fixed. The book mentions that this is not an atypical situation, and that
... errors introduced during requirements activities account for 40 to 50 percent of all defects found in a software productThe book proceeds to explain how to prevent problems like these from happening in the future, through explaining the mechanics of requirements gathering starting with defining who the customer is, and who the decision makers are, followed by a tour of the requirement gathering process, including requirements elicitations, and appropriate documentation. The book advocates readable, concise, and precise requirements documentation, and ample use of imagery to explain difficult concepts.
The book offers advice on how to reduce development risk, through frequent customer checkpoints as things are developed, to minimize the mismatch between customer expectations, and what developers build. The book also advocates building prototypes to illustrate concepts, and drive conversations to minimize the gap between what's being build, and what customers expect.
The book addresses the often ignored fact that requirements frequently change during the development process, and offers a full chapter on handling these changes, and tools for managing the changes.
The book is geared toward the business analyst, but software engineers would benefit greatly from reading it. And despite the book's length, the authors' writing style is approachable, and it was a pleasure to read.