Recent data indicate that 80 percent of all new products or services in the United States fail within six months or fall significantly short of forecasted success. In the software industry, the average failure rate can be even higher, often entailing massive losses for both the developer, due to disappointing sales or excessive maintenance costs, and the user, due to learning difficulties and other performance problems. This course analyzes a set of issues critical to conceiving and executing a successful software product, with emphasis on complex dynamic applications. Topics are focused on three generic issues: (1) how to collect, organize, and formulate requirements encompassing both software and user performance; (2) how to define product-user interactions and design interfaces to satisfy performance requirements; and (3) how to assess the extent of requirements satisfaction (usability testing and analysis). In complex dynamic applications, user performance is particularly sensitive to design shortcomings. Discussion of such applications will concentrate on models of situation comprehension, image understanding, decision making under uncertainty, and other aspects of user performance that need to be considered to recognize and avoid typical design errors.