This course is a combination programming course and design studio, and is for those who want to express their interactive ideas in working prototypes. Students will learn how to use programming languages, how to design and implement effective GUI interfaces, and how to perform rapid, effective iterative user tests. The course will cover several prototyping tools and require a number of prototypes to be constructed in each. These will range from animated mockups through fully functional programs. The course will also cover usability testing of interactive prototypes. This course is intended for HCII Masters students who come to CMU with a minimal, but competent programming background. It is also appropriate for CMU HCI undergraduate "second majors" in HCII who have had an introductory programming course. Because this course has a design studio component, class attendance is mandatory.

The course is project-based; the assignments all require implementing an interface in a prototyping system, iteratively testing that interface with real users, and then modifying the interface based on what you find. Some class sessions will be design reviews where students present their findings/modifications based on the user testing data. The students taking this course will often not be professional programmers, but will probably need to interact with programmers, and need to:
  • Learn to express yourself in executable form
  • Learn the basics of what is hard and easy to rapidly prototype
  • Learn the basic terminology and approaches used by programmers, so you can work with them
  • Experience the frustration and joy of programming a working prototype
  • Design and conduct informal user tests of prototypes to find flaws with your interfaces

Course material

Lecture slides

  • Course Introduction [pdf]
  • What is design? [pdf]
  • Usability engineering design process [pdf]
  • Who, what, when, why and how of prototyping [pdf]
  • Organization of user interface software [pdf]
  • Debugging [pdf]
  • Output [pdf]
  • Input [pdf]
  • Interaction techniques [pdf]
  • Review for midterm [pdf]
  • Finite state machines [pdf]
  • Properties of people [pdf]
  • International design [pdf]
  • Animation, sound and time [pdf]
  • Context-aware computing [pdf]
  • Review for final [pdf]


  • Assignment 0 [pdf]
  • Assignment 1 [pdf | sortdown]
  • Assignment 2a [pdf]
  • Assignment 2b [pdf]
  • Assignment 3 [pdf]
  • Assignment 4 [pdf]
  • Assignment 5 [pdf]
  • Assignment 6 [pdf]
  • Assignment 7 [pdf]

Reading material

  • Brad A. Myers. "Challenges of HCI Design and Implementation" ACM Interactions. vol. 1, no. 1. January, 1994. pp. 73-83. [pdf]
  • John D. Gould and Clayton Lewis. "Designing for usability: key principles and what designers think," Communications of the ACM. Volume 28 , Issue 3 (March 1985), pp. 300 - 311. [pdf]
  • Jakob Nielsen. "Alertbox: Durability of Usability Guidelines", Jan. 17, 2005. [pdf]
  • Marc Rettig, "Prototyping for tiny fingers", Communications of the ACM, Volume 37 , Issue 4 (April 1994), Pages: 21 - 27. [pdf]
  • Pedro Szekely, "User interface prototypes: tools and techniques", ICSE Workshop on SE-HCI, 1994, Pages: 76 - 92. [pdf]
  • Dirk Baumer, Walter R. Bischofberger, Horst Lichter and Heinz Zullighoven. "User interface prototyping -- concepts, tools, and experience," International Conference on Software Engineering, 1996, pages 532 - 541. [pdf]
  • Scott Berkunn. "Issue #12: The Art of UI Prototyping " November 2000. [pdf]
  • Brad A. Myers. "User Interface Software Tools," ACM Transactions on Computer-Human Interaction. vol. 2, no. 1, March, 1995. pp. 64-103. ACM DL Reference [pdf]
  • Brad A. Myers. "A Brief History of Human Computer Interaction Technology." ACM interactions. Vol. 5, no. 2, March, 1998. [pdf]
  • Bill N. Schilit, Norman Adams and Roy Want. "Context-Aware Computing Applications", Workshop on Mobile Computing Systems and Applications, 1994, pp. 85-90. [pdf]

Supplemental material

  • Report template [doc]
  • UART Template [doc]
  • UART Template instructions [pdf]

Student projects

  • Copenhaver, Brad (2009). Drinking [Try it]
  • Coe, Josh (2009). LyricScrubber [Try it]
  • Zuniga, Joshua (2009). Photocopier [Try it (Use 5150 as PIN)]
  • Serralheiro, Katia (2009). Photocopier [Try it (Use 5150 as PIN)]
  • Coe, Josh (2009). Photocopier [Try it (Use 5150 as PIN)]
  • Laginha, Nuno (2009). Photocopier [Try it (Use 5150 as PIN)]
  • Copenhaver, Brad (2009). Redesign of the Nintendo DSLite [Try it]
  • Zuniga, Joshua (2009). Thermostat control panel [Try it]
  • Coe, Josh (2009). Redesign of the M-Audio software/hardware controls [Try it]
  • Copenhaver, Brad (2009). Ready - FIGHT! [Try it | source]
  • Laginha, Nuno (2009). A student in HCI Wonderland [Try it | source]
  • Serralheiro, Katia (2009). Collect the pearls [Try it | source]
  • Zuniga, Joshua (2009). Red pill or blue pill? [Try it | source]
  • Coe, Josh (2009). Kiosk for the Madeira sports park. [Try it | source]