Writing Solid Code , by Steve Maguire, has a good discussion of designing interfaces that are less likely to be misused. The discussion applies to both architectural and detailed design. Developer testing In practice, developers almost always do some testing of their code, but it's usually unplanning, haphazard, and considered part of coding or debugging. The Craft of Software Testing , by Brian Marick, was written for both developers and independent testers, but the techniques it describes are best applied by developers. Writing Solid Code , by Steve Maguire, has a weak discussion of test design.
Requirements are descriptions of what customers desire.
This task is one of discovering those desires, especially making implicit desires explicit, and clarifying the ambiguity that invariably surrounds them. Exploring Requirements , by Gause and Weinberg, is the best book on this task. Microsoft Secrets , by Cusumano and Selby, describes activity-based planning, in which common customer activities are used to weed out unimportant requirements and to ensure that key requirements are not overlooked. Rapid Development , by Steve McConnell, has a brief discussion of techniques for eliciting requirements. This is the task of planning how information about the product should be presented to the user.