CS374: Intro to HCI
Use [Hypothesis](https://hypothes.is/) for discussion, Q&A, and additional examples or references to improve the material.

Needfinding

Techniques for Understanding Users & Tasks

  • Interviews & observation
  • Contextual inquiry
    • Interviews & observation conducted "in context", i.e., with real people dealing with the real problem in the real environment
    • Establish a master-apprentice relationship
      • User shows how and talks about it
      • Interviewer watches and asks questions
  • Participatory design
    • Including a user directly on the design team
The best sources of information for needfinding are user interviews and direct observation. Usually, you'll have to observe how users currently solve the problem. If you want to redesign a KAIST campus tour experience, you would want to observe tourists on campus. You would also want to interview them, in order to better understand their goals and challenges. **Contextual inquiry** is a technique that combines interviewing and observation, in the user's actual work environment, discussing actual work products. Contextual inquiry fosters strong collaboration between the designers and the users. **Participatory design** includes users directly on the design team - participating in needfinding, proposing design ideas, helping with evaluation. This is particularly vital when the target users have much deeper domain knowledge than the design team. It would be unwise to build an interface for stock trading without an expert in stock trading on the team, for example. A good collection of information-collection techniques is summarized by [Need Finding Tools](http://hci.stanford.edu/courses/cs447/docs/NeedFindingCribSheet.pdf).
Required reading: [Holtzblatt & Beyer, Contextual Design, Ch. 3](https://www.dropbox.com/s/44uj8tzx9le4o00/beyer_holtzblatt_contextual_design.pdf?dl=0)
Answer this question: [contextual inquiry](https://docs.google.com/forms/d/e/1FAIpQLSczeJzuwuB8G2DrWAXzNKSpiqNmmctJ4MLEiIKHCgoIBZTD3A/viewform?usp=sf_link)

Know Your User

  • Things to learn
    • Age, gender, culture, language
    • Education (literacy? numeracy?)
    • Physical limitations
    • Computer experience (typing? mouse?)
    • Motivation, attitude
    • Domain experience
    • Application experience
    • Work environment and other social context
    • Relationships and communication patterns with other people
  • Pitfall
    • describing what you _want_ your users to be, rather than what they actually are
      • "Users should be literate in English, fluent in spoken Swahili, right-handed, and color-blind"
The reason for user analysis is straightforward: since you're not the user, you need to find out who the user actually is. User analysis seems so obvious that it's often skipped. But failing to do it explicitly makes it easier to fall into the trap of assuming every user is like you. It's better to do some thinking and collect some information first. Knowing about the user means not just their individual characteristics, but also their situation. In what environment will they use your software? What else might be distracting their attention? What is the social context? A movie theater, a quiet library, inside a car, on the deck of an aircraft carrier; environment can place widely varying constraints on your user interface. Other aspects of the user's situation include their relationship to other users in their organization, and typical communication patterns. Can users ask each other for help, or are they isolated? How do students relate differently to lab assistants, teaching assistants, and professors? Many problems in needfinding are caused by jumping too quickly into a system design. This sometimes results in wishful thinking, rather than looking at reality. Saying "All users should have our app installed on their phone" is stating a requirement on the system, not a characteristic of the existing users. One reason we do needfinding is to see whether these requirements can actually be satisfied, or whether we'd have to add something to the system to make sure it's satisfied.

Multiple Classes of Users

  • Many applications have several kinds of users

    • By role (student, teacher)
    • By characteristics (age, motivation)
Many, if not most, applications have to worry about multiple classes of users. Some user groups are defined by the roles that the user plays in the system: student, teacher, reader, editor. Other groups are defined by characteristics: age (teenagers, middle-aged, elderly); motivation (early adopters, frequent users, casual users). You have to decide which user groups are important for your problem, and do a user analysis for every class. If you're designing an interface like Piazza, you'll need to identify several user classes by role: students, TAs, and instructors.

Identify the User's Goals

  • Identify the goals involved in the problem

    • Decompose them into subtasks
    • Abstract them into goals
The best sources of information are user interviews and direct observation. Usually, you'll have to observe how users currently perform the task. For the Piazza example, we would want to observe students asking questions about homework assignments, and interacting with teammates. We would also want to interview instructors to understand their goals in running a Q&A forum for their course.

Common Errors in Needfinding

  • Thinking from the system's point of view, rather than the user's
    • "Notify user about appointment"
    • vs. "Get a notification about appointment"
  • Fixating too early on a UI design vision
    • "The system bell will ring to notify the user about an appointment..."
  • Bogging down in what users do now (**concrete** tasks), rather than why they do it (**essential** tasks or goals)
    • "Save file to disk"
    • vs. "Make sure my work is kept"
  • Duplicating a bad existing procedure in software
  • Failing to capture good aspects of existing procedure
The premature-system-design mindset can affect this part too. If you're writing down tasks from the system's point of view, like "Notify user about appointment", then you're writing requirements (what the system should do), not user goals. Sometimes this is merely semantics, and you can just write it the other way; but it may also mean you're focusing too much on what the system can do, rather than what the user wants. Tradeoffs between user goals and implementation feasibility are inevitable, but you don't want them to dominate your thinking at this early stage of the game. Needfinding derived from observation may give too much weight to the way things are currently done. The steps of a current system are **concrete** tasks, like "save file to disk." But if we instead generalize that to a user goal, like "make sure my work is kept", then we have an **essential** task, which admits much richer design possibilities when it's time to translate this task into a user interface. A danger of concrete analysis is that it might preserve tasks that are inefficient or could be done a completely different way in software. Suppose we observed users interacting with paper manuals. We'd see a lot of page flipping: "Find page N" might be an important subtask. We might naively conclude from this that an online manual should provide really good mechanisms for paging & scrolling, and that we should pour development effort into making those mechanisms as fast as possible. But page flipping is an artifact of physical books! It might pay off much more to have fast and effective searching and hyperlinking in an online manual. That's why it's important to focus on **why** users do what they do (the essential tasks), not just what they do (the concrete tasks). Conversely, an incomplete analysis may fail to capture important aspects of the existing procedure. In one case, a dentist's office converted from manual billing to an automated system. But the office assistants didn't like the new system, because they were accustomed to keeping important notes on the paper forms, like "this patient's insurance takes longer than normal." The automated system provided no way to capture those kinds of annotations. That's why interviewing and observing real users is still important, even though you're observing a concrete task process.