This document discusses human-computer interaction in the software development process. It describes the typical stages of the software life cycle and how usability engineering fits in. Iterative design and prototyping are emphasized to allow for user feedback and adjustments. Design rationale techniques are presented for documenting key design decisions and issues to support communication, reuse, and improving future iterations.