July 12, 2005

14 slides

Enrico Zini (enrico@debian.org)

Zen and the art of Free Software

Know your users, know yourself

What I'll be talking about

I will introduce 2 key concepts: "situation" and "frustration"

I will explain how to do:

Social specifications

Social design

Social testing

Social debugging

...all of this in 45 minutes: get rrrrready!

Software shapes society

Software shapes identity

User-Agent: Mozilla Thunderbird 0.5 (X11/20040306)

User-Agent: Mutt/1.5.6i

X-Mailer: Microsoft Outlook, Build 10.0.2616

Which of these persons would you trust more?

Quiz time!

Situation

(thinking situated actions is like thinking life with runtime information)

Who are you?

I mean, here and now?

Frustration

n. The feeling that accompanies an experience of being thwarted in attaining your goals

from WordNet 2.0 dict database

(how do you usually cope with frustration?)

Social specifications: users

Who are you developing for? You can design this using personas:

Persona: detailed description of your average, non existing user

(are you part of your users? try making a persona for yourself using your software)

(small exercise: what are your goals at this talk?)

Social specifications: goals

What do your users want to do with your software?

Your users have goals (everyone has, after all...):

Personal: "don't feel stupid", "have the computer do most of the work"

Work: "submit paper to the conference", "increase sales"

Practical: "enter the damn data", "look up the address in the directory"

False: "use few CPU cycles", "be a web application", "be easy to use"

Social design: tasks

How are your users going to attain their goals?

Take the description of your persona

Situate him/her in the appropriate environment

Take the list of goals you have

What is the best way for that person to reach her goals with the minimum amount of frustration?

Welcome to the world of "Task Analysis"!

(with what tasks do you reach your goals? Is that how you would design it?)

Social design: politeness

Polite Software Is Interested in Me

Polite Software Is Deferential to Me

Polite Software Is Forthcoming

Polite Software Has Common Sense

Polite Software Anticipates My Needs

Polite Software Is Responsive

Polite Software Is Taciturn About Its Personal Problems

Polite Software Is Well-Informed

Polite Software Is Perceptive

Polite Software Is Self-Confident

Polite Software Stays Focused

Polite Software Is Fudgable

Polite Software Gives Instant Gratification

Polite Software Is Trustworthy

(software is made to serve us: we may as well make it polite! How polite is yours?)

Cooper's rules of software politeness:

Social design: the magic number 7±2

(try to spot the magic number 7±2 in your everyday life!)

Working cache: 7±2 atomic arbitrary items

Mass storage: virtually unlimited capacity

Associative queries

External organs: senses, muscles...

The Brain!

Social testing

Visibility of system status

Match between system and the real world

User control and freedom

Consistency and standards

Error prevention

Recognition rather than recall

Flexibility and efficiency of use

Aesthetic and minimalist design

Help users recognize, diagnose, and recover from errors

Help and documentation

(try the checklist on one of the interfaces you hate most!)

Nielsen's Euristic Evaluation Technique:

Social debugging

(now you know what to ask when someone writes you "this crap doesn't work!")

Flanagan Critical Incident Technique

Critical Incident: an interesting effective or ineffective behaviour

Debugging technique (like gdb <program> core):

Describe what led up to the situation

Exactly what did the person do that was especially effective or ineffective?

What was the outcome or result of this action?

Why was this action effective, or what more effective action might have been expected?

Wrapup

Many free software projects don't seem to have a direction: you've seen a possible way to give one to yours

Many free software projects don't care much about their users: you've seen how to work with them, and make them happy

Knowing how to make your users happy is very important: especially when you could be among them!

Conclusion

Happiness is very important!

It is the only road to Total World Domination!

2003-07-19T11:28:55