the role of hci design patterns in software development