The goal of this course is to investigate how to engineer a usable scientific software system so that user interactions can be enriched and fatalities can avoided.  Along the way, this course also focuses on engineering usable tools for the developers for software maintenance and evolution. By taking the course students will be aware of the challenges inherent in engineering human-centered software systems, and to provide a working understanding of some of the techniques and best practices currently in use for usable software maintenance which includes bug localization and recommendation.