Human-computer interaction (HCI) involves understanding how people use computer systems and designing technology that is usable, useful, and satisfying. HCI draws from many disciplines like software engineering, psychology, computer science, and cognitive science. The goals of HCI include ensuring usability by designing interfaces that support users' tasks efficiently and effectively based on an understanding of human abilities and limitations as well as task and technology constraints. Teaching HCI principles to software engineers is important so they can build usable interfaces even without specialist expertise in user experience design.